1 This is doc/gcc.info, produced by makeinfo version 4.13 from 2 /Volumes/androidtc/androidtoolchain/./src/build/../gcc/gcc-4.6/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, 2009, 2010 6 Free 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.3 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, 2009, 2010 35 Free 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.3 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.6.x-google. 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++ Implementation:: How GCC implements the ISO C++ specification. 77 * C++ Extensions:: GNU extensions to the C++ language. 78 * Objective-C:: GNU Objective-C runtime features. 79 * Compatibility:: Binary Compatibility 80 * Gcov:: `gcov'---a test coverage program. 81 * Trouble:: If you have trouble using GCC. 82 * Bugs:: How, why and where to report bugs. 83 * Service:: How to find suppliers of support for GCC. 84 * Contributing:: How to contribute to testing and developing GCC. 85 86 * Funding:: How to help assure funding for free software. 87 * GNU Project:: The GNU Project and GNU/Linux. 88 89 * Copying:: GNU General Public License says 90 how you can copy and share GCC. 91 * GNU Free Documentation License:: How you can copy and share this manual. 92 * Contributors:: People who have contributed to GCC. 93 94 * Option Index:: Index to command line options. 95 * Keyword Index:: Index of concepts and symbol names. 96 97 98 File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top 99 100 1 Programming Languages Supported by GCC 101 **************************************** 102 103 GCC stands for "GNU Compiler Collection". GCC is an integrated 104 distribution of compilers for several major programming languages. 105 These languages currently include C, C++, Objective-C, Objective-C++, 106 Java, Fortran, Ada, and Go. 107 108 The abbreviation "GCC" has multiple meanings in common use. The 109 current official meaning is "GNU Compiler Collection", which refers 110 generically to the complete suite of tools. The name historically stood 111 for "GNU C Compiler", and this usage is still common when the emphasis 112 is on compiling C programs. Finally, the name is also used when 113 speaking of the "language-independent" component of GCC: code shared 114 among the compilers for all supported languages. 115 116 The language-independent component of GCC includes the majority of the 117 optimizers, as well as the "back ends" that generate machine code for 118 various processors. 119 120 The part of a compiler that is specific to a particular language is 121 called the "front end". In addition to the front ends that are 122 integrated components of GCC, there are several other front ends that 123 are maintained separately. These support languages such as Pascal, 124 Mercury, and COBOL. To use these, they must be built together with GCC 125 proper. 126 127 Most of the compilers for languages other than C have their own names. 128 The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 129 talk about compiling one of those languages, we might refer to that 130 compiler by its own name, or as GCC. Either is correct. 131 132 Historically, compilers for many languages, including C++ and Fortran, 133 have been implemented as "preprocessors" which emit another high level 134 language such as C. None of the compilers included in GCC are 135 implemented this way; they all generate machine code directly. This 136 sort of preprocessor should not be confused with the "C preprocessor", 137 which is an integral feature of the C, C++, Objective-C and 138 Objective-C++ languages. 139 140 141 File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 142 143 2 Language Standards Supported by GCC 144 ************************************* 145 146 For each language compiled by GCC for which there is a standard, GCC 147 attempts to follow one or more versions of that standard, possibly with 148 some exceptions, and possibly with some extensions. 149 150 2.1 C language 151 ============== 152 153 GCC supports three versions of the C standard, although support for the 154 most recent version is not yet complete. 155 156 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 157 published in 1990. This standard was ratified as an ISO standard 158 (ISO/IEC 9899:1990) later in 1990. There were no technical differences 159 between these publications, although the sections of the ANSI standard 160 were renumbered and became clauses in the ISO standard. This standard, 161 in both its forms, is commonly known as "C89", or occasionally as 162 "C90", from the dates of ratification. The ANSI standard, but not the 163 ISO standard, also came with a Rationale document. To select this 164 standard in GCC, use one of the options `-ansi', `-std=c90' or 165 `-std=iso9899:1990'; to obtain all the diagnostics required by the 166 standard, you should also specify `-pedantic' (or `-pedantic-errors' if 167 you want them to be errors rather than warnings). *Note Options 168 Controlling C Dialect: C Dialect Options. 169 170 Errors in the 1990 ISO C standard were corrected in two Technical 171 Corrigenda published in 1994 and 1996. GCC does not support the 172 uncorrected version. 173 174 An amendment to the 1990 standard was published in 1995. This 175 amendment added digraphs and `__STDC_VERSION__' to the language, but 176 otherwise concerned the library. This amendment is commonly known as 177 "AMD1"; the amended standard is sometimes known as "C94" or "C95". To 178 select this standard in GCC, use the option `-std=iso9899:199409' 179 (with, as for other standard versions, `-pedantic' to receive all 180 required diagnostics). 181 182 A new edition of the ISO C standard was published in 1999 as ISO/IEC 183 9899:1999, and is commonly known as "C99". GCC has incomplete support 184 for this standard version; see 185 `http://gcc.gnu.org/gcc-4.6/c99status.html' for details. To select this 186 standard, use `-std=c99' or `-std=iso9899:1999'. (While in 187 development, drafts of this standard version were referred to as "C9X".) 188 189 Errors in the 1999 ISO C standard were corrected in three Technical 190 Corrigenda published in 2001, 2004 and 2007. GCC does not support the 191 uncorrected version. 192 193 A fourth version of the C standard, known as "C1X", is under 194 development; GCC has limited preliminary support for parts of this 195 standard, enabled with `-std=c1x'. 196 197 By default, GCC provides some extensions to the C language that on 198 rare occasions conflict with the C standard. *Note Extensions to the C 199 Language Family: C Extensions. Use of the `-std' options listed above 200 will disable these extensions where they conflict with the C standard 201 version selected. You may also select an extended version of the C 202 language explicitly with `-std=gnu90' (for C90 with GNU extensions), 203 `-std=gnu99' (for C99 with GNU extensions) or `-std=gnu1x' (for C1X 204 with GNU extensions). The default, if no C language dialect options 205 are given, is `-std=gnu90'; this will change to `-std=gnu99' in some 206 future release when the C99 support is complete. Some features that 207 are part of the C99 standard are accepted as extensions in C90 mode. 208 209 The ISO C standard defines (in clause 4) two classes of conforming 210 implementation. A "conforming hosted implementation" supports the 211 whole standard including all the library facilities; a "conforming 212 freestanding implementation" is only required to provide certain 213 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>', 214 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99, 215 also those in `<stdbool.h>' and `<stdint.h>'. In addition, complex 216 types, added in C99, are not required for freestanding implementations. 217 The standard also defines two environments for programs, a 218 "freestanding environment", required of all implementations and which 219 may not have library facilities beyond those required of freestanding 220 implementations, where the handling of program startup and termination 221 are implementation-defined, and a "hosted environment", which is not 222 required, in which all the library facilities are provided and startup 223 is through a function `int main (void)' or `int main (int, char *[])'. 224 An OS kernel would be a freestanding environment; a program using the 225 facilities of an operating system would normally be in a hosted 226 implementation. 227 228 GCC aims towards being usable as a conforming freestanding 229 implementation, or as the compiler for a conforming hosted 230 implementation. By default, it will act as the compiler for a hosted 231 implementation, defining `__STDC_HOSTED__' as `1' and presuming that 232 when the names of ISO C functions are used, they have the semantics 233 defined in the standard. To make it act as a conforming freestanding 234 implementation for a freestanding environment, use the option 235 `-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 236 make assumptions about the meanings of function names from the standard 237 library, with exceptions noted below. To build an OS kernel, you may 238 well still need to make your own arrangements for linking and startup. 239 *Note Options Controlling C Dialect: C Dialect Options. 240 241 GCC does not provide the library facilities required only of hosted 242 implementations, nor yet all the facilities required by C99 of 243 freestanding implementations; to use the facilities of a hosted 244 environment, you will need to find them elsewhere (for example, in the 245 GNU C library). *Note Standard Libraries: Standard Libraries. 246 247 Most of the compiler support routines used by GCC are present in 248 `libgcc', but there are a few exceptions. GCC requires the 249 freestanding environment provide `memcpy', `memmove', `memset' and 250 `memcmp'. Finally, if `__builtin_trap' is used, and the target does 251 not implement the `trap' pattern, then GCC will emit a call to `abort'. 252 253 For references to Technical Corrigenda, Rationale documents and 254 information concerning the history of C that is available online, see 255 `http://gcc.gnu.org/readings.html' 256 257 2.2 C++ language 258 ================ 259 260 GCC supports the ISO C++ standard (1998) and contains experimental 261 support for the upcoming ISO C++ standard (200x). 262 263 The original ISO C++ standard was published as the ISO standard 264 (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 265 2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and 266 C++03, respectively. GCC implements the majority of C++98 (`export' is 267 a notable exception) and most of the changes in C++03. To select this 268 standard in GCC, use one of the options `-ansi' or `-std=c++98'; to 269 obtain all the diagnostics required by the standard, you should also 270 specify `-pedantic' (or `-pedantic-errors' if you want them to be 271 errors rather than warnings). 272 273 The ISO C++ committee is working on a new ISO C++ standard, dubbed 274 C++0x, that is intended to be published by 2009. C++0x contains several 275 changes to the C++ language, some of which have been implemented in an 276 experimental C++0x mode in GCC. The C++0x mode in GCC tracks the draft 277 working paper for the C++0x standard; the latest working paper is 278 available on the ISO C++ committee's web site at 279 `http://www.open-std.org/jtc1/sc22/wg21/'. For information regarding 280 the C++0x features available in the experimental C++0x mode, see 281 `http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in 282 GCC, use the option `-std=c++0x'; to obtain all the diagnostics 283 required by the standard, you should also specify `-pedantic' (or 284 `-pedantic-errors' if you want them to be errors rather than warnings). 285 286 By default, GCC provides some extensions to the C++ language; *Note 287 Options Controlling C++ Dialect: C++ Dialect Options. Use of the 288 `-std' option listed above will disable these extensions. You may also 289 select an extended version of the C++ language explicitly with 290 `-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++0x' (for 291 C++0x with GNU extensions). The default, if no C++ language dialect 292 options are given, is `-std=gnu++98'. 293 294 2.3 Objective-C and Objective-C++ languages 295 =========================================== 296 297 GCC supports "traditional" Objective-C (also known as "Objective-C 298 1.0") and contains support for the Objective-C exception and 299 synchronization syntax. It has also support for a number of 300 "Objective-C 2.0" language extensions, including properties, fast 301 enumeration (only for Objective-C), method attributes and the @optional 302 and @required keywords in protocols. GCC supports Objective-C++ and 303 features available in Objective-C are also available in Objective-C++. 304 305 GCC by default uses the GNU Objective-C runtime library, which is part 306 of GCC and is not the same as the Apple/NeXT Objective-C runtime 307 library used on Apple systems. There are a number of differences 308 documented in this manual. The options `-fgnu-runtime' and 309 `-fnext-runtime' allow you to switch between producing output that 310 works with the GNU Objective-C runtime library and output that works 311 with the Apple/NeXT Objective-C runtime library. 312 313 There is no formal written standard for Objective-C or Objective-C++. 314 The authoritative manual on traditional Objective-C (1.0) is 315 "Object-Oriented Programming and the Objective-C Language", available 316 at a number of web sites: 317 * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf' 318 is the original NeXTstep document; 319 320 * `http://objc.toodarkpark.net' is the same document in another 321 format; 322 323 * 324 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 325 has an updated version but make sure you search for "Object 326 Oriented Programming and the Objective-C Programming Language 1.0", 327 not documentation on the newer "Objective-C 2.0" language 328 329 The Objective-C exception and synchronization syntax (that is, the 330 keywords @try, @throw, @catch, @finally and @synchronized) is supported 331 by GCC and is enabled with the option `-fobjc-exceptions'. The syntax 332 is briefly documented in this manual and in the Objective-C 2.0 manuals 333 from Apple. 334 335 The Objective-C 2.0 language extensions and features are automatically 336 enabled; they include properties (via the @property, @synthesize and 337 @dynamic keywords), fast enumeration (not available in Objective-C++), 338 attributes for methods (such as deprecated, noreturn, sentinel, 339 format), the unused attribute for method arguments, the @package 340 keyword for instance variables and the @optional and @required keywords 341 in protocols. You can disable all these Objective-C 2.0 language 342 extensions with the option `-fobjc-std=objc1', which causes the 343 compiler to recognize the same Objective-C language syntax recognized 344 by GCC 4.0, and to produce an error if one of the new features is used. 345 346 GCC has currently no support for non-fragile instance variables. 347 348 The authoritative manual on Objective-C 2.0 is available from Apple: 349 * 350 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 351 352 For more information concerning the history of Objective-C that is 353 available online, see `http://gcc.gnu.org/readings.html' 354 355 2.4 Go language 356 =============== 357 358 The Go language continues to evolve as of this writing; see the current 359 language specifications (http://golang.org/doc/go_spec.html). At 360 present there are no specific versions of Go, and there is no way to 361 describe the language supported by GCC in terms of a specific version. 362 In general GCC tracks the evolving specification closely, and any given 363 release will support the language as of the date that the release was 364 frozen. 365 366 2.5 References for other languages 367 ================================== 368 369 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 370 conformance and compatibility of the Ada compiler. 371 372 *Note Standards: (gfortran)Standards, for details of standards 373 supported by GNU Fortran. 374 375 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 376 details of compatibility between `gcj' and the Java Platform. 377 378 379 File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 380 381 3 GCC Command Options 382 ********************* 383 384 When you invoke GCC, it normally does preprocessing, compilation, 385 assembly and linking. The "overall options" allow you to stop this 386 process at an intermediate stage. For example, the `-c' option says 387 not to run the linker. Then the output consists of object files output 388 by the assembler. 389 390 Other options are passed on to one stage of processing. Some options 391 control the preprocessor and others the compiler itself. Yet other 392 options control the assembler and linker; most of these are not 393 documented here, since you rarely need to use any of them. 394 395 Most of the command line options that you can use with GCC are useful 396 for C programs; when an option is only useful with another language 397 (usually C++), the explanation says so explicitly. If the description 398 for a particular option does not mention a source language, you can use 399 that option with all supported languages. 400 401 *Note Compiling C++ Programs: Invoking G++, for a summary of special 402 options for compiling C++ programs. 403 404 The `gcc' program accepts options and file names as operands. Many 405 options have multi-letter names; therefore multiple single-letter 406 options may _not_ be grouped: `-dv' is very different from `-d -v'. 407 408 You can mix options and other arguments. For the most part, the order 409 you use doesn't matter. Order does matter when you use several options 410 of the same kind; for example, if you specify `-L' more than once, the 411 directories are searched in the order specified. Also, the placement 412 of the `-l' option is significant. 413 414 Many options have long names starting with `-f' or with `-W'--for 415 example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 416 have both positive and negative forms; the negative form of `-ffoo' 417 would be `-fno-foo'. This manual documents only one of these two 418 forms, whichever one is not the default. 419 420 *Note Option Index::, for an index to GCC's options. 421 422 * Menu: 423 424 * Option Summary:: Brief list of all options, without explanations. 425 * Overall Options:: Controlling the kind of output: 426 an executable, object files, assembler files, 427 or preprocessed source. 428 * Invoking G++:: Compiling C++ programs. 429 * C Dialect Options:: Controlling the variant of C language compiled. 430 * C++ Dialect Options:: Variations on C++. 431 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 432 and Objective-C++. 433 * Language Independent Options:: Controlling how diagnostics should be 434 formatted. 435 * Warning Options:: How picky should the compiler be? 436 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 437 * Optimize Options:: How much optimization? 438 * Preprocessor Options:: Controlling header files and macro definitions. 439 Also, getting dependency information for Make. 440 * Assembler Options:: Passing options to the assembler. 441 * Link Options:: Specifying libraries and so on. 442 * Directory Options:: Where to find header files and libraries. 443 Where to find the compiler executable files. 444 * Spec Files:: How to pass switches to sub-processes. 445 * Target Options:: Running a cross-compiler, or an old version of GCC. 446 * Submodel Options:: Specifying minor hardware or convention variations, 447 such as 68010 vs 68020. 448 * Code Gen Options:: Specifying conventions for function calls, data layout 449 and register usage. 450 * Environment Variables:: Env vars that affect GCC. 451 * Precompiled Headers:: Compiling a header once, and using it many times. 452 453 454 File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 455 456 3.1 Option Summary 457 ================== 458 459 Here is a summary of all the options, grouped by type. Explanations are 460 in the following sections. 461 462 _Overall Options_ 463 *Note Options Controlling the Kind of Output: Overall Options. 464 -c -S -E -o FILE -no-canonical-prefixes 465 -pipe -pass-exit-codes 466 -x LANGUAGE -v -### --help[=CLASS[,...]] --target-help 467 --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG 468 -fdump-ada-spec[-slim] 469 -fdump-go-spec=FILE 470 471 _C Language Options_ 472 *Note Options Controlling C Dialect: C Dialect Options. 473 -ansi -std=STANDARD -fgnu89-inline 474 -aux-info FILENAME 475 -fno-asm -fno-builtin -fno-builtin-FUNCTION 476 -fhosted -ffreestanding -fopenmp -fms-extensions -fplan9-extensions 477 -trigraphs -no-integrated-cpp -traditional -traditional-cpp 478 -fallow-single-precision -fcond-mismatch -flax-vector-conversions 479 -fsigned-bitfields -fsigned-char 480 -funsigned-bitfields -funsigned-char 481 482 _C++ Language Options_ 483 *Note Options Controlling C++ Dialect: C++ Dialect Options. 484 -fabi-version=N -fno-access-control -fcheck-new 485 -fconserve-space -fconstexpr-depth=N -ffriend-injection 486 -fno-elide-constructors 487 -fno-enforce-eh-specs 488 -ffor-scope -fno-for-scope -fno-gnu-keywords 489 -fno-implicit-templates 490 -fno-implicit-inline-templates 491 -fno-implement-inlines -fms-extensions 492 -fno-nonansi-builtins -fnothrow-opt -fno-operator-names 493 -fno-optional-diags -fpermissive 494 -fno-pretty-templates 495 -frepo -fno-rtti -fstats -ftemplate-depth=N 496 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 497 -fno-default-inline -fvisibility-inlines-hidden 498 -fvisibility-ms-compat 499 -Wabi -Wconversion-null -Wctor-dtor-privacy 500 -Wnoexcept -Wnon-virtual-dtor -Wreorder 501 -Weffc++ -Wstrict-null-sentinel 502 -Wno-non-template-friend -Wold-style-cast 503 -Woverloaded-virtual -Wno-pmf-conversions 504 -Wsign-promo 505 506 _Objective-C and Objective-C++ Language Options_ 507 *Note Options Controlling Objective-C and Objective-C++ Dialects: 508 Objective-C and Objective-C++ Dialect Options. 509 -fconstant-string-class=CLASS-NAME 510 -fgnu-runtime -fnext-runtime 511 -fno-nil-receivers 512 -fobjc-abi-version=N 513 -fobjc-call-cxx-cdtors 514 -fobjc-direct-dispatch 515 -fobjc-exceptions 516 -fobjc-gc 517 -fobjc-nilcheck 518 -fobjc-std=objc1 519 -freplace-objc-classes 520 -fzero-link 521 -gen-decls 522 -Wassign-intercept 523 -Wno-protocol -Wselector 524 -Wstrict-selector-match 525 -Wundeclared-selector 526 527 _Language Independent Options_ 528 *Note Options to Control Diagnostic Messages Formatting: Language 529 Independent Options. 530 -fmessage-length=N 531 -fdiagnostics-show-location=[once|every-line] 532 -fno-diagnostics-show-option 533 534 _Warning Options_ 535 *Note Options to Request or Suppress Warnings: Warning Options. 536 -fsyntax-only -fmax-errors=N -pedantic 537 -pedantic-errors 538 -w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds 539 -Wno-attributes -Wno-builtin-macro-redefined 540 -Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual 541 -Wchar-subscripts -Wclobbered -Wcomment 542 -Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated 543 -Wno-deprecated-declarations -Wdisabled-optimization 544 -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare 545 -Wno-endif-labels -Werror -Werror=* 546 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 547 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral 548 -Wformat-security -Wformat-y2k 549 -Wframe-larger-than=LEN -Wjump-misses-init -Wignored-qualifiers 550 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 551 -Winit-self -Winline -Wmaybe-uninitialized 552 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 553 -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations 554 -Wlogical-op -Wlong-long 555 -Wmain -Wmaybe-uninitialized -Wmissing-braces -Wmissing-field-initializers 556 -Wmissing-format-attribute -Wmissing-include-dirs 557 -Wno-mudflap 558 -Wno-multichar -Wnonnull -Wno-overflow 559 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded 560 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format 561 -Wpointer-arith -Wno-pointer-to-int-cast 562 -Wreal-conversion -Wredundant-decls -Wreturn-type -Wripa-opt-mismatch 563 -Wself-assign -Wself-assign-non-pod -Wsequence-point -Wshadow 564 -Wshadow-compatible-local -Wshadow-local 565 -Wsign-compare -Wsign-conversion -Wstack-protector 566 -Wstrict-aliasing -Wstrict-aliasing=n 567 -Wstrict-overflow -Wstrict-overflow=N 568 -Wsuggest-attribute=[pure|const|noreturn] 569 -Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand 570 -Wsystem-headers -Wthread-safety -Wthread-unguarded-var 571 -Wthread-unguarded-func -Wthread-mismatched-lock-order 572 -Wthread-mismatched-lock-acq-rel -Wthread-reentrant-lock 573 -Wthread-unsupported-lock-name -Wthread-attr-bind-param 574 -Wtrampolines -Wtrigraphs -Wtype-limits -Wundef 575 -Wuninitialized -Wunknown-pragmas -Wno-pragmas 576 -Wunsuffixed-float-constants -Wunused -Wunused-function 577 -Wunused-label -Wunused-parameter -Wno-unused-result -Wunused-value 578 -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable 579 -Wvariadic-macros -Wvla -Wvolatile-register-var -Wwrite-strings 580 581 _C and Objective-C-only Warning Options_ 582 -Wbad-function-cast -Wmissing-declarations 583 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs 584 -Wold-style-declaration -Wold-style-definition 585 -Wstrict-prototypes -Wtraditional -Wtraditional-conversion 586 -Wdeclaration-after-statement -Wpointer-sign 587 588 _Debugging Options_ 589 *Note Options for Debugging Your Program or GCC: Debugging Options. 590 -dLETTERS -dumpspecs -dumpmachine -dumpversion 591 -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST 592 -fdisable-ipa-PASS_NAME 593 -fdisable-rtl-PASS_NAME 594 -fdisable-rtl-PASS-NAME=RANGE-LIST 595 -fdisable-tree-PASS_NAME 596 -fdisable-tree-PASS-NAME=RANGE-LIST 597 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links 598 -fdump-translation-unit[-N] 599 -fdump-class-hierarchy[-N] 600 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline 601 -fdump-passes 602 -fdump-statistics 603 -fdump-tree-all 604 -fdump-tree-original[-N] 605 -fdump-tree-optimized[-N] 606 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias 607 -fdump-tree-ch 608 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 609 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 610 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N] 611 -fdump-tree-dom[-N] 612 -fdump-tree-dse[-N] 613 -fdump-tree-phiprop[-N] 614 -fdump-tree-phiopt[-N] 615 -fdump-tree-forwprop[-N] 616 -fdump-tree-copyrename[-N] 617 -fdump-tree-nrv -fdump-tree-vect 618 -fdump-tree-sink 619 -fdump-tree-sra[-N] 620 -fdump-tree-forwprop[-N] 621 -fdump-tree-fre[-N] 622 -fdump-tree-vrp[-N] 623 -ftree-vectorizer-verbose=N 624 -fdump-tree-storeccp[-N] 625 -fdump-final-insns=FILE 626 -fcompare-debug[=OPTS] -fcompare-debug-second 627 -feliminate-dwarf2-dups -feliminate-unused-debug-types 628 -feliminate-unused-debug-symbols -femit-class-debug-always 629 -fenable-icf-debug 630 -fenable-KIND-PASS 631 -fenable-KIND-PASS=RANGE-LIST 632 -fdebug-types-section 633 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 634 -frandom-seed=STRING -fsched-verbose=N 635 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose 636 -fstack-usage -ftest-coverage -ftime-report -fvar-tracking 637 -fvar-tracking-assignments -fvar-tracking-assignments-toggle 638 -g -gLEVEL -gtoggle -gcoff -gdwarf-VERSION 639 -ggdb -gmlt -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf 640 -gvms -gxcoff -gxcoff+ 641 -fno-merge-debug-strings -fno-dwarf2-cfi-asm 642 -fdebug-prefix-map=OLD=NEW 643 -femit-struct-debug-baseonly -femit-struct-debug-reduced 644 -femit-struct-debug-detailed[=SPEC-LIST] 645 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 646 -print-multi-directory -print-multi-lib -print-multi-os-directory 647 -print-prog-name=PROGRAM -print-search-dirs -Q 648 -print-sysroot -print-sysroot-headers-suffix 649 -save-temps -save-temps=cwd -save-temps=obj -time[=FILE] 650 651 _Optimization Options_ 652 *Note Options that Control Optimization: Optimize Options. 653 -falign-functions[=N] -falign-jumps[=N] 654 -falign-labels[=N] -falign-loops[=N] -fassociative-math 655 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize 656 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves 657 -fcallgraph-profiles-sections -fcheck-data-deps -fclone-hot-version-paths 658 -fcombine-stack-adjustments -fconserve-stack 659 -fcompare-elim -fcprop-registers -fcrossjumping 660 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules 661 -fcx-limited-range 662 -fdata-sections -fdce -fdce -fdelayed-branch 663 -fdelete-null-pointer-checks -fdse -fdevirtualize -fdse 664 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffast-math 665 -ffinite-math-only -ffloat-store -fexcess-precision=STYLE 666 -fforward-propagate -ffp-contract=STYLE -ffunction-sections 667 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity 668 -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining 669 -finline-functions -finline-functions-called-once -finline-limit=N 670 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg 671 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference 672 -fipa-struct-reorg -fira-algorithm=ALGORITHM 673 -fira-region=REGION 674 -fira-loop-pressure -fno-ira-share-save-slots 675 -fno-ira-share-spill-slots -fira-verbose=N 676 -fivopts -fkeep-inline-functions -fkeep-static-consts 677 -floop-block -floop-flatten -floop-interchange -floop-strip-mine 678 -floop-parallelize-all -flto -flto-compression-level 679 -flto-partition=ALG -flto-report -fmerge-all-constants 680 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves 681 -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg 682 -fno-default-inline 683 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 684 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 685 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 686 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 687 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls 688 -fpartial-inlining -fpeel-loops -fpredictive-commoning 689 -fprefetch-loop-arrays 690 -fprofile-correction -fprofile-dir=PATH -fprofile-generate 691 -fprofile-generate=PATH -fprofile-generate-sampling 692 -fprofile-use -fprofile-use=PATH -fprofile-values 693 -fpmu-profile-generate=PMUOPTION 694 -fpmu-profile-use=PMUOPTION 695 -freciprocal-math -fregmove -frename-registers -freorder-blocks 696 -frecord-gcc-switches-in-elf 697 -freorder-blocks-and-partition -freorder-functions 698 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 699 -fripa -fripa-disallow-asm-modules -fripa-disallow-opt-mismatch 700 -fripa-no-promote-always-inline-func -fripa-verbose 701 -fripa-peel-size-limit -fripa-unroll-size-limit -frounding-math 702 -fsched2-use-superblocks -fsched-pressure 703 -fsched-spec-load -fsched-spec-load-dangerous 704 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 705 -fsched-group-heuristic -fsched-critical-path-heuristic 706 -fsched-spec-insn-heuristic -fsched-rank-heuristic 707 -fsched-last-insn-heuristic -fsched-dep-count-heuristic 708 -fschedule-insns -fschedule-insns2 -fsection-anchors 709 -fselective-scheduling -fselective-scheduling2 710 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops 711 -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller 712 -fsplit-wide-types -fstack-protector -fstack-protector-all 713 -fstack-protector-strong -fstrict-aliasing -fstrict-overflow 714 -fthread-jumps -ftracer -ftree-bit-ccp 715 -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop 716 -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse 717 -ftree-forwprop -ftree-fre -ftree-loop-if-convert 718 -ftree-loop-if-convert-stores -ftree-loop-im 719 -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns 720 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize 721 -ftree-parallelize-loops=N -ftree-pre -ftree-pta -ftree-reassoc 722 -ftree-sink -ftree-sra -ftree-switch-conversion 723 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp 724 -funit-at-a-time -funroll-all-loops -funroll-loops 725 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops 726 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb 727 -fwhole-program -fwpa -fuse-ld -fuse-linker-plugin 728 --param NAME=VALUE 729 -O -O0 -O1 -O2 -O3 -Os -Ofast 730 731 _Preprocessor Options_ 732 *Note Options Controlling the Preprocessor: Preprocessor Options. 733 -AQUESTION=ANSWER 734 -A-QUESTION[=ANSWER] 735 -C -dD -dI -dM -dN 736 -DMACRO[=DEFN] -E -H 737 -idirafter DIR 738 -include FILE -imacros FILE 739 -iprefix FILE -iwithprefix DIR 740 -iwithprefixbefore DIR -isystem DIR 741 -imultilib DIR -isysroot DIR 742 -M -MM -MF -MG -MP -MQ -MT -nostdinc 743 -P -fworking-directory -remap 744 -trigraphs -undef -UMACRO -Wp,OPTION 745 -Xpreprocessor OPTION 746 747 _Assembler Option_ 748 *Note Passing Options to the Assembler: Assembler Options. 749 -Wa,OPTION -Xassembler OPTION 750 751 _Linker Options_ 752 *Note Options for Linking: Link Options. 753 OBJECT-FILE-NAME -lLIBRARY 754 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 755 -s -static -static-libgcc -static-libstdc++ -shared 756 -shared-libgcc -symbolic 757 -T SCRIPT -Wl,OPTION -Xlinker OPTION 758 -u SYMBOL 759 760 _Directory Options_ 761 *Note Options for Directory Search: Directory Options. 762 -BPREFIX -IDIR -iplugindir=DIR 763 764 -iquoteDIR -LDIR -specs=FILE -I- -sysroot=DIR 765 766 _Machine Dependent Options_ 767 *Note Hardware Models and Configurations: Submodel Options. 768 769 _ARC Options_ 770 -EB -EL 771 -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION 772 -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION 773 774 _ARM Options_ 775 -mapcs-frame -mno-apcs-frame 776 -mabi=NAME 777 -mapcs-stack-check -mno-apcs-stack-check 778 -mapcs-float -mno-apcs-float 779 -mapcs-reentrant -mno-apcs-reentrant 780 -msched-prolog -mno-sched-prolog 781 -mlittle-endian -mbig-endian -mwords-little-endian 782 -mfloat-abi=NAME -msoft-float -mhard-float -mfpe 783 -mfp16-format=NAME 784 -mthumb-interwork -mno-thumb-interwork 785 -mcpu=NAME -march=NAME -mfpu=NAME 786 -mstructure-size-boundary=N 787 -mabort-on-noreturn 788 -mlong-calls -mno-long-calls 789 -msingle-pic-base -mno-single-pic-base 790 -mpic-register=REG 791 -mnop-fun-dllimport 792 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns 793 -mpoke-function-name 794 -mthumb -marm 795 -mtpcs-frame -mtpcs-leaf-frame 796 -mcaller-super-interworking -mcallee-super-interworking 797 -mtp=NAME 798 -mword-relocations 799 -mfix-cortex-m3-ldrd 800 801 _AVR Options_ 802 -mmcu=MCU -mno-interrupts 803 -mcall-prologues -mtiny-stack -mint8 804 805 _Blackfin Options_ 806 -mcpu=CPU[-SIREVISION] 807 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 808 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 809 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 810 -mno-id-shared-library -mshared-library-id=N 811 -mleaf-id-shared-library -mno-leaf-id-shared-library 812 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 813 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 814 -micplb 815 816 _CRIS Options_ 817 -mcpu=CPU -march=CPU -mtune=CPU 818 -mmax-stack-frame=N -melinux-stacksize=N 819 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 820 -mstack-align -mdata-align -mconst-align 821 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 822 -melf -maout -melinux -mlinux -sim -sim2 823 -mmul-bug-workaround -mno-mul-bug-workaround 824 825 _CRX Options_ 826 -mmac -mpush-args 827 828 _Darwin Options_ 829 -all_load -allowable_client -arch -arch_errors_fatal 830 -arch_only -bind_at_load -bundle -bundle_loader 831 -client_name -compatibility_version -current_version 832 -dead_strip 833 -dependency-file -dylib_file -dylinker_install_name 834 -dynamic -dynamiclib -exported_symbols_list 835 -filelist -flat_namespace -force_cpusubtype_ALL 836 -force_flat_namespace -headerpad_max_install_names 837 -iframework 838 -image_base -init -install_name -keep_private_externs 839 -multi_module -multiply_defined -multiply_defined_unused 840 -noall_load -no_dead_strip_inits_and_terms 841 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 842 -pagezero_size -prebind -prebind_all_twolevel_modules 843 -private_bundle -read_only_relocs -sectalign 844 -sectobjectsymbols -whyload -seg1addr 845 -sectcreate -sectobjectsymbols -sectorder 846 -segaddr -segs_read_only_addr -segs_read_write_addr 847 -seg_addr_table -seg_addr_table_filename -seglinkedit 848 -segprot -segs_read_only_addr -segs_read_write_addr 849 -single_module -static -sub_library -sub_umbrella 850 -twolevel_namespace -umbrella -undefined 851 -unexported_symbols_list -weak_reference_mismatches 852 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 853 -mkernel -mone-byte-bool 854 855 _DEC Alpha Options_ 856 -mno-fp-regs -msoft-float -malpha-as -mgas 857 -mieee -mieee-with-inexact -mieee-conformant 858 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 859 -mtrap-precision=MODE -mbuild-constants 860 -mcpu=CPU-TYPE -mtune=CPU-TYPE 861 -mbwx -mmax -mfix -mcix 862 -mfloat-vax -mfloat-ieee 863 -mexplicit-relocs -msmall-data -mlarge-data 864 -msmall-text -mlarge-text 865 -mmemory-latency=TIME 866 867 _DEC Alpha/VMS Options_ 868 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 869 870 _FR30 Options_ 871 -msmall-model -mno-lsim 872 873 _FRV Options_ 874 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 875 -mhard-float -msoft-float 876 -malloc-cc -mfixed-cc -mdword -mno-dword 877 -mdouble -mno-double 878 -mmedia -mno-media -mmuladd -mno-muladd 879 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 880 -mlinked-fp -mlong-calls -malign-labels 881 -mlibrary-pic -macc-4 -macc-8 882 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 883 -moptimize-membar -mno-optimize-membar 884 -mscc -mno-scc -mcond-exec -mno-cond-exec 885 -mvliw-branch -mno-vliw-branch 886 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 887 -mno-nested-cond-exec -mtomcat-stats 888 -mTLS -mtls 889 -mcpu=CPU 890 891 _GNU/Linux Options_ 892 -mglibc -muclibc -mbionic -mandroid 893 -tno-android-cc -tno-android-ld 894 895 _H8/300 Options_ 896 -mrelax -mh -ms -mn -mint32 -malign-300 897 898 _HPPA Options_ 899 -march=ARCHITECTURE-TYPE 900 -mbig-switch -mdisable-fpregs -mdisable-indexing 901 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 902 -mfixed-range=REGISTER-RANGE 903 -mjump-in-delay -mlinker-opt -mlong-calls 904 -mlong-load-store -mno-big-switch -mno-disable-fpregs 905 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 906 -mno-jump-in-delay -mno-long-load-store 907 -mno-portable-runtime -mno-soft-float 908 -mno-space-regs -msoft-float -mpa-risc-1-0 909 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 910 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 911 -munix=UNIX-STD -nolibdld -static -threads 912 913 _i386 and x86-64 Options_ 914 -mtune=CPU-TYPE -march=CPU-TYPE 915 -mfpmath=UNIT 916 -masm=DIALECT -mno-fancy-math-387 917 -mno-fp-ret-in-387 -msoft-float 918 -mno-wide-multiply -mrtd -malign-double 919 -mpreferred-stack-boundary=NUM 920 -mincoming-stack-boundary=NUM 921 -mcld -mcx16 -msahf -mmovbe -mcrc32 -mrecip -mvzeroupper 922 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 923 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfused-madd 924 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlwp 925 -mthreads -mno-align-stringops -minline-all-stringops 926 -minline-stringops-dynamically -mstringop-strategy=ALG 927 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 928 -m96bit-long-double -mregparm=NUM -msseregparm 929 -mveclibabi=TYPE -mvect8-ret-in-mem 930 -mpc32 -mpc64 -mpc80 -mstackrealign 931 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 932 -mcmodel=CODE-MODEL -mabi=NAME 933 -m32 -m64 -mlarge-data-threshold=NUM 934 -msse2avx -mfentry -m8bit-idiv 935 -mavx256-split-unaligned-load -mavx256-split-unaligned-store 936 937 _i386 and x86-64 Windows Options_ 938 -mconsole -mcygwin -mno-cygwin -mdll 939 -mnop-fun-dllimport -mthread 940 -municode -mwin32 -mwindows -fno-set-stack-executable 941 942 _IA-64 Options_ 943 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 944 -mvolatile-asm-stop -mregister-names -msdata -mno-sdata 945 -mconstant-gp -mauto-pic -mfused-madd 946 -minline-float-divide-min-latency 947 -minline-float-divide-max-throughput 948 -mno-inline-float-divide 949 -minline-int-divide-min-latency 950 -minline-int-divide-max-throughput 951 -mno-inline-int-divide 952 -minline-sqrt-min-latency -minline-sqrt-max-throughput 953 -mno-inline-sqrt 954 -mdwarf2-asm -mearly-stop-bits 955 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 956 -mtune=CPU-TYPE -milp32 -mlp64 957 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec 958 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 959 -msched-spec-ldc -msched-spec-control-ldc 960 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns 961 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path 962 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost 963 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS 964 965 _IA-64/VMS Options_ 966 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 967 968 _LM32 Options_ 969 -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled 970 -msign-extend-enabled -muser-enabled 971 972 _M32R/D Options_ 973 -m32r2 -m32rx -m32r 974 -mdebug 975 -malign-loops -mno-align-loops 976 -missue-rate=NUMBER 977 -mbranch-cost=NUMBER 978 -mmodel=CODE-SIZE-MODEL-TYPE 979 -msdata=SDATA-TYPE 980 -mno-flush-func -mflush-func=NAME 981 -mno-flush-trap -mflush-trap=NUMBER 982 -G NUM 983 984 _M32C Options_ 985 -mcpu=CPU -msim -memregs=NUMBER 986 987 _M680x0 Options_ 988 -march=ARCH -mcpu=CPU -mtune=TUNE 989 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 990 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 991 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 992 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 993 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 994 -malign-int -mstrict-align -msep-data -mno-sep-data 995 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 996 -mxgot -mno-xgot 997 998 _M68hc1x Options_ 999 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 1000 -mauto-incdec -minmax -mlong-calls -mshort 1001 -msoft-reg-count=COUNT 1002 1003 _MCore Options_ 1004 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 1005 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 1006 -m4byte-functions -mno-4byte-functions -mcallgraph-data 1007 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 1008 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 1009 1010 _MeP Options_ 1011 -mabsdiff -mall-opts -maverage -mbased=N -mbitops 1012 -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2 1013 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax 1014 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf 1015 -mtiny=N 1016 1017 _MicroBlaze Options_ 1018 -msoft-float -mhard-float -msmall-divides -mcpu=CPU 1019 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift 1020 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss 1021 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt 1022 -mxl-mode-APP-MODEL 1023 1024 _MIPS Options_ 1025 -EL -EB -march=ARCH -mtune=ARCH 1026 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 1027 -mips64 -mips64r2 1028 -mips16 -mno-mips16 -mflip-mips16 1029 -minterlink-mips16 -mno-interlink-mips16 1030 -mabi=ABI -mabicalls -mno-abicalls 1031 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 1032 -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float 1033 -msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 1034 -mfpu=FPU-TYPE 1035 -msmartmips -mno-smartmips 1036 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 1037 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 1038 -mlong64 -mlong32 -msym32 -mno-sym32 1039 -GNUM -mlocal-sdata -mno-local-sdata 1040 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 1041 -membedded-data -mno-embedded-data 1042 -muninit-const-in-rodata -mno-uninit-const-in-rodata 1043 -mcode-readable=SETTING 1044 -msplit-addresses -mno-split-addresses 1045 -mexplicit-relocs -mno-explicit-relocs 1046 -mcheck-zero-division -mno-check-zero-division 1047 -mdivide-traps -mdivide-breaks 1048 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 1049 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 1050 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 1051 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 1052 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 1053 -mflush-func=FUNC -mno-flush-func 1054 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 1055 -mfp-exceptions -mno-fp-exceptions 1056 -mvr4130-align -mno-vr4130-align -msynci -mno-synci 1057 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address 1058 1059 _MMIX Options_ 1060 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 1061 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 1062 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 1063 -mno-base-addresses -msingle-exit -mno-single-exit 1064 1065 _MN10300 Options_ 1066 -mmult-bug -mno-mult-bug 1067 -mno-am33 -mam33 -mam33-2 -mam34 1068 -mtune=CPU-TYPE 1069 -mreturn-pointer-on-d0 1070 -mno-crt0 -mrelax -mliw 1071 1072 _PDP-11 Options_ 1073 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 1074 -mbcopy -mbcopy-builtin -mint32 -mno-int16 1075 -mint16 -mno-int32 -mfloat32 -mno-float64 1076 -mfloat64 -mno-float32 -mabshi -mno-abshi 1077 -mbranch-expensive -mbranch-cheap 1078 -munix-asm -mdec-asm 1079 1080 _picoChip Options_ 1081 -mae=AE_TYPE -mvliw-lookahead=N 1082 -msymbol-as-address -mno-inefficient-warnings 1083 1084 _PowerPC Options_ See RS/6000 and PowerPC Options. 1085 1086 _RS/6000 and PowerPC Options_ 1087 -mcpu=CPU-TYPE 1088 -mtune=CPU-TYPE 1089 -mcmodel=CODE-MODEL 1090 -mpower -mno-power -mpower2 -mno-power2 1091 -mpowerpc -mpowerpc64 -mno-powerpc 1092 -maltivec -mno-altivec 1093 -mpowerpc-gpopt -mno-powerpc-gpopt 1094 -mpowerpc-gfxopt -mno-powerpc-gfxopt 1095 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd 1096 -mfprnd -mno-fprnd 1097 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 1098 -mnew-mnemonics -mold-mnemonics 1099 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 1100 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 1101 -malign-power -malign-natural 1102 -msoft-float -mhard-float -mmultiple -mno-multiple 1103 -msingle-float -mdouble-float -msimple-fpu 1104 -mstring -mno-string -mupdate -mno-update 1105 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 1106 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 1107 -mstrict-align -mno-strict-align -mrelocatable 1108 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 1109 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 1110 -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base 1111 -mprioritize-restricted-insns=PRIORITY 1112 -msched-costly-dep=DEPENDENCE_TYPE 1113 -minsert-sched-nops=SCHEME 1114 -mcall-sysv -mcall-netbsd 1115 -maix-struct-return -msvr4-struct-return 1116 -mabi=ABI-TYPE -msecure-plt -mbss-plt 1117 -mblock-move-inline-limit=NUM 1118 -misel -mno-isel 1119 -misel=yes -misel=no 1120 -mspe -mno-spe 1121 -mspe=yes -mspe=no 1122 -mpaired 1123 -mgen-cell-microcode -mwarn-cell-microcode 1124 -mvrsave -mno-vrsave 1125 -mmulhw -mno-mulhw 1126 -mdlmzb -mno-dlmzb 1127 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 1128 -mprototype -mno-prototype 1129 -msim -mmvme -mads -myellowknife -memb -msdata 1130 -msdata=OPT -mvxworks -G NUM -pthread 1131 -mrecip -mrecip=OPT -mno-recip -mrecip-precision 1132 -mno-recip-precision 1133 -mveclibabi=TYPE -mfriz -mno-friz 1134 1135 _RX Options_ 1136 -m64bit-doubles -m32bit-doubles -fpu -nofpu 1137 -mcpu= 1138 -mbig-endian-data -mlittle-endian-data 1139 -msmall-data 1140 -msim -mno-sim 1141 -mas100-syntax -mno-as100-syntax 1142 -mrelax 1143 -mmax-constant-size= 1144 -mint-register= 1145 -msave-acc-in-interrupts 1146 1147 _S/390 and zSeries Options_ 1148 -mtune=CPU-TYPE -march=CPU-TYPE 1149 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 1150 -mlong-double-64 -mlong-double-128 1151 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 1152 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 1153 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 1154 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 1155 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 1156 1157 _Score Options_ 1158 -meb -mel 1159 -mnhwloop 1160 -muls 1161 -mmac 1162 -mscore5 -mscore5u -mscore7 -mscore7d 1163 1164 _SH Options_ 1165 -m1 -m2 -m2e 1166 -m2a-nofpu -m2a-single-only -m2a-single -m2a 1167 -m3 -m3e 1168 -m4-nofpu -m4-single-only -m4-single -m4 1169 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1170 -m5-64media -m5-64media-nofpu 1171 -m5-32media -m5-32media-nofpu 1172 -m5-compact -m5-compact-nofpu 1173 -mb -ml -mdalign -mrelax 1174 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1175 -mieee -mbitops -misize -minline-ic_invalidate -mpadstruct -mspace 1176 -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1177 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1178 -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1179 -maccumulate-outgoing-args -minvalid-symbols 1180 1181 _Solaris 2 Options_ 1182 -mimpure-text -mno-impure-text 1183 -threads -pthreads -pthread 1184 1185 _SPARC Options_ 1186 -mcpu=CPU-TYPE 1187 -mtune=CPU-TYPE 1188 -mcmodel=CODE-MODEL 1189 -m32 -m64 -mapp-regs -mno-app-regs 1190 -mfaster-structs -mno-faster-structs 1191 -mfpu -mno-fpu -mhard-float -msoft-float 1192 -mhard-quad-float -msoft-quad-float 1193 -mlittle-endian 1194 -mstack-bias -mno-stack-bias 1195 -munaligned-doubles -mno-unaligned-doubles 1196 -mv8plus -mno-v8plus -mvis -mno-vis 1197 -mfix-at697f 1198 1199 _SPU Options_ 1200 -mwarn-reloc -merror-reloc 1201 -msafe-dma -munsafe-dma 1202 -mbranch-hints 1203 -msmall-mem -mlarge-mem -mstdmain 1204 -mfixed-range=REGISTER-RANGE 1205 -mea32 -mea64 1206 -maddress-space-conversion -mno-address-space-conversion 1207 -mcache-size=CACHE-SIZE 1208 -matomic-updates -mno-atomic-updates 1209 1210 _System V Options_ 1211 -Qy -Qn -YP,PATHS -Ym,DIR 1212 1213 _V850 Options_ 1214 -mlong-calls -mno-long-calls -mep -mno-ep 1215 -mprolog-function -mno-prolog-function -mspace 1216 -mtda=N -msda=N -mzda=N 1217 -mapp-regs -mno-app-regs 1218 -mdisable-callt -mno-disable-callt 1219 -mv850e2v3 1220 -mv850e2 1221 -mv850e1 -mv850es 1222 -mv850e 1223 -mv850 -mbig-switch 1224 1225 _VAX Options_ 1226 -mg -mgnu -munix 1227 1228 _VxWorks Options_ 1229 -mrtp -non-static -Bstatic -Bdynamic 1230 -Xbind-lazy -Xbind-now 1231 1232 _x86-64 Options_ See i386 and x86-64 Options. 1233 1234 _Xstormy16 Options_ 1235 -msim 1236 1237 _Xtensa Options_ 1238 -mconst16 -mno-const16 1239 -mfused-madd -mno-fused-madd 1240 -mforce-no-pic 1241 -mserialize-volatile -mno-serialize-volatile 1242 -mtext-section-literals -mno-text-section-literals 1243 -mtarget-align -mno-target-align 1244 -mlongcalls -mno-longcalls 1245 1246 _zSeries Options_ See S/390 and zSeries Options. 1247 1248 _Code Generation Options_ 1249 *Note Options for Code Generation Conventions: Code Gen Options. 1250 -fcall-saved-REG -fcall-used-REG 1251 -ffixed-REG -fexceptions 1252 -fnon-call-exceptions -funwind-tables 1253 -fasynchronous-unwind-tables 1254 -finhibit-size-directive -finstrument-functions 1255 -finstrument-functions-exclude-function-list=SYM,SYM,... 1256 -finstrument-functions-exclude-file-list=FILE,FILE,... 1257 -fno-common -fno-ident 1258 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1259 -fno-jump-tables 1260 -frecord-gcc-switches 1261 -freg-struct-return -fshort-enums 1262 -fshort-double -fshort-wchar 1263 -fverbose-asm -fpack-struct[=N] -fstack-check 1264 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1265 -fno-stack-limit -fsplit-stack 1266 -fleading-underscore -ftls-model=MODEL 1267 -ftrapv -fwrapv -fbounds-check 1268 -fvisibility -fstrict-volatile-bitfields 1269 1270 1271 * Menu: 1272 1273 * Overall Options:: Controlling the kind of output: 1274 an executable, object files, assembler files, 1275 or preprocessed source. 1276 * C Dialect Options:: Controlling the variant of C language compiled. 1277 * C++ Dialect Options:: Variations on C++. 1278 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 1279 and Objective-C++. 1280 * Language Independent Options:: Controlling how diagnostics should be 1281 formatted. 1282 * Warning Options:: How picky should the compiler be? 1283 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 1284 * Optimize Options:: How much optimization? 1285 * Preprocessor Options:: Controlling header files and macro definitions. 1286 Also, getting dependency information for Make. 1287 * Assembler Options:: Passing options to the assembler. 1288 * Link Options:: Specifying libraries and so on. 1289 * Directory Options:: Where to find header files and libraries. 1290 Where to find the compiler executable files. 1291 * Spec Files:: How to pass switches to sub-processes. 1292 * Target Options:: Running a cross-compiler, or an old version of GCC. 1293 1294 1295 File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1296 1297 3.2 Options Controlling the Kind of Output 1298 ========================================== 1299 1300 Compilation can involve up to four stages: preprocessing, compilation 1301 proper, assembly and linking, always in that order. GCC is capable of 1302 preprocessing and compiling several files either into several assembler 1303 input files, or into one assembler input file; then each assembler 1304 input file produces an object file, and linking combines all the object 1305 files (those newly compiled, and those specified as input) into an 1306 executable file. 1307 1308 For any given input file, the file name suffix determines what kind of 1309 compilation is done: 1310 1311 `FILE.c' 1312 C source code which must be preprocessed. 1313 1314 `FILE.i' 1315 C source code which should not be preprocessed. 1316 1317 `FILE.ii' 1318 C++ source code which should not be preprocessed. 1319 1320 `FILE.m' 1321 Objective-C source code. Note that you must link with the 1322 `libobjc' library to make an Objective-C program work. 1323 1324 `FILE.mi' 1325 Objective-C source code which should not be preprocessed. 1326 1327 `FILE.mm' 1328 `FILE.M' 1329 Objective-C++ source code. Note that you must link with the 1330 `libobjc' library to make an Objective-C++ program work. Note 1331 that `.M' refers to a literal capital M. 1332 1333 `FILE.mii' 1334 Objective-C++ source code which should not be preprocessed. 1335 1336 `FILE.h' 1337 C, C++, Objective-C or Objective-C++ header file to be turned into 1338 a precompiled header (default), or C, C++ header file to be turned 1339 into an Ada spec (via the `-fdump-ada-spec' switch). 1340 1341 `FILE.cc' 1342 `FILE.cp' 1343 `FILE.cxx' 1344 `FILE.cpp' 1345 `FILE.CPP' 1346 `FILE.c++' 1347 `FILE.C' 1348 C++ source code which must be preprocessed. Note that in `.cxx', 1349 the last two letters must both be literally `x'. Likewise, `.C' 1350 refers to a literal capital C. 1351 1352 `FILE.mm' 1353 `FILE.M' 1354 Objective-C++ source code which must be preprocessed. 1355 1356 `FILE.mii' 1357 Objective-C++ source code which should not be preprocessed. 1358 1359 `FILE.hh' 1360 `FILE.H' 1361 `FILE.hp' 1362 `FILE.hxx' 1363 `FILE.hpp' 1364 `FILE.HPP' 1365 `FILE.h++' 1366 `FILE.tcc' 1367 C++ header file to be turned into a precompiled header or Ada spec. 1368 1369 `FILE.f' 1370 `FILE.for' 1371 `FILE.ftn' 1372 Fixed form Fortran source code which should not be preprocessed. 1373 1374 `FILE.F' 1375 `FILE.FOR' 1376 `FILE.fpp' 1377 `FILE.FPP' 1378 `FILE.FTN' 1379 Fixed form Fortran source code which must be preprocessed (with 1380 the traditional preprocessor). 1381 1382 `FILE.f90' 1383 `FILE.f95' 1384 `FILE.f03' 1385 `FILE.f08' 1386 Free form Fortran source code which should not be preprocessed. 1387 1388 `FILE.F90' 1389 `FILE.F95' 1390 `FILE.F03' 1391 `FILE.F08' 1392 Free form Fortran source code which must be preprocessed (with the 1393 traditional preprocessor). 1394 1395 `FILE.go' 1396 Go source code. 1397 1398 `FILE.ads' 1399 Ada source code file which contains a library unit declaration (a 1400 declaration of a package, subprogram, or generic, or a generic 1401 instantiation), or a library unit renaming declaration (a package, 1402 generic, or subprogram renaming declaration). Such files are also 1403 called "specs". 1404 1405 `FILE.adb' 1406 Ada source code file containing a library unit body (a subprogram 1407 or package body). Such files are also called "bodies". 1408 1409 `FILE.s' 1410 Assembler code. 1411 1412 `FILE.S' 1413 `FILE.sx' 1414 Assembler code which must be preprocessed. 1415 1416 `OTHER' 1417 An object file to be fed straight into linking. Any file name 1418 with no recognized suffix is treated this way. 1419 1420 You can specify the input language explicitly with the `-x' option: 1421 1422 `-x LANGUAGE' 1423 Specify explicitly the LANGUAGE for the following input files 1424 (rather than letting the compiler choose a default based on the 1425 file name suffix). This option applies to all following input 1426 files until the next `-x' option. Possible values for LANGUAGE 1427 are: 1428 c c-header cpp-output 1429 c++ c++-header c++-cpp-output 1430 objective-c objective-c-header objective-c-cpp-output 1431 objective-c++ objective-c++-header objective-c++-cpp-output 1432 assembler assembler-with-cpp 1433 ada 1434 f77 f77-cpp-input f95 f95-cpp-input 1435 go 1436 java 1437 1438 `-x none' 1439 Turn off any specification of a language, so that subsequent files 1440 are handled according to their file name suffixes (as they are if 1441 `-x' has not been used at all). 1442 1443 `-pass-exit-codes' 1444 Normally the `gcc' program will exit with the code of 1 if any 1445 phase of the compiler returns a non-success return code. If you 1446 specify `-pass-exit-codes', the `gcc' program will instead return 1447 with numerically highest error produced by any phase that returned 1448 an error indication. The C, C++, and Fortran frontends return 4, 1449 if an internal compiler error is encountered. 1450 1451 If you only want some of the stages of compilation, you can use `-x' 1452 (or filename suffixes) to tell `gcc' where to start, and one of the 1453 options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1454 some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1455 do nothing at all. 1456 1457 `-c' 1458 Compile or assemble the source files, but do not link. The linking 1459 stage simply is not done. The ultimate output is in the form of an 1460 object file for each source file. 1461 1462 By default, the object file name for a source file is made by 1463 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1464 1465 Unrecognized input files, not requiring compilation or assembly, 1466 are ignored. 1467 1468 `-S' 1469 Stop after the stage of compilation proper; do not assemble. The 1470 output is in the form of an assembler code file for each 1471 non-assembler input file specified. 1472 1473 By default, the assembler file name for a source file is made by 1474 replacing the suffix `.c', `.i', etc., with `.s'. 1475 1476 Input files that don't require compilation are ignored. 1477 1478 `-E' 1479 Stop after the preprocessing stage; do not run the compiler 1480 proper. The output is in the form of preprocessed source code, 1481 which is sent to the standard output. 1482 1483 Input files which don't require preprocessing are ignored. 1484 1485 `-o FILE' 1486 Place output in file FILE. This applies regardless to whatever 1487 sort of output is being produced, whether it be an executable file, 1488 an object file, an assembler file or preprocessed C code. 1489 1490 If `-o' is not specified, the default is to put an executable file 1491 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1492 assembler file in `SOURCE.s', a precompiled header file in 1493 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1494 output. 1495 1496 `-v' 1497 Print (on standard error output) the commands executed to run the 1498 stages of compilation. Also print the version number of the 1499 compiler driver program and of the preprocessor and the compiler 1500 proper. 1501 1502 `-###' 1503 Like `-v' except the commands are not executed and arguments are 1504 quoted unless they contain only alphanumeric characters or `./-_'. 1505 This is useful for shell scripts to capture the driver-generated 1506 command lines. 1507 1508 `-pipe' 1509 Use pipes rather than temporary files for communication between the 1510 various stages of compilation. This fails to work on some systems 1511 where the assembler is unable to read from a pipe; but the GNU 1512 assembler has no trouble. 1513 1514 `--help' 1515 Print (on the standard output) a description of the command line 1516 options understood by `gcc'. If the `-v' option is also specified 1517 then `--help' will also be passed on to the various processes 1518 invoked by `gcc', so that they can display the command line options 1519 they accept. If the `-Wextra' option has also been specified 1520 (prior to the `--help' option), then command line options which 1521 have no documentation associated with them will also be displayed. 1522 1523 `--target-help' 1524 Print (on the standard output) a description of target-specific 1525 command line options for each tool. For some targets extra 1526 target-specific information may also be printed. 1527 1528 `--help={CLASS|[^]QUALIFIER}[,...]' 1529 Print (on the standard output) a description of the command line 1530 options understood by the compiler that fit into all specified 1531 classes and qualifiers. These are the supported classes: 1532 1533 `optimizers' 1534 This will display all of the optimization options supported 1535 by the compiler. 1536 1537 `warnings' 1538 This will display all of the options controlling warning 1539 messages produced by the compiler. 1540 1541 `target' 1542 This will display target-specific options. Unlike the 1543 `--target-help' option however, target-specific options of the 1544 linker and assembler will not be displayed. This is because 1545 those tools do not currently support the extended `--help=' 1546 syntax. 1547 1548 `params' 1549 This will display the values recognized by the `--param' 1550 option. 1551 1552 LANGUAGE 1553 This will display the options supported for LANGUAGE, where 1554 LANGUAGE is the name of one of the languages supported in this 1555 version of GCC. 1556 1557 `common' 1558 This will display the options that are common to all 1559 languages. 1560 1561 These are the supported qualifiers: 1562 1563 `undocumented' 1564 Display only those options which are undocumented. 1565 1566 `joined' 1567 Display options which take an argument that appears after an 1568 equal sign in the same continuous piece of text, such as: 1569 `--help=target'. 1570 1571 `separate' 1572 Display options which take an argument that appears as a 1573 separate word following the original option, such as: `-o 1574 output-file'. 1575 1576 Thus for example to display all the undocumented target-specific 1577 switches supported by the compiler the following can be used: 1578 1579 --help=target,undocumented 1580 1581 The sense of a qualifier can be inverted by prefixing it with the 1582 `^' character, so for example to display all binary warning 1583 options (i.e., ones that are either on or off and that do not take 1584 an argument), which have a description the following can be used: 1585 1586 --help=warnings,^joined,^undocumented 1587 1588 The argument to `--help=' should not consist solely of inverted 1589 qualifiers. 1590 1591 Combining several classes is possible, although this usually 1592 restricts the output by so much that there is nothing to display. 1593 One case where it does work however is when one of the classes is 1594 TARGET. So for example to display all the target-specific 1595 optimization options the following can be used: 1596 1597 --help=target,optimizers 1598 1599 The `--help=' option can be repeated on the command line. Each 1600 successive use will display its requested class of options, 1601 skipping those that have already been displayed. 1602 1603 If the `-Q' option appears on the command line before the 1604 `--help=' option, then the descriptive text displayed by `--help=' 1605 is changed. Instead of describing the displayed options, an 1606 indication is given as to whether the option is enabled, disabled 1607 or set to a specific value (assuming that the compiler knows this 1608 at the point where the `--help=' option is used). 1609 1610 Here is a truncated example from the ARM port of `gcc': 1611 1612 % gcc -Q -mabi=2 --help=target -c 1613 The following options are target specific: 1614 -mabi= 2 1615 -mabort-on-noreturn [disabled] 1616 -mapcs [disabled] 1617 1618 The output is sensitive to the effects of previous command line 1619 options, so for example it is possible to find out which 1620 optimizations are enabled at `-O2' by using: 1621 1622 -Q -O2 --help=optimizers 1623 1624 Alternatively you can discover which binary optimizations are 1625 enabled by `-O3' by using: 1626 1627 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1628 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1629 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1630 1631 `-canonical-prefixes' 1632 Always expand any symbolic links, resolve references to `/../' or 1633 `/./', and make the path absolute when generating a relative 1634 prefix. 1635 1636 `-no-canonical-prefixes' 1637 Never expand any symbolic links, resolve references to `/../' or 1638 `/./', or make the path absolute when generating a relative 1639 prefix. If neither `-canonical-prefixes' nor 1640 `-nocanonical-prefixes' is given, GCC tries to set an appropriate 1641 default by looking for a target-specific subdirectory alongside the 1642 directory containing the compiler driver. 1643 1644 `--version' 1645 Display the version number and copyrights of the invoked GCC. 1646 1647 `-wrapper' 1648 Invoke all subcommands under a wrapper program. The name of the 1649 wrapper program and its parameters are passed as a comma separated 1650 list. 1651 1652 gcc -c t.c -wrapper gdb,--args 1653 1654 This will invoke all subprograms of `gcc' under `gdb --args', thus 1655 the invocation of `cc1' will be `gdb --args cc1 ...'. 1656 1657 `-fplugin=NAME.so' 1658 Load the plugin code in file NAME.so, assumed to be a shared 1659 object to be dlopen'd by the compiler. The base name of the 1660 shared object file is used to identify the plugin for the purposes 1661 of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below). 1662 Each plugin should define the callback functions specified in the 1663 Plugins API. 1664 1665 `-fplugin-arg-NAME-KEY=VALUE' 1666 Define an argument called KEY with a value of VALUE for the plugin 1667 called NAME. 1668 1669 `-fdump-ada-spec[-slim]' 1670 For C and C++ source and include files, generate corresponding Ada 1671 specs. *Note Generating Ada Bindings for C and C++ headers: 1672 (gnat_ugn)Generating Ada Bindings for C and C++ headers, which 1673 provides detailed documentation on this feature. 1674 1675 `-fdump-go-spec=FILE' 1676 For input files in any language, generate corresponding Go 1677 declarations in FILE. This generates Go `const', `type', `var', 1678 and `func' declarations which may be a useful way to start writing 1679 a Go interface to code written in some other language. 1680 1681 `@FILE' 1682 Read command-line options from FILE. The options read are 1683 inserted in place of the original @FILE option. If FILE does not 1684 exist, or cannot be read, then the option will be treated 1685 literally, and not removed. 1686 1687 Options in FILE are separated by whitespace. A whitespace 1688 character may be included in an option by surrounding the entire 1689 option in either single or double quotes. Any character 1690 (including a backslash) may be included by prefixing the character 1691 to be included with a backslash. The FILE may itself contain 1692 additional @FILE options; any such options will be processed 1693 recursively. 1694 1695 1696 File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1697 1698 3.3 Compiling C++ Programs 1699 ========================== 1700 1701 C++ source files conventionally use one of the suffixes `.C', `.cc', 1702 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1703 `.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and 1704 preprocessed C++ files use the suffix `.ii'. GCC recognizes files with 1705 these names and compiles them as C++ programs even if you call the 1706 compiler the same way as for compiling C programs (usually with the 1707 name `gcc'). 1708 1709 However, the use of `gcc' does not add the C++ library. `g++' is a 1710 program that calls GCC and treats `.c', `.h' and `.i' files as C++ 1711 source files instead of C source files unless `-x' is used, and 1712 automatically specifies linking against the C++ library. This program 1713 is also useful when precompiling a C header file with a `.h' extension 1714 for use in C++ compilations. On many systems, `g++' is also installed 1715 with the name `c++'. 1716 1717 When you compile C++ programs, you may specify many of the same 1718 command-line options that you use for compiling programs in any 1719 language; or command-line options meaningful for C and related 1720 languages; or options that are meaningful only for C++ programs. *Note 1721 Options Controlling C Dialect: C Dialect Options, for explanations of 1722 options for languages related to C. *Note Options Controlling C++ 1723 Dialect: C++ Dialect Options, for explanations of options that are 1724 meaningful only for C++ programs. 1725 1726 1727 File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1728 1729 3.4 Options Controlling C Dialect 1730 ================================= 1731 1732 The following options control the dialect of C (or languages derived 1733 from C, such as C++, Objective-C and Objective-C++) that the compiler 1734 accepts: 1735 1736 `-ansi' 1737 In C mode, this is equivalent to `-std=c90'. In C++ mode, it is 1738 equivalent to `-std=c++98'. 1739 1740 This turns off certain features of GCC that are incompatible with 1741 ISO C90 (when compiling C code), or of standard C++ (when 1742 compiling C++ code), such as the `asm' and `typeof' keywords, and 1743 predefined macros such as `unix' and `vax' that identify the type 1744 of system you are using. It also enables the undesirable and 1745 rarely used ISO trigraph feature. For the C compiler, it disables 1746 recognition of C++ style `//' comments as well as the `inline' 1747 keyword. 1748 1749 The alternate keywords `__asm__', `__extension__', `__inline__' 1750 and `__typeof__' continue to work despite `-ansi'. You would not 1751 want to use them in an ISO C program, of course, but it is useful 1752 to put them in header files that might be included in compilations 1753 done with `-ansi'. Alternate predefined macros such as `__unix__' 1754 and `__vax__' are also available, with or without `-ansi'. 1755 1756 The `-ansi' option does not cause non-ISO programs to be rejected 1757 gratuitously. For that, `-pedantic' is required in addition to 1758 `-ansi'. *Note Warning Options::. 1759 1760 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1761 is used. Some header files may notice this macro and refrain from 1762 declaring certain functions or defining certain macros that the 1763 ISO standard doesn't call for; this is to avoid interfering with 1764 any programs that might use these names for other things. 1765 1766 Functions that would normally be built in but do not have semantics 1767 defined by ISO C (such as `alloca' and `ffs') are not built-in 1768 functions when `-ansi' is used. *Note Other built-in functions 1769 provided by GCC: Other Builtins, for details of the functions 1770 affected. 1771 1772 `-std=' 1773 Determine the language standard. *Note Language Standards 1774 Supported by GCC: Standards, for details of these standard 1775 versions. This option is currently only supported when compiling 1776 C or C++. 1777 1778 The compiler can accept several base standards, such as `c90' or 1779 `c++98', and GNU dialects of those standards, such as `gnu90' or 1780 `gnu++98'. By specifying a base standard, the compiler will 1781 accept all programs following that standard and those using GNU 1782 extensions that do not contradict it. For example, `-std=c90' 1783 turns off certain features of GCC that are incompatible with ISO 1784 C90, such as the `asm' and `typeof' keywords, but not other GNU 1785 extensions that do not have a meaning in ISO C90, such as omitting 1786 the middle term of a `?:' expression. On the other hand, by 1787 specifying a GNU dialect of a standard, all features the compiler 1788 support are enabled, even when those features change the meaning 1789 of the base standard and some strict-conforming programs may be 1790 rejected. The particular standard is used by `-pedantic' to 1791 identify which features are GNU extensions given that version of 1792 the standard. For example `-std=gnu90 -pedantic' would warn about 1793 C++ style `//' comments, while `-std=gnu99 -pedantic' would not. 1794 1795 A value for this option must be provided; possible values are 1796 1797 `c90' 1798 `c89' 1799 `iso9899:1990' 1800 Support all ISO C90 programs (certain GNU extensions that 1801 conflict with ISO C90 are disabled). Same as `-ansi' for C 1802 code. 1803 1804 `iso9899:199409' 1805 ISO C90 as modified in amendment 1. 1806 1807 `c99' 1808 `c9x' 1809 `iso9899:1999' 1810 `iso9899:199x' 1811 ISO C99. Note that this standard is not yet fully supported; 1812 see `http://gcc.gnu.org/gcc-4.6/c99status.html' for more 1813 information. The names `c9x' and `iso9899:199x' are 1814 deprecated. 1815 1816 `c1x' 1817 ISO C1X, the draft of the next revision of the ISO C standard. 1818 Support is limited and experimental and features enabled by 1819 this option may be changed or removed if changed in or 1820 removed from the standard draft. 1821 1822 `gnu90' 1823 `gnu89' 1824 GNU dialect of ISO C90 (including some C99 features). This is 1825 the default for C code. 1826 1827 `gnu99' 1828 `gnu9x' 1829 GNU dialect of ISO C99. When ISO C99 is fully implemented in 1830 GCC, this will become the default. The name `gnu9x' is 1831 deprecated. 1832 1833 `gnu1x' 1834 GNU dialect of ISO C1X. Support is limited and experimental 1835 and features enabled by this option may be changed or removed 1836 if changed in or removed from the standard draft. 1837 1838 `c++98' 1839 The 1998 ISO C++ standard plus amendments. Same as `-ansi' for 1840 C++ code. 1841 1842 `gnu++98' 1843 GNU dialect of `-std=c++98'. This is the default for C++ 1844 code. 1845 1846 `c++0x' 1847 The working draft of the upcoming ISO C++0x standard. This 1848 option enables experimental features that are likely to be 1849 included in C++0x. The working draft is constantly changing, 1850 and any feature that is enabled by this flag may be removed 1851 from future versions of GCC if it is not part of the C++0x 1852 standard. 1853 1854 `gnu++0x' 1855 GNU dialect of `-std=c++0x'. This option enables experimental 1856 features that may be removed in future versions of GCC. 1857 1858 `-fgnu89-inline' 1859 The option `-fgnu89-inline' tells GCC to use the traditional GNU 1860 semantics for `inline' functions when in C99 mode. *Note An 1861 Inline Function is As Fast As a Macro: Inline. This option is 1862 accepted and ignored by GCC versions 4.1.3 up to but not including 1863 4.3. In GCC versions 4.3 and later it changes the behavior of GCC 1864 in C99 mode. Using this option is roughly equivalent to adding the 1865 `gnu_inline' function attribute to all inline functions (*note 1866 Function Attributes::). 1867 1868 The option `-fno-gnu89-inline' explicitly tells GCC to use the C99 1869 semantics for `inline' when in C99 or gnu99 mode (i.e., it 1870 specifies the default behavior). This option was first supported 1871 in GCC 4.3. This option is not supported in `-std=c90' or 1872 `-std=gnu90' mode. 1873 1874 The preprocessor macros `__GNUC_GNU_INLINE__' and 1875 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 1876 effect for `inline' functions. *Note Common Predefined Macros: 1877 (cpp)Common Predefined Macros. 1878 1879 `-aux-info FILENAME' 1880 Output to the given filename prototyped declarations for all 1881 functions declared and/or defined in a translation unit, including 1882 those in header files. This option is silently ignored in any 1883 language other than C. 1884 1885 Besides declarations, the file indicates, in comments, the origin 1886 of each declaration (source file and line), whether the 1887 declaration was implicit, prototyped or unprototyped (`I', `N' for 1888 new or `O' for old, respectively, in the first character after the 1889 line number and the colon), and whether it came from a declaration 1890 or a definition (`C' or `F', respectively, in the following 1891 character). In the case of function definitions, a K&R-style list 1892 of arguments followed by their declarations is also provided, 1893 inside comments, after the declaration. 1894 1895 `-fno-asm' 1896 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1897 code can use these words as identifiers. You can use the keywords 1898 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1899 `-fno-asm'. 1900 1901 In C++, this switch only affects the `typeof' keyword, since `asm' 1902 and `inline' are standard keywords. You may want to use the 1903 `-fno-gnu-keywords' flag instead, which has the same effect. In 1904 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1905 the `asm' and `typeof' keywords, since `inline' is a standard 1906 keyword in ISO C99. 1907 1908 `-fno-builtin' 1909 `-fno-builtin-FUNCTION' 1910 Don't recognize built-in functions that do not begin with 1911 `__builtin_' as prefix. *Note Other built-in functions provided 1912 by GCC: Other Builtins, for details of the functions affected, 1913 including those which are not built-in functions when `-ansi' or 1914 `-std' options for strict ISO C conformance are used because they 1915 do not have an ISO standard meaning. 1916 1917 GCC normally generates special code to handle certain built-in 1918 functions more efficiently; for instance, calls to `alloca' may 1919 become single instructions that adjust the stack directly, and 1920 calls to `memcpy' may become inline copy loops. The resulting 1921 code is often both smaller and faster, but since the function 1922 calls no longer appear as such, you cannot set a breakpoint on 1923 those calls, nor can you change the behavior of the functions by 1924 linking with a different library. In addition, when a function is 1925 recognized as a built-in function, GCC may use information about 1926 that function to warn about problems with calls to that function, 1927 or to generate more efficient code, even if the resulting code 1928 still contains calls to that function. For example, warnings are 1929 given with `-Wformat' for bad calls to `printf', when `printf' is 1930 built in, and `strlen' is known not to modify global memory. 1931 1932 With the `-fno-builtin-FUNCTION' option only the built-in function 1933 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 1934 If a function is named that is not built-in in this version of 1935 GCC, this option is ignored. There is no corresponding 1936 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 1937 functions selectively when using `-fno-builtin' or 1938 `-ffreestanding', you may define macros such as: 1939 1940 #define abs(n) __builtin_abs ((n)) 1941 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 1942 1943 `-fhosted' 1944 Assert that compilation takes place in a hosted environment. This 1945 implies `-fbuiltin'. A hosted environment is one in which the 1946 entire standard library is available, and in which `main' has a 1947 return type of `int'. Examples are nearly everything except a 1948 kernel. This is equivalent to `-fno-freestanding'. 1949 1950 `-ffreestanding' 1951 Assert that compilation takes place in a freestanding environment. 1952 This implies `-fno-builtin'. A freestanding environment is one in 1953 which the standard library may not exist, and program startup may 1954 not necessarily be at `main'. The most obvious example is an OS 1955 kernel. This is equivalent to `-fno-hosted'. 1956 1957 *Note Language Standards Supported by GCC: Standards, for details 1958 of freestanding and hosted environments. 1959 1960 `-fopenmp' 1961 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 1962 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 1963 generates parallel code according to the OpenMP Application 1964 Program Interface v3.0 `http://www.openmp.org/'. This option 1965 implies `-pthread', and thus is only supported on targets that 1966 have support for `-pthread'. 1967 1968 `-fms-extensions' 1969 Accept some non-standard constructs used in Microsoft header files. 1970 1971 In C++ code, this allows member names in structures to be similar 1972 to previous types declarations. 1973 1974 typedef int UOW; 1975 struct ABC { 1976 UOW UOW; 1977 }; 1978 1979 Some cases of unnamed fields in structures and unions are only 1980 accepted with this option. *Note Unnamed struct/union fields 1981 within structs/unions: Unnamed Fields, for details. 1982 1983 `-fplan9-extensions' 1984 Accept some non-standard constructs used in Plan 9 code. 1985 1986 This enables `-fms-extensions', permits passing pointers to 1987 structures with anonymous fields to functions which expect 1988 pointers to elements of the type of the field, and permits 1989 referring to anonymous fields declared using a typedef. *Note 1990 Unnamed struct/union fields within structs/unions: Unnamed Fields, 1991 for details. This is only supported for C, not C++. 1992 1993 `-trigraphs' 1994 Support ISO C trigraphs. The `-ansi' option (and `-std' options 1995 for strict ISO C conformance) implies `-trigraphs'. 1996 1997 `-no-integrated-cpp' 1998 Performs a compilation in two passes: preprocessing and compiling. 1999 This option allows a user supplied "cc1", "cc1plus", or "cc1obj" 2000 via the `-B' option. The user supplied compilation step can then 2001 add in an additional preprocessing step after normal preprocessing 2002 but before compiling. The default is to use the integrated cpp 2003 (internal cpp) 2004 2005 The semantics of this option will change if "cc1", "cc1plus", and 2006 "cc1obj" are merged. 2007 2008 `-traditional' 2009 `-traditional-cpp' 2010 Formerly, these options caused GCC to attempt to emulate a 2011 pre-standard C compiler. They are now only supported with the 2012 `-E' switch. The preprocessor continues to support a pre-standard 2013 mode. See the GNU CPP manual for details. 2014 2015 `-fcond-mismatch' 2016 Allow conditional expressions with mismatched types in the second 2017 and third arguments. The value of such an expression is void. 2018 This option is not supported for C++. 2019 2020 `-flax-vector-conversions' 2021 Allow implicit conversions between vectors with differing numbers 2022 of elements and/or incompatible element types. This option should 2023 not be used for new code. 2024 2025 `-funsigned-char' 2026 Let the type `char' be unsigned, like `unsigned char'. 2027 2028 Each kind of machine has a default for what `char' should be. It 2029 is either like `unsigned char' by default or like `signed char' by 2030 default. 2031 2032 Ideally, a portable program should always use `signed char' or 2033 `unsigned char' when it depends on the signedness of an object. 2034 But many programs have been written to use plain `char' and expect 2035 it to be signed, or expect it to be unsigned, depending on the 2036 machines they were written for. This option, and its inverse, let 2037 you make such a program work with the opposite default. 2038 2039 The type `char' is always a distinct type from each of `signed 2040 char' or `unsigned char', even though its behavior is always just 2041 like one of those two. 2042 2043 `-fsigned-char' 2044 Let the type `char' be signed, like `signed char'. 2045 2046 Note that this is equivalent to `-fno-unsigned-char', which is the 2047 negative form of `-funsigned-char'. Likewise, the option 2048 `-fno-signed-char' is equivalent to `-funsigned-char'. 2049 2050 `-fsigned-bitfields' 2051 `-funsigned-bitfields' 2052 `-fno-signed-bitfields' 2053 `-fno-unsigned-bitfields' 2054 These options control whether a bit-field is signed or unsigned, 2055 when the declaration does not use either `signed' or `unsigned'. 2056 By default, such a bit-field is signed, because this is 2057 consistent: the basic integer types such as `int' are signed types. 2058 2059 2060 File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 2061 2062 3.5 Options Controlling C++ Dialect 2063 =================================== 2064 2065 This section describes the command-line options that are only meaningful 2066 for C++ programs; but you can also use most of the GNU compiler options 2067 regardless of what language your program is in. For example, you might 2068 compile a file `firstClass.C' like this: 2069 2070 g++ -g -frepo -O -c firstClass.C 2071 2072 In this example, only `-frepo' is an option meant only for C++ 2073 programs; you can use the other options with any language supported by 2074 GCC. 2075 2076 Here is a list of options that are _only_ for compiling C++ programs: 2077 2078 `-fabi-version=N' 2079 Use version N of the C++ ABI. Version 2 is the version of the C++ 2080 ABI that first appeared in G++ 3.4. Version 1 is the version of 2081 the C++ ABI that first appeared in G++ 3.2. Version 0 will always 2082 be the version that conforms most closely to the C++ ABI 2083 specification. Therefore, the ABI obtained using version 0 will 2084 change as ABI bugs are fixed. 2085 2086 The default is version 2. 2087 2088 Version 3 corrects an error in mangling a constant address as a 2089 template argument. 2090 2091 Version 4 implements a standard mangling for vector types. 2092 2093 Version 5 corrects the mangling of attribute const/volatile on 2094 function pointer types, decltype of a plain decl, and use of a 2095 function parameter in the declaration of another parameter. 2096 2097 See also `-Wabi'. 2098 2099 `-fno-access-control' 2100 Turn off all access checking. This switch is mainly useful for 2101 working around bugs in the access control code. 2102 2103 `-fcheck-new' 2104 Check that the pointer returned by `operator new' is non-null 2105 before attempting to modify the storage allocated. This check is 2106 normally unnecessary because the C++ standard specifies that 2107 `operator new' will only return `0' if it is declared `throw()', 2108 in which case the compiler will always check the return value even 2109 without this option. In all other cases, when `operator new' has 2110 a non-empty exception specification, memory exhaustion is 2111 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 2112 2113 `-fconserve-space' 2114 Put uninitialized or runtime-initialized global variables into the 2115 common segment, as C does. This saves space in the executable at 2116 the cost of not diagnosing duplicate definitions. If you compile 2117 with this flag and your program mysteriously crashes after 2118 `main()' has completed, you may have an object that is being 2119 destroyed twice because two definitions were merged. 2120 2121 This option is no longer useful on most targets, now that support 2122 has been added for putting variables into BSS without making them 2123 common. 2124 2125 `-fconstexpr-depth=N' 2126 Set the maximum nested evaluation depth for C++0x constexpr 2127 functions to N. A limit is needed to detect endless recursion 2128 during constant expression evaluation. The minimum specified by 2129 the standard is 512. 2130 2131 `-fno-deduce-init-list' 2132 Disable deduction of a template type parameter as 2133 std::initializer_list from a brace-enclosed initializer list, i.e. 2134 2135 template <class T> auto forward(T t) -> decltype (realfn (t)) 2136 { 2137 return realfn (t); 2138 } 2139 2140 void f() 2141 { 2142 forward({1,2}); // call forward<std::initializer_list<int>> 2143 } 2144 2145 This option is present because this deduction is an extension to 2146 the current specification in the C++0x working draft, and there was 2147 some concern about potential overload resolution problems. 2148 2149 `-ffriend-injection' 2150 Inject friend functions into the enclosing namespace, so that they 2151 are visible outside the scope of the class in which they are 2152 declared. Friend functions were documented to work this way in 2153 the old Annotated C++ Reference Manual, and versions of G++ before 2154 4.1 always worked that way. However, in ISO C++ a friend function 2155 which is not declared in an enclosing scope can only be found 2156 using argument dependent lookup. This option causes friends to be 2157 injected as they were in earlier releases. 2158 2159 This option is for compatibility, and may be removed in a future 2160 release of G++. 2161 2162 `-fno-elide-constructors' 2163 The C++ standard allows an implementation to omit creating a 2164 temporary which is only used to initialize another object of the 2165 same type. Specifying this option disables that optimization, and 2166 forces G++ to call the copy constructor in all cases. 2167 2168 `-fno-enforce-eh-specs' 2169 Don't generate code to check for violation of exception 2170 specifications at runtime. This option violates the C++ standard, 2171 but may be useful for reducing code size in production builds, 2172 much like defining `NDEBUG'. This does not give user code 2173 permission to throw exceptions in violation of the exception 2174 specifications; the compiler will still optimize based on the 2175 specifications, so throwing an unexpected exception will result in 2176 undefined behavior. 2177 2178 `-ffor-scope' 2179 `-fno-for-scope' 2180 If `-ffor-scope' is specified, the scope of variables declared in 2181 a for-init-statement is limited to the `for' loop itself, as 2182 specified by the C++ standard. If `-fno-for-scope' is specified, 2183 the scope of variables declared in a for-init-statement extends to 2184 the end of the enclosing scope, as was the case in old versions of 2185 G++, and other (traditional) implementations of C++. 2186 2187 The default if neither flag is given to follow the standard, but 2188 to allow and give a warning for old-style code that would 2189 otherwise be invalid, or have different behavior. 2190 2191 `-fno-gnu-keywords' 2192 Do not recognize `typeof' as a keyword, so that code can use this 2193 word as an identifier. You can use the keyword `__typeof__' 2194 instead. `-ansi' implies `-fno-gnu-keywords'. 2195 2196 `-fno-implicit-templates' 2197 Never emit code for non-inline templates which are instantiated 2198 implicitly (i.e. by use); only emit code for explicit 2199 instantiations. *Note Template Instantiation::, for more 2200 information. 2201 2202 `-fno-implicit-inline-templates' 2203 Don't emit code for implicit instantiations of inline templates, 2204 either. The default is to handle inlines differently so that 2205 compiles with and without optimization will need the same set of 2206 explicit instantiations. 2207 2208 `-fno-implement-inlines' 2209 To save space, do not emit out-of-line copies of inline functions 2210 controlled by `#pragma implementation'. This will cause linker 2211 errors if these functions are not inlined everywhere they are 2212 called. 2213 2214 `-fms-extensions' 2215 Disable pedantic warnings about constructs used in MFC, such as 2216 implicit int and getting a pointer to member function via 2217 non-standard syntax. 2218 2219 `-fno-nonansi-builtins' 2220 Disable built-in declarations of functions that are not mandated by 2221 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 2222 `bzero', `conjf', and other related functions. 2223 2224 `-fnothrow-opt' 2225 Treat a `throw()' exception specification as though it were a 2226 `noexcept' specification to reduce or eliminate the text size 2227 overhead relative to a function with no exception specification. 2228 If the function has local variables of types with non-trivial 2229 destructors, the exception specification will actually make the 2230 function smaller because the EH cleanups for those variables can be 2231 optimized away. The semantic effect is that an exception thrown 2232 out of a function with such an exception specification will result 2233 in a call to `terminate' rather than `unexpected'. 2234 2235 `-fno-operator-names' 2236 Do not treat the operator name keywords `and', `bitand', `bitor', 2237 `compl', `not', `or' and `xor' as synonyms as keywords. 2238 2239 `-fno-optional-diags' 2240 Disable diagnostics that the standard says a compiler does not 2241 need to issue. Currently, the only such diagnostic issued by G++ 2242 is the one for a name having multiple meanings within a class. 2243 2244 `-fpermissive' 2245 Downgrade some diagnostics about nonconformant code from errors to 2246 warnings. Thus, using `-fpermissive' will allow some 2247 nonconforming code to compile. 2248 2249 `-fno-pretty-templates' 2250 When an error message refers to a specialization of a function 2251 template, the compiler will normally print the signature of the 2252 template followed by the template arguments and any typedefs or 2253 typenames in the signature (e.g. `void f(T) [with T = int]' rather 2254 than `void f(int)') so that it's clear which template is involved. 2255 When an error message refers to a specialization of a class 2256 template, the compiler will omit any template arguments which match 2257 the default template arguments for that template. If either of 2258 these behaviors make it harder to understand the error message 2259 rather than easier, using `-fno-pretty-templates' will disable 2260 them. 2261 2262 `-frepo' 2263 Enable automatic template instantiation at link time. This option 2264 also implies `-fno-implicit-templates'. *Note Template 2265 Instantiation::, for more information. 2266 2267 `-fno-rtti' 2268 Disable generation of information about every class with virtual 2269 functions for use by the C++ runtime type identification features 2270 (`dynamic_cast' and `typeid'). If you don't use those parts of 2271 the language, you can save some space by using this flag. Note 2272 that exception handling uses the same information, but it will 2273 generate it as needed. The `dynamic_cast' operator can still be 2274 used for casts that do not require runtime type information, i.e. 2275 casts to `void *' or to unambiguous base classes. 2276 2277 `-fstats' 2278 Emit statistics about front-end processing at the end of the 2279 compilation. This information is generally only useful to the G++ 2280 development team. 2281 2282 `-fstrict-enums' 2283 Allow the compiler to optimize using the assumption that a value of 2284 enumeration type can only be one of the values of the enumeration 2285 (as defined in the C++ standard; basically, a value which can be 2286 represented in the minimum number of bits needed to represent all 2287 the enumerators). This assumption may not be valid if the program 2288 uses a cast to convert an arbitrary integer value to the 2289 enumeration type. 2290 2291 `-ftemplate-depth=N' 2292 Set the maximum instantiation depth for template classes to N. A 2293 limit on the template instantiation depth is needed to detect 2294 endless recursions during template class instantiation. ANSI/ISO 2295 C++ conforming programs must not rely on a maximum depth greater 2296 than 17 (changed to 1024 in C++0x). 2297 2298 `-fno-threadsafe-statics' 2299 Do not emit the extra code to use the routines specified in the C++ 2300 ABI for thread-safe initialization of local statics. You can use 2301 this option to reduce code size slightly in code that doesn't need 2302 to be thread-safe. 2303 2304 `-fuse-cxa-atexit' 2305 Register destructors for objects with static storage duration with 2306 the `__cxa_atexit' function rather than the `atexit' function. 2307 This option is required for fully standards-compliant handling of 2308 static destructors, but will only work if your C library supports 2309 `__cxa_atexit'. 2310 2311 `-fno-use-cxa-get-exception-ptr' 2312 Don't use the `__cxa_get_exception_ptr' runtime routine. This 2313 will cause `std::uncaught_exception' to be incorrect, but is 2314 necessary if the runtime routine is not available. 2315 2316 `-fvisibility-inlines-hidden' 2317 This switch declares that the user does not attempt to compare 2318 pointers to inline methods where the addresses of the two functions 2319 were taken in different shared objects. 2320 2321 The effect of this is that GCC may, effectively, mark inline 2322 methods with `__attribute__ ((visibility ("hidden")))' so that 2323 they do not appear in the export table of a DSO and do not require 2324 a PLT indirection when used within the DSO. Enabling this option 2325 can have a dramatic effect on load and link times of a DSO as it 2326 massively reduces the size of the dynamic export table when the 2327 library makes heavy use of templates. 2328 2329 The behavior of this switch is not quite the same as marking the 2330 methods as hidden directly, because it does not affect static 2331 variables local to the function or cause the compiler to deduce 2332 that the function is defined in only one shared object. 2333 2334 You may mark a method as having a visibility explicitly to negate 2335 the effect of the switch for that method. For example, if you do 2336 want to compare pointers to a particular inline method, you might 2337 mark it as having default visibility. Marking the enclosing class 2338 with explicit visibility will have no effect. 2339 2340 Explicitly instantiated inline methods are unaffected by this 2341 option as their linkage might otherwise cross a shared library 2342 boundary. *Note Template Instantiation::. 2343 2344 `-fvisibility-ms-compat' 2345 This flag attempts to use visibility settings to make GCC's C++ 2346 linkage model compatible with that of Microsoft Visual Studio. 2347 2348 The flag makes these changes to GCC's linkage model: 2349 2350 1. It sets the default visibility to `hidden', like 2351 `-fvisibility=hidden'. 2352 2353 2. Types, but not their members, are not hidden by default. 2354 2355 3. The One Definition Rule is relaxed for types without explicit 2356 visibility specifications which are defined in more than one 2357 different shared object: those declarations are permitted if 2358 they would have been permitted when this option was not used. 2359 2360 In new code it is better to use `-fvisibility=hidden' and export 2361 those classes which are intended to be externally visible. 2362 Unfortunately it is possible for code to rely, perhaps 2363 accidentally, on the Visual Studio behavior. 2364 2365 Among the consequences of these changes are that static data 2366 members of the same type with the same name but defined in 2367 different shared objects will be different, so changing one will 2368 not change the other; and that pointers to function members 2369 defined in different shared objects may not compare equal. When 2370 this flag is given, it is a violation of the ODR to define types 2371 with the same name differently. 2372 2373 `-fno-weak' 2374 Do not use weak symbol support, even if it is provided by the 2375 linker. By default, G++ will use weak symbols if they are 2376 available. This option exists only for testing, and should not be 2377 used by end-users; it will result in inferior code and has no 2378 benefits. This option may be removed in a future release of G++. 2379 2380 `-nostdinc++' 2381 Do not search for header files in the standard directories 2382 specific to C++, but do still search the other standard 2383 directories. (This option is used when building the C++ library.) 2384 2385 In addition, these optimization, warning, and code generation options 2386 have meanings only for C++ programs: 2387 2388 `-fno-default-inline' 2389 Do not assume `inline' for functions defined inside a class scope. 2390 *Note Options That Control Optimization: Optimize Options. Note 2391 that these functions will have linkage like inline functions; they 2392 just won't be inlined by default. 2393 2394 `-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2395 Warn when G++ generates code that is probably not compatible with 2396 the vendor-neutral C++ ABI. Although an effort has been made to 2397 warn about all such cases, there are probably some cases that are 2398 not warned about, even though G++ is generating incompatible code. 2399 There may also be cases where warnings are emitted even though the 2400 code that is generated will be compatible. 2401 2402 You should rewrite your code to avoid these warnings if you are 2403 concerned about the fact that code generated by G++ may not be 2404 binary compatible with code generated by other compilers. 2405 2406 The known incompatibilities in `-fabi-version=2' (the default) 2407 include: 2408 2409 * A template with a non-type template parameter of reference 2410 type is mangled incorrectly: 2411 extern int N; 2412 template <int &> struct S {}; 2413 void n (S<N>) {2} 2414 2415 This is fixed in `-fabi-version=3'. 2416 2417 * SIMD vector types declared using `__attribute 2418 ((vector_size))' are mangled in a non-standard way that does 2419 not allow for overloading of functions taking vectors of 2420 different sizes. 2421 2422 The mangling is changed in `-fabi-version=4'. 2423 2424 The known incompatibilities in `-fabi-version=1' include: 2425 2426 * Incorrect handling of tail-padding for bit-fields. G++ may 2427 attempt to pack data into the same byte as a base class. For 2428 example: 2429 2430 struct A { virtual void f(); int f1 : 1; }; 2431 struct B : public A { int f2 : 1; }; 2432 2433 In this case, G++ will place `B::f2' into the same byte 2434 as`A::f1'; other compilers will not. You can avoid this 2435 problem by explicitly padding `A' so that its size is a 2436 multiple of the byte size on your platform; that will cause 2437 G++ and other compilers to layout `B' identically. 2438 2439 * Incorrect handling of tail-padding for virtual bases. G++ 2440 does not use tail padding when laying out virtual bases. For 2441 example: 2442 2443 struct A { virtual void f(); char c1; }; 2444 struct B { B(); char c2; }; 2445 struct C : public A, public virtual B {}; 2446 2447 In this case, G++ will not place `B' into the tail-padding for 2448 `A'; other compilers will. You can avoid this problem by 2449 explicitly padding `A' so that its size is a multiple of its 2450 alignment (ignoring virtual base classes); that will cause 2451 G++ and other compilers to layout `C' identically. 2452 2453 * Incorrect handling of bit-fields with declared widths greater 2454 than that of their underlying types, when the bit-fields 2455 appear in a union. For example: 2456 2457 union U { int i : 4096; }; 2458 2459 Assuming that an `int' does not have 4096 bits, G++ will make 2460 the union too small by the number of bits in an `int'. 2461 2462 * Empty classes can be placed at incorrect offsets. For 2463 example: 2464 2465 struct A {}; 2466 2467 struct B { 2468 A a; 2469 virtual void f (); 2470 }; 2471 2472 struct C : public B, public A {}; 2473 2474 G++ will place the `A' base class of `C' at a nonzero offset; 2475 it should be placed at offset zero. G++ mistakenly believes 2476 that the `A' data member of `B' is already at offset zero. 2477 2478 * Names of template functions whose types involve `typename' or 2479 template template parameters can be mangled incorrectly. 2480 2481 template <typename Q> 2482 void f(typename Q::X) {} 2483 2484 template <template <typename> class Q> 2485 void f(typename Q<int>::X) {} 2486 2487 Instantiations of these templates may be mangled incorrectly. 2488 2489 2490 It also warns psABI related changes. The known psABI changes at 2491 this point include: 2492 2493 * For SYSV/x86-64, when passing union with long double, it is 2494 changed to pass in memory as specified in psABI. For example: 2495 2496 union U { 2497 long double ld; 2498 int i; 2499 }; 2500 2501 `union U' will always be passed in memory. 2502 2503 2504 `-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2505 Warn when a class seems unusable because all the constructors or 2506 destructors in that class are private, and it has neither friends 2507 nor public static member functions. 2508 2509 `-Wnoexcept (C++ and Objective-C++ only)' 2510 Warn when a noexcept-expression evaluates to false because of a 2511 call to a function that does not have a non-throwing exception 2512 specification (i.e. `throw()' or `noexcept') but is known by the 2513 compiler to never throw an exception. 2514 2515 `-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2516 Warn when a class has virtual functions and accessible non-virtual 2517 destructor, in which case it would be possible but unsafe to delete 2518 an instance of a derived class through a pointer to the base class. 2519 This warning is also enabled if -Weffc++ is specified. 2520 2521 `-Wreorder (C++ and Objective-C++ only)' 2522 Warn when the order of member initializers given in the code does 2523 not match the order in which they must be executed. For instance: 2524 2525 struct A { 2526 int i; 2527 int j; 2528 A(): j (0), i (1) { } 2529 }; 2530 2531 The compiler will rearrange the member initializers for `i' and 2532 `j' to match the declaration order of the members, emitting a 2533 warning to that effect. This warning is enabled by `-Wall'. 2534 2535 The following `-W...' options are not affected by `-Wall'. 2536 2537 `-Weffc++ (C++ and Objective-C++ only)' 2538 Warn about violations of the following style guidelines from Scott 2539 Meyers' `Effective C++' book: 2540 2541 * Item 11: Define a copy constructor and an assignment 2542 operator for classes with dynamically allocated memory. 2543 2544 * Item 12: Prefer initialization to assignment in constructors. 2545 2546 * Item 14: Make destructors virtual in base classes. 2547 2548 * Item 15: Have `operator=' return a reference to `*this'. 2549 2550 * Item 23: Don't try to return a reference when you must 2551 return an object. 2552 2553 2554 Also warn about violations of the following style guidelines from 2555 Scott Meyers' `More Effective C++' book: 2556 2557 * Item 6: Distinguish between prefix and postfix forms of 2558 increment and decrement operators. 2559 2560 * Item 7: Never overload `&&', `||', or `,'. 2561 2562 2563 When selecting this option, be aware that the standard library 2564 headers do not obey all of these guidelines; use `grep -v' to 2565 filter out those warnings. 2566 2567 `-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2568 Warn also about the use of an uncasted `NULL' as sentinel. When 2569 compiling only with GCC this is a valid sentinel, as `NULL' is 2570 defined to `__null'. Although it is a null pointer constant not a 2571 null pointer, it is guaranteed to be of the same size as a 2572 pointer. But this use is not portable across different compilers. 2573 2574 `-Wno-non-template-friend (C++ and Objective-C++ only)' 2575 Disable warnings when non-templatized friend functions are declared 2576 within a template. Since the advent of explicit template 2577 specification support in G++, if the name of the friend is an 2578 unqualified-id (i.e., `friend foo(int)'), the C++ language 2579 specification demands that the friend declare or define an 2580 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2581 implemented explicit specification, unqualified-ids could be 2582 interpreted as a particular specialization of a templatized 2583 function. Because this non-conforming behavior is no longer the 2584 default behavior for G++, `-Wnon-template-friend' allows the 2585 compiler to check existing code for potential trouble spots and is 2586 on by default. This new compiler behavior can be turned off with 2587 `-Wno-non-template-friend' which keeps the conformant compiler code 2588 but disables the helpful warning. 2589 2590 `-Wold-style-cast (C++ and Objective-C++ only)' 2591 Warn if an old-style (C-style) cast to a non-void type is used 2592 within a C++ program. The new-style casts (`dynamic_cast', 2593 `static_cast', `reinterpret_cast', and `const_cast') are less 2594 vulnerable to unintended effects and much easier to search for. 2595 2596 `-Woverloaded-virtual (C++ and Objective-C++ only)' 2597 Warn when a function declaration hides virtual functions from a 2598 base class. For example, in: 2599 2600 struct A { 2601 virtual void f(); 2602 }; 2603 2604 struct B: public A { 2605 void f(int); 2606 }; 2607 2608 the `A' class version of `f' is hidden in `B', and code like: 2609 2610 B* b; 2611 b->f(); 2612 2613 will fail to compile. 2614 2615 `-Wno-pmf-conversions (C++ and Objective-C++ only)' 2616 Disable the diagnostic for converting a bound pointer to member 2617 function to a plain pointer. 2618 2619 `-Wsign-promo (C++ and Objective-C++ only)' 2620 Warn when overload resolution chooses a promotion from unsigned or 2621 enumerated type to a signed type, over a conversion to an unsigned 2622 type of the same size. Previous versions of G++ would try to 2623 preserve unsignedness, but the standard mandates the current 2624 behavior. 2625 2626 struct A { 2627 operator int (); 2628 A& operator = (int); 2629 }; 2630 2631 main () 2632 { 2633 A a,b; 2634 a = b; 2635 } 2636 2637 In this example, G++ will synthesize a default `A& operator = 2638 (const A&);', while cfront will use the user-defined `operator ='. 2639 2640 2641 File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2642 2643 3.6 Options Controlling Objective-C and Objective-C++ Dialects 2644 ============================================================== 2645 2646 (NOTE: This manual does not describe the Objective-C and Objective-C++ 2647 languages themselves. *Note Language Standards Supported by GCC: 2648 Standards, for references.) 2649 2650 This section describes the command-line options that are only 2651 meaningful for Objective-C and Objective-C++ programs, but you can also 2652 use most of the language-independent GNU compiler options. For 2653 example, you might compile a file `some_class.m' like this: 2654 2655 gcc -g -fgnu-runtime -O -c some_class.m 2656 2657 In this example, `-fgnu-runtime' is an option meant only for 2658 Objective-C and Objective-C++ programs; you can use the other options 2659 with any language supported by GCC. 2660 2661 Note that since Objective-C is an extension of the C language, 2662 Objective-C compilations may also use options specific to the C 2663 front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2664 compilations may use C++-specific options (e.g., `-Wabi'). 2665 2666 Here is a list of options that are _only_ for compiling Objective-C 2667 and Objective-C++ programs: 2668 2669 `-fconstant-string-class=CLASS-NAME' 2670 Use CLASS-NAME as the name of the class to instantiate for each 2671 literal string specified with the syntax `@"..."'. The default 2672 class name is `NXConstantString' if the GNU runtime is being used, 2673 and `NSConstantString' if the NeXT runtime is being used (see 2674 below). The `-fconstant-cfstrings' option, if also present, will 2675 override the `-fconstant-string-class' setting and cause `@"..."' 2676 literals to be laid out as constant CoreFoundation strings. 2677 2678 `-fgnu-runtime' 2679 Generate object code compatible with the standard GNU Objective-C 2680 runtime. This is the default for most types of systems. 2681 2682 `-fnext-runtime' 2683 Generate output compatible with the NeXT runtime. This is the 2684 default for NeXT-based systems, including Darwin and Mac OS X. 2685 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 2686 option is used. 2687 2688 `-fno-nil-receivers' 2689 Assume that all Objective-C message dispatches (`[receiver 2690 message:arg]') in this translation unit ensure that the receiver is 2691 not `nil'. This allows for more efficient entry points in the 2692 runtime to be used. This option is only available in conjunction 2693 with the NeXT runtime and ABI version 0 or 1. 2694 2695 `-fobjc-abi-version=N' 2696 Use version N of the Objective-C ABI for the selected runtime. 2697 This option is currently supported only for the NeXT runtime. In 2698 that case, Version 0 is the traditional (32-bit) ABI without 2699 support for properties and other Objective-C 2.0 additions. 2700 Version 1 is the traditional (32-bit) ABI with support for 2701 properties and other Objective-C 2.0 additions. Version 2 is the 2702 modern (64-bit) ABI. If nothing is specified, the default is 2703 Version 0 on 32-bit target machines, and Version 2 on 64-bit 2704 target machines. 2705 2706 `-fobjc-call-cxx-cdtors' 2707 For each Objective-C class, check if any of its instance variables 2708 is a C++ object with a non-trivial default constructor. If so, 2709 synthesize a special `- (id) .cxx_construct' instance method that 2710 will run non-trivial default constructors on any such instance 2711 variables, in order, and then return `self'. Similarly, check if 2712 any instance variable is a C++ object with a non-trivial 2713 destructor, and if so, synthesize a special `- (void) 2714 .cxx_destruct' method that will run all such default destructors, 2715 in reverse order. 2716 2717 The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods 2718 thusly generated will only operate on instance variables declared 2719 in the current Objective-C class, and not those inherited from 2720 superclasses. It is the responsibility of the Objective-C runtime 2721 to invoke all such methods in an object's inheritance hierarchy. 2722 The `- (id) .cxx_construct' methods will be invoked by the runtime 2723 immediately after a new object instance is allocated; the `- 2724 (void) .cxx_destruct' methods will be invoked immediately before 2725 the runtime deallocates an object instance. 2726 2727 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2728 later has support for invoking the `- (id) .cxx_construct' and `- 2729 (void) .cxx_destruct' methods. 2730 2731 `-fobjc-direct-dispatch' 2732 Allow fast jumps to the message dispatcher. On Darwin this is 2733 accomplished via the comm page. 2734 2735 `-fobjc-exceptions' 2736 Enable syntactic support for structured exception handling in 2737 Objective-C, similar to what is offered by C++ and Java. This 2738 option is required to use the Objective-C keywords `@try', 2739 `@throw', `@catch', `@finally' and `@synchronized'. This option 2740 is available with both the GNU runtime and the NeXT runtime (but 2741 not available in conjunction with the NeXT runtime on Mac OS X 2742 10.2 and earlier). 2743 2744 `-fobjc-gc' 2745 Enable garbage collection (GC) in Objective-C and Objective-C++ 2746 programs. This option is only available with the NeXT runtime; the 2747 GNU runtime has a different garbage collection implementation that 2748 does not require special compiler flags. 2749 2750 `-fobjc-nilcheck' 2751 For the NeXT runtime with version 2 of the ABI, check for a nil 2752 receiver in method invocations before doing the actual method call. 2753 This is the default and can be disabled using 2754 `-fno-objc-nilcheck'. Class methods and super calls are never 2755 checked for nil in this way no matter what this flag is set to. 2756 Currently this flag does nothing when the GNU runtime, or an older 2757 version of the NeXT runtime ABI, is used. 2758 2759 `-fobjc-std=objc1' 2760 Conform to the language syntax of Objective-C 1.0, the language 2761 recognized by GCC 4.0. This only affects the Objective-C 2762 additions to the C/C++ language; it does not affect conformance to 2763 C/C++ standards, which is controlled by the separate C/C++ dialect 2764 option flags. When this option is used with the Objective-C or 2765 Objective-C++ compiler, any Objective-C syntax that is not 2766 recognized by GCC 4.0 is rejected. This is useful if you need to 2767 make sure that your Objective-C code can be compiled with older 2768 versions of GCC. 2769 2770 `-freplace-objc-classes' 2771 Emit a special marker instructing `ld(1)' not to statically link in 2772 the resulting object file, and allow `dyld(1)' to load it in at 2773 run time instead. This is used in conjunction with the 2774 Fix-and-Continue debugging mode, where the object file in question 2775 may be recompiled and dynamically reloaded in the course of 2776 program execution, without the need to restart the program itself. 2777 Currently, Fix-and-Continue functionality is only available in 2778 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2779 2780 `-fzero-link' 2781 When compiling for the NeXT runtime, the compiler ordinarily 2782 replaces calls to `objc_getClass("...")' (when the name of the 2783 class is known at compile time) with static class references that 2784 get initialized at load time, which improves run-time performance. 2785 Specifying the `-fzero-link' flag suppresses this behavior and 2786 causes calls to `objc_getClass("...")' to be retained. This is 2787 useful in Zero-Link debugging mode, since it allows for individual 2788 class implementations to be modified during program execution. 2789 The GNU runtime currently always retains calls to 2790 `objc_get_class("...")' regardless of command line options. 2791 2792 `-gen-decls' 2793 Dump interface declarations for all classes seen in the source 2794 file to a file named `SOURCENAME.decl'. 2795 2796 `-Wassign-intercept (Objective-C and Objective-C++ only)' 2797 Warn whenever an Objective-C assignment is being intercepted by the 2798 garbage collector. 2799 2800 `-Wno-protocol (Objective-C and Objective-C++ only)' 2801 If a class is declared to implement a protocol, a warning is 2802 issued for every method in the protocol that is not implemented by 2803 the class. The default behavior is to issue a warning for every 2804 method not explicitly implemented in the class, even if a method 2805 implementation is inherited from the superclass. If you use the 2806 `-Wno-protocol' option, then methods inherited from the superclass 2807 are considered to be implemented, and no warning is issued for 2808 them. 2809 2810 `-Wselector (Objective-C and Objective-C++ only)' 2811 Warn if multiple methods of different types for the same selector 2812 are found during compilation. The check is performed on the list 2813 of methods in the final stage of compilation. Additionally, a 2814 check is performed for each selector appearing in a 2815 `@selector(...)' expression, and a corresponding method for that 2816 selector has been found during compilation. Because these checks 2817 scan the method table only at the end of compilation, these 2818 warnings are not produced if the final stage of compilation is not 2819 reached, for example because an error is found during compilation, 2820 or because the `-fsyntax-only' option is being used. 2821 2822 `-Wstrict-selector-match (Objective-C and Objective-C++ only)' 2823 Warn if multiple methods with differing argument and/or return 2824 types are found for a given selector when attempting to send a 2825 message using this selector to a receiver of type `id' or `Class'. 2826 When this flag is off (which is the default behavior), the 2827 compiler will omit such warnings if any differences found are 2828 confined to types which share the same size and alignment. 2829 2830 `-Wundeclared-selector (Objective-C and Objective-C++ only)' 2831 Warn if a `@selector(...)' expression referring to an undeclared 2832 selector is found. A selector is considered undeclared if no 2833 method with that name has been declared before the 2834 `@selector(...)' expression, either explicitly in an `@interface' 2835 or `@protocol' declaration, or implicitly in an `@implementation' 2836 section. This option always performs its checks as soon as a 2837 `@selector(...)' expression is found, while `-Wselector' only 2838 performs its checks in the final stage of compilation. This also 2839 enforces the coding style convention that methods and selectors 2840 must be declared before being used. 2841 2842 `-print-objc-runtime-info' 2843 Generate C header describing the largest structure that is passed 2844 by value, if any. 2845 2846 2847 2848 File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2849 2850 3.7 Options to Control Diagnostic Messages Formatting 2851 ===================================================== 2852 2853 Traditionally, diagnostic messages have been formatted irrespective of 2854 the output device's aspect (e.g. its width, ...). The options described 2855 below can be used to control the diagnostic messages formatting 2856 algorithm, e.g. how many characters per line, how often source location 2857 information should be reported. Right now, only the C++ front end can 2858 honor these options. However it is expected, in the near future, that 2859 the remaining front ends would be able to digest them correctly. 2860 2861 `-fmessage-length=N' 2862 Try to format error messages so that they fit on lines of about N 2863 characters. The default is 72 characters for `g++' and 0 for the 2864 rest of the front ends supported by GCC. If N is zero, then no 2865 line-wrapping will be done; each error message will appear on a 2866 single line. 2867 2868 `-fdiagnostics-show-location=once' 2869 Only meaningful in line-wrapping mode. Instructs the diagnostic 2870 messages reporter to emit _once_ source location information; that 2871 is, in case the message is too long to fit on a single physical 2872 line and has to be wrapped, the source location won't be emitted 2873 (as prefix) again, over and over, in subsequent continuation 2874 lines. This is the default behavior. 2875 2876 `-fdiagnostics-show-location=every-line' 2877 Only meaningful in line-wrapping mode. Instructs the diagnostic 2878 messages reporter to emit the same source location information (as 2879 prefix) for physical lines that result from the process of breaking 2880 a message which is too long to fit on a single line. 2881 2882 `-fno-diagnostics-show-option' 2883 By default, each diagnostic emitted includes text which indicates 2884 the command line option that directly controls the diagnostic (if 2885 such an option is known to the diagnostic machinery). Specifying 2886 the `-fno-diagnostics-show-option' flag suppresses that behavior. 2887 2888 `-Wcoverage-mismatch' 2889 Warn if feedback profiles do not match when using the 2890 `-fprofile-use' option. If a source file was changed between 2891 `-fprofile-gen' and `-fprofile-use', the files with the profile 2892 feedback can fail to match the source file and GCC can not use the 2893 profile feedback information. By default, this warning is enabled 2894 and is treated as an error. `-Wno-coverage-mismatch' can be used 2895 to disable the warning or `-Wno-error=coverage-mismatch' can be 2896 used to disable the error. Disable the error for this warning can 2897 result in poorly optimized code, so disabling the error is useful 2898 only in the case of very minor changes such as bug fixes to an 2899 existing code-base. Completely disabling the warning is not 2900 recommended. 2901 2902 2903 2904 File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 2905 2906 3.8 Options to Request or Suppress Warnings 2907 =========================================== 2908 2909 Warnings are diagnostic messages that report constructions which are 2910 not inherently erroneous but which are risky or suggest there may have 2911 been an error. 2912 2913 The following language-independent options do not enable specific 2914 warnings but control the kinds of diagnostics produced by GCC. 2915 2916 `-fsyntax-only' 2917 Check the code for syntax errors, but don't do anything beyond 2918 that. 2919 2920 `-fmax-errors=N' 2921 Limits the maximum number of error messages to N, at which point 2922 GCC bails out rather than attempting to continue processing the 2923 source code. If N is 0 (the default), there is no limit on the 2924 number of error messages produced. If `-Wfatal-errors' is also 2925 specified, then `-Wfatal-errors' takes precedence over this option. 2926 2927 `-w' 2928 Inhibit all warning messages. 2929 2930 `-Werror' 2931 Make all warnings into errors. 2932 2933 `-Werror=' 2934 Make the specified warning into an error. The specifier for a 2935 warning is appended, for example `-Werror=switch' turns the 2936 warnings controlled by `-Wswitch' into errors. This switch takes a 2937 negative form, to be used to negate `-Werror' for specific 2938 warnings, for example `-Wno-error=switch' makes `-Wswitch' 2939 warnings not be errors, even when `-Werror' is in effect. 2940 2941 The warning message for each controllable warning includes the 2942 option which controls the warning. That option can then be used 2943 with `-Werror=' and `-Wno-error=' as described above. (Printing 2944 of the option in the warning message can be disabled using the 2945 `-fno-diagnostics-show-option' flag.) 2946 2947 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 2948 However, `-Wno-error='FOO does not imply anything. 2949 2950 `-Wfatal-errors' 2951 This option causes the compiler to abort compilation on the first 2952 error occurred rather than trying to keep going and printing 2953 further error messages. 2954 2955 2956 You can request many specific warnings with options beginning `-W', 2957 for example `-Wimplicit' to request warnings on implicit declarations. 2958 Each of these specific warning options also has a negative form 2959 beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. 2960 This manual lists only one of the two forms, whichever is not the 2961 default. For further, language-specific options also refer to *note 2962 C++ Dialect Options:: and *note Objective-C and Objective-C++ Dialect 2963 Options::. 2964 2965 When an unrecognized warning option is requested (e.g., 2966 `-Wunknown-warning'), GCC will emit a diagnostic stating that the 2967 option is not recognized. However, if the `-Wno-' form is used, the 2968 behavior is slightly different: No diagnostic will be produced for 2969 `-Wno-unknown-warning' unless other diagnostics are being produced. 2970 This allows the use of new `-Wno-' options with old compilers, but if 2971 something goes wrong, the compiler will warn that an unrecognized 2972 option was used. 2973 2974 `-pedantic' 2975 Issue all the warnings demanded by strict ISO C and ISO C++; 2976 reject all programs that use forbidden extensions, and some other 2977 programs that do not follow ISO C and ISO C++. For ISO C, follows 2978 the version of the ISO C standard specified by any `-std' option 2979 used. 2980 2981 Valid ISO C and ISO C++ programs should compile properly with or 2982 without this option (though a rare few will require `-ansi' or a 2983 `-std' option specifying the required version of ISO C). However, 2984 without this option, certain GNU extensions and traditional C and 2985 C++ features are supported as well. With this option, they are 2986 rejected. 2987 2988 `-pedantic' does not cause warning messages for use of the 2989 alternate keywords whose names begin and end with `__'. Pedantic 2990 warnings are also disabled in the expression that follows 2991 `__extension__'. However, only system header files should use 2992 these escape routes; application programs should avoid them. 2993 *Note Alternate Keywords::. 2994 2995 Some users try to use `-pedantic' to check programs for strict ISO 2996 C conformance. They soon find that it does not do quite what they 2997 want: it finds some non-ISO practices, but not all--only those for 2998 which ISO C _requires_ a diagnostic, and some others for which 2999 diagnostics have been added. 3000 3001 A feature to report any failure to conform to ISO C might be 3002 useful in some instances, but would require considerable 3003 additional work and would be quite different from `-pedantic'. We 3004 don't have plans to support such a feature in the near future. 3005 3006 Where the standard specified with `-std' represents a GNU extended 3007 dialect of C, such as `gnu90' or `gnu99', there is a corresponding 3008 "base standard", the version of ISO C on which the GNU extended 3009 dialect is based. Warnings from `-pedantic' are given where they 3010 are required by the base standard. (It would not make sense for 3011 such warnings to be given only for features not in the specified 3012 GNU C dialect, since by definition the GNU dialects of C include 3013 all features the compiler supports with the given option, and 3014 there would be nothing to warn about.) 3015 3016 `-pedantic-errors' 3017 Like `-pedantic', except that errors are produced rather than 3018 warnings. 3019 3020 `-Wall' 3021 This enables all the warnings about constructions that some users 3022 consider questionable, and that are easy to avoid (or modify to 3023 prevent the warning), even in conjunction with macros. This also 3024 enables some language-specific warnings described in *note C++ 3025 Dialect Options:: and *note Objective-C and Objective-C++ Dialect 3026 Options::. 3027 3028 `-Wall' turns on the following warning flags: 3029 3030 -Waddress 3031 -Warray-bounds (only with `-O2') 3032 -Wc++0x-compat 3033 -Wchar-subscripts 3034 -Wenum-compare (in C/Objc; this is on by default in C++) 3035 -Wimplicit-int (C and Objective-C only) 3036 -Wimplicit-function-declaration (C and Objective-C only) 3037 -Wcomment 3038 -Wformat 3039 -Wmain (only for C/ObjC and unless `-ffreestanding') 3040 -Wmaybe-uninitialized 3041 -Wmissing-braces 3042 -Wnonnull 3043 -Wparentheses 3044 -Wpointer-sign 3045 -Wreorder 3046 -Wreturn-type 3047 -Wripa-opt-mismatch 3048 -Wsequence-point 3049 -Wsign-compare (only in C++) 3050 -Wstrict-aliasing 3051 -Wstrict-overflow=1 3052 -Wswitch 3053 -Wtrigraphs 3054 -Wuninitialized 3055 -Wunknown-pragmas 3056 -Wunused-function 3057 -Wunused-label 3058 -Wunused-value 3059 -Wunused-variable 3060 -Wvolatile-register-var 3061 3062 Note that some warning flags are not implied by `-Wall'. Some of 3063 them warn about constructions that users generally do not consider 3064 questionable, but which occasionally you might wish to check for; 3065 others warn about constructions that are necessary or hard to 3066 avoid in some cases, and there is no simple way to modify the code 3067 to suppress the warning. Some of them are enabled by `-Wextra' but 3068 many of them must be enabled individually. 3069 3070 `-Wextra' 3071 This enables some extra warning flags that are not enabled by 3072 `-Wall'. (This option used to be called `-W'. The older name is 3073 still supported, but the newer name is more descriptive.) 3074 3075 -Wclobbered 3076 -Wempty-body 3077 -Wignored-qualifiers 3078 -Wmissing-field-initializers 3079 -Wmissing-parameter-type (C only) 3080 -Wold-style-declaration (C only) 3081 -Woverride-init 3082 -Wsign-compare 3083 -Wtype-limits 3084 -Wuninitialized 3085 -Wunused-parameter (only with `-Wunused' or `-Wall') 3086 -Wunused-but-set-parameter (only with `-Wunused' or `-Wall') 3087 3088 The option `-Wextra' also prints warning messages for the 3089 following cases: 3090 3091 * A pointer is compared against integer zero with `<', `<=', 3092 `>', or `>='. 3093 3094 * (C++ only) An enumerator and a non-enumerator both appear in a 3095 conditional expression. 3096 3097 * (C++ only) Ambiguous virtual bases. 3098 3099 * (C++ only) Subscripting an array which has been declared 3100 `register'. 3101 3102 * (C++ only) Taking the address of a variable which has been 3103 declared `register'. 3104 3105 * (C++ only) A base class is not initialized in a derived 3106 class' copy constructor. 3107 3108 3109 `-Wchar-subscripts' 3110 Warn if an array subscript has type `char'. This is a common cause 3111 of error, as programmers often forget that this type is signed on 3112 some machines. This warning is enabled by `-Wall'. 3113 3114 `-Wcomment' 3115 Warn whenever a comment-start sequence `/*' appears in a `/*' 3116 comment, or whenever a Backslash-Newline appears in a `//' comment. 3117 This warning is enabled by `-Wall'. 3118 3119 `-Wno-cpp' 3120 (C, Objective-C, C++, Objective-C++ and Fortran only) 3121 3122 Suppress warning messages emitted by `#warning' directives. 3123 3124 `-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)' 3125 Give a warning when a value of type `float' is implicitly promoted 3126 to `double'. CPUs with a 32-bit "single-precision" floating-point 3127 unit implement `float' in hardware, but emulate `double' in 3128 software. On such a machine, doing computations using `double' 3129 values is much more expensive because of the overhead required for 3130 software emulation. 3131 3132 It is easy to accidentally do computations with `double' because 3133 floating-point literals are implicitly of type `double'. For 3134 example, in: 3135 float area(float radius) 3136 { 3137 return 3.14159 * radius * radius; 3138 } 3139 the compiler will perform the entire computation with `double' 3140 because the floating-point literal is a `double'. 3141 3142 `-Wformat' 3143 Check calls to `printf' and `scanf', etc., to make sure that the 3144 arguments supplied have types appropriate to the format string 3145 specified, and that the conversions specified in the format string 3146 make sense. This includes standard functions, and others 3147 specified by format attributes (*note Function Attributes::), in 3148 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 3149 extension, not in the C standard) families (or other 3150 target-specific families). Which functions are checked without 3151 format attributes having been specified depends on the standard 3152 version selected, and such checks of functions without the 3153 attribute specified are disabled by `-ffreestanding' or 3154 `-fno-builtin'. 3155 3156 The formats are checked against the format features supported by 3157 GNU libc version 2.2. These include all ISO C90 and C99 features, 3158 as well as features from the Single Unix Specification and some 3159 BSD and GNU extensions. Other library implementations may not 3160 support all these features; GCC does not support warning about 3161 features that go beyond a particular library's limitations. 3162 However, if `-pedantic' is used with `-Wformat', warnings will be 3163 given about format features not in the selected standard version 3164 (but not for `strfmon' formats, since those are not in any version 3165 of the C standard). *Note Options Controlling C Dialect: C 3166 Dialect Options. 3167 3168 Since `-Wformat' also checks for null format arguments for several 3169 functions, `-Wformat' also implies `-Wnonnull'. 3170 3171 `-Wformat' is included in `-Wall'. For more control over some 3172 aspects of format checking, the options `-Wformat-y2k', 3173 `-Wno-format-extra-args', `-Wno-format-zero-length', 3174 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are 3175 available, but are not included in `-Wall'. 3176 3177 `-Wformat-y2k' 3178 If `-Wformat' is specified, also warn about `strftime' formats 3179 which may yield only a two-digit year. 3180 3181 `-Wno-format-contains-nul' 3182 If `-Wformat' is specified, do not warn about format strings that 3183 contain NUL bytes. 3184 3185 `-Wno-format-extra-args' 3186 If `-Wformat' is specified, do not warn about excess arguments to a 3187 `printf' or `scanf' format function. The C standard specifies 3188 that such arguments are ignored. 3189 3190 Where the unused arguments lie between used arguments that are 3191 specified with `$' operand number specifications, normally 3192 warnings are still given, since the implementation could not know 3193 what type to pass to `va_arg' to skip the unused arguments. 3194 However, in the case of `scanf' formats, this option will suppress 3195 the warning if the unused arguments are all pointers, since the 3196 Single Unix Specification says that such unused arguments are 3197 allowed. 3198 3199 `-Wno-format-zero-length (C and Objective-C only)' 3200 If `-Wformat' is specified, do not warn about zero-length formats. 3201 The C standard specifies that zero-length formats are allowed. 3202 3203 `-Wformat-nonliteral' 3204 If `-Wformat' is specified, also warn if the format string is not a 3205 string literal and so cannot be checked, unless the format function 3206 takes its format arguments as a `va_list'. 3207 3208 `-Wformat-security' 3209 If `-Wformat' is specified, also warn about uses of format 3210 functions that represent possible security problems. At present, 3211 this warns about calls to `printf' and `scanf' functions where the 3212 format string is not a string literal and there are no format 3213 arguments, as in `printf (foo);'. This may be a security hole if 3214 the format string came from untrusted input and contains `%n'. 3215 (This is currently a subset of what `-Wformat-nonliteral' warns 3216 about, but in future warnings may be added to `-Wformat-security' 3217 that are not included in `-Wformat-nonliteral'.) 3218 3219 `-Wformat=2' 3220 Enable `-Wformat' plus format checks not included in `-Wformat'. 3221 Currently equivalent to `-Wformat -Wformat-nonliteral 3222 -Wformat-security -Wformat-y2k'. 3223 3224 `-Wnonnull (C, C++, Objective-C, and Objective-C++ only)' 3225 Warn about passing a null pointer for arguments marked as 3226 requiring a non-null value by the `nonnull' function attribute. 3227 3228 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 3229 disabled with the `-Wno-nonnull' option. 3230 3231 `-Winit-self (C, C++, Objective-C and Objective-C++ only)' 3232 Warn about uninitialized variables which are initialized with 3233 themselves. Note this option can only be used with the 3234 `-Wuninitialized' option. 3235 3236 For example, GCC will warn about `i' being uninitialized in the 3237 following snippet only when `-Winit-self' has been specified: 3238 int f() 3239 { 3240 int i = i; 3241 return i; 3242 } 3243 3244 `-Wimplicit-int (C and Objective-C only)' 3245 Warn when a declaration does not specify a type. This warning is 3246 enabled by `-Wall'. 3247 3248 `-Wimplicit-function-declaration (C and Objective-C only)' 3249 Give a warning whenever a function is used before being declared. 3250 In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled 3251 by default and it is made into an error by `-pedantic-errors'. 3252 This warning is also enabled by `-Wall'. 3253 3254 `-Wimplicit (C and Objective-C only)' 3255 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 3256 This warning is enabled by `-Wall'. 3257 3258 `-Wignored-qualifiers (C and C++ only)' 3259 Warn if the return type of a function has a type qualifier such as 3260 `const'. For ISO C such a type qualifier has no effect, since the 3261 value returned by a function is not an lvalue. For C++, the 3262 warning is only emitted for scalar types or `void'. ISO C 3263 prohibits qualified `void' return types on function definitions, 3264 so such return types always receive a warning even without this 3265 option. 3266 3267 This warning is also enabled by `-Wextra'. 3268 3269 `-Wmain' 3270 Warn if the type of `main' is suspicious. `main' should be a 3271 function with external linkage, returning int, taking either zero 3272 arguments, two, or three arguments of appropriate types. This 3273 warning is enabled by default in C++ and is enabled by either 3274 `-Wall' or `-pedantic'. 3275 3276 `-Wmissing-braces' 3277 Warn if an aggregate or union initializer is not fully bracketed. 3278 In the following example, the initializer for `a' is not fully 3279 bracketed, but that for `b' is fully bracketed. 3280 3281 int a[2][2] = { 0, 1, 2, 3 }; 3282 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 3283 3284 This warning is enabled by `-Wall'. 3285 3286 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 3287 Warn if a user-supplied include directory does not exist. 3288 3289 `-Wparentheses' 3290 Warn if parentheses are omitted in certain contexts, such as when 3291 there is an assignment in a context where a truth value is 3292 expected, or when operators are nested whose precedence people 3293 often get confused about. 3294 3295 Also warn if a comparison like `x<=y<=z' appears; this is 3296 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 3297 interpretation from that of ordinary mathematical notation. 3298 3299 Also warn about constructions where there may be confusion to which 3300 `if' statement an `else' branch belongs. Here is an example of 3301 such a case: 3302 3303 { 3304 if (a) 3305 if (b) 3306 foo (); 3307 else 3308 bar (); 3309 } 3310 3311 In C/C++, every `else' branch belongs to the innermost possible 3312 `if' statement, which in this example is `if (b)'. This is often 3313 not what the programmer expected, as illustrated in the above 3314 example by indentation the programmer chose. When there is the 3315 potential for this confusion, GCC will issue a warning when this 3316 flag is specified. To eliminate the warning, add explicit braces 3317 around the innermost `if' statement so there is no way the `else' 3318 could belong to the enclosing `if'. The resulting code would look 3319 like this: 3320 3321 { 3322 if (a) 3323 { 3324 if (b) 3325 foo (); 3326 else 3327 bar (); 3328 } 3329 } 3330 3331 Also warn for dangerous uses of the ?: with omitted middle operand 3332 GNU extension. When the condition in the ?: operator is a boolean 3333 expression the omitted value will be always 1. Often the user 3334 expects it to be a value computed inside the conditional 3335 expression instead. 3336 3337 This warning is enabled by `-Wall'. 3338 3339 `-Wsequence-point' 3340 Warn about code that may have undefined semantics because of 3341 violations of sequence point rules in the C and C++ standards. 3342 3343 The C and C++ standards defines the order in which expressions in 3344 a C/C++ program are evaluated in terms of "sequence points", which 3345 represent a partial ordering between the execution of parts of the 3346 program: those executed before the sequence point, and those 3347 executed after it. These occur after the evaluation of a full 3348 expression (one which is not part of a larger expression), after 3349 the evaluation of the first operand of a `&&', `||', `? :' or `,' 3350 (comma) operator, before a function is called (but after the 3351 evaluation of its arguments and the expression denoting the called 3352 function), and in certain other places. Other than as expressed 3353 by the sequence point rules, the order of evaluation of 3354 subexpressions of an expression is not specified. All these rules 3355 describe only a partial order rather than a total order, since, 3356 for example, if two functions are called within one expression 3357 with no sequence point between them, the order in which the 3358 functions are called is not specified. However, the standards 3359 committee have ruled that function calls do not overlap. 3360 3361 It is not specified when between sequence points modifications to 3362 the values of objects take effect. Programs whose behavior 3363 depends on this have undefined behavior; the C and C++ standards 3364 specify that "Between the previous and next sequence point an 3365 object shall have its stored value modified at most once by the 3366 evaluation of an expression. Furthermore, the prior value shall 3367 be read only to determine the value to be stored.". If a program 3368 breaks these rules, the results on any particular implementation 3369 are entirely unpredictable. 3370 3371 Examples of code with undefined behavior are `a = a++;', `a[n] = 3372 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 3373 diagnosed by this option, and it may give an occasional false 3374 positive result, but in general it has been found fairly effective 3375 at detecting this sort of problem in programs. 3376 3377 The standard is worded confusingly, therefore there is some debate 3378 over the precise meaning of the sequence point rules in subtle 3379 cases. Links to discussions of the problem, including proposed 3380 formal definitions, may be found on the GCC readings page, at 3381 `http://gcc.gnu.org/readings.html'. 3382 3383 This warning is enabled by `-Wall' for C and C++. 3384 3385 `-Wself-assign' 3386 Warn about self-assignment and self-initialization. This warning 3387 is intended for detecting accidental self-assignment due to typos, 3388 and therefore does not warn on a statement that is semantically a 3389 self-assignment after constant folding. Here is an example of what 3390 will trigger a self-assign warning and what will not: 3391 3392 void func() 3393 { 3394 int i = 2; 3395 int x = x; /* warn */ 3396 float f = 5.0; 3397 double a[3]; 3398 3399 i = i + 0; /* not warn */ 3400 f = f / 1; /* not warn */ 3401 a[1] = a[1]; /* warn */ 3402 i += 0; /* not warn */ 3403 } 3404 3405 In C++ it will not warn on self-assignment of non-POD variables 3406 unless `-Wself-assign-non-pod' is also enabled. 3407 3408 `-Wself-assign-non-pod' 3409 Warn about self-assignment of non-POD variables. This is a 3410 C++-specific warning and only effective when `-Wself-assign' is 3411 enabled. 3412 3413 There are cases where self-assignment might be intentional. For 3414 example, a C++ programmer might write code to test whether an 3415 overloaded `operator=' works when the same object is assigned to 3416 itself. One way to work around the self-assign warning in such 3417 cases when this flag is enabled is using the functional form 3418 `object.operator=(object)' instead of the assignment form `object 3419 = object', as shown in the following example. 3420 3421 void test_func() 3422 { 3423 MyType t; 3424 3425 t.operator=(t); // not warn 3426 t = t; // warn 3427 } 3428 3429 `-Wreturn-type' 3430 Warn whenever a function is defined with a return-type that 3431 defaults to `int'. Also warn about any `return' statement with no 3432 return-value in a function whose return-type is not `void' 3433 (falling off the end of the function body is considered returning 3434 without a value), and about a `return' statement with an 3435 expression in a function whose return-type is `void'. 3436 3437 For C++, a function without return type always produces a 3438 diagnostic message, even when `-Wno-return-type' is specified. 3439 The only exceptions are `main' and functions defined in system 3440 headers. 3441 3442 This warning is enabled by `-Wall'. 3443 3444 `-Wripa-opt-mismatch' 3445 When doing an FDO build with `-fprofile-use' and `-fripa', warn if 3446 importing an axuiliary module that was built with a different GCC 3447 command line during the profile-generate phase than the primary 3448 module. 3449 3450 This warning is enabled by `-Wall'. 3451 3452 `-Wswitch' 3453 Warn whenever a `switch' statement has an index of enumerated type 3454 and lacks a `case' for one or more of the named codes of that 3455 enumeration. (The presence of a `default' label prevents this 3456 warning.) `case' labels outside the enumeration range also 3457 provoke warnings when this option is used (even if there is a 3458 `default' label). This warning is enabled by `-Wall'. 3459 3460 `-Wswitch-default' 3461 Warn whenever a `switch' statement does not have a `default' case. 3462 3463 `-Wswitch-enum' 3464 Warn whenever a `switch' statement has an index of enumerated type 3465 and lacks a `case' for one or more of the named codes of that 3466 enumeration. `case' labels outside the enumeration range also 3467 provoke warnings when this option is used. The only difference 3468 between `-Wswitch' and this option is that this option gives a 3469 warning about an omitted enumeration code even if there is a 3470 `default' label. 3471 3472 `-Wsync-nand (C and C++ only)' 3473 Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch' 3474 built-in functions are used. These functions changed semantics in 3475 GCC 4.4. 3476 3477 `-Wthread-safety' 3478 Warn about potential thread safety issues when the code is 3479 annotated with thread safety attributes. 3480 3481 `Wthread-unguarded-var' 3482 Warn about shared variables not properly protected by locks 3483 specified in the attributes. This flag is effective only with 3484 `-Wthread-safety' and enabled by default. 3485 3486 `Wthread-unguarded-func' 3487 Warn about function calls not properly protected by locks 3488 specified in the attributes. This flag is effective only with 3489 `-Wthread-safety' and enabled by default. 3490 3491 `Wthread-mismatched-lock-order' 3492 Warn about lock acquisition order inconsistent with what specified 3493 in the attributes. This flag is effective only with 3494 `-Wthread-safety' and enabled by default. 3495 3496 `Wthread-mismatched-lock-acq-rel' 3497 Warn about mismatched lock acquisition and release. This flag is 3498 effective only with `-Wthread-safety' and enabled by default. 3499 3500 `Wthread-reentrant-lock' 3501 Warn about a lock being acquired recursively. This flag is 3502 effective only with `-Wthread-safety' and enabled by default. 3503 3504 `Wthread-unsupported-lock-name' 3505 Warn about uses of unsupported lock names in attributes. This flag 3506 is effective only with `-Wthread-safety' and disabled by default. 3507 3508 `Wthread-attr-bind-param' 3509 Make the thread safety analysis try to bind the function 3510 parameters used in the attributes. This flag is effective only 3511 with `-Wthread-safety' and enabled by default. 3512 3513 `-Wtrigraphs' 3514 Warn if any trigraphs are encountered that might change the 3515 meaning of the program (trigraphs within comments are not warned 3516 about). This warning is enabled by `-Wall'. 3517 3518 `-Wunused-but-set-parameter' 3519 Warn whenever a function parameter is assigned to, but otherwise 3520 unused (aside from its declaration). 3521 3522 To suppress this warning use the `unused' attribute (*note 3523 Variable Attributes::). 3524 3525 This warning is also enabled by `-Wunused' together with `-Wextra'. 3526 3527 `-Wunused-but-set-variable' 3528 Warn whenever a local variable is assigned to, but otherwise unused 3529 (aside from its declaration). This warning is enabled by `-Wall'. 3530 3531 To suppress this warning use the `unused' attribute (*note 3532 Variable Attributes::). 3533 3534 This warning is also enabled by `-Wunused', which is enabled by 3535 `-Wall'. 3536 3537 `-Wunused-function' 3538 Warn whenever a static function is declared but not defined or a 3539 non-inline static function is unused. This warning is enabled by 3540 `-Wall'. 3541 3542 `-Wunused-label' 3543 Warn whenever a label is declared but not used. This warning is 3544 enabled by `-Wall'. 3545 3546 To suppress this warning use the `unused' attribute (*note 3547 Variable Attributes::). 3548 3549 `-Wunused-parameter' 3550 Warn whenever a function parameter is unused aside from its 3551 declaration. 3552 3553 To suppress this warning use the `unused' attribute (*note 3554 Variable Attributes::). 3555 3556 `-Wno-unused-result' 3557 Do not warn if a caller of a function marked with attribute 3558 `warn_unused_result' (*note Variable Attributes::) does not use 3559 its return value. The default is `-Wunused-result'. 3560 3561 `-Wunused-variable' 3562 Warn whenever a local variable or non-constant static variable is 3563 unused aside from its declaration. This warning is enabled by 3564 `-Wall'. 3565 3566 To suppress this warning use the `unused' attribute (*note 3567 Variable Attributes::). 3568 3569 Note that a classic way to avoid `-Wunused-variable' warning is 3570 using `x = x', but that does not work with `-Wself-assign'. Use 3571 `(void) x' or `static_cast<void>(x)' instead. 3572 3573 `-Wunused-value' 3574 Warn whenever a statement computes a result that is explicitly not 3575 used. To suppress this warning cast the unused expression to 3576 `void'. This includes an expression-statement or the left-hand 3577 side of a comma expression that contains no side effects. For 3578 example, an expression such as `x[i,j]' will cause a warning, while 3579 `x[(void)i,j]' will not. 3580 3581 This warning is enabled by `-Wall'. 3582 3583 `-Wunused' 3584 All the above `-Wunused' options combined. 3585 3586 In order to get a warning about an unused function parameter, you 3587 must either specify `-Wextra -Wunused' (note that `-Wall' implies 3588 `-Wunused'), or separately specify `-Wunused-parameter'. 3589 3590 `-Wuninitialized' 3591 Warn if an automatic variable is used without first being 3592 initialized or if a variable may be clobbered by a `setjmp' call. 3593 In C++, warn if a non-static reference or non-static `const' member 3594 appears in a class without constructors. 3595 3596 If you want to warn about code which uses the uninitialized value 3597 of the variable in its own initializer, use the `-Winit-self' 3598 option. 3599 3600 These warnings occur for individual uninitialized or clobbered 3601 elements of structure, union or array variables as well as for 3602 variables which are uninitialized or clobbered as a whole. They do 3603 not occur for variables or elements declared `volatile'. Because 3604 these warnings depend on optimization, the exact variables or 3605 elements for which there are warnings will depend on the precise 3606 optimization options and version of GCC used. 3607 3608 Note that there may be no warning about a variable that is used 3609 only to compute a value that itself is never used, because such 3610 computations may be deleted by data flow analysis before the 3611 warnings are printed. 3612 3613 `-Wmaybe-uninitialized' 3614 For an automatic variable, if there exists a path from the function 3615 entry to a use of the variable that is initialized, but there exist 3616 some other paths the variable is not initialized, the compiler will 3617 emit a warning if it can not prove the uninitialized paths do not 3618 happen at runtime. These warnings are made optional because GCC is 3619 not smart enough to see all the reasons why the code might be 3620 correct despite appearing to have an error. Here is one example 3621 of how this can happen: 3622 3623 { 3624 int x; 3625 switch (y) 3626 { 3627 case 1: x = 1; 3628 break; 3629 case 2: x = 4; 3630 break; 3631 case 3: x = 5; 3632 } 3633 foo (x); 3634 } 3635 3636 If the value of `y' is always 1, 2 or 3, then `x' is always 3637 initialized, but GCC doesn't know this. To suppress the warning, 3638 the user needs to provide a default case with assert(0) or similar 3639 code. 3640 3641 This option also warns when a non-volatile automatic variable 3642 might be changed by a call to `longjmp'. These warnings as well 3643 are possible only in optimizing compilation. 3644 3645 The compiler sees only the calls to `setjmp'. It cannot know 3646 where `longjmp' will be called; in fact, a signal handler could 3647 call it at any point in the code. As a result, you may get a 3648 warning even when there is in fact no problem because `longjmp' 3649 cannot in fact be called at the place which would cause a problem. 3650 3651 Some spurious warnings can be avoided if you declare all the 3652 functions you use that never return as `noreturn'. *Note Function 3653 Attributes::. 3654 3655 This warning is enabled by `-Wall' or `-Wextra'. 3656 3657 `-Wunknown-pragmas' 3658 Warn when a #pragma directive is encountered which is not 3659 understood by GCC. If this command line option is used, warnings 3660 will even be issued for unknown pragmas in system header files. 3661 This is not the case if the warnings were only enabled by the 3662 `-Wall' command line option. 3663 3664 `-Wno-pragmas' 3665 Do not warn about misuses of pragmas, such as incorrect parameters, 3666 invalid syntax, or conflicts between pragmas. See also 3667 `-Wunknown-pragmas'. 3668 3669 `-Wstrict-aliasing' 3670 This option is only active when `-fstrict-aliasing' is active. It 3671 warns about code which might break the strict aliasing rules that 3672 the compiler is using for optimization. The warning does not 3673 catch all cases, but does attempt to catch the more common 3674 pitfalls. It is included in `-Wall'. It is equivalent to 3675 `-Wstrict-aliasing=3' 3676 3677 `-Wstrict-aliasing=n' 3678 This option is only active when `-fstrict-aliasing' is active. It 3679 warns about code which might break the strict aliasing rules that 3680 the compiler is using for optimization. Higher levels correspond 3681 to higher accuracy (fewer false positives). Higher levels also 3682 correspond to more effort, similar to the way -O works. 3683 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with 3684 n=3. 3685 3686 Level 1: Most aggressive, quick, least accurate. Possibly useful 3687 when higher levels do not warn but -fstrict-aliasing still breaks 3688 the code, as it has very few false negatives. However, it has 3689 many false positives. Warns for all pointer conversions between 3690 possibly incompatible types, even if never dereferenced. Runs in 3691 the frontend only. 3692 3693 Level 2: Aggressive, quick, not too precise. May still have many 3694 false positives (not as many as level 1 though), and few false 3695 negatives (but possibly more than level 1). Unlike level 1, it 3696 only warns when an address is taken. Warns about incomplete 3697 types. Runs in the frontend only. 3698 3699 Level 3 (default for `-Wstrict-aliasing'): Should have very few 3700 false positives and few false negatives. Slightly slower than 3701 levels 1 or 2 when optimization is enabled. Takes care of the 3702 common pun+dereference pattern in the frontend: 3703 `*(int*)&some_float'. If optimization is enabled, it also runs in 3704 the backend, where it deals with multiple statement cases using 3705 flow-sensitive points-to information. Only warns when the 3706 converted pointer is dereferenced. Does not warn about incomplete 3707 types. 3708 3709 `-Wstrict-overflow' 3710 `-Wstrict-overflow=N' 3711 This option is only active when `-fstrict-overflow' is active. It 3712 warns about cases where the compiler optimizes based on the 3713 assumption that signed overflow does not occur. Note that it does 3714 not warn about all cases where the code might overflow: it only 3715 warns about cases where the compiler implements some optimization. 3716 Thus this warning depends on the optimization level. 3717 3718 An optimization which assumes that signed overflow does not occur 3719 is perfectly safe if the values of the variables involved are such 3720 that overflow never does, in fact, occur. Therefore this warning 3721 can easily give a false positive: a warning about code which is not 3722 actually a problem. To help focus on important issues, several 3723 warning levels are defined. No warnings are issued for the use of 3724 undefined signed overflow when estimating how many iterations a 3725 loop will require, in particular when determining whether a loop 3726 will be executed at all. 3727 3728 `-Wstrict-overflow=1' 3729 Warn about cases which are both questionable and easy to 3730 avoid. For example: `x + 1 > x'; with `-fstrict-overflow', 3731 the compiler will simplify this to `1'. This level of 3732 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 3733 not, and must be explicitly requested. 3734 3735 `-Wstrict-overflow=2' 3736 Also warn about other cases where a comparison is simplified 3737 to a constant. For example: `abs (x) >= 0'. This can only be 3738 simplified when `-fstrict-overflow' is in effect, because 3739 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 3740 zero. `-Wstrict-overflow' (with no level) is the same as 3741 `-Wstrict-overflow=2'. 3742 3743 `-Wstrict-overflow=3' 3744 Also warn about other cases where a comparison is simplified. 3745 For example: `x + 1 > 1' will be simplified to `x > 0'. 3746 3747 `-Wstrict-overflow=4' 3748 Also warn about other simplifications not covered by the 3749 above cases. For example: `(x * 10) / 5' will be simplified 3750 to `x * 2'. 3751 3752 `-Wstrict-overflow=5' 3753 Also warn about cases where the compiler reduces the 3754 magnitude of a constant involved in a comparison. For 3755 example: `x + 2 > y' will be simplified to `x + 1 >= y'. 3756 This is reported only at the highest warning level because 3757 this simplification applies to many comparisons, so this 3758 warning level will give a very large number of false 3759 positives. 3760 3761 `-Wsuggest-attribute=[pure|const|noreturn]' 3762 Warn for cases where adding an attribute may be beneficial. The 3763 attributes currently supported are listed below. 3764 3765 `-Wsuggest-attribute=pure' 3766 `-Wsuggest-attribute=const' 3767 `-Wsuggest-attribute=noreturn' 3768 Warn about functions which might be candidates for attributes 3769 `pure', `const' or `noreturn'. The compiler only warns for 3770 functions visible in other compilation units or (in the case 3771 of `pure' and `const') if it cannot prove that the function 3772 returns normally. A function returns normally if it doesn't 3773 contain an infinite loop nor returns abnormally by throwing, 3774 calling `abort()' or trapping. This analysis requires option 3775 `-fipa-pure-const', which is enabled by default at `-O' and 3776 higher. Higher optimization levels improve the accuracy of 3777 the analysis. 3778 3779 `-Warray-bounds' 3780 This option is only active when `-ftree-vrp' is active (default 3781 for `-O2' and above). It warns about subscripts to arrays that are 3782 always out of bounds. This warning is enabled by `-Wall'. 3783 3784 `-Wno-div-by-zero' 3785 Do not warn about compile-time integer division by zero. Floating 3786 point division by zero is not warned about, as it can be a 3787 legitimate way of obtaining infinities and NaNs. 3788 3789 `-Wsystem-headers' 3790 Print warning messages for constructs found in system header files. 3791 Warnings from system headers are normally suppressed, on the 3792 assumption that they usually do not indicate real problems and 3793 would only make the compiler output harder to read. Using this 3794 command line option tells GCC to emit warnings from system headers 3795 as if they occurred in user code. However, note that using 3796 `-Wall' in conjunction with this option will _not_ warn about 3797 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 3798 must also be used. 3799 3800 `-Wtrampolines' 3801 Warn about trampolines generated for pointers to nested functions. 3802 3803 A trampoline is a small piece of data or code that is created at 3804 run time on the stack when the address of a nested function is 3805 taken, and is used to call the nested function indirectly. For 3806 some targets, it is made up of data only and thus requires no 3807 special treatment. But, for most targets, it is made up of code 3808 and thus requires the stack to be made executable in order for 3809 the program to work properly. 3810 3811 `-Wfloat-equal' 3812 Warn if floating point values are used in equality comparisons. 3813 3814 The idea behind this is that sometimes it is convenient (for the 3815 programmer) to consider floating-point values as approximations to 3816 infinitely precise real numbers. If you are doing this, then you 3817 need to compute (by analyzing the code, or in some other way) the 3818 maximum or likely maximum error that the computation introduces, 3819 and allow for it when performing comparisons (and when producing 3820 output, but that's a different problem). In particular, instead 3821 of testing for equality, you would check to see whether the two 3822 values have ranges that overlap; and this is done with the 3823 relational operators, so equality comparisons are probably 3824 mistaken. 3825 3826 `-Wtraditional (C and Objective-C only)' 3827 Warn about certain constructs that behave differently in 3828 traditional and ISO C. Also warn about ISO C constructs that have 3829 no traditional C equivalent, and/or problematic constructs which 3830 should be avoided. 3831 3832 * Macro parameters that appear within string literals in the 3833 macro body. In traditional C macro replacement takes place 3834 within string literals, but does not in ISO C. 3835 3836 * In traditional C, some preprocessor directives did not exist. 3837 Traditional preprocessors would only consider a line to be a 3838 directive if the `#' appeared in column 1 on the line. 3839 Therefore `-Wtraditional' warns about directives that 3840 traditional C understands but would ignore because the `#' 3841 does not appear as the first character on the line. It also 3842 suggests you hide directives like `#pragma' not understood by 3843 traditional C by indenting them. Some traditional 3844 implementations would not recognize `#elif', so it suggests 3845 avoiding it altogether. 3846 3847 * A function-like macro that appears without arguments. 3848 3849 * The unary plus operator. 3850 3851 * The `U' integer constant suffix, or the `F' or `L' floating 3852 point constant suffixes. (Traditional C does support the `L' 3853 suffix on integer constants.) Note, these suffixes appear in 3854 macros defined in the system headers of most modern systems, 3855 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these 3856 macros in user code might normally lead to spurious warnings, 3857 however GCC's integrated preprocessor has enough context to 3858 avoid warning in these cases. 3859 3860 * A function declared external in one block and then used after 3861 the end of the block. 3862 3863 * A `switch' statement has an operand of type `long'. 3864 3865 * A non-`static' function declaration follows a `static' one. 3866 This construct is not accepted by some traditional C 3867 compilers. 3868 3869 * The ISO type of an integer constant has a different width or 3870 signedness from its traditional type. This warning is only 3871 issued if the base of the constant is ten. I.e. hexadecimal 3872 or octal values, which typically represent bit patterns, are 3873 not warned about. 3874 3875 * Usage of ISO string concatenation is detected. 3876 3877 * Initialization of automatic aggregates. 3878 3879 * Identifier conflicts with labels. Traditional C lacks a 3880 separate namespace for labels. 3881 3882 * Initialization of unions. If the initializer is zero, the 3883 warning is omitted. This is done under the assumption that 3884 the zero initializer in user code appears conditioned on e.g. 3885 `__STDC__' to avoid missing initializer warnings and relies 3886 on default initialization to zero in the traditional C case. 3887 3888 * Conversions by prototypes between fixed/floating point values 3889 and vice versa. The absence of these prototypes when 3890 compiling with traditional C would cause serious problems. 3891 This is a subset of the possible conversion warnings, for the 3892 full set use `-Wtraditional-conversion'. 3893 3894 * Use of ISO C style function definitions. This warning 3895 intentionally is _not_ issued for prototype declarations or 3896 variadic functions because these ISO C features will appear 3897 in your code when using libiberty's traditional C 3898 compatibility macros, `PARAMS' and `VPARAMS'. This warning 3899 is also bypassed for nested functions because that feature is 3900 already a GCC extension and thus not relevant to traditional 3901 C compatibility. 3902 3903 `-Wtraditional-conversion (C and Objective-C only)' 3904 Warn if a prototype causes a type conversion that is different 3905 from what would happen to the same argument in the absence of a 3906 prototype. This includes conversions of fixed point to floating 3907 and vice versa, and conversions changing the width or signedness 3908 of a fixed point argument except when the same as the default 3909 promotion. 3910 3911 `-Wdeclaration-after-statement (C and Objective-C only)' 3912 Warn when a declaration is found after a statement in a block. 3913 This construct, known from C++, was introduced with ISO C99 and is 3914 by default allowed in GCC. It is not supported by ISO C90 and was 3915 not supported by GCC versions before GCC 3.0. *Note Mixed 3916 Declarations::. 3917 3918 `-Wundef' 3919 Warn if an undefined identifier is evaluated in an `#if' directive. 3920 3921 `-Wno-endif-labels' 3922 Do not warn whenever an `#else' or an `#endif' are followed by 3923 text. 3924 3925 `-Wshadow' 3926 Warn whenever a local variable or type declaration shadows another 3927 variable, parameter, type, or class member (in C++), or whenever a 3928 built-in function is shadowed. Note that in C++, the compiler will 3929 not warn if a local variable shadows a struct/class/enum, but will 3930 warn if it shadows an explicit typedef. 3931 3932 `-Wshadow-local' 3933 Warn when a local variable shadows another local variable or 3934 parameter. 3935 3936 `-Wshadow-compatible-local' 3937 Warn when a local variable shadows another local variable or 3938 parameter whose type is compatible with that of the shadowing 3939 variable. In C++, type compatibility here means the type of the 3940 shadowing variable can be converted to that of the shadowed 3941 variable. The creation of this flag (in addition to 3942 `-Wshadow-local') is based on the idea that when a local variable 3943 shadows another one of incompatible type, it is most likely 3944 intentional, not a bug or typo, as shown in the following example: 3945 3946 for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i) 3947 { 3948 for (int i = 0; i < N; ++i) 3949 { 3950 ... 3951 } 3952 ... 3953 } 3954 3955 Since the two variable `i' in the example above have incompatible 3956 types, enabling only `-Wshadow-compatible-local' will not emit a 3957 warning. Because their types are incompatible, if a programmer 3958 accidentally uses one in place of the other, type checking will 3959 catch that and emit an error or warning. So not warning (about 3960 shadowing) in this case will not lead to undetected bugs. Use of 3961 this flag instead of `-Wshadow-local' can possibly reduce the 3962 number of warnings triggered by intentional shadowing. 3963 3964 `-Wlarger-than=LEN' 3965 Warn whenever an object of larger than LEN bytes is defined. 3966 3967 `-Wframe-larger-than=LEN' 3968 Warn if the size of a function frame is larger than LEN bytes. 3969 The computation done to determine the stack frame size is 3970 approximate and not conservative. The actual requirements may be 3971 somewhat greater than LEN even if you do not get a warning. In 3972 addition, any space allocated via `alloca', variable-length 3973 arrays, or related constructs is not included by the compiler when 3974 determining whether or not to issue a warning. 3975 3976 `-Wunsafe-loop-optimizations' 3977 Warn if the loop cannot be optimized because the compiler could not 3978 assume anything on the bounds of the loop indices. With 3979 `-funsafe-loop-optimizations' warn if the compiler made such 3980 assumptions. 3981 3982 `-Wno-pedantic-ms-format (MinGW targets only)' 3983 Disables the warnings about non-ISO `printf' / `scanf' format 3984 width specifiers `I32', `I64', and `I' used on Windows targets 3985 depending on the MS runtime, when you are using the options 3986 `-Wformat' and `-pedantic' without gnu-extensions. 3987 3988 `-Wpointer-arith' 3989 Warn about anything that depends on the "size of" a function type 3990 or of `void'. GNU C assigns these types a size of 1, for 3991 convenience in calculations with `void *' pointers and pointers to 3992 functions. In C++, warn also when an arithmetic operation involves 3993 `NULL'. This warning is also enabled by `-pedantic'. 3994 3995 `-Wtype-limits' 3996 Warn if a comparison is always true or always false due to the 3997 limited range of the data type, but do not warn for constant 3998 expressions. For example, warn if an unsigned variable is 3999 compared against zero with `<' or `>='. This warning is also 4000 enabled by `-Wextra'. 4001 4002 `-Wbad-function-cast (C and Objective-C only)' 4003 Warn whenever a function call is cast to a non-matching type. For 4004 example, warn if `int malloc()' is cast to `anything *'. 4005 4006 `-Wc++-compat (C and Objective-C only)' 4007 Warn about ISO C constructs that are outside of the common subset 4008 of ISO C and ISO C++, e.g. request for implicit conversion from 4009 `void *' to a pointer to non-`void' type. 4010 4011 `-Wc++0x-compat (C++ and Objective-C++ only)' 4012 Warn about C++ constructs whose meaning differs between ISO C++ 4013 1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will 4014 become keywords in ISO C++ 200x. This warning is enabled by 4015 `-Wall'. 4016 4017 `-Wcast-qual' 4018 Warn whenever a pointer is cast so as to remove a type qualifier 4019 from the target type. For example, warn if a `const char *' is 4020 cast to an ordinary `char *'. 4021 4022 Also warn when making a cast which introduces a type qualifier in 4023 an unsafe way. For example, casting `char **' to `const char **' 4024 is unsafe, as in this example: 4025 4026 /* p is char ** value. */ 4027 const char **q = (const char **) p; 4028 /* Assignment of readonly string to const char * is OK. */ 4029 *q = "string"; 4030 /* Now char** pointer points to read-only memory. */ 4031 **p = 'b'; 4032 4033 `-Wcast-align' 4034 Warn whenever a pointer is cast such that the required alignment 4035 of the target is increased. For example, warn if a `char *' is 4036 cast to an `int *' on machines where integers can only be accessed 4037 at two- or four-byte boundaries. 4038 4039 `-Wwrite-strings' 4040 When compiling C, give string constants the type `const 4041 char[LENGTH]' so that copying the address of one into a 4042 non-`const' `char *' pointer will get a warning. These warnings 4043 will help you find at compile time code that can try to write into 4044 a string constant, but only if you have been very careful about 4045 using `const' in declarations and prototypes. Otherwise, it will 4046 just be a nuisance. This is why we did not make `-Wall' request 4047 these warnings. 4048 4049 When compiling C++, warn about the deprecated conversion from 4050 string literals to `char *'. This warning is enabled by default 4051 for C++ programs. 4052 4053 `-Wclobbered' 4054 Warn for variables that might be changed by `longjmp' or `vfork'. 4055 This warning is also enabled by `-Wextra'. 4056 4057 `-Wconversion' 4058 Warn for implicit conversions that may alter a value. This includes 4059 conversions between real and integer, like `abs (x)' when `x' is 4060 `double'; conversions between signed and unsigned, like `unsigned 4061 ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'. 4062 Do not warn for explicit casts like `abs ((int) x)' and `ui = 4063 (unsigned) -1', or if the value is not changed by the conversion 4064 like in `abs (2.0)'. Warnings about conversions between signed 4065 and unsigned integers can be disabled by using 4066 `-Wno-sign-conversion'. 4067 4068 For C++, also warn for confusing overload resolution for 4069 user-defined conversions; and conversions that will never use a 4070 type conversion operator: conversions to `void', the same type, a 4071 base class or a reference to them. Warnings about conversions 4072 between signed and unsigned integers are disabled by default in 4073 C++ unless `-Wsign-conversion' is explicitly enabled. 4074 4075 `-Wno-conversion-null (C++ and Objective-C++ only)' 4076 Do not warn for conversions between `NULL' and non-pointer types. 4077 `-Wconversion-null' is enabled by default. 4078 4079 `-Wreal-conversion' 4080 Warn for implicit type conversions from real (`double' or `float') 4081 to integral values. 4082 4083 `-Wempty-body' 4084 Warn if an empty body occurs in an `if', `else' or `do while' 4085 statement. This warning is also enabled by `-Wextra'. 4086 4087 `-Wenum-compare' 4088 Warn about a comparison between values of different enum types. In 4089 C++ this warning is enabled by default. In C this warning is 4090 enabled by `-Wall'. 4091 4092 `-Wjump-misses-init (C, Objective-C only)' 4093 Warn if a `goto' statement or a `switch' statement jumps forward 4094 across the initialization of a variable, or jumps backward to a 4095 label after the variable has been initialized. This only warns 4096 about variables which are initialized when they are declared. 4097 This warning is only supported for C and Objective C; in C++ this 4098 sort of branch is an error in any case. 4099 4100 `-Wjump-misses-init' is included in `-Wc++-compat'. It can be 4101 disabled with the `-Wno-jump-misses-init' option. 4102 4103 `-Wsign-compare' 4104 Warn when a comparison between signed and unsigned values could 4105 produce an incorrect result when the signed value is converted to 4106 unsigned. This warning is also enabled by `-Wextra'; to get the 4107 other warnings of `-Wextra' without this warning, use `-Wextra 4108 -Wno-sign-compare'. 4109 4110 `-Wsign-conversion' 4111 Warn for implicit conversions that may change the sign of an 4112 integer value, like assigning a signed integer expression to an 4113 unsigned integer variable. An explicit cast silences the warning. 4114 In C, this option is enabled also by `-Wconversion'. 4115 4116 `-Waddress' 4117 Warn about suspicious uses of memory addresses. These include using 4118 the address of a function in a conditional expression, such as 4119 `void func(void); if (func)', and comparisons against the memory 4120 address of a string literal, such as `if (x == "abc")'. Such uses 4121 typically indicate a programmer error: the address of a function 4122 always evaluates to true, so their use in a conditional usually 4123 indicate that the programmer forgot the parentheses in a function 4124 call; and comparisons against string literals result in unspecified 4125 behavior and are not portable in C, so they usually indicate that 4126 the programmer intended to use `strcmp'. This warning is enabled 4127 by `-Wall'. 4128 4129 `-Wlogical-op' 4130 Warn about suspicious uses of logical operators in expressions. 4131 This includes using logical operators in contexts where a bit-wise 4132 operator is likely to be expected. 4133 4134 `-Waggregate-return' 4135 Warn if any functions that return structures or unions are defined 4136 or called. (In languages where you can return an array, this also 4137 elicits a warning.) 4138 4139 `-Wno-attributes' 4140 Do not warn if an unexpected `__attribute__' is used, such as 4141 unrecognized attributes, function attributes applied to variables, 4142 etc. This will not stop errors for incorrect use of supported 4143 attributes. 4144 4145 `-Wno-builtin-macro-redefined' 4146 Do not warn if certain built-in macros are redefined. This 4147 suppresses warnings for redefinition of `__TIMESTAMP__', 4148 `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'. 4149 4150 `-Wstrict-prototypes (C and Objective-C only)' 4151 Warn if a function is declared or defined without specifying the 4152 argument types. (An old-style function definition is permitted 4153 without a warning if preceded by a declaration which specifies the 4154 argument types.) 4155 4156 `-Wold-style-declaration (C and Objective-C only)' 4157 Warn for obsolescent usages, according to the C Standard, in a 4158 declaration. For example, warn if storage-class specifiers like 4159 `static' are not the first things in a declaration. This warning 4160 is also enabled by `-Wextra'. 4161 4162 `-Wold-style-definition (C and Objective-C only)' 4163 Warn if an old-style function definition is used. A warning is 4164 given even if there is a previous prototype. 4165 4166 `-Wmissing-parameter-type (C and Objective-C only)' 4167 A function parameter is declared without a type specifier in 4168 K&R-style functions: 4169 4170 void foo(bar) { } 4171 4172 This warning is also enabled by `-Wextra'. 4173 4174 `-Wmissing-prototypes (C and Objective-C only)' 4175 Warn if a global function is defined without a previous prototype 4176 declaration. This warning is issued even if the definition itself 4177 provides a prototype. The aim is to detect global functions that 4178 fail to be declared in header files. 4179 4180 `-Wmissing-declarations' 4181 Warn if a global function is defined without a previous 4182 declaration. Do so even if the definition itself provides a 4183 prototype. Use this option to detect global functions that are 4184 not declared in header files. In C++, no warnings are issued for 4185 function templates, or for inline functions, or for functions in 4186 anonymous namespaces. 4187 4188 `-Wmissing-field-initializers' 4189 Warn if a structure's initializer has some fields missing. For 4190 example, the following code would cause such a warning, because 4191 `x.h' is implicitly zero: 4192 4193 struct s { int f, g, h; }; 4194 struct s x = { 3, 4 }; 4195 4196 This option does not warn about designated initializers, so the 4197 following modification would not trigger a warning: 4198 4199 struct s { int f, g, h; }; 4200 struct s x = { .f = 3, .g = 4 }; 4201 4202 This warning is included in `-Wextra'. To get other `-Wextra' 4203 warnings without this one, use `-Wextra 4204 -Wno-missing-field-initializers'. 4205 4206 `-Wmissing-format-attribute' 4207 Warn about function pointers which might be candidates for `format' 4208 attributes. Note these are only possible candidates, not absolute 4209 ones. GCC will guess that function pointers with `format' 4210 attributes that are used in assignment, initialization, parameter 4211 passing or return statements should have a corresponding `format' 4212 attribute in the resulting type. I.e. the left-hand side of the 4213 assignment or initialization, the type of the parameter variable, 4214 or the return type of the containing function respectively should 4215 also have a `format' attribute to avoid the warning. 4216 4217 GCC will also warn about function definitions which might be 4218 candidates for `format' attributes. Again, these are only 4219 possible candidates. GCC will guess that `format' attributes 4220 might be appropriate for any function that calls a function like 4221 `vprintf' or `vscanf', but this might not always be the case, and 4222 some functions for which `format' attributes are appropriate may 4223 not be detected. 4224 4225 `-Wno-multichar' 4226 Do not warn if a multicharacter constant (`'FOOF'') is used. 4227 Usually they indicate a typo in the user's code, as they have 4228 implementation-defined values, and should not be used in portable 4229 code. 4230 4231 `-Wnormalized=<none|id|nfc|nfkc>' 4232 In ISO C and ISO C++, two identifiers are different if they are 4233 different sequences of characters. However, sometimes when 4234 characters outside the basic ASCII character set are used, you can 4235 have two different character sequences that look the same. To 4236 avoid confusion, the ISO 10646 standard sets out some 4237 "normalization rules" which when applied ensure that two sequences 4238 that look the same are turned into the same sequence. GCC can 4239 warn you if you are using identifiers which have not been 4240 normalized; this option controls that warning. 4241 4242 There are four levels of warning that GCC supports. The default is 4243 `-Wnormalized=nfc', which warns about any identifier which is not 4244 in the ISO 10646 "C" normalized form, "NFC". NFC is the 4245 recommended form for most uses. 4246 4247 Unfortunately, there are some characters which ISO C and ISO C++ 4248 allow in identifiers that when turned into NFC aren't allowable as 4249 identifiers. That is, there's no way to use these symbols in 4250 portable ISO C or C++ and have all your identifiers in NFC. 4251 `-Wnormalized=id' suppresses the warning for these characters. It 4252 is hoped that future versions of the standards involved will 4253 correct this, which is why this option is not the default. 4254 4255 You can switch the warning off for all characters by writing 4256 `-Wnormalized=none'. You would only want to do this if you were 4257 using some other normalization scheme (like "D"), because 4258 otherwise you can easily create bugs that are literally impossible 4259 to see. 4260 4261 Some characters in ISO 10646 have distinct meanings but look 4262 identical in some fonts or display methodologies, especially once 4263 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 4264 LATIN SMALL LETTER N", will display just like a regular `n' which 4265 has been placed in a superscript. ISO 10646 defines the "NFKC" 4266 normalization scheme to convert all these into a standard form as 4267 well, and GCC will warn if your code is not in NFKC if you use 4268 `-Wnormalized=nfkc'. This warning is comparable to warning about 4269 every identifier that contains the letter O because it might be 4270 confused with the digit 0, and so is not the default, but may be 4271 useful as a local coding convention if the programming environment 4272 is unable to be fixed to display these characters distinctly. 4273 4274 `-Wno-deprecated' 4275 Do not warn about usage of deprecated features. *Note Deprecated 4276 Features::. 4277 4278 `-Wno-deprecated-declarations' 4279 Do not warn about uses of functions (*note Function Attributes::), 4280 variables (*note Variable Attributes::), and types (*note Type 4281 Attributes::) marked as deprecated by using the `deprecated' 4282 attribute. 4283 4284 `-Wno-overflow' 4285 Do not warn about compile-time overflow in constant expressions. 4286 4287 `-Woverride-init (C and Objective-C only)' 4288 Warn if an initialized field without side effects is overridden 4289 when using designated initializers (*note Designated Initializers: 4290 Designated Inits.). 4291 4292 This warning is included in `-Wextra'. To get other `-Wextra' 4293 warnings without this one, use `-Wextra -Wno-override-init'. 4294 4295 `-Wpacked' 4296 Warn if a structure is given the packed attribute, but the packed 4297 attribute has no effect on the layout or size of the structure. 4298 Such structures may be mis-aligned for little benefit. For 4299 instance, in this code, the variable `f.x' in `struct bar' will be 4300 misaligned even though `struct bar' does not itself have the 4301 packed attribute: 4302 4303 struct foo { 4304 int x; 4305 char a, b, c, d; 4306 } __attribute__((packed)); 4307 struct bar { 4308 char z; 4309 struct foo f; 4310 }; 4311 4312 `-Wpacked-bitfield-compat' 4313 The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute 4314 on bit-fields of type `char'. This has been fixed in GCC 4.4 but 4315 the change can lead to differences in the structure layout. GCC 4316 informs you when the offset of such a field has changed in GCC 4.4. 4317 For example there is no longer a 4-bit padding between field `a' 4318 and `b' in this structure: 4319 4320 struct foo 4321 { 4322 char a:4; 4323 char b:8; 4324 } __attribute__ ((packed)); 4325 4326 This warning is enabled by default. Use 4327 `-Wno-packed-bitfield-compat' to disable this warning. 4328 4329 `-Wpadded' 4330 Warn if padding is included in a structure, either to align an 4331 element of the structure or to align the whole structure. 4332 Sometimes when this happens it is possible to rearrange the fields 4333 of the structure to reduce the padding and so make the structure 4334 smaller. 4335 4336 `-Wredundant-decls' 4337 Warn if anything is declared more than once in the same scope, 4338 even in cases where multiple declaration is valid and changes 4339 nothing. 4340 4341 `-Wnested-externs (C and Objective-C only)' 4342 Warn if an `extern' declaration is encountered within a function. 4343 4344 `-Winline' 4345 Warn if a function can not be inlined and it was declared as 4346 inline. Even with this option, the compiler will not warn about 4347 failures to inline functions declared in system headers. 4348 4349 The compiler uses a variety of heuristics to determine whether or 4350 not to inline a function. For example, the compiler takes into 4351 account the size of the function being inlined and the amount of 4352 inlining that has already been done in the current function. 4353 Therefore, seemingly insignificant changes in the source program 4354 can cause the warnings produced by `-Winline' to appear or 4355 disappear. 4356 4357 `-Wno-invalid-offsetof (C++ and Objective-C++ only)' 4358 Suppress warnings from applying the `offsetof' macro to a non-POD 4359 type. According to the 1998 ISO C++ standard, applying `offsetof' 4360 to a non-POD type is undefined. In existing C++ implementations, 4361 however, `offsetof' typically gives meaningful results even when 4362 applied to certain kinds of non-POD types. (Such as a simple 4363 `struct' that fails to be a POD type only by virtue of having a 4364 constructor.) This flag is for users who are aware that they are 4365 writing nonportable code and who have deliberately chosen to 4366 ignore the warning about it. 4367 4368 The restrictions on `offsetof' may be relaxed in a future version 4369 of the C++ standard. 4370 4371 `-Wno-int-to-pointer-cast' 4372 Suppress warnings from casts to pointer type of an integer of a 4373 different size. In C++, casting to a pointer type of smaller size 4374 is an error. `Wint-to-pointer-cast' is enabled by default. 4375 4376 `max-lipo-mem' 4377 When importing auxiliary modules during profile-use, check current 4378 memory consumption after parsing each auxiliary module. If it 4379 exceeds this limit (specified in kb), don't import any more 4380 auxiliary modules. Specifying a value of 0 means don't enforce 4381 this limit. This parameter is only useful when using 4382 `-fprofile-use' and `-fripa'. 4383 4384 `-Wno-pointer-to-int-cast (C and Objective-C only)' 4385 Suppress warnings from casts from a pointer to an integer type of a 4386 different size. 4387 4388 `-Winvalid-pch' 4389 Warn if a precompiled header (*note Precompiled Headers::) is 4390 found in the search path but can't be used. 4391 4392 `-Wlong-long' 4393 Warn if `long long' type is used. This is enabled by either 4394 `-pedantic' or `-Wtraditional' in ISO C90 and C++98 modes. To 4395 inhibit the warning messages, use `-Wno-long-long'. 4396 4397 `-Wvariadic-macros' 4398 Warn if variadic macros are used in pedantic ISO C90 mode, or the 4399 GNU alternate syntax when in pedantic ISO C99 mode. This is 4400 default. To inhibit the warning messages, use 4401 `-Wno-variadic-macros'. 4402 4403 `-Wvla' 4404 Warn if variable length array is used in the code. `-Wno-vla' 4405 will prevent the `-pedantic' warning of the variable length array. 4406 4407 `-Wvolatile-register-var' 4408 Warn if a register variable is declared volatile. The volatile 4409 modifier does not inhibit all optimizations that may eliminate 4410 reads and/or writes to register variables. This warning is 4411 enabled by `-Wall'. 4412 4413 `-Wdisabled-optimization' 4414 Warn if a requested optimization pass is disabled. This warning 4415 does not generally indicate that there is anything wrong with your 4416 code; it merely indicates that GCC's optimizers were unable to 4417 handle the code effectively. Often, the problem is that your code 4418 is too big or too complex; GCC will refuse to optimize programs 4419 when the optimization itself is likely to take inordinate amounts 4420 of time. 4421 4422 `-Wpointer-sign (C and Objective-C only)' 4423 Warn for pointer argument passing or assignment with different 4424 signedness. This option is only supported for C and Objective-C. 4425 It is implied by `-Wall' and by `-pedantic', which can be disabled 4426 with `-Wno-pointer-sign'. 4427 4428 `-Wstack-protector' 4429 This option is only active when `-fstack-protector' is active. It 4430 warns about functions that will not be protected against stack 4431 smashing. 4432 4433 `-Wno-mudflap' 4434 Suppress warnings about constructs that cannot be instrumented by 4435 `-fmudflap'. 4436 4437 `-Woverlength-strings' 4438 Warn about string constants which are longer than the "minimum 4439 maximum" length specified in the C standard. Modern compilers 4440 generally allow string constants which are much longer than the 4441 standard's minimum limit, but very portable programs should avoid 4442 using longer strings. 4443 4444 The limit applies _after_ string constant concatenation, and does 4445 not count the trailing NUL. In C90, the limit was 509 characters; 4446 in C99, it was raised to 4095. C++98 does not specify a normative 4447 minimum maximum, so we do not diagnose overlength strings in C++. 4448 4449 This option is implied by `-pedantic', and can be disabled with 4450 `-Wno-overlength-strings'. 4451 4452 `-Wunsuffixed-float-constants (C and Objective-C only)' 4453 GCC will issue a warning for any floating constant that does not 4454 have a suffix. When used together with `-Wsystem-headers' it will 4455 warn about such constants in system header files. This can be 4456 useful when preparing code to use with the `FLOAT_CONST_DECIMAL64' 4457 pragma from the decimal floating-point extension to C99. 4458 4459 4460 File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 4461 4462 3.9 Options for Debugging Your Program or GCC 4463 ============================================= 4464 4465 GCC has various special options that are used for debugging either your 4466 program or GCC: 4467 4468 `-g' 4469 Produce debugging information in the operating system's native 4470 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 4471 debugging information. 4472 4473 On most systems that use stabs format, `-g' enables use of extra 4474 debugging information that only GDB can use; this extra information 4475 makes debugging work better in GDB but will probably make other 4476 debuggers crash or refuse to read the program. If you want to 4477 control for certain whether to generate the extra information, use 4478 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 4479 below). 4480 4481 GCC allows you to use `-g' with `-O'. The shortcuts taken by 4482 optimized code may occasionally produce surprising results: some 4483 variables you declared may not exist at all; flow of control may 4484 briefly move where you did not expect it; some statements may not 4485 be executed because they compute constant results or their values 4486 were already at hand; some statements may execute in different 4487 places because they were moved out of loops. 4488 4489 Nevertheless it proves possible to debug optimized output. This 4490 makes it reasonable to use the optimizer for programs that might 4491 have bugs. 4492 4493 The following options are useful when GCC is generated with the 4494 capability for more than one debugging format. 4495 4496 `-ggdb' 4497 Produce debugging information for use by GDB. This means to use 4498 the most expressive format available (DWARF 2, stabs, or the 4499 native format if neither of those are supported), including GDB 4500 extensions if at all possible. 4501 4502 `-gstabs' 4503 Produce debugging information in stabs format (if that is 4504 supported), without GDB extensions. This is the format used by 4505 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 4506 systems this option produces stabs debugging output which is not 4507 understood by DBX or SDB. On System V Release 4 systems this 4508 option requires the GNU assembler. 4509 4510 `-feliminate-unused-debug-symbols' 4511 Produce debugging information in stabs format (if that is 4512 supported), for only symbols that are actually used. 4513 4514 `-femit-class-debug-always' 4515 Instead of emitting debugging information for a C++ class in only 4516 one object file, emit it in all object files using the class. 4517 This option should be used only with debuggers that are unable to 4518 handle the way GCC normally emits debugging information for 4519 classes because using this option will increase the size of 4520 debugging information by as much as a factor of two. 4521 4522 `-gstabs+' 4523 Produce debugging information in stabs format (if that is 4524 supported), using GNU extensions understood only by the GNU 4525 debugger (GDB). The use of these extensions is likely to make 4526 other debuggers crash or refuse to read the program. 4527 4528 `-gcoff' 4529 Produce debugging information in COFF format (if that is 4530 supported). This is the format used by SDB on most System V 4531 systems prior to System V Release 4. 4532 4533 `-gxcoff' 4534 Produce debugging information in XCOFF format (if that is 4535 supported). This is the format used by the DBX debugger on IBM 4536 RS/6000 systems. 4537 4538 `-gxcoff+' 4539 Produce debugging information in XCOFF format (if that is 4540 supported), using GNU extensions understood only by the GNU 4541 debugger (GDB). The use of these extensions is likely to make 4542 other debuggers crash or refuse to read the program, and may cause 4543 assemblers other than the GNU assembler (GAS) to fail with an 4544 error. 4545 4546 `-gdwarf-VERSION' 4547 Produce debugging information in DWARF format (if that is 4548 supported). This is the format used by DBX on IRIX 6. The value 4549 of VERSION may be either 2, 3 or 4; the default version is 2. 4550 4551 Note that with DWARF version 2 some ports require, and will always 4552 use, some non-conflicting DWARF 3 extensions in the unwind tables. 4553 4554 Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for 4555 maximum benefit. 4556 4557 `-gstrict-dwarf' 4558 Disallow using extensions of later DWARF standard version than 4559 selected with `-gdwarf-VERSION'. On most targets using 4560 non-conflicting DWARF extensions from later standard versions is 4561 allowed. 4562 4563 `-gno-strict-dwarf' 4564 Allow using extensions of later DWARF standard version than 4565 selected with `-gdwarf-VERSION'. 4566 4567 `-gvms' 4568 Produce debugging information in VMS debug format (if that is 4569 supported). This is the format used by DEBUG on VMS systems. 4570 4571 `-gLEVEL' 4572 `-ggdbLEVEL' 4573 `-gstabsLEVEL' 4574 `-gcoffLEVEL' 4575 `-gxcoffLEVEL' 4576 `-gvmsLEVEL' 4577 Request debugging information and also use LEVEL to specify how 4578 much information. The default level is 2. 4579 4580 Level 0 produces no debug information at all. Thus, `-g0' negates 4581 `-g'. 4582 4583 Level 1 produces minimal information, enough for making backtraces 4584 in parts of the program that you don't plan to debug. This 4585 includes descriptions of functions and external variables, but no 4586 information about local variables and no line numbers. 4587 4588 Level 3 includes extra information, such as all the macro 4589 definitions present in the program. Some debuggers support macro 4590 expansion when you use `-g3'. 4591 4592 `-gdwarf-2' does not accept a concatenated debug level, because 4593 GCC used to support an option `-gdwarf' that meant to generate 4594 debug information in version 1 of the DWARF format (which is very 4595 different from version 2), and it would have been too confusing. 4596 That debug format is long obsolete, but the option cannot be 4597 changed now. Instead use an additional `-gLEVEL' option to change 4598 the debug level for DWARF. 4599 4600 `-gmlt' 4601 Produce a minimal line table, with level 1 debugging information 4602 plus information about inlined functions and line numbers. 4603 4604 `-gtoggle' 4605 Turn off generation of debug info, if leaving out this option 4606 would have generated it, or turn it on at level 2 otherwise. The 4607 position of this argument in the command line does not matter, it 4608 takes effect after all other options are processed, and it does so 4609 only once, no matter how many times it is given. This is mainly 4610 intended to be used with `-fcompare-debug'. 4611 4612 `-fdump-final-insns[=FILE]' 4613 Dump the final internal representation (RTL) to FILE. If the 4614 optional argument is omitted (or if FILE is `.'), the name of the 4615 dump file will be determined by appending `.gkd' to the 4616 compilation output file name. 4617 4618 `-fcompare-debug[=OPTS]' 4619 If no error occurs during compilation, run the compiler a second 4620 time, adding OPTS and `-fcompare-debug-second' to the arguments 4621 passed to the second compilation. Dump the final internal 4622 representation in both compilations, and print an error if they 4623 differ. 4624 4625 If the equal sign is omitted, the default `-gtoggle' is used. 4626 4627 The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty 4628 and nonzero, implicitly enables `-fcompare-debug'. If 4629 `GCC_COMPARE_DEBUG' is defined to a string starting with a dash, 4630 then it is used for OPTS, otherwise the default `-gtoggle' is used. 4631 4632 `-fcompare-debug=', with the equal sign but without OPTS, is 4633 equivalent to `-fno-compare-debug', which disables the dumping of 4634 the final representation and the second compilation, preventing 4635 even `GCC_COMPARE_DEBUG' from taking effect. 4636 4637 To verify full coverage during `-fcompare-debug' testing, set 4638 `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which 4639 GCC will reject as an invalid option in any actual compilation 4640 (rather than preprocessing, assembly or linking). To get just a 4641 warning, setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not 4642 overridden' will do. 4643 4644 `-fcompare-debug-second' 4645 This option is implicitly passed to the compiler for the second 4646 compilation requested by `-fcompare-debug', along with options to 4647 silence warnings, and omitting other options that would cause 4648 side-effect compiler outputs to files or to the standard output. 4649 Dump files and preserved temporary files are renamed so as to 4650 contain the `.gk' additional extension during the second 4651 compilation, to avoid overwriting those generated by the first. 4652 4653 When this option is passed to the compiler driver, it causes the 4654 _first_ compilation to be skipped, which makes it useful for little 4655 other than debugging the compiler proper. 4656 4657 `-feliminate-dwarf2-dups' 4658 Compress DWARF2 debugging information by eliminating duplicated 4659 information about each symbol. This option only makes sense when 4660 generating DWARF2 debugging information with `-gdwarf-2'. 4661 4662 `-femit-struct-debug-baseonly' 4663 Emit debug information for struct-like types only when the base 4664 name of the compilation source file matches the base name of file 4665 in which the struct was defined. 4666 4667 This option substantially reduces the size of debugging 4668 information, but at significant potential loss in type information 4669 to the debugger. See `-femit-struct-debug-reduced' for a less 4670 aggressive option. See `-femit-struct-debug-detailed' for more 4671 detailed control. 4672 4673 This option works only with DWARF 2. 4674 4675 `-femit-struct-debug-reduced' 4676 Emit debug information for struct-like types only when the base 4677 name of the compilation source file matches the base name of file 4678 in which the type was defined, unless the struct is a template or 4679 defined in a system header. 4680 4681 This option significantly reduces the size of debugging 4682 information, with some potential loss in type information to the 4683 debugger. See `-femit-struct-debug-baseonly' for a more 4684 aggressive option. See `-femit-struct-debug-detailed' for more 4685 detailed control. 4686 4687 This option works only with DWARF 2. 4688 4689 `-femit-struct-debug-detailed[=SPEC-LIST]' 4690 Specify the struct-like types for which the compiler will generate 4691 debug information. The intent is to reduce duplicate struct debug 4692 information between different object files within the same program. 4693 4694 This option is a detailed version of `-femit-struct-debug-reduced' 4695 and `-femit-struct-debug-baseonly', which will serve for most 4696 needs. 4697 4698 A specification has the syntax 4699 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 4700 4701 The optional first word limits the specification to structs that 4702 are used directly (`dir:') or used indirectly (`ind:'). A struct 4703 type is used directly when it is the type of a variable, member. 4704 Indirect uses arise through pointers to structs. That is, when 4705 use of an incomplete struct would be legal, the use is indirect. 4706 An example is `struct one direct; struct two * indirect;'. 4707 4708 The optional second word limits the specification to ordinary 4709 structs (`ord:') or generic structs (`gen:'). Generic structs are 4710 a bit complicated to explain. For C++, these are non-explicit 4711 specializations of template classes, or non-template classes 4712 within the above. Other programming languages have generics, but 4713 `-femit-struct-debug-detailed' does not yet implement them. 4714 4715 The third word specifies the source files for those structs for 4716 which the compiler will emit debug information. The values `none' 4717 and `any' have the normal meaning. The value `base' means that 4718 the base of name of the file in which the type declaration appears 4719 must match the base of the name of the main compilation file. In 4720 practice, this means that types declared in `foo.c' and `foo.h' 4721 will have debug information, but types declared in other header 4722 will not. The value `sys' means those types satisfying `base' or 4723 declared in system or compiler headers. 4724 4725 You may need to experiment to determine the best settings for your 4726 application. 4727 4728 The default is `-femit-struct-debug-detailed=all'. 4729 4730 This option works only with DWARF 2. 4731 4732 `-fenable-icf-debug' 4733 Generate additional debug information to support identical code 4734 folding (ICF). This option only works with DWARF version 2 or 4735 higher. 4736 4737 `-fno-merge-debug-strings' 4738 Direct the linker to not merge together strings in the debugging 4739 information which are identical in different object files. 4740 Merging is not supported by all assemblers or linkers. Merging 4741 decreases the size of the debug information in the output file at 4742 the cost of increasing link processing time. Merging is enabled 4743 by default. 4744 4745 `-fdebug-prefix-map=OLD=NEW' 4746 When compiling files in directory `OLD', record debugging 4747 information describing them as in `NEW' instead. 4748 4749 `-fno-dwarf2-cfi-asm' 4750 Emit DWARF 2 unwind info as compiler generated `.eh_frame' section 4751 instead of using GAS `.cfi_*' directives. 4752 4753 `-p' 4754 Generate extra code to write profile information suitable for the 4755 analysis program `prof'. You must use this option when compiling 4756 the source files you want data about, and you must also use it when 4757 linking. 4758 4759 `-pg' 4760 Generate extra code to write profile information suitable for the 4761 analysis program `gprof'. You must use this option when compiling 4762 the source files you want data about, and you must also use it when 4763 linking. 4764 4765 `-Q' 4766 Makes the compiler print out each function name as it is compiled, 4767 and print some statistics about each pass when it finishes. 4768 4769 `-ftime-report' 4770 Makes the compiler print some statistics about the time consumed 4771 by each pass when it finishes. 4772 4773 `-fmem-report' 4774 Makes the compiler print some statistics about permanent memory 4775 allocation when it finishes. 4776 4777 `-fpre-ipa-mem-report' 4778 4779 `-fpost-ipa-mem-report' 4780 Makes the compiler print some statistics about permanent memory 4781 allocation before or after interprocedural optimization. 4782 4783 `-fstack-usage' 4784 Makes the compiler output stack usage information for the program, 4785 on a per-function basis. The filename for the dump is made by 4786 appending `.su' to the AUXNAME. AUXNAME is generated from the 4787 name of the output file, if explicitly specified and it is not an 4788 executable, otherwise it is the basename of the source file. An 4789 entry is made up of three fields: 4790 4791 * The name of the function. 4792 4793 * A number of bytes. 4794 4795 * One or more qualifiers: `static', `dynamic', `bounded'. 4796 4797 The qualifier `static' means that the function manipulates the 4798 stack statically: a fixed number of bytes are allocated for the 4799 frame on function entry and released on function exit; no stack 4800 adjustments are otherwise made in the function. The second field 4801 is this fixed number of bytes. 4802 4803 The qualifier `dynamic' means that the function manipulates the 4804 stack dynamically: in addition to the static allocation described 4805 above, stack adjustments are made in the body of the function, for 4806 example to push/pop arguments around function calls. If the 4807 qualifier `bounded' is also present, the amount of these 4808 adjustments is bounded at compile-time and the second field is an 4809 upper bound of the total amount of stack used by the function. If 4810 it is not present, the amount of these adjustments is not bounded 4811 at compile-time and the second field only represents the bounded 4812 part. 4813 4814 `-fprofile-arcs' 4815 Add code so that program flow "arcs" are instrumented. During 4816 execution the program records how many times each branch and call 4817 is executed and how many times it is taken or returns. When the 4818 compiled program exits it saves this data to a file called 4819 `AUXNAME.gcda' for each source file. The data may be used for 4820 profile-directed optimizations (`-fbranch-probabilities'), or for 4821 test coverage analysis (`-ftest-coverage'). Each object file's 4822 AUXNAME is generated from the name of the output file, if 4823 explicitly specified and it is not the final executable, otherwise 4824 it is the basename of the source file. In both cases any suffix 4825 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 4826 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 4827 *Note Cross-profiling::. 4828 4829 `--coverage' 4830 This option is used to compile and link code instrumented for 4831 coverage analysis. The option is a synonym for `-fprofile-arcs' 4832 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 4833 See the documentation for those options for more details. 4834 4835 * Compile the source files with `-fprofile-arcs' plus 4836 optimization and code generation options. For test coverage 4837 analysis, use the additional `-ftest-coverage' option. You 4838 do not need to profile every source file in a program. 4839 4840 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 4841 latter implies the former). 4842 4843 * Run the program on a representative workload to generate the 4844 arc profile information. This may be repeated any number of 4845 times. You can run concurrent instances of your program, and 4846 provided that the file system supports locking, the data 4847 files will be correctly updated. Also `fork' calls are 4848 detected and correctly handled (double counting will not 4849 happen). 4850 4851 * For profile-directed optimizations, compile the source files 4852 again with the same optimization and code generation options 4853 plus `-fbranch-probabilities' (*note Options that Control 4854 Optimization: Optimize Options.). 4855 4856 * For test coverage analysis, use `gcov' to produce human 4857 readable information from the `.gcno' and `.gcda' files. 4858 Refer to the `gcov' documentation for further information. 4859 4860 4861 With `-fprofile-arcs', for each function of your program GCC 4862 creates a program flow graph, then finds a spanning tree for the 4863 graph. Only arcs that are not on the spanning tree have to be 4864 instrumented: the compiler adds code to count the number of times 4865 that these arcs are executed. When an arc is the only exit or 4866 only entrance to a block, the instrumentation code can be added to 4867 the block; otherwise, a new basic block must be created to hold 4868 the instrumentation code. 4869 4870 `-ftest-coverage' 4871 Produce a notes file that the `gcov' code-coverage utility (*note 4872 `gcov'--a Test Coverage Program: Gcov.) can use to show program 4873 coverage. Each source file's note file is called `AUXNAME.gcno'. 4874 Refer to the `-fprofile-arcs' option above for a description of 4875 AUXNAME and instructions on how to generate test coverage data. 4876 Coverage data will match the source files more closely, if you do 4877 not optimize. 4878 4879 `-fdbg-cnt-list' 4880 Print the name and the counter upper bound for all debug counters. 4881 4882 `-fdbg-cnt=COUNTER-VALUE-LIST' 4883 Set the internal debug counter upper bound. COUNTER-VALUE-LIST is 4884 a comma-separated list of NAME:VALUE pairs which sets the upper 4885 bound of each debug counter NAME to VALUE. All debug counters 4886 have the initial upper bound of UINT_MAX, thus dbg_cnt() returns 4887 true always unless the upper bound is set by this option. e.g. 4888 With -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true 4889 only for first 10 invocations 4890 4891 `-fenable-KIND-PASS' 4892 `-fdisable-KIND-PASS=RANGE-LIST' 4893 This is a set of debugging options that are used to explicitly 4894 disable/enable optimization passes. For compiler users, regular 4895 options for enabling/disabling passes should be used instead. 4896 4897 * -fdisable-ipa-PASS Disable ipa pass PASS. PASS is the pass 4898 name. If the same pass is statically invoked in the compiler 4899 multiple times, the pass name should be appended with a 4900 sequential number starting from 1. 4901 4902 * -fdisable-rtl-PASS 4903 4904 * -fdisable-rtl-PASS=RANGE-LIST Disable rtl pass PASS. PASS is 4905 the pass name. If the same pass is statically invoked in the 4906 compiler multiple times, the pass name should be appended 4907 with a sequential number starting from 1. RANGE-LIST is a 4908 comma seperated list of function ranges or assembler names. 4909 Each range is a number pair seperated by a colon. The range 4910 is inclusive in both ends. If the range is trivial, the 4911 number pair can be simplified as a single number. If the 4912 function's cgraph node's UID is falling within one of the 4913 specified ranges, the PASS is disabled for that function. 4914 The UID is shown in the function header of a dump file, and 4915 the pass names can be dumped by using option `-fdump-passes'. 4916 4917 * -fdisable-tree-PASS 4918 4919 * -fdisable-tree-PASS=RANGE-LIST Disable tree pass PASS. See 4920 `-fdisable-rtl' for the description of option arguments. 4921 4922 * -fenable-ipa-PASS Enable ipa pass PASS. PASS is the pass 4923 name. If the same pass is statically invoked in the compiler 4924 multiple times, the pass name should be appended with a 4925 sequential number starting from 1. 4926 4927 * -fenable-rtl-PASS 4928 4929 * -fenable-rtl-PASS=RANGE-LIST Enable rtl pass PASS. See 4930 `-fdisable-rtl' for option argument description and examples. 4931 4932 * -fenable-tree-PASS 4933 4934 * -fenable-tree-PASS=RANGE-LIST Enable tree pass PASS. See 4935 `-fdisable-rtl' for the description of option arguments. 4936 4937 4938 # disable ccp1 for all functions 4939 -fdisable-tree-ccp1 4940 # disable complete unroll for function whose cgraph node uid is 1 4941 -fenable-tree-cunroll=1 4942 # disable gcse2 for functions at the following ranges [1,1], 4943 # [300,400], and [400,1000] 4944 # disable gcse2 for functions foo and foo2 4945 -fdisable-rtl-gcse2=foo,foo2 4946 # disable early inlining 4947 -fdisable-tree-einline 4948 # disable ipa inlining 4949 -fdisable-ipa-inline 4950 # enable tree full unroll 4951 -fenable-tree-unroll 4952 4953 4954 `-dLETTERS' 4955 `-fdump-rtl-PASS' 4956 Says to make debugging dumps during compilation at times specified 4957 by LETTERS. This is used for debugging the RTL-based passes of the 4958 compiler. The file names for most of the dumps are made by 4959 appending a pass number and a word to the DUMPNAME, and the files 4960 are created in the directory of the output file. Note that the 4961 pass number is computed statically as passes get registered into 4962 the pass manager. Thus the numbering is not related to the 4963 dynamic order of execution of passes. In particular, a pass 4964 installed by a plugin could have a number over 200 even if it 4965 executed quite early. DUMPNAME is generated from the name of the 4966 output file, if explicitly specified and it is not an executable, 4967 otherwise it is the basename of the source file. These switches 4968 may have different effects when `-E' is used for preprocessing. 4969 4970 Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d' 4971 option LETTERS. Here are the possible letters for use in PASS and 4972 LETTERS, and their meanings: 4973 4974 `-fdump-rtl-alignments' 4975 Dump after branch alignments have been computed. 4976 4977 `-fdump-rtl-asmcons' 4978 Dump after fixing rtl statements that have unsatisfied in/out 4979 constraints. 4980 4981 `-fdump-rtl-auto_inc_dec' 4982 Dump after auto-inc-dec discovery. This pass is only run on 4983 architectures that have auto inc or auto dec instructions. 4984 4985 `-fdump-rtl-barriers' 4986 Dump after cleaning up the barrier instructions. 4987 4988 `-fdump-rtl-bbpart' 4989 Dump after partitioning hot and cold basic blocks. 4990 4991 `-fdump-rtl-bbro' 4992 Dump after block reordering. 4993 4994 `-fdump-rtl-btl1' 4995 `-fdump-rtl-btl2' 4996 `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after 4997 the two branch target load optimization passes. 4998 4999 `-fdump-rtl-bypass' 5000 Dump after jump bypassing and control flow optimizations. 5001 5002 `-fdump-rtl-combine' 5003 Dump after the RTL instruction combination pass. 5004 5005 `-fdump-rtl-compgotos' 5006 Dump after duplicating the computed gotos. 5007 5008 `-fdump-rtl-ce1' 5009 `-fdump-rtl-ce2' 5010 `-fdump-rtl-ce3' 5011 `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3' 5012 enable dumping after the three if conversion passes. 5013 5014 `-fdump-rtl-cprop_hardreg' 5015 Dump after hard register copy propagation. 5016 5017 `-fdump-rtl-csa' 5018 Dump after combining stack adjustments. 5019 5020 `-fdump-rtl-cse1' 5021 `-fdump-rtl-cse2' 5022 `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after 5023 the two common sub-expression elimination passes. 5024 5025 `-fdump-rtl-dce' 5026 Dump after the standalone dead code elimination passes. 5027 5028 `-fdump-rtl-dbr' 5029 Dump after delayed branch scheduling. 5030 5031 `-fdump-rtl-dce1' 5032 `-fdump-rtl-dce2' 5033 `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after 5034 the two dead store elimination passes. 5035 5036 `-fdump-rtl-eh' 5037 Dump after finalization of EH handling code. 5038 5039 `-fdump-rtl-eh_ranges' 5040 Dump after conversion of EH handling range regions. 5041 5042 `-fdump-rtl-expand' 5043 Dump after RTL generation. 5044 5045 `-fdump-rtl-fwprop1' 5046 `-fdump-rtl-fwprop2' 5047 `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping 5048 after the two forward propagation passes. 5049 5050 `-fdump-rtl-gcse1' 5051 `-fdump-rtl-gcse2' 5052 `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping 5053 after global common subexpression elimination. 5054 5055 `-fdump-rtl-init-regs' 5056 Dump after the initialization of the registers. 5057 5058 `-fdump-rtl-initvals' 5059 Dump after the computation of the initial value sets. 5060 5061 `-fdump-rtl-into_cfglayout' 5062 Dump after converting to cfglayout mode. 5063 5064 `-fdump-rtl-ira' 5065 Dump after iterated register allocation. 5066 5067 `-fdump-rtl-jump' 5068 Dump after the second jump optimization. 5069 5070 `-fdump-rtl-loop2' 5071 `-fdump-rtl-loop2' enables dumping after the rtl loop 5072 optimization passes. 5073 5074 `-fdump-rtl-mach' 5075 Dump after performing the machine dependent reorganization 5076 pass, if that pass exists. 5077 5078 `-fdump-rtl-mode_sw' 5079 Dump after removing redundant mode switches. 5080 5081 `-fdump-rtl-rnreg' 5082 Dump after register renumbering. 5083 5084 `-fdump-rtl-outof_cfglayout' 5085 Dump after converting from cfglayout mode. 5086 5087 `-fdump-rtl-peephole2' 5088 Dump after the peephole pass. 5089 5090 `-fdump-rtl-postreload' 5091 Dump after post-reload optimizations. 5092 5093 `-fdump-rtl-pro_and_epilogue' 5094 Dump after generating the function pro and epilogues. 5095 5096 `-fdump-rtl-regmove' 5097 Dump after the register move pass. 5098 5099 `-fdump-rtl-sched1' 5100 `-fdump-rtl-sched2' 5101 `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping 5102 after the basic block scheduling passes. 5103 5104 `-fdump-rtl-see' 5105 Dump after sign extension elimination. 5106 5107 `-fdump-rtl-seqabstr' 5108 Dump after common sequence discovery. 5109 5110 `-fdump-rtl-shorten' 5111 Dump after shortening branches. 5112 5113 `-fdump-rtl-sibling' 5114 Dump after sibling call optimizations. 5115 5116 `-fdump-rtl-split1' 5117 `-fdump-rtl-split2' 5118 `-fdump-rtl-split3' 5119 `-fdump-rtl-split4' 5120 `-fdump-rtl-split5' 5121 `-fdump-rtl-split1', `-fdump-rtl-split2', 5122 `-fdump-rtl-split3', `-fdump-rtl-split4' and 5123 `-fdump-rtl-split5' enable dumping after five rounds of 5124 instruction splitting. 5125 5126 `-fdump-rtl-sms' 5127 Dump after modulo scheduling. This pass is only run on some 5128 architectures. 5129 5130 `-fdump-rtl-stack' 5131 Dump after conversion from GCC's "flat register file" 5132 registers to the x87's stack-like registers. This pass is 5133 only run on x86 variants. 5134 5135 `-fdump-rtl-subreg1' 5136 `-fdump-rtl-subreg2' 5137 `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping 5138 after the two subreg expansion passes. 5139 5140 `-fdump-rtl-unshare' 5141 Dump after all rtl has been unshared. 5142 5143 `-fdump-rtl-vartrack' 5144 Dump after variable tracking. 5145 5146 `-fdump-rtl-vregs' 5147 Dump after converting virtual registers to hard registers. 5148 5149 `-fdump-rtl-web' 5150 Dump after live range splitting. 5151 5152 `-fdump-rtl-regclass' 5153 `-fdump-rtl-subregs_of_mode_init' 5154 `-fdump-rtl-subregs_of_mode_finish' 5155 `-fdump-rtl-dfinit' 5156 `-fdump-rtl-dfinish' 5157 These dumps are defined but always produce empty files. 5158 5159 `-fdump-rtl-all' 5160 Produce all the dumps listed above. 5161 5162 `-dA' 5163 Annotate the assembler output with miscellaneous debugging 5164 information. 5165 5166 `-dD' 5167 Dump all macro definitions, at the end of preprocessing, in 5168 addition to normal output. 5169 5170 `-dH' 5171 Produce a core dump whenever an error occurs. 5172 5173 `-dm' 5174 Print statistics on memory usage, at the end of the run, to 5175 standard error. 5176 5177 `-dp' 5178 Annotate the assembler output with a comment indicating which 5179 pattern and alternative was used. The length of each 5180 instruction is also printed. 5181 5182 `-dP' 5183 Dump the RTL in the assembler output as a comment before each 5184 instruction. Also turns on `-dp' annotation. 5185 5186 `-dv' 5187 For each of the other indicated dump files 5188 (`-fdump-rtl-PASS'), dump a representation of the control 5189 flow graph suitable for viewing with VCG to `FILE.PASS.vcg'. 5190 5191 `-dx' 5192 Just generate RTL for a function instead of compiling it. 5193 Usually used with `-fdump-rtl-expand'. 5194 5195 `-fdump-noaddr' 5196 When doing debugging dumps, suppress address output. This makes 5197 it more feasible to use diff on debugging dumps for compiler 5198 invocations with different compiler binaries and/or different text 5199 / bss / data / heap / stack / dso start locations. 5200 5201 `-fdump-unnumbered' 5202 When doing debugging dumps, suppress instruction numbers and 5203 address output. This makes it more feasible to use diff on 5204 debugging dumps for compiler invocations with different options, 5205 in particular with and without `-g'. 5206 5207 `-fdump-unnumbered-links' 5208 When doing debugging dumps (see `-d' option above), suppress 5209 instruction numbers for the links to the previous and next 5210 instructions in a sequence. 5211 5212 `-fdump-translation-unit (C++ only)' 5213 `-fdump-translation-unit-OPTIONS (C++ only)' 5214 Dump a representation of the tree structure for the entire 5215 translation unit to a file. The file name is made by appending 5216 `.tu' to the source file name, and the file is created in the same 5217 directory as the output file. If the `-OPTIONS' form is used, 5218 OPTIONS controls the details of the dump as described for the 5219 `-fdump-tree' options. 5220 5221 `-fdump-class-hierarchy (C++ only)' 5222 `-fdump-class-hierarchy-OPTIONS (C++ only)' 5223 Dump a representation of each class's hierarchy and virtual 5224 function table layout to a file. The file name is made by 5225 appending `.class' to the source file name, and the file is 5226 created in the same directory as the output file. If the 5227 `-OPTIONS' form is used, OPTIONS controls the details of the dump 5228 as described for the `-fdump-tree' options. 5229 5230 `-fdump-ipa-SWITCH' 5231 Control the dumping at various stages of inter-procedural analysis 5232 language tree to a file. The file name is generated by appending a 5233 switch specific suffix to the source file name, and the file is 5234 created in the same directory as the output file. The following 5235 dumps are possible: 5236 5237 `all' 5238 Enables all inter-procedural analysis dumps. 5239 5240 `cgraph' 5241 Dumps information about call-graph optimization, unused 5242 function removal, and inlining decisions. 5243 5244 `inline' 5245 Dump after function inlining. 5246 5247 5248 `-fdump-passes' 5249 Dump the list of optimization passes that are turned on and off by 5250 the current command line options. 5251 5252 `-fdump-statistics-OPTION' 5253 Enable and control dumping of pass statistics in a separate file. 5254 The file name is generated by appending a suffix ending in 5255 `.statistics' to the source file name, and the file is created in 5256 the same directory as the output file. If the `-OPTION' form is 5257 used, `-stats' will cause counters to be summed over the whole 5258 compilation unit while `-details' will dump every event as the 5259 passes generate them. The default with no option is to sum 5260 counters for each function compiled. 5261 5262 `-fdump-tree-SWITCH' 5263 `-fdump-tree-SWITCH-OPTIONS' 5264 Control the dumping at various stages of processing the 5265 intermediate language tree to a file. The file name is generated 5266 by appending a switch specific suffix to the source file name, and 5267 the file is created in the same directory as the output file. If 5268 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 5269 options that control the details of the dump. Not all options are 5270 applicable to all dumps, those which are not meaningful will be 5271 ignored. The following options are available 5272 5273 `address' 5274 Print the address of each node. Usually this is not 5275 meaningful as it changes according to the environment and 5276 source file. Its primary use is for tying up a dump file 5277 with a debug environment. 5278 5279 `asmname' 5280 If `DECL_ASSEMBLER_NAME' has been set for a given decl, use 5281 that in the dump instead of `DECL_NAME'. Its primary use is 5282 ease of use working backward from mangled names in the 5283 assembly file. 5284 5285 `slim' 5286 Inhibit dumping of members of a scope or body of a function 5287 merely because that scope has been reached. Only dump such 5288 items when they are directly reachable by some other path. 5289 When dumping pretty-printed trees, this option inhibits 5290 dumping the bodies of control structures. 5291 5292 `raw' 5293 Print a raw representation of the tree. By default, trees are 5294 pretty-printed into a C-like representation. 5295 5296 `details' 5297 Enable more detailed dumps (not honored by every dump option). 5298 5299 `stats' 5300 Enable dumping various statistics about the pass (not honored 5301 by every dump option). 5302 5303 `blocks' 5304 Enable showing basic block boundaries (disabled in raw dumps). 5305 5306 `vops' 5307 Enable showing virtual operands for every statement. 5308 5309 `lineno' 5310 Enable showing line numbers for statements. 5311 5312 `uid' 5313 Enable showing the unique ID (`DECL_UID') for each variable. 5314 5315 `verbose' 5316 Enable showing the tree dump for each statement. 5317 5318 `eh' 5319 Enable showing the EH region number holding each statement. 5320 5321 `all' 5322 Turn on all options, except `raw', `slim', `verbose' and 5323 `lineno'. 5324 5325 The following tree dumps are possible: 5326 `original' 5327 Dump before any tree based optimization, to `FILE.original'. 5328 5329 `optimized' 5330 Dump after all tree based optimization, to `FILE.optimized'. 5331 5332 `gimple' 5333 Dump each function before and after the gimplification pass 5334 to a file. The file name is made by appending `.gimple' to 5335 the source file name. 5336 5337 `cfg' 5338 Dump the control flow graph of each function to a file. The 5339 file name is made by appending `.cfg' to the source file name. 5340 5341 `vcg' 5342 Dump the control flow graph of each function to a file in VCG 5343 format. The file name is made by appending `.vcg' to the 5344 source file name. Note that if the file contains more than 5345 one function, the generated file cannot be used directly by 5346 VCG. You will need to cut and paste each function's graph 5347 into its own separate file first. 5348 5349 `ch' 5350 Dump each function after copying loop headers. The file name 5351 is made by appending `.ch' to the source file name. 5352 5353 `ssa' 5354 Dump SSA related information to a file. The file name is 5355 made by appending `.ssa' to the source file name. 5356 5357 `alias' 5358 Dump aliasing information for each function. The file name 5359 is made by appending `.alias' to the source file name. 5360 5361 `ccp' 5362 Dump each function after CCP. The file name is made by 5363 appending `.ccp' to the source file name. 5364 5365 `storeccp' 5366 Dump each function after STORE-CCP. The file name is made by 5367 appending `.storeccp' to the source file name. 5368 5369 `pre' 5370 Dump trees after partial redundancy elimination. The file 5371 name is made by appending `.pre' to the source file name. 5372 5373 `fre' 5374 Dump trees after full redundancy elimination. The file name 5375 is made by appending `.fre' to the source file name. 5376 5377 `copyprop' 5378 Dump trees after copy propagation. The file name is made by 5379 appending `.copyprop' to the source file name. 5380 5381 `store_copyprop' 5382 Dump trees after store copy-propagation. The file name is 5383 made by appending `.store_copyprop' to the source file name. 5384 5385 `dce' 5386 Dump each function after dead code elimination. The file 5387 name is made by appending `.dce' to the source file name. 5388 5389 `mudflap' 5390 Dump each function after adding mudflap instrumentation. The 5391 file name is made by appending `.mudflap' to the source file 5392 name. 5393 5394 `sra' 5395 Dump each function after performing scalar replacement of 5396 aggregates. The file name is made by appending `.sra' to the 5397 source file name. 5398 5399 `sink' 5400 Dump each function after performing code sinking. The file 5401 name is made by appending `.sink' to the source file name. 5402 5403 `dom' 5404 Dump each function after applying dominator tree 5405 optimizations. The file name is made by appending `.dom' to 5406 the source file name. 5407 5408 `dse' 5409 Dump each function after applying dead store elimination. 5410 The file name is made by appending `.dse' to the source file 5411 name. 5412 5413 `phiopt' 5414 Dump each function after optimizing PHI nodes into 5415 straightline code. The file name is made by appending 5416 `.phiopt' to the source file name. 5417 5418 `forwprop' 5419 Dump each function after forward propagating single use 5420 variables. The file name is made by appending `.forwprop' to 5421 the source file name. 5422 5423 `copyrename' 5424 Dump each function after applying the copy rename 5425 optimization. The file name is made by appending 5426 `.copyrename' to the source file name. 5427 5428 `nrv' 5429 Dump each function after applying the named return value 5430 optimization on generic trees. The file name is made by 5431 appending `.nrv' to the source file name. 5432 5433 `vect' 5434 Dump each function after applying vectorization of loops. 5435 The file name is made by appending `.vect' to the source file 5436 name. 5437 5438 `slp' 5439 Dump each function after applying vectorization of basic 5440 blocks. The file name is made by appending `.slp' to the 5441 source file name. 5442 5443 `vrp' 5444 Dump each function after Value Range Propagation (VRP). The 5445 file name is made by appending `.vrp' to the source file name. 5446 5447 `all' 5448 Enable all the available tree dumps with the flags provided 5449 in this option. 5450 5451 `-ftree-vectorizer-verbose=N' 5452 This option controls the amount of debugging output the vectorizer 5453 prints. This information is written to standard error, unless 5454 `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which 5455 case it is output to the usual dump listing file, `.vect'. For 5456 N=0 no diagnostic information is reported. If N=1 the vectorizer 5457 reports each loop that got vectorized, and the total number of 5458 loops that got vectorized. If N=2 the vectorizer also reports 5459 non-vectorized loops that passed the first analysis phase 5460 (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb, 5461 single-entry/exit loops. This is the same verbosity level that 5462 `-fdump-tree-vect-stats' uses. Higher verbosity levels mean 5463 either more information dumped for each reported loop, or same 5464 amount of information reported for more loops: if N=3, vectorizer 5465 cost model information is reported. If N=4, alignment related 5466 information is added to the reports. If N=5, data-references 5467 related information (e.g. memory dependences, memory 5468 access-patterns) is added to the reports. If N=6, the vectorizer 5469 reports also non-vectorized inner-most loops that did not pass the 5470 first analysis phase (i.e., may not be countable, or may have 5471 complicated control-flow). If N=7, the vectorizer reports also 5472 non-vectorized nested loops. If N=8, SLP related information is 5473 added to the reports. For N=9, all the information the vectorizer 5474 generates during its analysis and transformation is reported. 5475 This is the same verbosity level that `-fdump-tree-vect-details' 5476 uses. 5477 5478 `-frandom-seed=STRING' 5479 This option provides a seed that GCC uses when it would otherwise 5480 use random numbers. It is used to generate certain symbol names 5481 that have to be different in every compiled file. It is also used 5482 to place unique stamps in coverage data files and the object files 5483 that produce them. You can use the `-frandom-seed' option to 5484 produce reproducibly identical object files. 5485 5486 The STRING should be different for every file you compile. 5487 5488 `-fsched-verbose=N' 5489 On targets that use instruction scheduling, this option controls 5490 the amount of debugging output the scheduler prints. This 5491 information is written to standard error, unless 5492 `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which 5493 case it is output to the usual dump listing file, `.sched1' or 5494 `.sched2' respectively. However for N greater than nine, the 5495 output is always printed to standard error. 5496 5497 For N greater than zero, `-fsched-verbose' outputs the same 5498 information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'. For N 5499 greater than one, it also output basic block probabilities, 5500 detailed ready list information and unit/insn info. For N greater 5501 than two, it includes RTL at abort point, control-flow and regions 5502 info. And for N over four, `-fsched-verbose' also includes 5503 dependence info. 5504 5505 `-save-temps' 5506 `-save-temps=cwd' 5507 Store the usual "temporary" intermediate files permanently; place 5508 them in the current directory and name them based on the source 5509 file. Thus, compiling `foo.c' with `-c -save-temps' would produce 5510 files `foo.i' and `foo.s', as well as `foo.o'. This creates a 5511 preprocessed `foo.i' output file even though the compiler now 5512 normally uses an integrated preprocessor. 5513 5514 When used in combination with the `-x' command line option, 5515 `-save-temps' is sensible enough to avoid over writing an input 5516 source file with the same extension as an intermediate file. The 5517 corresponding intermediate file may be obtained by renaming the 5518 source file before using `-save-temps'. 5519 5520 If you invoke GCC in parallel, compiling several different source 5521 files that share a common base name in different subdirectories or 5522 the same source file compiled for multiple output destinations, it 5523 is likely that the different parallel compilers will interfere 5524 with each other, and overwrite the temporary files. For instance: 5525 5526 gcc -save-temps -o outdir1/foo.o indir1/foo.c& 5527 gcc -save-temps -o outdir2/foo.o indir2/foo.c& 5528 5529 may result in `foo.i' and `foo.o' being written to simultaneously 5530 by both compilers. 5531 5532 `-save-temps=obj' 5533 Store the usual "temporary" intermediate files permanently. If the 5534 `-o' option is used, the temporary files are based on the object 5535 file. If the `-o' option is not used, the `-save-temps=obj' 5536 switch behaves like `-save-temps'. 5537 5538 For example: 5539 5540 gcc -save-temps=obj -c foo.c 5541 gcc -save-temps=obj -c bar.c -o dir/xbar.o 5542 gcc -save-temps=obj foobar.c -o dir2/yfoobar 5543 5544 would create `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s', 5545 `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'. 5546 5547 `-time[=FILE]' 5548 Report the CPU time taken by each subprocess in the compilation 5549 sequence. For C source files, this is the compiler proper and 5550 assembler (plus the linker if linking is done). 5551 5552 Without the specification of an output file, the output looks like 5553 this: 5554 5555 # cc1 0.12 0.01 5556 # as 0.00 0.01 5557 5558 The first number on each line is the "user time", that is time 5559 spent executing the program itself. The second number is "system 5560 time", time spent executing operating system routines on behalf of 5561 the program. Both numbers are in seconds. 5562 5563 With the specification of an output file, the output is appended 5564 to the named file, and it looks like this: 5565 5566 0.12 0.01 cc1 OPTIONS 5567 0.00 0.01 as OPTIONS 5568 5569 The "user time" and the "system time" are moved before the program 5570 name, and the options passed to the program are displayed, so that 5571 one can later tell what file was being compiled, and with which 5572 options. 5573 5574 `-fvar-tracking' 5575 Run variable tracking pass. It computes where variables are 5576 stored at each position in code. Better debugging information is 5577 then generated (if the debugging information format supports this 5578 information). 5579 5580 It is enabled by default when compiling with optimization (`-Os', 5581 `-O', `-O2', ...), debugging information (`-g') and the debug info 5582 format supports it. 5583 5584 `-fvar-tracking-assignments' 5585 Annotate assignments to user variables early in the compilation and 5586 attempt to carry the annotations over throughout the compilation 5587 all the way to the end, in an attempt to improve debug information 5588 while optimizing. Use of `-gdwarf-4' is recommended along with it. 5589 5590 It can be enabled even if var-tracking is disabled, in which case 5591 annotations will be created and maintained, but discarded at the 5592 end. 5593 5594 `-fvar-tracking-assignments-toggle' 5595 Toggle `-fvar-tracking-assignments', in the same way that 5596 `-gtoggle' toggles `-g'. 5597 5598 `-print-file-name=LIBRARY' 5599 Print the full absolute name of the library file LIBRARY that 5600 would be used when linking--and don't do anything else. With this 5601 option, GCC does not compile or link anything; it just prints the 5602 file name. 5603 5604 `-print-multi-directory' 5605 Print the directory name corresponding to the multilib selected by 5606 any other switches present in the command line. This directory is 5607 supposed to exist in `GCC_EXEC_PREFIX'. 5608 5609 `-print-multi-lib' 5610 Print the mapping from multilib directory names to compiler 5611 switches that enable them. The directory name is separated from 5612 the switches by `;', and each switch starts with an `@' instead of 5613 the `-', without spaces between multiple switches. This is 5614 supposed to ease shell-processing. 5615 5616 `-print-multi-os-directory' 5617 Print the path to OS libraries for the selected multilib, relative 5618 to some `lib' subdirectory. If OS libraries are present in the 5619 `lib' subdirectory and no multilibs are used, this is usually just 5620 `.', if OS libraries are present in `libSUFFIX' sibling 5621 directories this prints e.g. `../lib64', `../lib' or `../lib32', 5622 or if OS libraries are present in `lib/SUBDIR' subdirectories it 5623 prints e.g. `amd64', `sparcv9' or `ev6'. 5624 5625 `-print-prog-name=PROGRAM' 5626 Like `-print-file-name', but searches for a program such as `cpp'. 5627 5628 `-print-libgcc-file-name' 5629 Same as `-print-file-name=libgcc.a'. 5630 5631 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 5632 you do want to link with `libgcc.a'. You can do 5633 5634 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 5635 5636 `-print-search-dirs' 5637 Print the name of the configured installation directory and a list 5638 of program and library directories `gcc' will search--and don't do 5639 anything else. 5640 5641 This is useful when `gcc' prints the error message `installation 5642 problem, cannot exec cpp0: No such file or directory'. To resolve 5643 this you either need to put `cpp0' and the other compiler 5644 components where `gcc' expects to find them, or you can set the 5645 environment variable `GCC_EXEC_PREFIX' to the directory where you 5646 installed them. Don't forget the trailing `/'. *Note Environment 5647 Variables::. 5648 5649 `-print-sysroot' 5650 Print the target sysroot directory that will be used during 5651 compilation. This is the target sysroot specified either at 5652 configure time or using the `--sysroot' option, possibly with an 5653 extra suffix that depends on compilation options. If no target 5654 sysroot is specified, the option prints nothing. 5655 5656 `-print-sysroot-headers-suffix' 5657 Print the suffix added to the target sysroot when searching for 5658 headers, or give an error if the compiler is not configured with 5659 such a suffix--and don't do anything else. 5660 5661 `-dumpmachine' 5662 Print the compiler's target machine (for example, 5663 `i686-pc-linux-gnu')--and don't do anything else. 5664 5665 `-dumpversion' 5666 Print the compiler version (for example, `3.0')--and don't do 5667 anything else. 5668 5669 `-dumpspecs' 5670 Print the compiler's built-in specs--and don't do anything else. 5671 (This is used when GCC itself is being built.) *Note Spec Files::. 5672 5673 `-feliminate-unused-debug-types' 5674 Normally, when producing DWARF2 output, GCC will emit debugging 5675 information for all types declared in a compilation unit, 5676 regardless of whether or not they are actually used in that 5677 compilation unit. Sometimes this is useful, such as if, in the 5678 debugger, you want to cast a value to a type that is not actually 5679 used in your program (but is declared). More often, however, this 5680 results in a significant amount of wasted space. With this 5681 option, GCC will avoid producing debug symbol output for types 5682 that are nowhere used in the source file being compiled. 5683 5684 5685 File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 5686 5687 3.10 Options That Control Optimization 5688 ====================================== 5689 5690 These options control various sorts of optimizations. 5691 5692 Without any optimization option, the compiler's goal is to reduce the 5693 cost of compilation and to make debugging produce the expected results. 5694 Statements are independent: if you stop the program with a breakpoint 5695 between statements, you can then assign a new value to any variable or 5696 change the program counter to any other statement in the function and 5697 get exactly the results you would expect from the source code. 5698 5699 Turning on optimization flags makes the compiler attempt to improve 5700 the performance and/or code size at the expense of compilation time and 5701 possibly the ability to debug the program. 5702 5703 The compiler performs optimization based on the knowledge it has of the 5704 program. Compiling multiple files at once to a single output file mode 5705 allows the compiler to use information gained from all of the files 5706 when compiling each of them. 5707 5708 Not all optimizations are controlled directly by a flag. Only 5709 optimizations that have a flag are listed in this section. 5710 5711 Most optimizations are only enabled if an `-O' level is set on the 5712 command line. Otherwise they are disabled, even if individual 5713 optimization flags are specified. 5714 5715 Depending on the target and how GCC was configured, a slightly 5716 different set of optimizations may be enabled at each `-O' level than 5717 those listed here. You can invoke GCC with `-Q --help=optimizers' to 5718 find out the exact set of optimizations that are enabled at each level. 5719 *Note Overall Options::, for examples. 5720 5721 `-O' 5722 `-O1' 5723 Optimize. Optimizing compilation takes somewhat more time, and a 5724 lot more memory for a large function. 5725 5726 With `-O', the compiler tries to reduce code size and execution 5727 time, without performing any optimizations that take a great deal 5728 of compilation time. 5729 5730 `-O' turns on the following optimization flags: 5731 -fauto-inc-dec 5732 -fcompare-elim 5733 -fcprop-registers 5734 -fdce 5735 -fdefer-pop 5736 -fdelayed-branch 5737 -fdse 5738 -fguess-branch-probability 5739 -fif-conversion2 5740 -fif-conversion 5741 -fipa-pure-const 5742 -fipa-profile 5743 -fipa-reference 5744 -fmerge-constants 5745 -fsplit-wide-types 5746 -ftree-bit-ccp 5747 -ftree-builtin-call-dce 5748 -ftree-ccp 5749 -ftree-ch 5750 -ftree-copyrename 5751 -ftree-dce 5752 -ftree-dominator-opts 5753 -ftree-dse 5754 -ftree-forwprop 5755 -ftree-fre 5756 -ftree-phiprop 5757 -ftree-sra 5758 -ftree-pta 5759 -ftree-ter 5760 -funit-at-a-time 5761 5762 `-O' also turns on `-fomit-frame-pointer' on machines where doing 5763 so does not interfere with debugging. 5764 5765 `-O2' 5766 Optimize even more. GCC performs nearly all supported 5767 optimizations that do not involve a space-speed tradeoff. As 5768 compared to `-O', this option increases both compilation time and 5769 the performance of the generated code. 5770 5771 `-O2' turns on all optimization flags specified by `-O'. It also 5772 turns on the following optimization flags: 5773 -fthread-jumps 5774 -falign-functions -falign-jumps 5775 -falign-loops -falign-labels 5776 -fcaller-saves 5777 -fcrossjumping 5778 -fcse-follow-jumps -fcse-skip-blocks 5779 -fdelete-null-pointer-checks 5780 -fdevirtualize 5781 -fexpensive-optimizations 5782 -fgcse -fgcse-lm 5783 -finline-small-functions 5784 -findirect-inlining 5785 -fipa-sra 5786 -foptimize-sibling-calls 5787 -fpartial-inlining 5788 -fpeephole2 5789 -fregmove 5790 -freorder-blocks -freorder-functions 5791 -frerun-cse-after-loop 5792 -fsched-interblock -fsched-spec 5793 -fschedule-insns -fschedule-insns2 5794 -fstrict-aliasing -fstrict-overflow 5795 -ftree-switch-conversion 5796 -ftree-pre 5797 -ftree-vrp 5798 5799 Please note the warning under `-fgcse' about invoking `-O2' on 5800 programs that use computed gotos. 5801 5802 `-O3' 5803 Optimize yet more. `-O3' turns on all optimizations specified by 5804 `-O2' and also turns on the `-finline-functions', 5805 `-funswitch-loops', `-fpredictive-commoning', 5806 `-fgcse-after-reload', `-ftree-vectorize' and `-fipa-cp-clone' 5807 options. 5808 5809 `-O0' 5810 Reduce compilation time and make debugging produce the expected 5811 results. This is the default. 5812 5813 `-Os' 5814 Optimize for size. `-Os' enables all `-O2' optimizations that do 5815 not typically increase code size. It also performs further 5816 optimizations designed to reduce code size. 5817 5818 `-Os' disables the following optimization flags: 5819 -falign-functions -falign-jumps -falign-loops 5820 -falign-labels -freorder-blocks -freorder-blocks-and-partition 5821 -fprefetch-loop-arrays -ftree-vect-loop-version 5822 5823 `-Ofast' 5824 Disregard strict standards compliance. `-Ofast' enables all `-O3' 5825 optimizations. It also enables optimizations that are not valid 5826 for all standard compliant programs. It turns on `-ffast-math'. 5827 5828 If you use multiple `-O' options, with or without level numbers, 5829 the last such option is the one that is effective. 5830 5831 Options of the form `-fFLAG' specify machine-independent flags. Most 5832 flags have both positive and negative forms; the negative form of 5833 `-ffoo' would be `-fno-foo'. In the table below, only one of the forms 5834 is listed--the one you typically will use. You can figure out the 5835 other form by either removing `no-' or adding it. 5836 5837 The following options control specific optimizations. They are either 5838 activated by `-O' options or are related to ones that are. You can use 5839 the following flags in the rare cases when "fine-tuning" of 5840 optimizations to be performed is desired. 5841 5842 `-fno-default-inline' 5843 Do not make member functions inline by default merely because they 5844 are defined inside the class scope (C++ only). Otherwise, when 5845 you specify `-O', member functions defined inside class scope are 5846 compiled inline by default; i.e., you don't need to add `inline' 5847 in front of the member function name. 5848 5849 `-fno-defer-pop' 5850 Always pop the arguments to each function call as soon as that 5851 function returns. For machines which must pop arguments after a 5852 function call, the compiler normally lets arguments accumulate on 5853 the stack for several function calls and pops them all at once. 5854 5855 Disabled at levels `-O', `-O2', `-O3', `-Os'. 5856 5857 `-fforward-propagate' 5858 Perform a forward propagation pass on RTL. The pass tries to 5859 combine two instructions and checks if the result can be 5860 simplified. If loop unrolling is active, two passes are performed 5861 and the second is scheduled after loop unrolling. 5862 5863 This option is enabled by default at optimization levels `-O', 5864 `-O2', `-O3', `-Os'. 5865 5866 `-ffp-contract=STYLE' 5867 `-ffp-contract=off' disables floating-point expression contraction. 5868 `-ffp-contract=fast' enables floating-point expression contraction 5869 such as forming of fused multiply-add operations if the target has 5870 native support for them. `-ffp-contract=on' enables 5871 floating-point expression contraction if allowed by the language 5872 standard. This is currently not implemented and treated equal to 5873 `-ffp-contract=off'. 5874 5875 The default is `-ffp-contract=fast'. 5876 5877 `-fomit-frame-pointer' 5878 Don't keep the frame pointer in a register for functions that 5879 don't need one. This avoids the instructions to save, set up and 5880 restore frame pointers; it also makes an extra register available 5881 in many functions. *It also makes debugging impossible on some 5882 machines.* 5883 5884 On some machines, such as the VAX, this flag has no effect, because 5885 the standard calling sequence automatically handles the frame 5886 pointer and nothing is saved by pretending it doesn't exist. The 5887 machine-description macro `FRAME_POINTER_REQUIRED' controls 5888 whether a target machine supports this flag. *Note Register 5889 Usage: (gccint)Registers. 5890 5891 Starting with GCC version 4.6, the default setting (when not 5892 optimizing for size) for 32-bit Linux x86 and 32-bit Darwin x86 5893 targets has been changed to `-fomit-frame-pointer'. The default 5894 can be reverted to `-fno-omit-frame-pointer' by configuring GCC 5895 with the `--enable-frame-pointer' configure option. 5896 5897 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5898 5899 `-foptimize-sibling-calls' 5900 Optimize sibling and tail recursive calls. 5901 5902 Enabled at levels `-O2', `-O3', `-Os'. 5903 5904 `-fno-inline' 5905 Don't pay attention to the `inline' keyword. Normally this option 5906 is used to keep the compiler from expanding any functions inline. 5907 Note that if you are not optimizing, no functions can be expanded 5908 inline. 5909 5910 `-finline-small-functions' 5911 Integrate functions into their callers when their body is smaller 5912 than expected function call code (so overall size of program gets 5913 smaller). The compiler heuristically decides which functions are 5914 simple enough to be worth integrating in this way. 5915 5916 Enabled at level `-O2'. 5917 5918 `-findirect-inlining' 5919 Inline also indirect calls that are discovered to be known at 5920 compile time thanks to previous inlining. This option has any 5921 effect only when inlining itself is turned on by the 5922 `-finline-functions' or `-finline-small-functions' options. 5923 5924 Enabled at level `-O2'. 5925 5926 `-finline-functions' 5927 Integrate all simple functions into their callers. The compiler 5928 heuristically decides which functions are simple enough to be worth 5929 integrating in this way. 5930 5931 If all calls to a given function are integrated, and the function 5932 is declared `static', then the function is normally not output as 5933 assembler code in its own right. 5934 5935 Enabled at level `-O3'. 5936 5937 `-finline-functions-called-once' 5938 Consider all `static' functions called once for inlining into their 5939 caller even if they are not marked `inline'. If a call to a given 5940 function is integrated, then the function is not output as 5941 assembler code in its own right. 5942 5943 Enabled at levels `-O1', `-O2', `-O3' and `-Os'. 5944 5945 `-fearly-inlining' 5946 Inline functions marked by `always_inline' and functions whose 5947 body seems smaller than the function call overhead early before 5948 doing `-fprofile-generate' instrumentation and real inlining pass. 5949 Doing so makes profiling significantly cheaper and usually 5950 inlining faster on programs having large chains of nested wrapper 5951 functions. 5952 5953 Enabled by default. 5954 5955 `-fipa-sra' 5956 Perform interprocedural scalar replacement of aggregates, removal 5957 of unused parameters and replacement of parameters passed by 5958 reference by parameters passed by value. 5959 5960 Enabled at levels `-O2', `-O3' and `-Os'. 5961 5962 `-finline-limit=N' 5963 By default, GCC limits the size of functions that can be inlined. 5964 This flag allows coarse control of this limit. N is the size of 5965 functions that can be inlined in number of pseudo instructions. 5966 5967 Inlining is actually controlled by a number of parameters, which 5968 may be specified individually by using `--param NAME=VALUE'. The 5969 `-finline-limit=N' option sets some of these parameters as follows: 5970 5971 `max-inline-insns-single' 5972 is set to N/2. 5973 5974 `max-inline-insns-auto' 5975 is set to N/2. 5976 5977 See below for a documentation of the individual parameters 5978 controlling inlining and for the defaults of these parameters. 5979 5980 _Note:_ there may be no value to `-finline-limit' that results in 5981 default behavior. 5982 5983 _Note:_ pseudo instruction represents, in this particular context, 5984 an abstract measurement of function's size. In no way does it 5985 represent a count of assembly instructions and as such its exact 5986 meaning might change from one release to an another. 5987 5988 `-fno-keep-inline-dllexport' 5989 This is a more fine-grained version of `-fkeep-inline-functions', 5990 which applies only to functions that are declared using the 5991 `dllexport' attribute or declspec (*Note Declaring Attributes of 5992 Functions: Function Attributes.) 5993 5994 `-fkeep-inline-functions' 5995 In C, emit `static' functions that are declared `inline' into the 5996 object file, even if the function has been inlined into all of its 5997 callers. This switch does not affect functions using the `extern 5998 inline' extension in GNU C90. In C++, emit any and all inline 5999 functions into the object file. 6000 6001 `-fkeep-static-consts' 6002 Emit variables declared `static const' when optimization isn't 6003 turned on, even if the variables aren't referenced. 6004 6005 GCC enables this option by default. If you want to force the 6006 compiler to check if the variable was referenced, regardless of 6007 whether or not optimization is turned on, use the 6008 `-fno-keep-static-consts' option. 6009 6010 `-fmerge-constants' 6011 Attempt to merge identical constants (string constants and 6012 floating point constants) across compilation units. 6013 6014 This option is the default for optimized compilation if the 6015 assembler and linker support it. Use `-fno-merge-constants' to 6016 inhibit this behavior. 6017 6018 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6019 6020 `-fmerge-all-constants' 6021 Attempt to merge identical constants and identical variables. 6022 6023 This option implies `-fmerge-constants'. In addition to 6024 `-fmerge-constants' this considers e.g. even constant initialized 6025 arrays or initialized constant variables with integral or floating 6026 point types. Languages like C or C++ require each variable, 6027 including multiple instances of the same variable in recursive 6028 calls, to have distinct locations, so using this option will 6029 result in non-conforming behavior. 6030 6031 `-fmodulo-sched' 6032 Perform swing modulo scheduling immediately before the first 6033 scheduling pass. This pass looks at innermost loops and reorders 6034 their instructions by overlapping different iterations. 6035 6036 `-fmodulo-sched-allow-regmoves' 6037 Perform more aggressive SMS based modulo scheduling with register 6038 moves allowed. By setting this flag certain anti-dependences 6039 edges will be deleted which will trigger the generation of 6040 reg-moves based on the life-range analysis. This option is 6041 effective only with `-fmodulo-sched' enabled. 6042 6043 `-fno-branch-count-reg' 6044 Do not use "decrement and branch" instructions on a count register, 6045 but instead generate a sequence of instructions that decrement a 6046 register, compare it against zero, then branch based upon the 6047 result. This option is only meaningful on architectures that 6048 support such instructions, which include x86, PowerPC, IA-64 and 6049 S/390. 6050 6051 The default is `-fbranch-count-reg'. 6052 6053 `-fno-function-cse' 6054 Do not put function addresses in registers; make each instruction 6055 that calls a constant function contain the function's address 6056 explicitly. 6057 6058 This option results in less efficient code, but some strange hacks 6059 that alter the assembler output may be confused by the 6060 optimizations performed when this option is not used. 6061 6062 The default is `-ffunction-cse' 6063 6064 `-fno-zero-initialized-in-bss' 6065 If the target supports a BSS section, GCC by default puts 6066 variables that are initialized to zero into BSS. This can save 6067 space in the resulting code. 6068 6069 This option turns off this behavior because some programs 6070 explicitly rely on variables going to the data section. E.g., so 6071 that the resulting executable can find the beginning of that 6072 section and/or make assumptions based on that. 6073 6074 The default is `-fzero-initialized-in-bss'. 6075 6076 `-fmudflap -fmudflapth -fmudflapir' 6077 For front-ends that support it (C and C++), instrument all risky 6078 pointer/array dereferencing operations, some standard library 6079 string/heap functions, and some other associated constructs with 6080 range/validity tests. Modules so instrumented should be immune to 6081 buffer overflows, invalid heap use, and some other classes of C/C++ 6082 programming errors. The instrumentation relies on a separate 6083 runtime library (`libmudflap'), which will be linked into a 6084 program if `-fmudflap' is given at link time. Run-time behavior 6085 of the instrumented program is controlled by the `MUDFLAP_OPTIONS' 6086 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 6087 its options. 6088 6089 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 6090 your program is multi-threaded. Use `-fmudflapir', in addition to 6091 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 6092 pointer reads. This produces less instrumentation (and therefore 6093 faster execution) and still provides some protection against 6094 outright memory corrupting writes, but allows erroneously read 6095 data to propagate within a program. 6096 6097 `-fthread-jumps' 6098 Perform optimizations where we check to see if a jump branches to a 6099 location where another comparison subsumed by the first is found. 6100 If so, the first branch is redirected to either the destination of 6101 the second branch or a point immediately following it, depending 6102 on whether the condition is known to be true or false. 6103 6104 Enabled at levels `-O2', `-O3', `-Os'. 6105 6106 `-fsplit-wide-types' 6107 When using a type that occupies multiple registers, such as `long 6108 long' on a 32-bit system, split the registers apart and allocate 6109 them independently. This normally generates better code for those 6110 types, but may make debugging more difficult. 6111 6112 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6113 6114 `-fcse-follow-jumps' 6115 In common subexpression elimination (CSE), scan through jump 6116 instructions when the target of the jump is not reached by any 6117 other path. For example, when CSE encounters an `if' statement 6118 with an `else' clause, CSE will follow the jump when the condition 6119 tested is false. 6120 6121 Enabled at levels `-O2', `-O3', `-Os'. 6122 6123 `-fcse-skip-blocks' 6124 This is similar to `-fcse-follow-jumps', but causes CSE to follow 6125 jumps which conditionally skip over blocks. When CSE encounters a 6126 simple `if' statement with no else clause, `-fcse-skip-blocks' 6127 causes CSE to follow the jump around the body of the `if'. 6128 6129 Enabled at levels `-O2', `-O3', `-Os'. 6130 6131 `-frerun-cse-after-loop' 6132 Re-run common subexpression elimination after loop optimizations 6133 has been performed. 6134 6135 Enabled at levels `-O2', `-O3', `-Os'. 6136 6137 `-fgcse' 6138 Perform a global common subexpression elimination pass. This pass 6139 also performs global constant and copy propagation. 6140 6141 _Note:_ When compiling a program using computed gotos, a GCC 6142 extension, you may get better runtime performance if you disable 6143 the global common subexpression elimination pass by adding 6144 `-fno-gcse' to the command line. 6145 6146 Enabled at levels `-O2', `-O3', `-Os'. 6147 6148 `-fgcse-lm' 6149 When `-fgcse-lm' is enabled, global common subexpression 6150 elimination will attempt to move loads which are only killed by 6151 stores into themselves. This allows a loop containing a 6152 load/store sequence to be changed to a load outside the loop, and 6153 a copy/store within the loop. 6154 6155 Enabled by default when gcse is enabled. 6156 6157 `-fgcse-sm' 6158 When `-fgcse-sm' is enabled, a store motion pass is run after 6159 global common subexpression elimination. This pass will attempt 6160 to move stores out of loops. When used in conjunction with 6161 `-fgcse-lm', loops containing a load/store sequence can be changed 6162 to a load before the loop and a store after the loop. 6163 6164 Not enabled at any optimization level. 6165 6166 `-fgcse-las' 6167 When `-fgcse-las' is enabled, the global common subexpression 6168 elimination pass eliminates redundant loads that come after stores 6169 to the same memory location (both partial and full redundancies). 6170 6171 Not enabled at any optimization level. 6172 6173 `-fgcse-after-reload' 6174 When `-fgcse-after-reload' is enabled, a redundant load elimination 6175 pass is performed after reload. The purpose of this pass is to 6176 cleanup redundant spilling. 6177 6178 `-funsafe-loop-optimizations' 6179 If given, the loop optimizer will assume that loop indices do not 6180 overflow, and that the loops with nontrivial exit condition are not 6181 infinite. This enables a wider range of loop optimizations even if 6182 the loop optimizer itself cannot prove that these assumptions are 6183 valid. Using `-Wunsafe-loop-optimizations', the compiler will 6184 warn you if it finds this kind of loop. 6185 6186 `-fcrossjumping' 6187 Perform cross-jumping transformation. This transformation unifies 6188 equivalent code and save code size. The resulting code may or may 6189 not perform better than without cross-jumping. 6190 6191 Enabled at levels `-O2', `-O3', `-Os'. 6192 6193 `-fauto-inc-dec' 6194 Combine increments or decrements of addresses with memory accesses. 6195 This pass is always skipped on architectures that do not have 6196 instructions to support this. Enabled by default at `-O' and 6197 higher on architectures that support this. 6198 6199 `-fdce' 6200 Perform dead code elimination (DCE) on RTL. Enabled by default at 6201 `-O' and higher. 6202 6203 `-fdse' 6204 Perform dead store elimination (DSE) on RTL. Enabled by default 6205 at `-O' and higher. 6206 6207 `-fif-conversion' 6208 Attempt to transform conditional jumps into branch-less 6209 equivalents. This include use of conditional moves, min, max, set 6210 flags and abs instructions, and some tricks doable by standard 6211 arithmetics. The use of conditional execution on chips where it 6212 is available is controlled by `if-conversion2'. 6213 6214 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6215 6216 `-fif-conversion2' 6217 Use conditional execution (where available) to transform 6218 conditional jumps into branch-less equivalents. 6219 6220 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6221 6222 `-fdelete-null-pointer-checks' 6223 Assume that programs cannot safely dereference null pointers, and 6224 that no code or data element resides there. This enables simple 6225 constant folding optimizations at all optimization levels. In 6226 addition, other optimization passes in GCC use this flag to 6227 control global dataflow analyses that eliminate useless checks for 6228 null pointers; these assume that if a pointer is checked after it 6229 has already been dereferenced, it cannot be null. 6230 6231 Note however that in some environments this assumption is not true. 6232 Use `-fno-delete-null-pointer-checks' to disable this optimization 6233 for programs which depend on that behavior. 6234 6235 Some targets, especially embedded ones, disable this option at all 6236 levels. Otherwise it is enabled at all levels: `-O0', `-O1', 6237 `-O2', `-O3', `-Os'. Passes that use the information are enabled 6238 independently at different optimization levels. 6239 6240 `-fdevirtualize' 6241 Attempt to convert calls to virtual functions to direct calls. 6242 This is done both within a procedure and interprocedurally as part 6243 of indirect inlining (`-findirect-inlining') and interprocedural 6244 constant propagation (`-fipa-cp'). Enabled at levels `-O2', 6245 `-O3', `-Os'. 6246 6247 `-fexpensive-optimizations' 6248 Perform a number of minor optimizations that are relatively 6249 expensive. 6250 6251 Enabled at levels `-O2', `-O3', `-Os'. 6252 6253 `-foptimize-register-move' 6254 `-fregmove' 6255 Attempt to reassign register numbers in move instructions and as 6256 operands of other simple instructions in order to maximize the 6257 amount of register tying. This is especially helpful on machines 6258 with two-operand instructions. 6259 6260 Note `-fregmove' and `-foptimize-register-move' are the same 6261 optimization. 6262 6263 Enabled at levels `-O2', `-O3', `-Os'. 6264 6265 `-fira-algorithm=ALGORITHM' 6266 Use specified coloring algorithm for the integrated register 6267 allocator. The ALGORITHM argument should be `priority' or `CB'. 6268 The first algorithm specifies Chow's priority coloring, the second 6269 one specifies Chaitin-Briggs coloring. The second algorithm can 6270 be unimplemented for some architectures. If it is implemented, it 6271 is the default because Chaitin-Briggs coloring as a rule generates 6272 a better code. 6273 6274 `-fira-region=REGION' 6275 Use specified regions for the integrated register allocator. The 6276 REGION argument should be one of `all', `mixed', or `one'. The 6277 first value means using all loops as register allocation regions, 6278 the second value which is the default means using all loops except 6279 for loops with small register pressure as the regions, and third 6280 one means using all function as a single region. The first value 6281 can give best result for machines with small size and irregular 6282 register set, the third one results in faster and generates decent 6283 code and the smallest size code, and the default value usually 6284 give the best results in most cases and for most architectures. 6285 6286 `-fira-loop-pressure' 6287 Use IRA to evaluate register pressure in loops for decision to move 6288 loop invariants. Usage of this option usually results in 6289 generation of faster and smaller code on machines with big 6290 register files (>= 32 registers) but it can slow compiler down. 6291 6292 This option is enabled at level `-O3' for some targets. 6293 6294 `-fno-ira-share-save-slots' 6295 Switch off sharing stack slots used for saving call used hard 6296 registers living through a call. Each hard register will get a 6297 separate stack slot and as a result function stack frame will be 6298 bigger. 6299 6300 `-fno-ira-share-spill-slots' 6301 Switch off sharing stack slots allocated for pseudo-registers. 6302 Each pseudo-register which did not get a hard register will get a 6303 separate stack slot and as a result function stack frame will be 6304 bigger. 6305 6306 `-fira-verbose=N' 6307 Set up how verbose dump file for the integrated register allocator 6308 will be. Default value is 5. If the value is greater or equal to 6309 10, the dump file will be stderr as if the value were N minus 10. 6310 6311 `-fdelayed-branch' 6312 If supported for the target machine, attempt to reorder 6313 instructions to exploit instruction slots available after delayed 6314 branch instructions. 6315 6316 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6317 6318 `-fschedule-insns' 6319 If supported for the target machine, attempt to reorder 6320 instructions to eliminate execution stalls due to required data 6321 being unavailable. This helps machines that have slow floating 6322 point or memory load instructions by allowing other instructions 6323 to be issued until the result of the load or floating point 6324 instruction is required. 6325 6326 Enabled at levels `-O2', `-O3'. 6327 6328 `-fschedule-insns2' 6329 Similar to `-fschedule-insns', but requests an additional pass of 6330 instruction scheduling after register allocation has been done. 6331 This is especially useful on machines with a relatively small 6332 number of registers and where memory load instructions take more 6333 than one cycle. 6334 6335 Enabled at levels `-O2', `-O3', `-Os'. 6336 6337 `-fno-sched-interblock' 6338 Don't schedule instructions across basic blocks. This is normally 6339 enabled by default when scheduling before register allocation, i.e. 6340 with `-fschedule-insns' or at `-O2' or higher. 6341 6342 `-fno-sched-spec' 6343 Don't allow speculative motion of non-load instructions. This is 6344 normally enabled by default when scheduling before register 6345 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 6346 6347 `-fsched-pressure' 6348 Enable register pressure sensitive insn scheduling before the 6349 register allocation. This only makes sense when scheduling before 6350 register allocation is enabled, i.e. with `-fschedule-insns' or at 6351 `-O2' or higher. Usage of this option can improve the generated 6352 code and decrease its size by preventing register pressure 6353 increase above the number of available hard registers and as a 6354 consequence register spills in the register allocation. 6355 6356 `-fsched-spec-load' 6357 Allow speculative motion of some load instructions. This only 6358 makes sense when scheduling before register allocation, i.e. with 6359 `-fschedule-insns' or at `-O2' or higher. 6360 6361 `-fsched-spec-load-dangerous' 6362 Allow speculative motion of more load instructions. This only 6363 makes sense when scheduling before register allocation, i.e. with 6364 `-fschedule-insns' or at `-O2' or higher. 6365 6366 `-fsched-stalled-insns' 6367 `-fsched-stalled-insns=N' 6368 Define how many insns (if any) can be moved prematurely from the 6369 queue of stalled insns into the ready list, during the second 6370 scheduling pass. `-fno-sched-stalled-insns' means that no insns 6371 will be moved prematurely, `-fsched-stalled-insns=0' means there 6372 is no limit on how many queued insns can be moved prematurely. 6373 `-fsched-stalled-insns' without a value is equivalent to 6374 `-fsched-stalled-insns=1'. 6375 6376 `-fsched-stalled-insns-dep' 6377 `-fsched-stalled-insns-dep=N' 6378 Define how many insn groups (cycles) will be examined for a 6379 dependency on a stalled insn that is candidate for premature 6380 removal from the queue of stalled insns. This has an effect only 6381 during the second scheduling pass, and only if 6382 `-fsched-stalled-insns' is used. `-fno-sched-stalled-insns-dep' 6383 is equivalent to `-fsched-stalled-insns-dep=0'. 6384 `-fsched-stalled-insns-dep' without a value is equivalent to 6385 `-fsched-stalled-insns-dep=1'. 6386 6387 `-fsched2-use-superblocks' 6388 When scheduling after register allocation, do use superblock 6389 scheduling algorithm. Superblock scheduling allows motion across 6390 basic block boundaries resulting on faster schedules. This option 6391 is experimental, as not all machine descriptions used by GCC model 6392 the CPU closely enough to avoid unreliable results from the 6393 algorithm. 6394 6395 This only makes sense when scheduling after register allocation, 6396 i.e. with `-fschedule-insns2' or at `-O2' or higher. 6397 6398 `-fsched-group-heuristic' 6399 Enable the group heuristic in the scheduler. This heuristic favors 6400 the instruction that belongs to a schedule group. This is enabled 6401 by default when scheduling is enabled, i.e. with `-fschedule-insns' 6402 or `-fschedule-insns2' or at `-O2' or higher. 6403 6404 `-fsched-critical-path-heuristic' 6405 Enable the critical-path heuristic in the scheduler. This 6406 heuristic favors instructions on the critical path. This is 6407 enabled by default when scheduling is enabled, i.e. with 6408 `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher. 6409 6410 `-fsched-spec-insn-heuristic' 6411 Enable the speculative instruction heuristic in the scheduler. 6412 This heuristic favors speculative instructions with greater 6413 dependency weakness. This is enabled by default when scheduling 6414 is enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' 6415 or at `-O2' or higher. 6416 6417 `-fsched-rank-heuristic' 6418 Enable the rank heuristic in the scheduler. This heuristic favors 6419 the instruction belonging to a basic block with greater size or 6420 frequency. This is enabled by default when scheduling is enabled, 6421 i.e. with `-fschedule-insns' or `-fschedule-insns2' or at `-O2' 6422 or higher. 6423 6424 `-fsched-last-insn-heuristic' 6425 Enable the last-instruction heuristic in the scheduler. This 6426 heuristic favors the instruction that is less dependent on the 6427 last instruction scheduled. This is enabled by default when 6428 scheduling is enabled, i.e. with `-fschedule-insns' or 6429 `-fschedule-insns2' or at `-O2' or higher. 6430 6431 `-fsched-dep-count-heuristic' 6432 Enable the dependent-count heuristic in the scheduler. This 6433 heuristic favors the instruction that has more instructions 6434 depending on it. This is enabled by default when scheduling is 6435 enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' or 6436 at `-O2' or higher. 6437 6438 `-freschedule-modulo-scheduled-loops' 6439 The modulo scheduling comes before the traditional scheduling, if 6440 a loop was modulo scheduled we may want to prevent the later 6441 scheduling passes from changing its schedule, we use this option 6442 to control that. 6443 6444 `-fselective-scheduling' 6445 Schedule instructions using selective scheduling algorithm. 6446 Selective scheduling runs instead of the first scheduler pass. 6447 6448 `-fselective-scheduling2' 6449 Schedule instructions using selective scheduling algorithm. 6450 Selective scheduling runs instead of the second scheduler pass. 6451 6452 `-fsel-sched-pipelining' 6453 Enable software pipelining of innermost loops during selective 6454 scheduling. This option has no effect until one of 6455 `-fselective-scheduling' or `-fselective-scheduling2' is turned on. 6456 6457 `-fsel-sched-pipelining-outer-loops' 6458 When pipelining loops during selective scheduling, also pipeline 6459 outer loops. This option has no effect until 6460 `-fsel-sched-pipelining' is turned on. 6461 6462 `-fcaller-saves' 6463 Enable values to be allocated in registers that will be clobbered 6464 by function calls, by emitting extra instructions to save and 6465 restore the registers around such calls. Such allocation is done 6466 only when it seems to result in better code than would otherwise 6467 be produced. 6468 6469 This option is always enabled by default on certain machines, 6470 usually those which have no call-preserved registers to use 6471 instead. 6472 6473 Enabled at levels `-O2', `-O3', `-Os'. 6474 6475 `-fcombine-stack-adjustments' 6476 Tracks stack adjustments (pushes and pops) and stack memory 6477 references and then tries to find ways to combine them. 6478 6479 Enabled by default at `-O1' and higher. 6480 6481 `-fconserve-stack' 6482 Attempt to minimize stack usage. The compiler will attempt to use 6483 less stack space, even if that makes the program slower. This 6484 option implies setting the `large-stack-frame' parameter to 100 6485 and the `large-stack-frame-growth' parameter to 400. 6486 6487 `-ftree-reassoc' 6488 Perform reassociation on trees. This flag is enabled by default 6489 at `-O' and higher. 6490 6491 `-ftree-pre' 6492 Perform partial redundancy elimination (PRE) on trees. This flag 6493 is enabled by default at `-O2' and `-O3'. 6494 6495 `-ftree-forwprop' 6496 Perform forward propagation on trees. This flag is enabled by 6497 default at `-O' and higher. 6498 6499 `-ftree-fre' 6500 Perform full redundancy elimination (FRE) on trees. The difference 6501 between FRE and PRE is that FRE only considers expressions that 6502 are computed on all paths leading to the redundant computation. 6503 This analysis is faster than PRE, though it exposes fewer 6504 redundancies. This flag is enabled by default at `-O' and higher. 6505 6506 `-ftree-phiprop' 6507 Perform hoisting of loads from conditional pointers on trees. This 6508 pass is enabled by default at `-O' and higher. 6509 6510 `-ftree-copy-prop' 6511 Perform copy propagation on trees. This pass eliminates 6512 unnecessary copy operations. This flag is enabled by default at 6513 `-O' and higher. 6514 6515 `-fipa-pure-const' 6516 Discover which functions are pure or constant. Enabled by default 6517 at `-O' and higher. 6518 6519 `-fipa-reference' 6520 Discover which static variables do not escape cannot escape the 6521 compilation unit. Enabled by default at `-O' and higher. 6522 6523 `-fipa-struct-reorg' 6524 Perform structure reorganization optimization, that change C-like 6525 structures layout in order to better utilize spatial locality. 6526 This transformation is affective for programs containing arrays of 6527 structures. Available in two compilation modes: profile-based 6528 (enabled with `-fprofile-generate') or static (which uses built-in 6529 heuristics). It works only in whole program mode, so it requires 6530 `-fwhole-program' to be enabled. Structures considered `cold' by 6531 this transformation are not affected (see `--param 6532 struct-reorg-cold-struct-ratio=VALUE'). 6533 6534 With this flag, the program debug info reflects a new structure 6535 layout. 6536 6537 `-fipa-pta' 6538 Perform interprocedural pointer analysis and interprocedural 6539 modification and reference analysis. This option can cause 6540 excessive memory and compile-time usage on large compilation 6541 units. It is not enabled by default at any optimization level. 6542 6543 `-fipa-profile' 6544 Perform interprocedural profile propagation. The functions called 6545 only from cold functions are marked as cold. Also functions 6546 executed once (such as `cold', `noreturn', static constructors or 6547 destructors) are identified. Cold functions and loop less parts of 6548 functions executed once are then optimized for size. Enabled by 6549 default at `-O' and higher. 6550 6551 `-fipa-cp' 6552 Perform interprocedural constant propagation. This optimization 6553 analyzes the program to determine when values passed to functions 6554 are constants and then optimizes accordingly. This optimization 6555 can substantially increase performance if the application has 6556 constants passed to functions. This flag is enabled by default at 6557 `-O2', `-Os' and `-O3'. 6558 6559 `-fipa-cp-clone' 6560 Perform function cloning to make interprocedural constant 6561 propagation stronger. When enabled, interprocedural constant 6562 propagation will perform function cloning when externally visible 6563 function can be called with constant arguments. Because this 6564 optimization can create multiple copies of functions, it may 6565 significantly increase code size (see `--param 6566 ipcp-unit-growth=VALUE'). This flag is enabled by default at 6567 `-O3'. 6568 6569 `-fipa-matrix-reorg' 6570 Perform matrix flattening and transposing. Matrix flattening 6571 tries to replace an m-dimensional matrix with its equivalent 6572 n-dimensional matrix, where n < m. This reduces the level of 6573 indirection needed for accessing the elements of the matrix. The 6574 second optimization is matrix transposing that attempts to change 6575 the order of the matrix's dimensions in order to improve cache 6576 locality. Both optimizations need the `-fwhole-program' flag. 6577 Transposing is enabled only if profiling information is available. 6578 6579 `-ftree-sink' 6580 Perform forward store motion on trees. This flag is enabled by 6581 default at `-O' and higher. 6582 6583 `-ftree-bit-ccp' 6584 Perform sparse conditional bit constant propagation on trees and 6585 propagate pointer alignment information. This pass only operates 6586 on local scalar variables and is enabled by default at `-O' and 6587 higher. It requires that `-ftree-ccp' is enabled. 6588 6589 `-ftree-ccp' 6590 Perform sparse conditional constant propagation (CCP) on trees. 6591 This pass only operates on local scalar variables and is enabled 6592 by default at `-O' and higher. 6593 6594 `-ftree-switch-conversion' 6595 Perform conversion of simple initializations in a switch to 6596 initializations from a scalar array. This flag is enabled by 6597 default at `-O2' and higher. 6598 6599 `-ftree-dce' 6600 Perform dead code elimination (DCE) on trees. This flag is 6601 enabled by default at `-O' and higher. 6602 6603 `-ftree-builtin-call-dce' 6604 Perform conditional dead code elimination (DCE) for calls to 6605 builtin functions that may set `errno' but are otherwise 6606 side-effect free. This flag is enabled by default at `-O2' and 6607 higher if `-Os' is not also specified. 6608 6609 `-ftree-dominator-opts' 6610 Perform a variety of simple scalar cleanups (constant/copy 6611 propagation, redundancy elimination, range propagation and 6612 expression simplification) based on a dominator tree traversal. 6613 This also performs jump threading (to reduce jumps to jumps). This 6614 flag is enabled by default at `-O' and higher. 6615 6616 `-ftree-dse' 6617 Perform dead store elimination (DSE) on trees. A dead store is a 6618 store into a memory location which will later be overwritten by 6619 another store without any intervening loads. In this case the 6620 earlier store can be deleted. This flag is enabled by default at 6621 `-O' and higher. 6622 6623 `-ftree-ch' 6624 Perform loop header copying on trees. This is beneficial since it 6625 increases effectiveness of code motion optimizations. It also 6626 saves one jump. This flag is enabled by default at `-O' and 6627 higher. It is not enabled for `-Os', since it usually increases 6628 code size. 6629 6630 `-ftree-loop-optimize' 6631 Perform loop optimizations on trees. This flag is enabled by 6632 default at `-O' and higher. 6633 6634 `-ftree-loop-linear' 6635 Perform loop interchange transformations on tree. Same as 6636 `-floop-interchange'. To use this code transformation, GCC has to 6637 be configured with `--with-ppl' and `--with-cloog' to enable the 6638 Graphite loop transformation infrastructure. 6639 6640 `-floop-interchange' 6641 Perform loop interchange transformations on loops. Interchanging 6642 two nested loops switches the inner and outer loops. For example, 6643 given a loop like: 6644 DO J = 1, M 6645 DO I = 1, N 6646 A(J, I) = A(J, I) * C 6647 ENDDO 6648 ENDDO 6649 loop interchange will transform the loop as if the user had 6650 written: 6651 DO I = 1, N 6652 DO J = 1, M 6653 A(J, I) = A(J, I) * C 6654 ENDDO 6655 ENDDO 6656 which can be beneficial when `N' is larger than the caches, 6657 because in Fortran, the elements of an array are stored in memory 6658 contiguously by column, and the original loop iterates over rows, 6659 potentially creating at each access a cache miss. This 6660 optimization applies to all the languages supported by GCC and is 6661 not limited to Fortran. To use this code transformation, GCC has 6662 to be configured with `--with-ppl' and `--with-cloog' to enable the 6663 Graphite loop transformation infrastructure. 6664 6665 `-floop-strip-mine' 6666 Perform loop strip mining transformations on loops. Strip mining 6667 splits a loop into two nested loops. The outer loop has strides 6668 equal to the strip size and the inner loop has strides of the 6669 original loop within a strip. The strip length can be changed 6670 using the `loop-block-tile-size' parameter. For example, given a 6671 loop like: 6672 DO I = 1, N 6673 A(I) = A(I) + C 6674 ENDDO 6675 loop strip mining will transform the loop as if the user had 6676 written: 6677 DO II = 1, N, 51 6678 DO I = II, min (II + 50, N) 6679 A(I) = A(I) + C 6680 ENDDO 6681 ENDDO 6682 This optimization applies to all the languages supported by GCC 6683 and is not limited to Fortran. To use this code transformation, 6684 GCC has to be configured with `--with-ppl' and `--with-cloog' to 6685 enable the Graphite loop transformation infrastructure. 6686 6687 `-floop-block' 6688 Perform loop blocking transformations on loops. Blocking strip 6689 mines each loop in the loop nest such that the memory accesses of 6690 the element loops fit inside caches. The strip length can be 6691 changed using the `loop-block-tile-size' parameter. For example, 6692 given a loop like: 6693 DO I = 1, N 6694 DO J = 1, M 6695 A(J, I) = B(I) + C(J) 6696 ENDDO 6697 ENDDO 6698 loop blocking will transform the loop as if the user had written: 6699 DO II = 1, N, 51 6700 DO JJ = 1, M, 51 6701 DO I = II, min (II + 50, N) 6702 DO J = JJ, min (JJ + 50, M) 6703 A(J, I) = B(I) + C(J) 6704 ENDDO 6705 ENDDO 6706 ENDDO 6707 ENDDO 6708 which can be beneficial when `M' is larger than the caches, 6709 because the innermost loop will iterate over a smaller amount of 6710 data that can be kept in the caches. This optimization applies to 6711 all the languages supported by GCC and is not limited to Fortran. 6712 To use this code transformation, GCC has to be configured with 6713 `--with-ppl' and `--with-cloog' to enable the Graphite loop 6714 transformation infrastructure. 6715 6716 `-fgraphite-identity' 6717 Enable the identity transformation for graphite. For every SCoP 6718 we generate the polyhedral representation and transform it back to 6719 gimple. Using `-fgraphite-identity' we can check the costs or 6720 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some 6721 minimal optimizations are also performed by the code generator 6722 CLooG, like index splitting and dead code elimination in loops. 6723 6724 `-floop-flatten' 6725 Removes the loop nesting structure: transforms the loop nest into a 6726 single loop. This transformation can be useful to vectorize all 6727 the levels of the loop nest. 6728 6729 `-floop-parallelize-all' 6730 Use the Graphite data dependence analysis to identify loops that 6731 can be parallelized. Parallelize all the loops that can be 6732 analyzed to not contain loop carried dependences without checking 6733 that it is profitable to parallelize the loops. 6734 6735 `-fcheck-data-deps' 6736 Compare the results of several data dependence analyzers. This 6737 option is used for debugging the data dependence analyzers. 6738 6739 `-ftree-loop-if-convert' 6740 Attempt to transform conditional jumps in the innermost loops to 6741 branch-less equivalents. The intent is to remove control-flow from 6742 the innermost loops in order to improve the ability of the 6743 vectorization pass to handle these loops. This is enabled by 6744 default if vectorization is enabled. 6745 6746 `-ftree-loop-if-convert-stores' 6747 Attempt to also if-convert conditional jumps containing memory 6748 writes. This transformation can be unsafe for multi-threaded 6749 programs as it transforms conditional memory writes into 6750 unconditional memory writes. For example, 6751 for (i = 0; i < N; i++) 6752 if (cond) 6753 A[i] = expr; 6754 would be transformed to 6755 for (i = 0; i < N; i++) 6756 A[i] = cond ? expr : A[i]; 6757 potentially producing data races. 6758 6759 `-ftree-loop-distribution' 6760 Perform loop distribution. This flag can improve cache 6761 performance on big loop bodies and allow further loop 6762 optimizations, like parallelization or vectorization, to take 6763 place. For example, the loop 6764 DO I = 1, N 6765 A(I) = B(I) + C 6766 D(I) = E(I) * F 6767 ENDDO 6768 is transformed to 6769 DO I = 1, N 6770 A(I) = B(I) + C 6771 ENDDO 6772 DO I = 1, N 6773 D(I) = E(I) * F 6774 ENDDO 6775 6776 `-ftree-loop-distribute-patterns' 6777 Perform loop distribution of patterns that can be code generated 6778 with calls to a library. This flag is enabled by default at `-O3'. 6779 6780 This pass distributes the initialization loops and generates a 6781 call to memset zero. For example, the loop 6782 DO I = 1, N 6783 A(I) = 0 6784 B(I) = A(I) + I 6785 ENDDO 6786 is transformed to 6787 DO I = 1, N 6788 A(I) = 0 6789 ENDDO 6790 DO I = 1, N 6791 B(I) = A(I) + I 6792 ENDDO 6793 and the initialization loop is transformed into a call to memset 6794 zero. 6795 6796 `-ftree-loop-im' 6797 Perform loop invariant motion on trees. This pass moves only 6798 invariants that would be hard to handle at RTL level (function 6799 calls, operations that expand to nontrivial sequences of insns). 6800 With `-funswitch-loops' it also moves operands of conditions that 6801 are invariant out of the loop, so that we can use just trivial 6802 invariantness analysis in loop unswitching. The pass also includes 6803 store motion. 6804 6805 `-ftree-loop-ivcanon' 6806 Create a canonical counter for number of iterations in the loop 6807 for that determining number of iterations requires complicated 6808 analysis. Later optimizations then may determine the number 6809 easily. Useful especially in connection with unrolling. 6810 6811 `-fivopts' 6812 Perform induction variable optimizations (strength reduction, 6813 induction variable merging and induction variable elimination) on 6814 trees. 6815 6816 `-ftree-parallelize-loops=n' 6817 Parallelize loops, i.e., split their iteration space to run in n 6818 threads. This is only possible for loops whose iterations are 6819 independent and can be arbitrarily reordered. The optimization is 6820 only profitable on multiprocessor machines, for loops that are 6821 CPU-intensive, rather than constrained e.g. by memory bandwidth. 6822 This option implies `-pthread', and thus is only supported on 6823 targets that have support for `-pthread'. 6824 6825 `-ftree-pta' 6826 Perform function-local points-to analysis on trees. This flag is 6827 enabled by default at `-O' and higher. 6828 6829 `-ftree-sra' 6830 Perform scalar replacement of aggregates. This pass replaces 6831 structure references with scalars to prevent committing structures 6832 to memory too early. This flag is enabled by default at `-O' and 6833 higher. 6834 6835 `-ftree-copyrename' 6836 Perform copy renaming on trees. This pass attempts to rename 6837 compiler temporaries to other variables at copy locations, usually 6838 resulting in variable names which more closely resemble the 6839 original variables. This flag is enabled by default at `-O' and 6840 higher. 6841 6842 `-ftree-ter' 6843 Perform temporary expression replacement during the SSA->normal 6844 phase. Single use/single def temporaries are replaced at their 6845 use location with their defining expression. This results in 6846 non-GIMPLE code, but gives the expanders much more complex trees 6847 to work on resulting in better RTL generation. This is enabled by 6848 default at `-O' and higher. 6849 6850 `-ftree-vectorize' 6851 Perform loop vectorization on trees. This flag is enabled by 6852 default at `-O3'. 6853 6854 `-ftree-slp-vectorize' 6855 Perform basic block vectorization on trees. This flag is enabled 6856 by default at `-O3' and when `-ftree-vectorize' is enabled. 6857 6858 `-ftree-vect-loop-version' 6859 Perform loop versioning when doing loop vectorization on trees. 6860 When a loop appears to be vectorizable except that data alignment 6861 or data dependence cannot be determined at compile time then 6862 vectorized and non-vectorized versions of the loop are generated 6863 along with runtime checks for alignment or dependence to control 6864 which version is executed. This option is enabled by default 6865 except at level `-Os' where it is disabled. 6866 6867 `-fvect-cost-model' 6868 Enable cost model for vectorization. 6869 6870 `-ftree-vrp' 6871 Perform Value Range Propagation on trees. This is similar to the 6872 constant propagation pass, but instead of values, ranges of values 6873 are propagated. This allows the optimizers to remove unnecessary 6874 range checks like array bound checks and null pointer checks. 6875 This is enabled by default at `-O2' and higher. Null pointer check 6876 elimination is only done if `-fdelete-null-pointer-checks' is 6877 enabled. 6878 6879 `-ftracer' 6880 Perform tail duplication to enlarge superblock size. This 6881 transformation simplifies the control flow of the function 6882 allowing other optimizations to do better job. 6883 6884 `-funroll-loops' 6885 Unroll loops whose number of iterations can be determined at 6886 compile time or upon entry to the loop. `-funroll-loops' implies 6887 `-frerun-cse-after-loop'. This option makes code larger, and may 6888 or may not make it run faster. 6889 6890 `-funroll-all-loops' 6891 Unroll all loops, even if their number of iterations is uncertain 6892 when the loop is entered. This usually makes programs run more 6893 slowly. `-funroll-all-loops' implies the same options as 6894 `-funroll-loops', 6895 6896 `-fsplit-ivs-in-unroller' 6897 Enables expressing of values of induction variables in later 6898 iterations of the unrolled loop using the value in the first 6899 iteration. This breaks long dependency chains, thus improving 6900 efficiency of the scheduling passes. 6901 6902 Combination of `-fweb' and CSE is often sufficient to obtain the 6903 same effect. However in cases the loop body is more complicated 6904 than a single basic block, this is not reliable. It also does not 6905 work at all on some of the architectures due to restrictions in 6906 the CSE pass. 6907 6908 This optimization is enabled by default. 6909 6910 `-fvariable-expansion-in-unroller' 6911 With this option, the compiler will create multiple copies of some 6912 local variables when unrolling a loop which can result in superior 6913 code. 6914 6915 `-fpartial-inlining' 6916 Inline parts of functions. This option has any effect only when 6917 inlining itself is turned on by the `-finline-functions' or 6918 `-finline-small-functions' options. 6919 6920 Enabled at level `-O2'. 6921 6922 `-fpredictive-commoning' 6923 Perform predictive commoning optimization, i.e., reusing 6924 computations (especially memory loads and stores) performed in 6925 previous iterations of loops. 6926 6927 This option is enabled at level `-O3'. 6928 6929 `-fprefetch-loop-arrays' 6930 If supported by the target machine, generate instructions to 6931 prefetch memory to improve the performance of loops that access 6932 large arrays. 6933 6934 This option may generate better or worse code; results are highly 6935 dependent on the structure of loops within the source code. 6936 6937 Disabled at level `-Os'. 6938 6939 `-fno-peephole' 6940 `-fno-peephole2' 6941 Disable any machine-specific peephole optimizations. The 6942 difference between `-fno-peephole' and `-fno-peephole2' is in how 6943 they are implemented in the compiler; some targets use one, some 6944 use the other, a few use both. 6945 6946 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 6947 levels `-O2', `-O3', `-Os'. 6948 6949 `-fno-guess-branch-probability' 6950 Do not guess branch probabilities using heuristics. 6951 6952 GCC will use heuristics to guess branch probabilities if they are 6953 not provided by profiling feedback (`-fprofile-arcs'). These 6954 heuristics are based on the control flow graph. If some branch 6955 probabilities are specified by `__builtin_expect', then the 6956 heuristics will be used to guess branch probabilities for the rest 6957 of the control flow graph, taking the `__builtin_expect' info into 6958 account. The interactions between the heuristics and 6959 `__builtin_expect' can be complex, and in some cases, it may be 6960 useful to disable the heuristics so that the effects of 6961 `__builtin_expect' are easier to understand. 6962 6963 The default is `-fguess-branch-probability' at levels `-O', `-O2', 6964 `-O3', `-Os'. 6965 6966 `-freorder-blocks' 6967 Reorder basic blocks in the compiled function in order to reduce 6968 number of taken branches and improve code locality. 6969 6970 Enabled at levels `-O2', `-O3'. 6971 6972 `-freorder-blocks-and-partition' 6973 In addition to reordering basic blocks in the compiled function, 6974 in order to reduce number of taken branches, partitions hot and 6975 cold basic blocks into separate sections of the assembly and .o 6976 files, to improve paging and cache locality performance. 6977 6978 This optimization is automatically turned off in the presence of 6979 exception handling, for linkonce sections, for functions with a 6980 user-defined section attribute and on any architecture that does 6981 not support named sections. 6982 6983 `-freorder-functions' 6984 Reorder functions in the object file in order to improve code 6985 locality. This is implemented by using special subsections 6986 `.text.hot' for most frequently executed functions and 6987 `.text.unlikely' for unlikely executed functions. Reordering is 6988 done by the linker so object file format must support named 6989 sections and linker must place them in a reasonable way. 6990 6991 Also profile feedback must be available in to make this option 6992 effective. See `-fprofile-arcs' for details. 6993 6994 Enabled at levels `-O2', `-O3', `-Os'. 6995 6996 `-fstrict-aliasing' 6997 Allow the compiler to assume the strictest aliasing rules 6998 applicable to the language being compiled. For C (and C++), this 6999 activates optimizations based on the type of expressions. In 7000 particular, an object of one type is assumed never to reside at 7001 the same address as an object of a different type, unless the 7002 types are almost the same. For example, an `unsigned int' can 7003 alias an `int', but not a `void*' or a `double'. A character type 7004 may alias any other type. 7005 7006 Pay special attention to code like this: 7007 union a_union { 7008 int i; 7009 double d; 7010 }; 7011 7012 int f() { 7013 union a_union t; 7014 t.d = 3.0; 7015 return t.i; 7016 } 7017 The practice of reading from a different union member than the one 7018 most recently written to (called "type-punning") is common. Even 7019 with `-fstrict-aliasing', type-punning is allowed, provided the 7020 memory is accessed through the union type. So, the code above 7021 will work as expected. *Note Structures unions enumerations and 7022 bit-fields implementation::. However, this code might not: 7023 int f() { 7024 union a_union t; 7025 int* ip; 7026 t.d = 3.0; 7027 ip = &t.i; 7028 return *ip; 7029 } 7030 7031 Similarly, access by taking the address, casting the resulting 7032 pointer and dereferencing the result has undefined behavior, even 7033 if the cast uses a union type, e.g.: 7034 int f() { 7035 double d = 3.0; 7036 return ((union a_union *) &d)->i; 7037 } 7038 7039 The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3', 7040 `-Os'. 7041 7042 `-fstrict-overflow' 7043 Allow the compiler to assume strict signed overflow rules, 7044 depending on the language being compiled. For C (and C++) this 7045 means that overflow when doing arithmetic with signed numbers is 7046 undefined, which means that the compiler may assume that it will 7047 not happen. This permits various optimizations. For example, the 7048 compiler will assume that an expression like `i + 10 > i' will 7049 always be true for signed `i'. This assumption is only valid if 7050 signed overflow is undefined, as the expression is false if `i + 7051 10' overflows when using twos complement arithmetic. When this 7052 option is in effect any attempt to determine whether an operation 7053 on signed numbers will overflow must be written carefully to not 7054 actually involve overflow. 7055 7056 This option also allows the compiler to assume strict pointer 7057 semantics: given a pointer to an object, if adding an offset to 7058 that pointer does not produce a pointer to the same object, the 7059 addition is undefined. This permits the compiler to conclude that 7060 `p + u > p' is always true for a pointer `p' and unsigned integer 7061 `u'. This assumption is only valid because pointer wraparound is 7062 undefined, as the expression is false if `p + u' overflows using 7063 twos complement arithmetic. 7064 7065 See also the `-fwrapv' option. Using `-fwrapv' means that integer 7066 signed overflow is fully defined: it wraps. When `-fwrapv' is 7067 used, there is no difference between `-fstrict-overflow' and 7068 `-fno-strict-overflow' for integers. With `-fwrapv' certain types 7069 of overflow are permitted. For example, if the compiler gets an 7070 overflow when doing arithmetic on constants, the overflowed value 7071 can still be used with `-fwrapv', but not otherwise. 7072 7073 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 7074 `-Os'. 7075 7076 `-falign-functions' 7077 `-falign-functions=N' 7078 Align the start of functions to the next power-of-two greater than 7079 N, skipping up to N bytes. For instance, `-falign-functions=32' 7080 aligns functions to the next 32-byte boundary, but 7081 `-falign-functions=24' would align to the next 32-byte boundary 7082 only if this can be done by skipping 23 bytes or less. 7083 7084 `-fno-align-functions' and `-falign-functions=1' are equivalent 7085 and mean that functions will not be aligned. 7086 7087 Some assemblers only support this flag when N is a power of two; 7088 in that case, it is rounded up. 7089 7090 If N is not specified or is zero, use a machine-dependent default. 7091 7092 Enabled at levels `-O2', `-O3'. 7093 7094 `-falign-labels' 7095 `-falign-labels=N' 7096 Align all branch targets to a power-of-two boundary, skipping up to 7097 N bytes like `-falign-functions'. This option can easily make 7098 code slower, because it must insert dummy operations for when the 7099 branch target is reached in the usual flow of the code. 7100 7101 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 7102 that labels will not be aligned. 7103 7104 If `-falign-loops' or `-falign-jumps' are applicable and are 7105 greater than this value, then their values are used instead. 7106 7107 If N is not specified or is zero, use a machine-dependent default 7108 which is very likely to be `1', meaning no alignment. 7109 7110 Enabled at levels `-O2', `-O3'. 7111 7112 `-falign-loops' 7113 `-falign-loops=N' 7114 Align loops to a power-of-two boundary, skipping up to N bytes 7115 like `-falign-functions'. The hope is that the loop will be 7116 executed many times, which will make up for any execution of the 7117 dummy operations. 7118 7119 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 7120 that loops will not be aligned. 7121 7122 If N is not specified or is zero, use a machine-dependent default. 7123 7124 Enabled at levels `-O2', `-O3'. 7125 7126 `-falign-jumps' 7127 `-falign-jumps=N' 7128 Align branch targets to a power-of-two boundary, for branch targets 7129 where the targets can only be reached by jumping, skipping up to N 7130 bytes like `-falign-functions'. In this case, no dummy operations 7131 need be executed. 7132 7133 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 7134 that loops will not be aligned. 7135 7136 If N is not specified or is zero, use a machine-dependent default. 7137 7138 Enabled at levels `-O2', `-O3'. 7139 7140 `-funit-at-a-time' 7141 This option is left for compatibility reasons. `-funit-at-a-time' 7142 has no effect, while `-fno-unit-at-a-time' implies 7143 `-fno-toplevel-reorder' and `-fno-section-anchors'. 7144 7145 Enabled by default. 7146 7147 `-fno-toplevel-reorder' 7148 Do not reorder top-level functions, variables, and `asm' 7149 statements. Output them in the same order that they appear in the 7150 input file. When this option is used, unreferenced static 7151 variables will not be removed. This option is intended to support 7152 existing code which relies on a particular ordering. For new 7153 code, it is better to use attributes. 7154 7155 Enabled at level `-O0'. When disabled explicitly, it also imply 7156 `-fno-section-anchors' that is otherwise enabled at `-O0' on some 7157 targets. 7158 7159 `-fweb' 7160 Constructs webs as commonly used for register allocation purposes 7161 and assign each web individual pseudo register. This allows the 7162 register allocation pass to operate on pseudos directly, but also 7163 strengthens several other optimization passes, such as CSE, loop 7164 optimizer and trivial dead code remover. It can, however, make 7165 debugging impossible, since variables will no longer stay in a 7166 "home register". 7167 7168 Enabled by default with `-funroll-loops'. 7169 7170 `-fwhole-program' 7171 Assume that the current compilation unit represents the whole 7172 program being compiled. All public functions and variables with 7173 the exception of `main' and those merged by attribute 7174 `externally_visible' become static functions and in effect are 7175 optimized more aggressively by interprocedural optimizers. If 7176 `gold' is used as the linker plugin, `externally_visible' 7177 attributes are automatically added to functions (not variable yet 7178 due to a current `gold' issue) that are accessed outside of LTO 7179 objects according to resolution file produced by `gold'. For 7180 other linkers that cannot generate resolution file, explicit 7181 `externally_visible' attributes are still necessary. While this 7182 option is equivalent to proper use of the `static' keyword for 7183 programs consisting of a single file, in combination with option 7184 `-flto' this flag can be used to compile many smaller scale 7185 programs since the functions and variables become local for the 7186 whole combined compilation unit, not for the single source file 7187 itself. 7188 7189 This option implies `-fwhole-file' for Fortran programs. 7190 7191 `-flto[=N]' 7192 This option runs the standard link-time optimizer. When invoked 7193 with source code, it generates GIMPLE (one of GCC's internal 7194 representations) and writes it to special ELF sections in the 7195 object file. When the object files are linked together, all the 7196 function bodies are read from these ELF sections and instantiated 7197 as if they had been part of the same translation unit. 7198 7199 To use the link-time optimizer, `-flto' needs to be specified at 7200 compile time and during the final link. For example: 7201 7202 gcc -c -O2 -flto foo.c 7203 gcc -c -O2 -flto bar.c 7204 gcc -o myprog -flto -O2 foo.o bar.o 7205 7206 The first two invocations to GCC save a bytecode representation of 7207 GIMPLE into special ELF sections inside `foo.o' and `bar.o'. The 7208 final invocation reads the GIMPLE bytecode from `foo.o' and 7209 `bar.o', merges the two files into a single internal image, and 7210 compiles the result as usual. Since both `foo.o' and `bar.o' are 7211 merged into a single image, this causes all the interprocedural 7212 analyses and optimizations in GCC to work across the two files as 7213 if they were a single one. This means, for example, that the 7214 inliner is able to inline functions in `bar.o' into functions in 7215 `foo.o' and vice-versa. 7216 7217 Another (simpler) way to enable link-time optimization is: 7218 7219 gcc -o myprog -flto -O2 foo.c bar.c 7220 7221 The above generates bytecode for `foo.c' and `bar.c', merges them 7222 together into a single GIMPLE representation and optimizes them as 7223 usual to produce `myprog'. 7224 7225 The only important thing to keep in mind is that to enable 7226 link-time optimizations the `-flto' flag needs to be passed to 7227 both the compile and the link commands. 7228 7229 To make whole program optimization effective, it is necessary to 7230 make certain whole program assumptions. The compiler needs to know 7231 what functions and variables can be accessed by libraries and 7232 runtime outside of the link-time optimized unit. When supported 7233 by the linker, the linker plugin (see `-fuse-linker-plugin') 7234 passes information to the compiler about used and externally 7235 visible symbols. When the linker plugin is not available, 7236 `-fwhole-program' should be used to allow the compiler to make 7237 these assumptions, which leads to more aggressive optimization 7238 decisions. 7239 7240 Note that when a file is compiled with `-flto', the generated 7241 object file is larger than a regular object file because it 7242 contains GIMPLE bytecodes and the usual final code. This means 7243 that object files with LTO information can be linked as normal 7244 object files; if `-flto' is not passed to the linker, no 7245 interprocedural optimizations are applied. 7246 7247 Additionally, the optimization flags used to compile individual 7248 files are not necessarily related to those used at link time. For 7249 instance, 7250 7251 gcc -c -O0 -flto foo.c 7252 gcc -c -O0 -flto bar.c 7253 gcc -o myprog -flto -O3 foo.o bar.o 7254 7255 This produces individual object files with unoptimized assembler 7256 code, but the resulting binary `myprog' is optimized at `-O3'. 7257 If, instead, the final binary is generated without `-flto', then 7258 `myprog' is not optimized. 7259 7260 When producing the final binary with `-flto', GCC only applies 7261 link-time optimizations to those files that contain bytecode. 7262 Therefore, you can mix and match object files and libraries with 7263 GIMPLE bytecodes and final object code. GCC automatically selects 7264 which files to optimize in LTO mode and which files to link without 7265 further processing. 7266 7267 There are some code generation flags that GCC preserves when 7268 generating bytecodes, as they need to be used during the final link 7269 stage. Currently, the following options are saved into the GIMPLE 7270 bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags. 7271 7272 At link time, these options are read in and reapplied. Note that 7273 the current implementation makes no attempt to recognize 7274 conflicting values for these options. If different files have 7275 conflicting option values (e.g., one file is compiled with `-fPIC' 7276 and another isn't), the compiler simply uses the last value read 7277 from the bytecode files. It is recommended, then, that you 7278 compile all the files participating in the same link with the same 7279 options. 7280 7281 If LTO encounters objects with C linkage declared with incompatible 7282 types in separate translation units to be linked together 7283 (undefined behavior according to ISO C99 6.2.7), a non-fatal 7284 diagnostic may be issued. The behavior is still undefined at 7285 runtime. 7286 7287 Another feature of LTO is that it is possible to apply 7288 interprocedural optimizations on files written in different 7289 languages. This requires support in the language front end. 7290 Currently, the C, C++ and Fortran front ends are capable of 7291 emitting GIMPLE bytecodes, so something like this should work: 7292 7293 gcc -c -flto foo.c 7294 g++ -c -flto bar.cc 7295 gfortran -c -flto baz.f90 7296 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran 7297 7298 Notice that the final link is done with `g++' to get the C++ 7299 runtime libraries and `-lgfortran' is added to get the Fortran 7300 runtime libraries. In general, when mixing languages in LTO mode, 7301 you should use the same link command options as when mixing 7302 languages in a regular (non-LTO) compilation; all you need to add 7303 is `-flto' to all the compile and link commands. 7304 7305 If object files containing GIMPLE bytecode are stored in a library 7306 archive, say `libfoo.a', it is possible to extract and use them in 7307 an LTO link if you are using a linker with plugin support. To 7308 enable this feature, use the flag `-fuse-linker-plugin' at link 7309 time: 7310 7311 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo 7312 7313 With the linker plugin enabled, the linker extracts the needed 7314 GIMPLE files from `libfoo.a' and passes them on to the running GCC 7315 to make them part of the aggregated GIMPLE image to be optimized. 7316 7317 If you are not using a linker with plugin support and/or do not 7318 enable the linker plugin, then the objects inside `libfoo.a' are 7319 extracted and linked as usual, but they do not participate in the 7320 LTO optimization process. 7321 7322 Link-time optimizations do not require the presence of the whole 7323 program to operate. If the program does not require any symbols 7324 to be exported, it is possible to combine `-flto' and 7325 `-fwhole-program' to allow the interprocedural optimizers to use 7326 more aggressive assumptions which may lead to improved 7327 optimization opportunities. Use of `-fwhole-program' is not 7328 needed when linker plugin is active (see `-fuse-linker-plugin'). 7329 7330 The current implementation of LTO makes no attempt to generate 7331 bytecode that is portable between different types of hosts. The 7332 bytecode files are versioned and there is a strict version check, 7333 so bytecode files generated in one version of GCC will not work 7334 with an older/newer version of GCC. 7335 7336 Link-time optimization does not work well with generation of 7337 debugging information. Combining `-flto' with `-g' is currently 7338 experimental and expected to produce wrong results. 7339 7340 If you specify the optional N, the optimization and code 7341 generation done at link time is executed in parallel using N 7342 parallel jobs by utilizing an installed `make' program. The 7343 environment variable `MAKE' may be used to override the program 7344 used. The default value for N is 1. 7345 7346 You can also specify `-flto=jobserver' to use GNU make's job 7347 server mode to determine the number of parallel jobs. This is 7348 useful when the Makefile calling GCC is already executing in 7349 parallel. You must prepend a `+' to the command recipe in the 7350 parent Makefile for this to work. This option likely only works 7351 if `MAKE' is GNU make. 7352 7353 This option is disabled by default. 7354 7355 `-flto-partition=ALG' 7356 Specify the partitioning algorithm used by the link-time optimizer. 7357 The value is either `1to1' to specify a partitioning mirroring the 7358 original source files or `balanced' to specify partitioning into 7359 equally sized chunks (whenever possible). Specifying `none' as an 7360 algorithm disables partitioning and streaming completely. The 7361 default value is `balanced'. 7362 7363 `-flto-compression-level=N' 7364 This option specifies the level of compression used for 7365 intermediate language written to LTO object files, and is only 7366 meaningful in conjunction with LTO mode (`-flto'). Valid values 7367 are 0 (no compression) to 9 (maximum compression). Values outside 7368 this range are clamped to either 0 or 9. If the option is not 7369 given, a default balanced compression setting is used. 7370 7371 `-flto-report' 7372 Prints a report with internal details on the workings of the 7373 link-time optimizer. The contents of this report vary from 7374 version to version. It is meant to be useful to GCC developers 7375 when processing object files in LTO mode (via `-flto'). 7376 7377 Disabled by default. 7378 7379 `-fuse-linker-plugin' 7380 Enables the use of a linker plugin during link-time optimization. 7381 This option relies on the linker plugin support in linker that is 7382 available in gold or in GNU ld 2.21 or newer. 7383 7384 This option enables the extraction of object files with GIMPLE 7385 bytecode out of library archives. This improves the quality of 7386 optimization by exposing more code to the link-time optimizer. 7387 This information specifies what symbols can be accessed externally 7388 (by non-LTO object or during dynamic linking). Resulting code 7389 quality improvements on binaries (and shared libraries that use 7390 hidden visibility) are similar to `-fwhole-program'. See `-flto' 7391 for a description of the effect of this flag and how to use it. 7392 7393 This option is enabled by default when LTO support in GCC is 7394 enabled and GCC was configured for use with a linker supporting 7395 plugins (GNU ld 2.21 or newer or gold). 7396 7397 `-fcompare-elim' 7398 After register allocation and post-register allocation instruction 7399 splitting, identify arithmetic instructions that compute processor 7400 flags similar to a comparison operation based on that arithmetic. 7401 If possible, eliminate the explicit comparison operation. 7402 7403 This pass only applies to certain targets that cannot explicitly 7404 represent the comparison operation before register allocation is 7405 complete. 7406 7407 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7408 7409 `-fuse-ld=gold' 7410 Use the `gold' linker instead of the default linker. This option 7411 is only necessary if GCC has been configured with `--enable-gold' 7412 and `--enable-ld=default'. 7413 7414 `-fuse-ld=bfd' 7415 Use the `ld.bfd' linker instead of the default linker. This 7416 option is only necessary if GCC has been configured with 7417 `--enable-gold' and `--enable-ld'. 7418 7419 `-fcprop-registers' 7420 After register allocation and post-register allocation instruction 7421 splitting, we perform a copy-propagation pass to try to reduce 7422 scheduling dependencies and occasionally eliminate the copy. 7423 7424 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7425 7426 `-fprofile-correction' 7427 Profiles collected using an instrumented binary for multi-threaded 7428 programs may be inconsistent due to missed counter updates. When 7429 this option is specified, GCC will use heuristics to correct or 7430 smooth out such inconsistencies. By default, GCC will emit an 7431 error message when an inconsistent profile is detected. 7432 7433 `-fprofile-dir=PATH' 7434 Set the directory to search for the profile data files in to PATH. 7435 This option affects only the profile data generated by 7436 `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used 7437 by `-fprofile-use' and `-fbranch-probabilities' and its related 7438 options. Both absolute and relative paths can be used. By 7439 default, GCC will use the current directory as PATH, thus the 7440 profile data file will appear in the same directory as the object 7441 file. 7442 7443 `-fprofile-generate' 7444 `-fprofile-generate=PATH' 7445 Enable options usually used for instrumenting application to 7446 produce profile useful for later recompilation with profile 7447 feedback based optimization. You must use `-fprofile-generate' 7448 both when compiling and when linking your program. 7449 7450 The following options are enabled: `-fprofile-arcs', 7451 `-fprofile-values', `-fvpt'. 7452 7453 If PATH is specified, GCC will look at the PATH to find the 7454 profile feedback data files. See `-fprofile-dir'. 7455 7456 `-fprofile-generate-sampling' 7457 Enable sampling for instrumented binaries. Instead of recording 7458 every event, record only every N-th event, where N (the sampling 7459 rate) can be set either at compile time using `--param 7460 profile-generate-sampling-rate=VALUE', or at execution start time 7461 through environment variable `GCOV_SAMPLING_RATE'. 7462 7463 At this time sampling applies only to branch counters. A sampling 7464 rate of 100 decreases instrumentated binary slowdown from up to 7465 20x for heavily threaded applications down to around 2x. 7466 `-fprofile-correction' is always needed with sampling. 7467 7468 `-fprofile-use' 7469 `-fprofile-use=PATH' 7470 Enable profile feedback directed optimizations, and optimizations 7471 generally profitable only with profile feedback available. 7472 7473 The following options are enabled: `-fbranch-probabilities', 7474 `-fvpt', `-funroll-loops', `-fpeel-loops'. 7475 7476 By default, GCC emits an error message if the feedback profiles do 7477 not match the source code. This error can be turned into a 7478 warning by using `-Wcoverage-mismatch'. Note this may result in 7479 poorly optimized code. 7480 7481 If PATH is specified, GCC will look at the PATH to find the 7482 profile feedback data files. See `-fprofile-dir'. 7483 7484 `-fpmu-profile-generate=PMUOPTION' 7485 Enable performance monitoring unit (PMU) profiling. This collects 7486 hardware counter data corresponding to PMUOPTION. Currently only 7487 LOAD-LATENCY and BRANCH-MISPREDICT are supported using pfmon tool. 7488 You must use `-fpmu-profile-generate' both when compiling and when 7489 linking your program. This PMU profile data may later be used by 7490 the compiler during optimizations as well can be displayed using 7491 coverage tool gcov. The params variable "pmu_profile_n_addresses" 7492 can be used to restrict PMU data collection to only this many 7493 addresses. 7494 7495 `-fpmu-profile-use=PMUOPTION' 7496 Enable performance monitoring unit (PMU) profiling based 7497 optimizations. Currently only LOAD-LATENCY and BRANCH-MISPREDICT 7498 are supported. 7499 7500 `-fripa' 7501 Perform dynamic inter-procedural analysis. This is used in 7502 conjunction with the `-fprofile-generate' and `-fprofile-use' 7503 options. During the `-fprofile-generate' phase, this flag turns 7504 on some additional instrumentation code that enables dynamic 7505 call-graph analysis. During the `-fprofile-use' phase, this flag 7506 enables cross-module optimizations such as inlining. 7507 7508 `-fripa-disallow-asm-modules' 7509 During profile-gen, if this flag is enabled, and the module has 7510 asm statements, arrange so that a bit recording this information 7511 will be set in the profile feedback data file. During 7512 profile-use, if this flag is enabled, and the same bit in auxiliary 7513 module's profile feedback data is set, don't import this auxiliary 7514 module. If this is the primary module, don't export it. 7515 7516 `-fripa-disallow-opt-mismatch' 7517 Don't import an auxiliary module, if the GCC command line options 7518 used for this auxiliary module during the profile-generate stage 7519 were different from those used for the primary module. Note that 7520 any mismatches in warning-related options are ignored for this 7521 comparison. 7522 7523 `-fripa-no-promote-always-inline-func' 7524 Do not promote static functions with always inline attribute in 7525 LIPO compilation. 7526 7527 `-fripa-verbose' 7528 Enable printing of verbose information about dynamic 7529 inter-procedural optimizations. This is used in conjunction with 7530 the `-fripa'. 7531 7532 `-fripa-peel-size-limit' 7533 Limit loop peeling of non-const non-FP loops in a LIPO compilation 7534 under estimates of a large code footprint. Enabled by default 7535 under `-fripa'. Code size estimation and thresholds are controlled 7536 by the `codesize-hotness-threshold' and 7537 `unrollpeel-codesize-threshold' parameters. 7538 7539 `-fripa-unroll-size-limit' 7540 Limit loop unrolling of non-const non-FP loops in a LIPO 7541 compilation under estimates of a large code footprint. Enabled by 7542 default under `-fripa'. Code size estimation and thresholds are 7543 controlled by the `codesize-hotness-threshold' and 7544 `unrollpeel-codesize-threshold' parameters. 7545 7546 `-fcallgraph-profiles-sections' 7547 Emit call graph edge profile counts in .note.callgraph.text 7548 sections. This is used in conjunction with `-fprofile-use'. A new 7549 .note.callgraph.text section is created for each function. This 7550 section lists every callee and the number of times it is called. 7551 The params variable "note-cgraph-section-edge-threshold" can be 7552 used to only list edges above a certain threshold. 7553 7554 `-frecord-gcc-switches-in-elf' 7555 Record the command line options in the .gnu.switches.text elf 7556 section for sample based LIPO to do module grouping. 7557 7558 The following options control compiler behavior regarding floating 7559 point arithmetic. These options trade off between speed and 7560 correctness. All must be specifically enabled. 7561 7562 `-ffloat-store' 7563 Do not store floating point variables in registers, and inhibit 7564 other options that might change whether a floating point value is 7565 taken from a register or memory. 7566 7567 This option prevents undesirable excess precision on machines such 7568 as the 68000 where the floating registers (of the 68881) keep more 7569 precision than a `double' is supposed to have. Similarly for the 7570 x86 architecture. For most programs, the excess precision does 7571 only good, but a few programs rely on the precise definition of 7572 IEEE floating point. Use `-ffloat-store' for such programs, after 7573 modifying them to store all pertinent intermediate computations 7574 into variables. 7575 7576 `-fexcess-precision=STYLE' 7577 This option allows further control over excess precision on 7578 machines where floating-point registers have more precision than 7579 the IEEE `float' and `double' types and the processor does not 7580 support operations rounding to those types. By default, 7581 `-fexcess-precision=fast' is in effect; this means that operations 7582 are carried out in the precision of the registers and that it is 7583 unpredictable when rounding to the types specified in the source 7584 code takes place. When compiling C, if 7585 `-fexcess-precision=standard' is specified then excess precision 7586 will follow the rules specified in ISO C99; in particular, both 7587 casts and assignments cause values to be rounded to their semantic 7588 types (whereas `-ffloat-store' only affects assignments). This 7589 option is enabled by default for C if a strict conformance option 7590 such as `-std=c99' is used. 7591 7592 `-fexcess-precision=standard' is not implemented for languages 7593 other than C, and has no effect if `-funsafe-math-optimizations' 7594 or `-ffast-math' is specified. On the x86, it also has no effect 7595 if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the 7596 former case, IEEE semantics apply without excess precision, and in 7597 the latter, rounding is unpredictable. 7598 7599 `-ffast-math' 7600 Sets `-fno-math-errno', `-funsafe-math-optimizations', 7601 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans' 7602 and `-fcx-limited-range'. 7603 7604 This option causes the preprocessor macro `__FAST_MATH__' to be 7605 defined. 7606 7607 This option is not turned on by any `-O' option besides `-Ofast' 7608 since it can result in incorrect output for programs which depend 7609 on an exact implementation of IEEE or ISO rules/specifications for 7610 math functions. It may, however, yield faster code for programs 7611 that do not require the guarantees of these specifications. 7612 7613 `-fno-math-errno' 7614 Do not set ERRNO after calling math functions that are executed 7615 with a single instruction, e.g., sqrt. A program that relies on 7616 IEEE exceptions for math error handling may want to use this flag 7617 for speed while maintaining IEEE arithmetic compatibility. 7618 7619 This option is not turned on by any `-O' option since it can 7620 result in incorrect output for programs which depend on an exact 7621 implementation of IEEE or ISO rules/specifications for math 7622 functions. It may, however, yield faster code for programs that do 7623 not require the guarantees of these specifications. 7624 7625 The default is `-fmath-errno'. 7626 7627 On Darwin systems, the math library never sets `errno'. There is 7628 therefore no reason for the compiler to consider the possibility 7629 that it might, and `-fno-math-errno' is the default. 7630 7631 `-funsafe-math-optimizations' 7632 Allow optimizations for floating-point arithmetic that (a) assume 7633 that arguments and results are valid and (b) may violate IEEE or 7634 ANSI standards. When used at link-time, it may include libraries 7635 or startup files that change the default FPU control word or other 7636 similar optimizations. 7637 7638 This option is not turned on by any `-O' option since it can 7639 result in incorrect output for programs which depend on an exact 7640 implementation of IEEE or ISO rules/specifications for math 7641 functions. It may, however, yield faster code for programs that do 7642 not require the guarantees of these specifications. Enables 7643 `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math' 7644 and `-freciprocal-math'. 7645 7646 The default is `-fno-unsafe-math-optimizations'. 7647 7648 `-fassociative-math' 7649 Allow re-association of operands in series of floating-point 7650 operations. This violates the ISO C and C++ language standard by 7651 possibly changing computation result. NOTE: re-ordering may 7652 change the sign of zero as well as ignore NaNs and inhibit or 7653 create underflow or overflow (and thus cannot be used on a code 7654 which relies on rounding behavior like `(x + 2**52) - 2**52)'. 7655 May also reorder floating-point comparisons and thus may not be 7656 used when ordered comparisons are required. This option requires 7657 that both `-fno-signed-zeros' and `-fno-trapping-math' be in 7658 effect. Moreover, it doesn't make much sense with 7659 `-frounding-math'. For Fortran the option is automatically enabled 7660 when both `-fno-signed-zeros' and `-fno-trapping-math' are in 7661 effect. 7662 7663 The default is `-fno-associative-math'. 7664 7665 `-freciprocal-math' 7666 Allow the reciprocal of a value to be used instead of dividing by 7667 the value if this enables optimizations. For example `x / y' can 7668 be replaced with `x * (1/y)' which is useful if `(1/y)' is subject 7669 to common subexpression elimination. Note that this loses 7670 precision and increases the number of flops operating on the value. 7671 7672 The default is `-fno-reciprocal-math'. 7673 7674 `-ffinite-math-only' 7675 Allow optimizations for floating-point arithmetic that assume that 7676 arguments and results are not NaNs or +-Infs. 7677 7678 This option is not turned on by any `-O' option since it can 7679 result in incorrect output for programs which depend on an exact 7680 implementation of IEEE or ISO rules/specifications for math 7681 functions. It may, however, yield faster code for programs that do 7682 not require the guarantees of these specifications. 7683 7684 The default is `-fno-finite-math-only'. 7685 7686 `-fno-signed-zeros' 7687 Allow optimizations for floating point arithmetic that ignore the 7688 signedness of zero. IEEE arithmetic specifies the behavior of 7689 distinct +0.0 and -0.0 values, which then prohibits simplification 7690 of expressions such as x+0.0 or 0.0*x (even with 7691 `-ffinite-math-only'). This option implies that the sign of a 7692 zero result isn't significant. 7693 7694 The default is `-fsigned-zeros'. 7695 7696 `-fno-trapping-math' 7697 Compile code assuming that floating-point operations cannot 7698 generate user-visible traps. These traps include division by 7699 zero, overflow, underflow, inexact result and invalid operation. 7700 This option requires that `-fno-signaling-nans' be in effect. 7701 Setting this option may allow faster code if one relies on 7702 "non-stop" IEEE arithmetic, for example. 7703 7704 This option should never be turned on by any `-O' option since it 7705 can result in incorrect output for programs which depend on an 7706 exact implementation of IEEE or ISO rules/specifications for math 7707 functions. 7708 7709 The default is `-ftrapping-math'. 7710 7711 `-frounding-math' 7712 Disable transformations and optimizations that assume default 7713 floating point rounding behavior. This is round-to-zero for all 7714 floating point to integer conversions, and round-to-nearest for 7715 all other arithmetic truncations. This option should be specified 7716 for programs that change the FP rounding mode dynamically, or that 7717 may be executed with a non-default rounding mode. This option 7718 disables constant folding of floating point expressions at 7719 compile-time (which may be affected by rounding mode) and 7720 arithmetic transformations that are unsafe in the presence of 7721 sign-dependent rounding modes. 7722 7723 The default is `-fno-rounding-math'. 7724 7725 This option is experimental and does not currently guarantee to 7726 disable all GCC optimizations that are affected by rounding mode. 7727 Future versions of GCC may provide finer control of this setting 7728 using C99's `FENV_ACCESS' pragma. This command line option will 7729 be used to specify the default state for `FENV_ACCESS'. 7730 7731 `-fsignaling-nans' 7732 Compile code assuming that IEEE signaling NaNs may generate 7733 user-visible traps during floating-point operations. Setting this 7734 option disables optimizations that may change the number of 7735 exceptions visible with signaling NaNs. This option implies 7736 `-ftrapping-math'. 7737 7738 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 7739 defined. 7740 7741 The default is `-fno-signaling-nans'. 7742 7743 This option is experimental and does not currently guarantee to 7744 disable all GCC optimizations that affect signaling NaN behavior. 7745 7746 `-fsingle-precision-constant' 7747 Treat floating point constant as single precision constant instead 7748 of implicitly converting it to double precision constant. 7749 7750 `-fcx-limited-range' 7751 When enabled, this option states that a range reduction step is not 7752 needed when performing complex division. Also, there is no 7753 checking whether the result of a complex multiplication or 7754 division is `NaN + I*NaN', with an attempt to rescue the situation 7755 in that case. The default is `-fno-cx-limited-range', but is 7756 enabled by `-ffast-math'. 7757 7758 This option controls the default setting of the ISO C99 7759 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 7760 all languages. 7761 7762 `-fcx-fortran-rules' 7763 Complex multiplication and division follow Fortran rules. Range 7764 reduction is done as part of complex division, but there is no 7765 checking whether the result of a complex multiplication or 7766 division is `NaN + I*NaN', with an attempt to rescue the situation 7767 in that case. 7768 7769 The default is `-fno-cx-fortran-rules'. 7770 7771 `min-mcf-cancel-iters' 7772 The minimum number of iterations of negative cycle cancellation 7773 during MCF profile correction before early termination. This 7774 parameter is only useful when using `-fprofile-correction'. 7775 7776 7777 The following options control optimizations that may improve 7778 performance, but are not enabled by any `-O' options. This section 7779 includes experimental options that may produce broken code. 7780 7781 `-fbranch-probabilities' 7782 After running a program compiled with `-fprofile-arcs' (*note 7783 Options for Debugging Your Program or `gcc': Debugging Options.), 7784 you can compile it a second time using `-fbranch-probabilities', 7785 to improve optimizations based on the number of times each branch 7786 was taken. When the program compiled with `-fprofile-arcs' exits 7787 it saves arc execution counts to a file called `SOURCENAME.gcda' 7788 for each source file. The information in this data file is very 7789 dependent on the structure of the generated code, so you must use 7790 the same source code and the same optimization options for both 7791 compilations. 7792 7793 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 7794 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 7795 optimization. Currently, they are only used in one place: in 7796 `reorg.c', instead of guessing which path a branch is most likely 7797 to take, the `REG_BR_PROB' values are used to exactly determine 7798 which path is taken more often. 7799 7800 `-fclone-hot-version-paths' 7801 When multi-version calls are made using `__builtin_dispatch', this 7802 flag enables cloning and hoisting of hot multiversioned paths. 7803 7804 `-fprofile-values' 7805 If combined with `-fprofile-arcs', it adds code so that some data 7806 about values of expressions in the program is gathered. 7807 7808 With `-fbranch-probabilities', it reads back the data gathered 7809 from profiling values of expressions for usage in optimizations. 7810 7811 Enabled with `-fprofile-generate' and `-fprofile-use'. 7812 7813 `-fvpt' 7814 If combined with `-fprofile-arcs', it instructs the compiler to add 7815 a code to gather information about values of expressions. 7816 7817 With `-fbranch-probabilities', it reads back the data gathered and 7818 actually performs the optimizations based on them. Currently the 7819 optimizations include specialization of division operation using 7820 the knowledge about the value of the denominator. 7821 7822 `-frename-registers' 7823 Attempt to avoid false dependencies in scheduled code by making use 7824 of registers left over after register allocation. This 7825 optimization will most benefit processors with lots of registers. 7826 Depending on the debug information format adopted by the target, 7827 however, it can make debugging impossible, since variables will no 7828 longer stay in a "home register". 7829 7830 Enabled by default with `-funroll-loops' and `-fpeel-loops'. 7831 7832 `-ftracer' 7833 Perform tail duplication to enlarge superblock size. This 7834 transformation simplifies the control flow of the function 7835 allowing other optimizations to do better job. 7836 7837 Enabled with `-fprofile-use'. 7838 7839 `-funroll-loops' 7840 Unroll loops whose number of iterations can be determined at 7841 compile time or upon entry to the loop. `-funroll-loops' implies 7842 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 7843 also turns on complete loop peeling (i.e. complete removal of 7844 loops with small constant number of iterations). This option 7845 makes code larger, and may or may not make it run faster. 7846 7847 Enabled with `-fprofile-use'. 7848 7849 `-funroll-all-loops' 7850 Unroll all loops, even if their number of iterations is uncertain 7851 when the loop is entered. This usually makes programs run more 7852 slowly. `-funroll-all-loops' implies the same options as 7853 `-funroll-loops'. 7854 7855 `-fpeel-loops' 7856 Peels the loops for that there is enough information that they do 7857 not roll much (from profile feedback). It also turns on complete 7858 loop peeling (i.e. complete removal of loops with small constant 7859 number of iterations). 7860 7861 Enabled with `-fprofile-use'. 7862 7863 `-fmove-loop-invariants' 7864 Enables the loop invariant motion pass in the RTL loop optimizer. 7865 Enabled at level `-O1' 7866 7867 `-funswitch-loops' 7868 Move branches with loop invariant conditions out of the loop, with 7869 duplicates of the loop on both branches (modified according to 7870 result of the condition). 7871 7872 `-ffunction-sections' 7873 `-fdata-sections' 7874 Place each function or data item into its own section in the output 7875 file if the target supports arbitrary sections. The name of the 7876 function or the name of the data item determines the section's name 7877 in the output file. 7878 7879 Use these options on systems where the linker can perform 7880 optimizations to improve locality of reference in the instruction 7881 space. Most systems using the ELF object format and SPARC 7882 processors running Solaris 2 have linkers with such optimizations. 7883 AIX may have these optimizations in the future. 7884 7885 Only use these options when there are significant benefits from 7886 doing so. When you specify these options, the assembler and 7887 linker will create larger object and executable files and will 7888 also be slower. You will not be able to use `gprof' on all 7889 systems if you specify this option and you may have problems with 7890 debugging if you specify both this option and `-g'. 7891 7892 `-fbranch-target-load-optimize' 7893 Perform branch target register load optimization before prologue / 7894 epilogue threading. The use of target registers can typically be 7895 exposed only during reload, thus hoisting loads out of loops and 7896 doing inter-block scheduling needs a separate optimization pass. 7897 7898 `-fbranch-target-load-optimize2' 7899 Perform branch target register load optimization after prologue / 7900 epilogue threading. 7901 7902 `-fbtr-bb-exclusive' 7903 When performing branch target register load optimization, don't 7904 reuse branch target registers in within any basic block. 7905 7906 `-fstack-protector' 7907 Emit extra code to check for buffer overflows, such as stack 7908 smashing attacks. This is done by adding a guard variable to 7909 functions with vulnerable objects. This includes functions that 7910 call alloca, and functions with buffers larger than 8 bytes. The 7911 guards are initialized when a function is entered and then checked 7912 when the function exits. If a guard check fails, an error message 7913 is printed and the program exits. 7914 7915 `-fstack-protector-all' 7916 Like `-fstack-protector' except that all functions are protected. 7917 7918 `-fstack-protector-strong' 7919 Like `-fstack-protector' but includes additional functions to be 7920 protected - those that have local array definitions, or have 7921 references to local frame addresses. 7922 7923 `-fsection-anchors' 7924 Try to reduce the number of symbolic address calculations by using 7925 shared "anchor" symbols to address nearby objects. This 7926 transformation can help to reduce the number of GOT entries and 7927 GOT accesses on some targets. 7928 7929 For example, the implementation of the following function `foo': 7930 7931 static int a, b, c; 7932 int foo (void) { return a + b + c; } 7933 7934 would usually calculate the addresses of all three variables, but 7935 if you compile it with `-fsection-anchors', it will access the 7936 variables from a common anchor point instead. The effect is 7937 similar to the following pseudocode (which isn't valid C): 7938 7939 int foo (void) 7940 { 7941 register int *xr = &x; 7942 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 7943 } 7944 7945 Not all targets support this option. 7946 7947 `--param NAME=VALUE' 7948 In some places, GCC uses various constants to control the amount of 7949 optimization that is done. For example, GCC will not inline 7950 functions that contain more that a certain number of instructions. 7951 You can control some of these constants on the command-line using 7952 the `--param' option. 7953 7954 The names of specific parameters, and the meaning of the values, 7955 are tied to the internals of the compiler, and are subject to 7956 change without notice in future releases. 7957 7958 In each case, the VALUE is an integer. The allowable choices for 7959 NAME are given in the following table: 7960 7961 `struct-reorg-cold-struct-ratio' 7962 The threshold ratio (as a percentage) between a structure 7963 frequency and the frequency of the hottest structure in the 7964 program. This parameter is used by struct-reorg optimization 7965 enabled by `-fipa-struct-reorg'. We say that if the ratio of 7966 a structure frequency, calculated by profiling, to the 7967 hottest structure frequency in the program is less than this 7968 parameter, then structure reorganization is not applied to 7969 this structure. The default is 10. 7970 7971 `predictable-branch-outcome' 7972 When branch is predicted to be taken with probability lower 7973 than this threshold (in percent), then it is considered well 7974 predictable. The default is 10. 7975 7976 `max-crossjump-edges' 7977 The maximum number of incoming edges to consider for 7978 crossjumping. The algorithm used by `-fcrossjumping' is 7979 O(N^2) in the number of edges incoming to each block. 7980 Increasing values mean more aggressive optimization, making 7981 the compile time increase with probably small improvement in 7982 executable size. 7983 7984 `min-crossjump-insns' 7985 The minimum number of instructions which must be matched at 7986 the end of two blocks before crossjumping will be performed 7987 on them. This value is ignored in the case where all 7988 instructions in the block being crossjumped from are matched. 7989 The default value is 5. 7990 7991 `max-grow-copy-bb-insns' 7992 The maximum code size expansion factor when copying basic 7993 blocks instead of jumping. The expansion is relative to a 7994 jump instruction. The default value is 8. 7995 7996 `max-goto-duplication-insns' 7997 The maximum number of instructions to duplicate to a block 7998 that jumps to a computed goto. To avoid O(N^2) behavior in a 7999 number of passes, GCC factors computed gotos early in the 8000 compilation process, and unfactors them as late as possible. 8001 Only computed jumps at the end of a basic blocks with no more 8002 than max-goto-duplication-insns are unfactored. The default 8003 value is 8. 8004 8005 `max-delay-slot-insn-search' 8006 The maximum number of instructions to consider when looking 8007 for an instruction to fill a delay slot. If more than this 8008 arbitrary number of instructions is searched, the time 8009 savings from filling the delay slot will be minimal so stop 8010 searching. Increasing values mean more aggressive 8011 optimization, making the compile time increase with probably 8012 small improvement in executable run time. 8013 8014 `max-delay-slot-live-search' 8015 When trying to fill delay slots, the maximum number of 8016 instructions to consider when searching for a block with 8017 valid live register information. Increasing this arbitrarily 8018 chosen value means more aggressive optimization, increasing 8019 the compile time. This parameter should be removed when the 8020 delay slot code is rewritten to maintain the control-flow 8021 graph. 8022 8023 `max-gcse-memory' 8024 The approximate maximum amount of memory that will be 8025 allocated in order to perform the global common subexpression 8026 elimination optimization. If more memory than specified is 8027 required, the optimization will not be done. 8028 8029 `max-gcse-insertion-ratio' 8030 If the ratio of expression insertions to deletions is larger 8031 than this value for any expression, then RTL PRE will insert 8032 or remove the expression and thus leave partially redundant 8033 computations in the instruction stream. The default value is 8034 20. 8035 8036 `max-pending-list-length' 8037 The maximum number of pending dependencies scheduling will 8038 allow before flushing the current state and starting over. 8039 Large functions with few branches or calls can create 8040 excessively large lists which needlessly consume memory and 8041 resources. 8042 8043 `max-inline-insns-single' 8044 Several parameters control the tree inliner used in gcc. 8045 This number sets the maximum number of instructions (counted 8046 in GCC's internal representation) in a single function that 8047 the tree inliner will consider for inlining. This only 8048 affects functions declared inline and methods implemented in 8049 a class declaration (C++). The default value is 400. 8050 8051 `max-inline-insns-auto' 8052 When you use `-finline-functions' (included in `-O3'), a lot 8053 of functions that would otherwise not be considered for 8054 inlining by the compiler will be investigated. To those 8055 functions, a different (more restrictive) limit compared to 8056 functions declared inline can be applied. The default value 8057 is 40. 8058 8059 `mversn-clone-depth' 8060 When using `-fclone-hot-version-paths', hot function paths 8061 are multi- versioned via cloning. This parameter specifies 8062 the maximum length of the call graph path that can be cloned. 8063 The default value is 2. 8064 8065 `num-mversn-clones' 8066 When using `-fclone-hot-version-paths', hot function paths 8067 are multi- versioned via cloning. This parameter specifies 8068 the maximum number of functions that can be cloned. The 8069 default value is 10. 8070 8071 `large-function-insns' 8072 The limit specifying really large functions. For functions 8073 larger than this limit after inlining, inlining is 8074 constrained by `--param large-function-growth'. This 8075 parameter is useful primarily to avoid extreme compilation 8076 time caused by non-linear algorithms used by the backend. 8077 The default value is 2700. 8078 8079 `large-function-growth' 8080 Specifies maximal growth of large function caused by inlining 8081 in percents. The default value is 100 which limits large 8082 function growth to 2.0 times the original size. 8083 8084 `large-unit-insns' 8085 The limit specifying large translation unit. Growth caused 8086 by inlining of units larger than this limit is limited by 8087 `--param inline-unit-growth'. For small units this might be 8088 too tight (consider unit consisting of function A that is 8089 inline and B that just calls A three time. If B is small 8090 relative to A, the growth of unit is 300\% and yet such 8091 inlining is very sane. For very large units consisting of 8092 small inlineable functions however the overall unit growth 8093 limit is needed to avoid exponential explosion of code size. 8094 Thus for smaller units, the size is increased to `--param 8095 large-unit-insns' before applying `--param 8096 inline-unit-growth'. The default is 10000 8097 8098 `inline-unit-growth' 8099 Specifies maximal overall growth of the compilation unit 8100 caused by inlining. The default value is 30 which limits 8101 unit growth to 1.3 times the original size. 8102 8103 `ipcp-unit-growth' 8104 Specifies maximal overall growth of the compilation unit 8105 caused by interprocedural constant propagation. The default 8106 value is 10 which limits unit growth to 1.1 times the 8107 original size. 8108 8109 `large-stack-frame' 8110 The limit specifying large stack frames. While inlining the 8111 algorithm is trying to not grow past this limit too much. 8112 Default value is 256 bytes. 8113 8114 `large-stack-frame-growth' 8115 Specifies maximal growth of large stack frames caused by 8116 inlining in percents. The default value is 1000 which limits 8117 large stack frame growth to 11 times the original size. 8118 8119 `max-inline-insns-recursive' 8120 `max-inline-insns-recursive-auto' 8121 Specifies maximum number of instructions out-of-line copy of 8122 self recursive inline function can grow into by performing 8123 recursive inlining. 8124 8125 For functions declared inline `--param 8126 max-inline-insns-recursive' is taken into account. For 8127 function not declared inline, recursive inlining happens only 8128 when `-finline-functions' (included in `-O3') is enabled and 8129 `--param max-inline-insns-recursive-auto' is used. The 8130 default value is 450. 8131 8132 `max-inline-recursive-depth' 8133 `max-inline-recursive-depth-auto' 8134 Specifies maximum recursion depth used by the recursive 8135 inlining. 8136 8137 For functions declared inline `--param 8138 max-inline-recursive-depth' is taken into account. For 8139 function not declared inline, recursive inlining happens only 8140 when `-finline-functions' (included in `-O3') is enabled and 8141 `--param max-inline-recursive-depth-auto' is used. The 8142 default value is 8. 8143 8144 `min-inline-recursive-probability' 8145 Recursive inlining is profitable only for function having 8146 deep recursion in average and can hurt for function having 8147 little recursion depth by increasing the prologue size or 8148 complexity of function body to other optimizers. 8149 8150 When profile feedback is available (see `-fprofile-generate') 8151 the actual recursion depth can be guessed from probability 8152 that function will recurse via given call expression. This 8153 parameter limits inlining only to call expression whose 8154 probability exceeds given threshold (in percents). The 8155 default value is 10. 8156 8157 `early-inlining-insns' 8158 Specify growth that early inliner can make. In effect it 8159 increases amount of inlining for code having large 8160 abstraction penalty. The default value is 10. 8161 8162 `max-early-inliner-iterations' 8163 `max-early-inliner-iterations' 8164 Limit of iterations of early inliner. This basically bounds 8165 number of nested indirect calls early inliner can resolve. 8166 Deeper chains are still handled by late inlining. 8167 8168 `comdat-sharing-probability' 8169 `comdat-sharing-probability' 8170 Probability (in percent) that C++ inline function with comdat 8171 visibility will be shared across multiple compilation units. 8172 The default value is 20. 8173 8174 `min-vect-loop-bound' 8175 The minimum number of iterations under which a loop will not 8176 get vectorized when `-ftree-vectorize' is used. The number 8177 of iterations after vectorization needs to be greater than 8178 the value specified by this option to allow vectorization. 8179 The default value is 0. 8180 8181 `gcse-cost-distance-ratio' 8182 Scaling factor in calculation of maximum distance an 8183 expression can be moved by GCSE optimizations. This is 8184 currently supported only in the code hoisting pass. The 8185 bigger the ratio, the more aggressive code hoisting will be 8186 with simple expressions, i.e., the expressions which have cost 8187 less than `gcse-unrestricted-cost'. Specifying 0 will disable 8188 hoisting of simple expressions. The default value is 10. 8189 8190 `gcse-unrestricted-cost' 8191 Cost, roughly measured as the cost of a single typical machine 8192 instruction, at which GCSE optimizations will not constrain 8193 the distance an expression can travel. This is currently 8194 supported only in the code hoisting pass. The lesser the 8195 cost, the more aggressive code hoisting will be. Specifying 8196 0 will allow all expressions to travel unrestricted distances. 8197 The default value is 3. 8198 8199 `max-hoist-depth' 8200 The depth of search in the dominator tree for expressions to 8201 hoist. This is used to avoid quadratic behavior in hoisting 8202 algorithm. The value of 0 will avoid limiting the search, 8203 but may slow down compilation of huge functions. The default 8204 value is 30. 8205 8206 `max-unrolled-insns' 8207 The maximum number of instructions that a loop should have if 8208 that loop is unrolled, and if the loop is unrolled, it 8209 determines how many times the loop code is unrolled. 8210 8211 `max-average-unrolled-insns' 8212 The maximum number of instructions biased by probabilities of 8213 their execution that a loop should have if that loop is 8214 unrolled, and if the loop is unrolled, it determines how many 8215 times the loop code is unrolled. 8216 8217 `max-unroll-times' 8218 The maximum number of unrollings of a single loop. 8219 8220 `max-peeled-insns' 8221 The maximum number of instructions that a loop should have if 8222 that loop is peeled, and if the loop is peeled, it determines 8223 how many times the loop code is peeled. 8224 8225 `max-peel-times' 8226 The maximum number of peelings of a single loop. 8227 8228 `max-completely-peeled-insns' 8229 The maximum number of insns of a completely peeled loop. 8230 8231 `max-completely-peeled-insns-feedback' 8232 The maximum number of insns of a completely peeled loop when 8233 profile feedback is available and the loop is hot. Because of 8234 the real profiles, this value may set to be larger for hot 8235 loops. Its default value is 600. 8236 8237 `max-once-peeled-insns' 8238 The maximum number of insns of a peeled loop that rolls only 8239 once. 8240 8241 `max-once-peeled-insns-feedback' 8242 The maximum number of insns of a peeled loop when profile 8243 feedback is available and the loop is hot. Because of the 8244 real profiles, this value may set to be larger for hot loops. 8245 The default value is 600. 8246 8247 `max-completely-peel-times' 8248 The maximum number of iterations of a loop to be suitable for 8249 complete peeling. 8250 8251 `max-completely-peel-times-feedback' 8252 The maximum number of iterations of a loop to be suitable for 8253 complete peeling when profile feedback is available and the 8254 loop is hot. Because of the real profiles, this value may set 8255 to be larger for hot loops. Its default value is 16. 8256 8257 `max-completely-peel-loop-nest-depth' 8258 The maximum depth of a loop nest suitable for complete 8259 peeling. 8260 8261 `codesize-hotness-threshold' 8262 The minimum profile count of basic blocks to look at when 8263 estimating the code size footprint of the call graph in a 8264 LIPO compile. 8265 8266 `unrollpeel-codesize-threshold' 8267 Maximum LIPO code size footprint estimate for loop unrolling 8268 and peeling. 8269 8270 `max-unswitch-insns' 8271 The maximum number of insns of an unswitched loop. 8272 8273 `max-unswitch-level' 8274 The maximum number of branches unswitched in a single loop. 8275 8276 `lim-expensive' 8277 The minimum cost of an expensive expression in the loop 8278 invariant motion. 8279 8280 `iv-consider-all-candidates-bound' 8281 Bound on number of candidates for induction variables below 8282 that all candidates are considered for each use in induction 8283 variable optimizations. Only the most relevant candidates 8284 are considered if there are more candidates, to avoid 8285 quadratic time complexity. 8286 8287 `iv-max-considered-uses' 8288 The induction variable optimizations give up on loops that 8289 contain more induction variable uses. 8290 8291 `iv-always-prune-cand-set-bound' 8292 If number of candidates in the set is smaller than this value, 8293 we always try to remove unnecessary ivs from the set during 8294 its optimization when a new iv is added to the set. 8295 8296 `scev-max-expr-size' 8297 Bound on size of expressions used in the scalar evolutions 8298 analyzer. Large expressions slow the analyzer. 8299 8300 `scev-max-expr-complexity' 8301 Bound on the complexity of the expressions in the scalar 8302 evolutions analyzer. Complex expressions slow the analyzer. 8303 8304 `omega-max-vars' 8305 The maximum number of variables in an Omega constraint system. 8306 The default value is 128. 8307 8308 `omega-max-geqs' 8309 The maximum number of inequalities in an Omega constraint 8310 system. The default value is 256. 8311 8312 `omega-max-eqs' 8313 The maximum number of equalities in an Omega constraint 8314 system. The default value is 128. 8315 8316 `omega-max-wild-cards' 8317 The maximum number of wildcard variables that the Omega 8318 solver will be able to insert. The default value is 18. 8319 8320 `omega-hash-table-size' 8321 The size of the hash table in the Omega solver. The default 8322 value is 550. 8323 8324 `omega-max-keys' 8325 The maximal number of keys used by the Omega solver. The 8326 default value is 500. 8327 8328 `omega-eliminate-redundant-constraints' 8329 When set to 1, use expensive methods to eliminate all 8330 redundant constraints. The default value is 0. 8331 8332 `vect-max-version-for-alignment-checks' 8333 The maximum number of runtime checks that can be performed 8334 when doing loop versioning for alignment in the vectorizer. 8335 See option ftree-vect-loop-version for more information. 8336 8337 `vect-max-version-for-alias-checks' 8338 The maximum number of runtime checks that can be performed 8339 when doing loop versioning for alias in the vectorizer. See 8340 option ftree-vect-loop-version for more information. 8341 8342 `max-iterations-to-track' 8343 The maximum number of iterations of a loop the brute force 8344 algorithm for analysis of # of iterations of the loop tries 8345 to evaluate. 8346 8347 `hot-bb-count-fraction' 8348 Select fraction of the maximal count of repetitions of basic 8349 block in program given basic block needs to have to be 8350 considered hot. 8351 8352 `hot-bb-frequency-fraction' 8353 Select fraction of the entry block frequency of executions of 8354 basic block in function given basic block needs to have to be 8355 considered hot 8356 8357 `max-predicted-iterations' 8358 The maximum number of loop iterations we predict statically. 8359 This is useful in cases where function contain single loop 8360 with known bound and other loop with unknown. We predict the 8361 known number of iterations correctly, while the unknown 8362 number of iterations average to roughly 10. This means that 8363 the loop without bounds would appear artificially cold 8364 relative to the other one. 8365 8366 `align-threshold' 8367 Select fraction of the maximal frequency of executions of 8368 basic block in function given basic block will get aligned. 8369 8370 `align-loop-iterations' 8371 A loop expected to iterate at lest the selected number of 8372 iterations will get aligned. 8373 8374 `tracer-dynamic-coverage' 8375 `tracer-dynamic-coverage-feedback' 8376 This value is used to limit superblock formation once the 8377 given percentage of executed instructions is covered. This 8378 limits unnecessary code size expansion. 8379 8380 The `tracer-dynamic-coverage-feedback' is used only when 8381 profile feedback is available. The real profiles (as opposed 8382 to statically estimated ones) are much less balanced allowing 8383 the threshold to be larger value. 8384 8385 `tracer-max-code-growth' 8386 Stop tail duplication once code growth has reached given 8387 percentage. This is rather hokey argument, as most of the 8388 duplicates will be eliminated later in cross jumping, so it 8389 may be set to much higher values than is the desired code 8390 growth. 8391 8392 `tracer-min-branch-ratio' 8393 Stop reverse growth when the reverse probability of best edge 8394 is less than this threshold (in percent). 8395 8396 `tracer-min-branch-ratio' 8397 `tracer-min-branch-ratio-feedback' 8398 Stop forward growth if the best edge do have probability 8399 lower than this threshold. 8400 8401 Similarly to `tracer-dynamic-coverage' two values are 8402 present, one for compilation for profile feedback and one for 8403 compilation without. The value for compilation with profile 8404 feedback needs to be more conservative (higher) in order to 8405 make tracer effective. 8406 8407 `max-cse-path-length' 8408 Maximum number of basic blocks on path that cse considers. 8409 The default is 10. 8410 8411 `max-cse-insns' 8412 The maximum instructions CSE process before flushing. The 8413 default is 1000. 8414 8415 `ggc-min-expand' 8416 GCC uses a garbage collector to manage its own memory 8417 allocation. This parameter specifies the minimum percentage 8418 by which the garbage collector's heap should be allowed to 8419 expand between collections. Tuning this may improve 8420 compilation speed; it has no effect on code generation. 8421 8422 The default is 30% + 70% * (RAM/1GB) with an upper bound of 8423 100% when RAM >= 1GB. If `getrlimit' is available, the 8424 notion of "RAM" is the smallest of actual RAM and 8425 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 8426 calculate RAM on a particular platform, the lower bound of 8427 30% is used. Setting this parameter and `ggc-min-heapsize' 8428 to zero causes a full collection to occur at every 8429 opportunity. This is extremely slow, but can be useful for 8430 debugging. 8431 8432 `ggc-min-heapsize' 8433 Minimum size of the garbage collector's heap before it begins 8434 bothering to collect garbage. The first collection occurs 8435 after the heap expands by `ggc-min-expand'% beyond 8436 `ggc-min-heapsize'. Again, tuning this may improve 8437 compilation speed, and has no effect on code generation. 8438 8439 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 8440 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 8441 exceeded, but with a lower bound of 4096 (four megabytes) and 8442 an upper bound of 131072 (128 megabytes). If GCC is not able 8443 to calculate RAM on a particular platform, the lower bound is 8444 used. Setting this parameter very large effectively disables 8445 garbage collection. Setting this parameter and 8446 `ggc-min-expand' to zero causes a full collection to occur at 8447 every opportunity. 8448 8449 `max-reload-search-insns' 8450 The maximum number of instruction reload should look backward 8451 for equivalent register. Increasing values mean more 8452 aggressive optimization, making the compile time increase 8453 with probably slightly better performance. The default value 8454 is 100. 8455 8456 `max-cselib-memory-locations' 8457 The maximum number of memory locations cselib should take 8458 into account. Increasing values mean more aggressive 8459 optimization, making the compile time increase with probably 8460 slightly better performance. The default value is 500. 8461 8462 `reorder-blocks-duplicate' 8463 `reorder-blocks-duplicate-feedback' 8464 Used by basic block reordering pass to decide whether to use 8465 unconditional branch or duplicate the code on its 8466 destination. Code is duplicated when its estimated size is 8467 smaller than this value multiplied by the estimated size of 8468 unconditional jump in the hot spots of the program. 8469 8470 The `reorder-block-duplicate-feedback' is used only when 8471 profile feedback is available and may be set to higher values 8472 than `reorder-block-duplicate' since information about the 8473 hot spots is more accurate. 8474 8475 `max-sched-ready-insns' 8476 The maximum number of instructions ready to be issued the 8477 scheduler should consider at any given time during the first 8478 scheduling pass. Increasing values mean more thorough 8479 searches, making the compilation time increase with probably 8480 little benefit. The default value is 100. 8481 8482 `max-sched-region-blocks' 8483 The maximum number of blocks in a region to be considered for 8484 interblock scheduling. The default value is 10. 8485 8486 `max-pipeline-region-blocks' 8487 The maximum number of blocks in a region to be considered for 8488 pipelining in the selective scheduler. The default value is 8489 15. 8490 8491 `max-sched-region-insns' 8492 The maximum number of insns in a region to be considered for 8493 interblock scheduling. The default value is 100. 8494 8495 `max-pipeline-region-insns' 8496 The maximum number of insns in a region to be considered for 8497 pipelining in the selective scheduler. The default value is 8498 200. 8499 8500 `min-spec-prob' 8501 The minimum probability (in percents) of reaching a source 8502 block for interblock speculative scheduling. The default 8503 value is 40. 8504 8505 `max-sched-extend-regions-iters' 8506 The maximum number of iterations through CFG to extend 8507 regions. 0 - disable region extension, N - do at most N 8508 iterations. The default value is 0. 8509 8510 `max-sched-insn-conflict-delay' 8511 The maximum conflict delay for an insn to be considered for 8512 speculative motion. The default value is 3. 8513 8514 `sched-spec-prob-cutoff' 8515 The minimal probability of speculation success (in percents), 8516 so that speculative insn will be scheduled. The default 8517 value is 40. 8518 8519 `sched-mem-true-dep-cost' 8520 Minimal distance (in CPU cycles) between store and load 8521 targeting same memory locations. The default value is 1. 8522 8523 `selsched-max-lookahead' 8524 The maximum size of the lookahead window of selective 8525 scheduling. It is a depth of search for available 8526 instructions. The default value is 50. 8527 8528 `selsched-max-sched-times' 8529 The maximum number of times that an instruction will be 8530 scheduled during selective scheduling. This is the limit on 8531 the number of iterations through which the instruction may be 8532 pipelined. The default value is 2. 8533 8534 `selsched-max-insns-to-rename' 8535 The maximum number of best instructions in the ready list 8536 that are considered for renaming in the selective scheduler. 8537 The default value is 2. 8538 8539 `max-last-value-rtl' 8540 The maximum size measured as number of RTLs that can be 8541 recorded in an expression in combiner for a pseudo register 8542 as last known value of that register. The default is 10000. 8543 8544 `integer-share-limit' 8545 Small integer constants can use a shared data structure, 8546 reducing the compiler's memory usage and increasing its 8547 speed. This sets the maximum value of a shared integer 8548 constant. The default value is 256. 8549 8550 `min-virtual-mappings' 8551 Specifies the minimum number of virtual mappings in the 8552 incremental SSA updater that should be registered to trigger 8553 the virtual mappings heuristic defined by 8554 virtual-mappings-ratio. The default value is 100. 8555 8556 `virtual-mappings-ratio' 8557 If the number of virtual mappings is virtual-mappings-ratio 8558 bigger than the number of virtual symbols to be updated, then 8559 the incremental SSA updater switches to a full update for 8560 those symbols. The default ratio is 3. 8561 8562 `ssp-buffer-size' 8563 The minimum size of buffers (i.e. arrays) that will receive 8564 stack smashing protection when `-fstack-protection' is used. 8565 8566 `max-jump-thread-duplication-stmts' 8567 Maximum number of statements allowed in a block that needs to 8568 be duplicated when threading jumps. 8569 8570 `max-fields-for-field-sensitive' 8571 Maximum number of fields in a structure we will treat in a 8572 field sensitive manner during pointer analysis. The default 8573 is zero for -O0, and -O1 and 100 for -Os, -O2, and -O3. 8574 8575 `prefetch-latency' 8576 Estimate on average number of instructions that are executed 8577 before prefetch finishes. The distance we prefetch ahead is 8578 proportional to this constant. Increasing this number may 8579 also lead to less streams being prefetched (see 8580 `simultaneous-prefetches'). 8581 8582 `simultaneous-prefetches' 8583 Maximum number of prefetches that can run at the same time. 8584 8585 `l1-cache-line-size' 8586 The size of cache line in L1 cache, in bytes. 8587 8588 `l1-cache-size' 8589 The size of L1 cache, in kilobytes. 8590 8591 `l2-cache-size' 8592 The size of L2 cache, in kilobytes. 8593 8594 `min-insn-to-prefetch-ratio' 8595 The minimum ratio between the number of instructions and the 8596 number of prefetches to enable prefetching in a loop. 8597 8598 `prefetch-min-insn-to-mem-ratio' 8599 The minimum ratio between the number of instructions and the 8600 number of memory references to enable prefetching in a loop. 8601 8602 `use-canonical-types' 8603 Whether the compiler should use the "canonical" type system. 8604 By default, this should always be 1, which uses a more 8605 efficient internal mechanism for comparing types in C++ and 8606 Objective-C++. However, if bugs in the canonical type system 8607 are causing compilation failures, set this value to 0 to 8608 disable canonical types. 8609 8610 `switch-conversion-max-branch-ratio' 8611 Switch initialization conversion will refuse to create arrays 8612 that are bigger than `switch-conversion-max-branch-ratio' 8613 times the number of branches in the switch. 8614 8615 `max-partial-antic-length' 8616 Maximum length of the partial antic set computed during the 8617 tree partial redundancy elimination optimization 8618 (`-ftree-pre') when optimizing at `-O3' and above. For some 8619 sorts of source code the enhanced partial redundancy 8620 elimination optimization can run away, consuming all of the 8621 memory available on the host machine. This parameter sets a 8622 limit on the length of the sets that are computed, which 8623 prevents the runaway behavior. Setting a value of 0 for this 8624 parameter will allow an unlimited set length. 8625 8626 `sccvn-max-scc-size' 8627 Maximum size of a strongly connected component (SCC) during 8628 SCCVN processing. If this limit is hit, SCCVN processing for 8629 the whole function will not be done and optimizations 8630 depending on it will be disabled. The default maximum SCC 8631 size is 10000. 8632 8633 `ira-max-loops-num' 8634 IRA uses a regional register allocation by default. If a 8635 function contains loops more than number given by the 8636 parameter, only at most given number of the most frequently 8637 executed loops will form regions for the regional register 8638 allocation. The default value of the parameter is 100. 8639 8640 `ira-max-conflict-table-size' 8641 Although IRA uses a sophisticated algorithm of compression 8642 conflict table, the table can be still big for huge 8643 functions. If the conflict table for a function could be 8644 more than size in MB given by the parameter, the conflict 8645 table is not built and faster, simpler, and lower quality 8646 register allocation algorithm will be used. The algorithm do 8647 not use pseudo-register conflicts. The default value of the 8648 parameter is 2000. 8649 8650 `ira-loop-reserved-regs' 8651 IRA can be used to evaluate more accurate register pressure 8652 in loops for decision to move loop invariants (see `-O3'). 8653 The number of available registers reserved for some other 8654 purposes is described by this parameter. The default value 8655 of the parameter is 2 which is minimal number of registers 8656 needed for execution of typical instruction. This value is 8657 the best found from numerous experiments. 8658 8659 `loop-invariant-max-bbs-in-loop' 8660 Loop invariant motion can be very expensive, both in compile 8661 time and in amount of needed compile time memory, with very 8662 large loops. Loops with more basic blocks than this 8663 parameter won't have loop invariant motion optimization 8664 performed on them. The default value of the parameter is 8665 1000 for -O1 and 10000 for -O2 and above. 8666 8667 `max-vartrack-size' 8668 Sets a maximum number of hash table slots to use during 8669 variable tracking dataflow analysis of any function. If this 8670 limit is exceeded with variable tracking at assignments 8671 enabled, analysis for that function is retried without it, 8672 after removing all debug insns from the function. If the 8673 limit is exceeded even without debug insns, var tracking 8674 analysis is completely disabled for the function. Setting 8675 the parameter to zero makes it unlimited. 8676 8677 `min-nondebug-insn-uid' 8678 Use uids starting at this parameter for nondebug insns. The 8679 range below the parameter is reserved exclusively for debug 8680 insns created by `-fvar-tracking-assignments', but debug 8681 insns may get (non-overlapping) uids above it if the reserved 8682 range is exhausted. 8683 8684 `ipa-sra-ptr-growth-factor' 8685 IPA-SRA will replace a pointer to an aggregate with one or 8686 more new parameters only when their cumulative size is less 8687 or equal to `ipa-sra-ptr-growth-factor' times the size of the 8688 original pointer parameter. 8689 8690 `graphite-max-nb-scop-params' 8691 To avoid exponential effects in the Graphite loop transforms, 8692 the number of parameters in a Static Control Part (SCoP) is 8693 bounded. The default value is 10 parameters. A variable 8694 whose value is unknown at compile time and defined outside a 8695 SCoP is a parameter of the SCoP. 8696 8697 `graphite-max-bbs-per-function' 8698 To avoid exponential effects in the detection of SCoPs, the 8699 size of the functions analyzed by Graphite is bounded. The 8700 default value is 100 basic blocks. 8701 8702 `loop-block-tile-size' 8703 Loop blocking or strip mining transforms, enabled with 8704 `-floop-block' or `-floop-strip-mine', strip mine each loop 8705 in the loop nest by a given number of iterations. The strip 8706 length can be changed using the `loop-block-tile-size' 8707 parameter. The default value is 51 iterations. 8708 8709 `devirt-type-list-size' 8710 IPA-CP attempts to track all possible types passed to a 8711 function's parameter in order to perform devirtualization. 8712 `devirt-type-list-size' is the maximum number of types it 8713 stores per a single formal parameter of a function. 8714 8715 `lto-partitions' 8716 Specify desired number of partitions produced during WHOPR 8717 compilation. The number of partitions should exceed the 8718 number of CPUs used for compilation. The default value is 32. 8719 8720 `lto-minpartition' 8721 Size of minimal partition for WHOPR (in estimated 8722 instructions). This prevents expenses of splitting very 8723 small programs into too many partitions. 8724 8725 `cxx-max-namespaces-for-diagnostic-help' 8726 The maximum number of namespaces to consult for suggestions 8727 when C++ name lookup fails for an identifier. The default is 8728 1000. 8729 8730 8731 8732 File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 8733 8734 3.11 Options Controlling the Preprocessor 8735 ========================================= 8736 8737 These options control the C preprocessor, which is run on each C source 8738 file before actual compilation. 8739 8740 If you use the `-E' option, nothing is done except preprocessing. 8741 Some of these options make sense only together with `-E' because they 8742 cause the preprocessor output to be unsuitable for actual compilation. 8743 8744 `-Wp,OPTION' 8745 You can use `-Wp,OPTION' to bypass the compiler driver and pass 8746 OPTION directly through to the preprocessor. If OPTION contains 8747 commas, it is split into multiple options at the commas. However, 8748 many options are modified, translated or interpreted by the 8749 compiler driver before being passed to the preprocessor, and `-Wp' 8750 forcibly bypasses this phase. The preprocessor's direct interface 8751 is undocumented and subject to change, so whenever possible you 8752 should avoid using `-Wp' and let the driver handle the options 8753 instead. 8754 8755 `-Xpreprocessor OPTION' 8756 Pass OPTION as an option to the preprocessor. You can use this to 8757 supply system-specific preprocessor options which GCC does not 8758 know how to recognize. 8759 8760 If you want to pass an option that takes an argument, you must use 8761 `-Xpreprocessor' twice, once for the option and once for the 8762 argument. 8763 8764 `-D NAME' 8765 Predefine NAME as a macro, with definition `1'. 8766 8767 `-D NAME=DEFINITION' 8768 The contents of DEFINITION are tokenized and processed as if they 8769 appeared during translation phase three in a `#define' directive. 8770 In particular, the definition will be truncated by embedded 8771 newline characters. 8772 8773 If you are invoking the preprocessor from a shell or shell-like 8774 program you may need to use the shell's quoting syntax to protect 8775 characters such as spaces that have a meaning in the shell syntax. 8776 8777 If you wish to define a function-like macro on the command line, 8778 write its argument list with surrounding parentheses before the 8779 equals sign (if any). Parentheses are meaningful to most shells, 8780 so you will need to quote the option. With `sh' and `csh', 8781 `-D'NAME(ARGS...)=DEFINITION'' works. 8782 8783 `-D' and `-U' options are processed in the order they are given on 8784 the command line. All `-imacros FILE' and `-include FILE' options 8785 are processed after all `-D' and `-U' options. 8786 8787 `-U NAME' 8788 Cancel any previous definition of NAME, either built in or 8789 provided with a `-D' option. 8790 8791 `-undef' 8792 Do not predefine any system-specific or GCC-specific macros. The 8793 standard predefined macros remain defined. 8794 8795 `-I DIR' 8796 Add the directory DIR to the list of directories to be searched 8797 for header files. Directories named by `-I' are searched before 8798 the standard system include directories. If the directory DIR is 8799 a standard system include directory, the option is ignored to 8800 ensure that the default search order for system directories and 8801 the special treatment of system headers are not defeated . If DIR 8802 begins with `=', then the `=' will be replaced by the sysroot 8803 prefix; see `--sysroot' and `-isysroot'. 8804 8805 `-o FILE' 8806 Write output to FILE. This is the same as specifying FILE as the 8807 second non-option argument to `cpp'. `gcc' has a different 8808 interpretation of a second non-option argument, so you must use 8809 `-o' to specify the output file. 8810 8811 `-Wall' 8812 Turns on all optional warnings which are desirable for normal code. 8813 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 8814 warning about integer promotion causing a change of sign in `#if' 8815 expressions. Note that many of the preprocessor's warnings are on 8816 by default and have no options to control them. 8817 8818 `-Wcomment' 8819 `-Wcomments' 8820 Warn whenever a comment-start sequence `/*' appears in a `/*' 8821 comment, or whenever a backslash-newline appears in a `//' comment. 8822 (Both forms have the same effect.) 8823 8824 `-Wtrigraphs' 8825 Most trigraphs in comments cannot affect the meaning of the 8826 program. However, a trigraph that would form an escaped newline 8827 (`??/' at the end of a line) can, by changing where the comment 8828 begins or ends. Therefore, only trigraphs that would form escaped 8829 newlines produce warnings inside a comment. 8830 8831 This option is implied by `-Wall'. If `-Wall' is not given, this 8832 option is still enabled unless trigraphs are enabled. To get 8833 trigraph conversion without warnings, but get the other `-Wall' 8834 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 8835 8836 `-Wtraditional' 8837 Warn about certain constructs that behave differently in 8838 traditional and ISO C. Also warn about ISO C constructs that have 8839 no traditional C equivalent, and problematic constructs which 8840 should be avoided. 8841 8842 `-Wundef' 8843 Warn whenever an identifier which is not a macro is encountered in 8844 an `#if' directive, outside of `defined'. Such identifiers are 8845 replaced with zero. 8846 8847 `-Wunused-macros' 8848 Warn about macros defined in the main file that are unused. A 8849 macro is "used" if it is expanded or tested for existence at least 8850 once. The preprocessor will also warn if the macro has not been 8851 used at the time it is redefined or undefined. 8852 8853 Built-in macros, macros defined on the command line, and macros 8854 defined in include files are not warned about. 8855 8856 _Note:_ If a macro is actually used, but only used in skipped 8857 conditional blocks, then CPP will report it as unused. To avoid 8858 the warning in such a case, you might improve the scope of the 8859 macro's definition by, for example, moving it into the first 8860 skipped block. Alternatively, you could provide a dummy use with 8861 something like: 8862 8863 #if defined the_macro_causing_the_warning 8864 #endif 8865 8866 `-Wendif-labels' 8867 Warn whenever an `#else' or an `#endif' are followed by text. 8868 This usually happens in code of the form 8869 8870 #if FOO 8871 ... 8872 #else FOO 8873 ... 8874 #endif FOO 8875 8876 The second and third `FOO' should be in comments, but often are not 8877 in older programs. This warning is on by default. 8878 8879 `-Werror' 8880 Make all warnings into hard errors. Source code which triggers 8881 warnings will be rejected. 8882 8883 `-Wsystem-headers' 8884 Issue warnings for code in system headers. These are normally 8885 unhelpful in finding bugs in your own code, therefore suppressed. 8886 If you are responsible for the system library, you may want to see 8887 them. 8888 8889 `-w' 8890 Suppress all warnings, including those which GNU CPP issues by 8891 default. 8892 8893 `-pedantic' 8894 Issue all the mandatory diagnostics listed in the C standard. 8895 Some of them are left out by default, since they trigger 8896 frequently on harmless code. 8897 8898 `-pedantic-errors' 8899 Issue all the mandatory diagnostics, and make all mandatory 8900 diagnostics into errors. This includes mandatory diagnostics that 8901 GCC issues without `-pedantic' but treats as warnings. 8902 8903 `-M' 8904 Instead of outputting the result of preprocessing, output a rule 8905 suitable for `make' describing the dependencies of the main source 8906 file. The preprocessor outputs one `make' rule containing the 8907 object file name for that source file, a colon, and the names of 8908 all the included files, including those coming from `-include' or 8909 `-imacros' command line options. 8910 8911 Unless specified explicitly (with `-MT' or `-MQ'), the object file 8912 name consists of the name of the source file with any suffix 8913 replaced with object file suffix and with any leading directory 8914 parts removed. If there are many included files then the rule is 8915 split into several lines using `\'-newline. The rule has no 8916 commands. 8917 8918 This option does not suppress the preprocessor's debug output, 8919 such as `-dM'. To avoid mixing such debug output with the 8920 dependency rules you should explicitly specify the dependency 8921 output file with `-MF', or use an environment variable like 8922 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 8923 output will still be sent to the regular output stream as normal. 8924 8925 Passing `-M' to the driver implies `-E', and suppresses warnings 8926 with an implicit `-w'. 8927 8928 `-MM' 8929 Like `-M' but do not mention header files that are found in system 8930 header directories, nor header files that are included, directly 8931 or indirectly, from such a header. 8932 8933 This implies that the choice of angle brackets or double quotes in 8934 an `#include' directive does not in itself determine whether that 8935 header will appear in `-MM' dependency output. This is a slight 8936 change in semantics from GCC versions 3.0 and earlier. 8937 8938 `-MF FILE' 8939 When used with `-M' or `-MM', specifies a file to write the 8940 dependencies to. If no `-MF' switch is given the preprocessor 8941 sends the rules to the same place it would have sent preprocessed 8942 output. 8943 8944 When used with the driver options `-MD' or `-MMD', `-MF' overrides 8945 the default dependency output file. 8946 8947 `-MG' 8948 In conjunction with an option such as `-M' requesting dependency 8949 generation, `-MG' assumes missing header files are generated files 8950 and adds them to the dependency list without raising an error. 8951 The dependency filename is taken directly from the `#include' 8952 directive without prepending any path. `-MG' also suppresses 8953 preprocessed output, as a missing header file renders this useless. 8954 8955 This feature is used in automatic updating of makefiles. 8956 8957 `-MP' 8958 This option instructs CPP to add a phony target for each dependency 8959 other than the main file, causing each to depend on nothing. These 8960 dummy rules work around errors `make' gives if you remove header 8961 files without updating the `Makefile' to match. 8962 8963 This is typical output: 8964 8965 test.o: test.c test.h 8966 8967 test.h: 8968 8969 `-MT TARGET' 8970 Change the target of the rule emitted by dependency generation. By 8971 default CPP takes the name of the main input file, deletes any 8972 directory components and any file suffix such as `.c', and appends 8973 the platform's usual object suffix. The result is the target. 8974 8975 An `-MT' option will set the target to be exactly the string you 8976 specify. If you want multiple targets, you can specify them as a 8977 single argument to `-MT', or use multiple `-MT' options. 8978 8979 For example, `-MT '$(objpfx)foo.o'' might give 8980 8981 $(objpfx)foo.o: foo.c 8982 8983 `-MQ TARGET' 8984 Same as `-MT', but it quotes any characters which are special to 8985 Make. `-MQ '$(objpfx)foo.o'' gives 8986 8987 $$(objpfx)foo.o: foo.c 8988 8989 The default target is automatically quoted, as if it were given 8990 with `-MQ'. 8991 8992 `-MD' 8993 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 8994 implied. The driver determines FILE based on whether an `-o' 8995 option is given. If it is, the driver uses its argument but with 8996 a suffix of `.d', otherwise it takes the name of the input file, 8997 removes any directory components and suffix, and applies a `.d' 8998 suffix. 8999 9000 If `-MD' is used in conjunction with `-E', any `-o' switch is 9001 understood to specify the dependency output file (*note -MF: 9002 dashMF.), but if used without `-E', each `-o' is understood to 9003 specify a target object file. 9004 9005 Since `-E' is not implied, `-MD' can be used to generate a 9006 dependency output file as a side-effect of the compilation process. 9007 9008 `-MMD' 9009 Like `-MD' except mention only user header files, not system 9010 header files. 9011 9012 `-fpch-deps' 9013 When using precompiled headers (*note Precompiled Headers::), this 9014 flag will cause the dependency-output flags to also list the files 9015 from the precompiled header's dependencies. If not specified only 9016 the precompiled header would be listed and not the files that were 9017 used to create it because those files are not consulted when a 9018 precompiled header is used. 9019 9020 `-fpch-preprocess' 9021 This option allows use of a precompiled header (*note Precompiled 9022 Headers::) together with `-E'. It inserts a special `#pragma', 9023 `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the 9024 place where the precompiled header was found, and its FILENAME. 9025 When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and 9026 loads the PCH. 9027 9028 This option is off by default, because the resulting preprocessed 9029 output is only really suitable as input to GCC. It is switched on 9030 by `-save-temps'. 9031 9032 You should not write this `#pragma' in your own code, but it is 9033 safe to edit the filename if the PCH file is available in a 9034 different location. The filename may be absolute or it may be 9035 relative to GCC's current directory. 9036 9037 `-x c' 9038 `-x c++' 9039 `-x objective-c' 9040 `-x assembler-with-cpp' 9041 Specify the source language: C, C++, Objective-C, or assembly. 9042 This has nothing to do with standards conformance or extensions; 9043 it merely selects which base syntax to expect. If you give none 9044 of these options, cpp will deduce the language from the extension 9045 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 9046 extensions for C++ and assembly are also recognized. If cpp does 9047 not recognize the extension, it will treat the file as C; this is 9048 the most generic mode. 9049 9050 _Note:_ Previous versions of cpp accepted a `-lang' option which 9051 selected both the language and the standards conformance level. 9052 This option has been removed, because it conflicts with the `-l' 9053 option. 9054 9055 `-std=STANDARD' 9056 `-ansi' 9057 Specify the standard to which the code should conform. Currently 9058 CPP knows about C and C++ standards; others may be added in the 9059 future. 9060 9061 STANDARD may be one of: 9062 `c90' 9063 `c89' 9064 `iso9899:1990' 9065 The ISO C standard from 1990. `c90' is the customary 9066 shorthand for this version of the standard. 9067 9068 The `-ansi' option is equivalent to `-std=c90'. 9069 9070 `iso9899:199409' 9071 The 1990 C standard, as amended in 1994. 9072 9073 `iso9899:1999' 9074 `c99' 9075 `iso9899:199x' 9076 `c9x' 9077 The revised ISO C standard, published in December 1999. 9078 Before publication, this was known as C9X. 9079 9080 `c1x' 9081 The next version of the ISO C standard, still under 9082 development. 9083 9084 `gnu90' 9085 `gnu89' 9086 The 1990 C standard plus GNU extensions. This is the default. 9087 9088 `gnu99' 9089 `gnu9x' 9090 The 1999 C standard plus GNU extensions. 9091 9092 `gnu1x' 9093 The next version of the ISO C standard, still under 9094 development, plus GNU extensions. 9095 9096 `c++98' 9097 The 1998 ISO C++ standard plus amendments. 9098 9099 `gnu++98' 9100 The same as `-std=c++98' plus GNU extensions. This is the 9101 default for C++ code. 9102 9103 `-I-' 9104 Split the include path. Any directories specified with `-I' 9105 options before `-I-' are searched only for headers requested with 9106 `#include "FILE"'; they are not searched for `#include <FILE>'. 9107 If additional directories are specified with `-I' options after 9108 the `-I-', those directories are searched for all `#include' 9109 directives. 9110 9111 In addition, `-I-' inhibits the use of the directory of the current 9112 file directory as the first search directory for `#include "FILE"'. 9113 This option has been deprecated. 9114 9115 `-nostdinc' 9116 Do not search the standard system directories for header files. 9117 Only the directories you have specified with `-I' options (and the 9118 directory of the current file, if appropriate) are searched. 9119 9120 `-nostdinc++' 9121 Do not search for header files in the C++-specific standard 9122 directories, but do still search the other standard directories. 9123 (This option is used when building the C++ library.) 9124 9125 `-include FILE' 9126 Process FILE as if `#include "file"' appeared as the first line of 9127 the primary source file. However, the first directory searched 9128 for FILE is the preprocessor's working directory _instead of_ the 9129 directory containing the main source file. If not found there, it 9130 is searched for in the remainder of the `#include "..."' search 9131 chain as normal. 9132 9133 If multiple `-include' options are given, the files are included 9134 in the order they appear on the command line. 9135 9136 `-imacros FILE' 9137 Exactly like `-include', except that any output produced by 9138 scanning FILE is thrown away. Macros it defines remain defined. 9139 This allows you to acquire all the macros from a header without 9140 also processing its declarations. 9141 9142 All files specified by `-imacros' are processed before all files 9143 specified by `-include'. 9144 9145 `-idirafter DIR' 9146 Search DIR for header files, but do it _after_ all directories 9147 specified with `-I' and the standard system directories have been 9148 exhausted. DIR is treated as a system include directory. If DIR 9149 begins with `=', then the `=' will be replaced by the sysroot 9150 prefix; see `--sysroot' and `-isysroot'. 9151 9152 `-iprefix PREFIX' 9153 Specify PREFIX as the prefix for subsequent `-iwithprefix' 9154 options. If the prefix represents a directory, you should include 9155 the final `/'. 9156 9157 `-iwithprefix DIR' 9158 `-iwithprefixbefore DIR' 9159 Append DIR to the prefix specified previously with `-iprefix', and 9160 add the resulting directory to the include search path. 9161 `-iwithprefixbefore' puts it in the same place `-I' would; 9162 `-iwithprefix' puts it where `-idirafter' would. 9163 9164 `-isysroot DIR' 9165 This option is like the `--sysroot' option, but applies only to 9166 header files (except for Darwin targets, where it applies to both 9167 header files and libraries). See the `--sysroot' option for more 9168 information. 9169 9170 `-imultilib DIR' 9171 Use DIR as a subdirectory of the directory containing 9172 target-specific C++ headers. 9173 9174 `-isystem DIR' 9175 Search DIR for header files, after all directories specified by 9176 `-I' but before the standard system directories. Mark it as a 9177 system directory, so that it gets the same special treatment as is 9178 applied to the standard system directories. If DIR begins with 9179 `=', then the `=' will be replaced by the sysroot prefix; see 9180 `--sysroot' and `-isysroot'. 9181 9182 `-iquote DIR' 9183 Search DIR only for header files requested with `#include "FILE"'; 9184 they are not searched for `#include <FILE>', before all 9185 directories specified by `-I' and before the standard system 9186 directories. If DIR begins with `=', then the `=' will be replaced 9187 by the sysroot prefix; see `--sysroot' and `-isysroot'. 9188 9189 `-fdirectives-only' 9190 When preprocessing, handle directives, but do not expand macros. 9191 9192 The option's behavior depends on the `-E' and `-fpreprocessed' 9193 options. 9194 9195 With `-E', preprocessing is limited to the handling of directives 9196 such as `#define', `#ifdef', and `#error'. Other preprocessor 9197 operations, such as macro expansion and trigraph conversion are 9198 not performed. In addition, the `-dD' option is implicitly 9199 enabled. 9200 9201 With `-fpreprocessed', predefinition of command line and most 9202 builtin macros is disabled. Macros such as `__LINE__', which are 9203 contextually dependent, are handled normally. This enables 9204 compilation of files previously preprocessed with `-E 9205 -fdirectives-only'. 9206 9207 With both `-E' and `-fpreprocessed', the rules for 9208 `-fpreprocessed' take precedence. This enables full preprocessing 9209 of files previously preprocessed with `-E -fdirectives-only'. 9210 9211 `-fdollars-in-identifiers' 9212 Accept `$' in identifiers. 9213 9214 `-fextended-identifiers' 9215 Accept universal character names in identifiers. This option is 9216 experimental; in a future version of GCC, it will be enabled by 9217 default for C99 and C++. 9218 9219 `-fpreprocessed' 9220 Indicate to the preprocessor that the input file has already been 9221 preprocessed. This suppresses things like macro expansion, 9222 trigraph conversion, escaped newline splicing, and processing of 9223 most directives. The preprocessor still recognizes and removes 9224 comments, so that you can pass a file preprocessed with `-C' to 9225 the compiler without problems. In this mode the integrated 9226 preprocessor is little more than a tokenizer for the front ends. 9227 9228 `-fpreprocessed' is implicit if the input file has one of the 9229 extensions `.i', `.ii' or `.mi'. These are the extensions that 9230 GCC uses for preprocessed files created by `-save-temps'. 9231 9232 `-ftabstop=WIDTH' 9233 Set the distance between tab stops. This helps the preprocessor 9234 report correct column numbers in warnings or errors, even if tabs 9235 appear on the line. If the value is less than 1 or greater than 9236 100, the option is ignored. The default is 8. 9237 9238 `-fexec-charset=CHARSET' 9239 Set the execution character set, used for string and character 9240 constants. The default is UTF-8. CHARSET can be any encoding 9241 supported by the system's `iconv' library routine. 9242 9243 `-fwide-exec-charset=CHARSET' 9244 Set the wide execution character set, used for wide string and 9245 character constants. The default is UTF-32 or UTF-16, whichever 9246 corresponds to the width of `wchar_t'. As with `-fexec-charset', 9247 CHARSET can be any encoding supported by the system's `iconv' 9248 library routine; however, you will have problems with encodings 9249 that do not fit exactly in `wchar_t'. 9250 9251 `-finput-charset=CHARSET' 9252 Set the input character set, used for translation from the 9253 character set of the input file to the source character set used 9254 by GCC. If the locale does not specify, or GCC cannot get this 9255 information from the locale, the default is UTF-8. This can be 9256 overridden by either the locale or this command line option. 9257 Currently the command line option takes precedence if there's a 9258 conflict. CHARSET can be any encoding supported by the system's 9259 `iconv' library routine. 9260 9261 `-fworking-directory' 9262 Enable generation of linemarkers in the preprocessor output that 9263 will let the compiler know the current working directory at the 9264 time of preprocessing. When this option is enabled, the 9265 preprocessor will emit, after the initial linemarker, a second 9266 linemarker with the current working directory followed by two 9267 slashes. GCC will use this directory, when it's present in the 9268 preprocessed input, as the directory emitted as the current 9269 working directory in some debugging information formats. This 9270 option is implicitly enabled if debugging information is enabled, 9271 but this can be inhibited with the negated form 9272 `-fno-working-directory'. If the `-P' flag is present in the 9273 command line, this option has no effect, since no `#line' 9274 directives are emitted whatsoever. 9275 9276 `-fno-show-column' 9277 Do not print column numbers in diagnostics. This may be necessary 9278 if diagnostics are being scanned by a program that does not 9279 understand the column numbers, such as `dejagnu'. 9280 9281 `-A PREDICATE=ANSWER' 9282 Make an assertion with the predicate PREDICATE and answer ANSWER. 9283 This form is preferred to the older form `-A PREDICATE(ANSWER)', 9284 which is still supported, because it does not use shell special 9285 characters. 9286 9287 `-A -PREDICATE=ANSWER' 9288 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 9289 9290 `-dCHARS' 9291 CHARS is a sequence of one or more of the following characters, 9292 and must not be preceded by a space. Other characters are 9293 interpreted by the compiler proper, or reserved for future 9294 versions of GCC, and so are silently ignored. If you specify 9295 characters whose behavior conflicts, the result is undefined. 9296 9297 `M' 9298 Instead of the normal output, generate a list of `#define' 9299 directives for all the macros defined during the execution of 9300 the preprocessor, including predefined macros. This gives 9301 you a way of finding out what is predefined in your version 9302 of the preprocessor. Assuming you have no file `foo.h', the 9303 command 9304 9305 touch foo.h; cpp -dM foo.h 9306 9307 will show all the predefined macros. 9308 9309 If you use `-dM' without the `-E' option, `-dM' is 9310 interpreted as a synonym for `-fdump-rtl-mach'. *Note 9311 Debugging Options: (gcc)Debugging Options. 9312 9313 `D' 9314 Like `M' except in two respects: it does _not_ include the 9315 predefined macros, and it outputs _both_ the `#define' 9316 directives and the result of preprocessing. Both kinds of 9317 output go to the standard output file. 9318 9319 `N' 9320 Like `D', but emit only the macro names, not their expansions. 9321 9322 `I' 9323 Output `#include' directives in addition to the result of 9324 preprocessing. 9325 9326 `U' 9327 Like `D' except that only macros that are expanded, or whose 9328 definedness is tested in preprocessor directives, are output; 9329 the output is delayed until the use or test of the macro; and 9330 `#undef' directives are also output for macros tested but 9331 undefined at the time. 9332 9333 `-P' 9334 Inhibit generation of linemarkers in the output from the 9335 preprocessor. This might be useful when running the preprocessor 9336 on something that is not C code, and will be sent to a program 9337 which might be confused by the linemarkers. 9338 9339 `-C' 9340 Do not discard comments. All comments are passed through to the 9341 output file, except for comments in processed directives, which 9342 are deleted along with the directive. 9343 9344 You should be prepared for side effects when using `-C'; it causes 9345 the preprocessor to treat comments as tokens in their own right. 9346 For example, comments appearing at the start of what would be a 9347 directive line have the effect of turning that line into an 9348 ordinary source line, since the first token on the line is no 9349 longer a `#'. 9350 9351 `-CC' 9352 Do not discard comments, including during macro expansion. This is 9353 like `-C', except that comments contained within macros are also 9354 passed through to the output file where the macro is expanded. 9355 9356 In addition to the side-effects of the `-C' option, the `-CC' 9357 option causes all C++-style comments inside a macro to be 9358 converted to C-style comments. This is to prevent later use of 9359 that macro from inadvertently commenting out the remainder of the 9360 source line. 9361 9362 The `-CC' option is generally used to support lint comments. 9363 9364 `-traditional-cpp' 9365 Try to imitate the behavior of old-fashioned C preprocessors, as 9366 opposed to ISO C preprocessors. 9367 9368 `-trigraphs' 9369 Process trigraph sequences. These are three-character sequences, 9370 all starting with `??', that are defined by ISO C to stand for 9371 single characters. For example, `??/' stands for `\', so `'??/n'' 9372 is a character constant for a newline. By default, GCC ignores 9373 trigraphs, but in standard-conforming modes it converts them. See 9374 the `-std' and `-ansi' options. 9375 9376 The nine trigraphs and their replacements are 9377 9378 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 9379 Replacement: [ ] { } # \ ^ | ~ 9380 9381 `-remap' 9382 Enable special code to work around file systems which only permit 9383 very short file names, such as MS-DOS. 9384 9385 `--help' 9386 `--target-help' 9387 Print text describing all the command line options instead of 9388 preprocessing anything. 9389 9390 `-v' 9391 Verbose mode. Print out GNU CPP's version number at the beginning 9392 of execution, and report the final form of the include path. 9393 9394 `-H' 9395 Print the name of each header file used, in addition to other 9396 normal activities. Each name is indented to show how deep in the 9397 `#include' stack it is. Precompiled header files are also 9398 printed, even if they are found to be invalid; an invalid 9399 precompiled header file is printed with `...x' and a valid one 9400 with `...!' . 9401 9402 `-version' 9403 `--version' 9404 Print out GNU CPP's version number. With one dash, proceed to 9405 preprocess as normal. With two dashes, exit immediately. 9406 9407 9408 File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 9409 9410 3.12 Passing Options to the Assembler 9411 ===================================== 9412 9413 You can pass options to the assembler. 9414 9415 `-Wa,OPTION' 9416 Pass OPTION as an option to the assembler. If OPTION contains 9417 commas, it is split into multiple options at the commas. 9418 9419 `-Xassembler OPTION' 9420 Pass OPTION as an option to the assembler. You can use this to 9421 supply system-specific assembler options which GCC does not know 9422 how to recognize. 9423 9424 If you want to pass an option that takes an argument, you must use 9425 `-Xassembler' twice, once for the option and once for the argument. 9426 9427 `profile-generate-sampling-rate' 9428 Set the sampling rate with `-fprofile-generate-sampling'. 9429 9430 9431 9432 File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 9433 9434 3.13 Options for Linking 9435 ======================== 9436 9437 These options come into play when the compiler links object files into 9438 an executable output file. They are meaningless if the compiler is not 9439 doing a link step. 9440 9441 `OBJECT-FILE-NAME' 9442 A file name that does not end in a special recognized suffix is 9443 considered to name an object file or library. (Object files are 9444 distinguished from libraries by the linker according to the file 9445 contents.) If linking is done, these object files are used as 9446 input to the linker. 9447 9448 `-c' 9449 `-S' 9450 `-E' 9451 If any of these options is used, then the linker is not run, and 9452 object file names should not be used as arguments. *Note Overall 9453 Options::. 9454 9455 `-lLIBRARY' 9456 `-l LIBRARY' 9457 Search the library named LIBRARY when linking. (The second 9458 alternative with the library as a separate argument is only for 9459 POSIX compliance and is not recommended.) 9460 9461 It makes a difference where in the command you write this option; 9462 the linker searches and processes libraries and object files in 9463 the order they are specified. Thus, `foo.o -lz bar.o' searches 9464 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 9465 refers to functions in `z', those functions may not be loaded. 9466 9467 The linker searches a standard list of directories for the library, 9468 which is actually a file named `libLIBRARY.a'. The linker then 9469 uses this file as if it had been specified precisely by name. 9470 9471 The directories searched include several standard system 9472 directories plus any that you specify with `-L'. 9473 9474 Normally the files found this way are library files--archive files 9475 whose members are object files. The linker handles an archive 9476 file by scanning through it for members which define symbols that 9477 have so far been referenced but not defined. But if the file that 9478 is found is an ordinary object file, it is linked in the usual 9479 fashion. The only difference between using an `-l' option and 9480 specifying a file name is that `-l' surrounds LIBRARY with `lib' 9481 and `.a' and searches several directories. 9482 9483 `-lobjc' 9484 You need this special case of the `-l' option in order to link an 9485 Objective-C or Objective-C++ program. 9486 9487 `-nostartfiles' 9488 Do not use the standard system startup files when linking. The 9489 standard system libraries are used normally, unless `-nostdlib' or 9490 `-nodefaultlibs' is used. 9491 9492 `-nodefaultlibs' 9493 Do not use the standard system libraries when linking. Only the 9494 libraries you specify will be passed to the linker, options 9495 specifying linkage of the system libraries, such as 9496 `-static-libgcc' or `-shared-libgcc', will be ignored. The 9497 standard startup files are used normally, unless `-nostartfiles' 9498 is used. The compiler may generate calls to `memcmp', `memset', 9499 `memcpy' and `memmove'. These entries are usually resolved by 9500 entries in libc. These entry points should be supplied through 9501 some other mechanism when this option is specified. 9502 9503 `-nostdlib' 9504 Do not use the standard system startup files or libraries when 9505 linking. No startup files and only the libraries you specify will 9506 be passed to the linker, options specifying linkage of the system 9507 libraries, such as `-static-libgcc' or `-shared-libgcc', will be 9508 ignored. The compiler may generate calls to `memcmp', `memset', 9509 `memcpy' and `memmove'. These entries are usually resolved by 9510 entries in libc. These entry points should be supplied through 9511 some other mechanism when this option is specified. 9512 9513 One of the standard libraries bypassed by `-nostdlib' and 9514 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 9515 that GCC uses to overcome shortcomings of particular machines, or 9516 special needs for some languages. (*Note Interfacing to GCC 9517 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 9518 most cases, you need `libgcc.a' even when you want to avoid other 9519 standard libraries. In other words, when you specify `-nostdlib' 9520 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 9521 This ensures that you have no unresolved references to internal GCC 9522 library subroutines. (For example, `__main', used to ensure C++ 9523 constructors will be called; *note `collect2': (gccint)Collect2.) 9524 9525 `-pie' 9526 Produce a position independent executable on targets which support 9527 it. For predictable results, you must also specify the same set 9528 of options that were used to generate code (`-fpie', `-fPIE', or 9529 model suboptions) when you specify this option. 9530 9531 `-rdynamic' 9532 Pass the flag `-export-dynamic' to the ELF linker, on targets that 9533 support it. This instructs the linker to add all symbols, not only 9534 used ones, to the dynamic symbol table. This option is needed for 9535 some uses of `dlopen' or to allow obtaining backtraces from within 9536 a program. 9537 9538 `-s' 9539 Remove all symbol table and relocation information from the 9540 executable. 9541 9542 `-static' 9543 On systems that support dynamic linking, this prevents linking 9544 with the shared libraries. On other systems, this option has no 9545 effect. 9546 9547 `-shared' 9548 Produce a shared object which can then be linked with other 9549 objects to form an executable. Not all systems support this 9550 option. For predictable results, you must also specify the same 9551 set of options that were used to generate code (`-fpic', `-fPIC', 9552 or model suboptions) when you specify this option.(1) 9553 9554 `-shared-libgcc' 9555 `-static-libgcc' 9556 On systems that provide `libgcc' as a shared library, these options 9557 force the use of either the shared or static version respectively. 9558 If no shared version of `libgcc' was built when the compiler was 9559 configured, these options have no effect. 9560 9561 There are several situations in which an application should use the 9562 shared `libgcc' instead of the static version. The most common of 9563 these is when the application wishes to throw and catch exceptions 9564 across different shared libraries. In that case, each of the 9565 libraries as well as the application itself should use the shared 9566 `libgcc'. 9567 9568 Therefore, the G++ and GCJ drivers automatically add 9569 `-shared-libgcc' whenever you build a shared library or a main 9570 executable, because C++ and Java programs typically use 9571 exceptions, so this is the right thing to do. 9572 9573 If, instead, you use the GCC driver to create shared libraries, 9574 you may find that they will not always be linked with the shared 9575 `libgcc'. If GCC finds, at its configuration time, that you have 9576 a non-GNU linker or a GNU linker that does not support option 9577 `--eh-frame-hdr', it will link the shared version of `libgcc' into 9578 shared libraries by default. Otherwise, it will take advantage of 9579 the linker and optimize away the linking with the shared version 9580 of `libgcc', linking with the static version of libgcc by default. 9581 This allows exceptions to propagate through such shared libraries, 9582 without incurring relocation costs at library load time. 9583 9584 However, if a library or main executable is supposed to throw or 9585 catch exceptions, you must link it using the G++ or GCJ driver, as 9586 appropriate for the languages used in the program, or using the 9587 option `-shared-libgcc', such that it is linked with the shared 9588 `libgcc'. 9589 9590 `-static-libstdc++' 9591 When the `g++' program is used to link a C++ program, it will 9592 normally automatically link against `libstdc++'. If `libstdc++' 9593 is available as a shared library, and the `-static' option is not 9594 used, then this will link against the shared version of 9595 `libstdc++'. That is normally fine. However, it is sometimes 9596 useful to freeze the version of `libstdc++' used by the program 9597 without going all the way to a fully static link. The 9598 `-static-libstdc++' option directs the `g++' driver to link 9599 `libstdc++' statically, without necessarily linking other 9600 libraries statically. 9601 9602 `-symbolic' 9603 Bind references to global symbols when building a shared object. 9604 Warn about any unresolved references (unless overridden by the 9605 link editor option `-Xlinker -z -Xlinker defs'). Only a few 9606 systems support this option. 9607 9608 `-T SCRIPT' 9609 Use SCRIPT as the linker script. This option is supported by most 9610 systems using the GNU linker. On some targets, such as bare-board 9611 targets without an operating system, the `-T' option may be 9612 required when linking to avoid references to undefined symbols. 9613 9614 `-Xlinker OPTION' 9615 Pass OPTION as an option to the linker. You can use this to 9616 supply system-specific linker options which GCC does not know how 9617 to recognize. 9618 9619 If you want to pass an option that takes a separate argument, you 9620 must use `-Xlinker' twice, once for the option and once for the 9621 argument. For example, to pass `-assert definitions', you must 9622 write `-Xlinker -assert -Xlinker definitions'. It does not work 9623 to write `-Xlinker "-assert definitions"', because this passes the 9624 entire string as a single argument, which is not what the linker 9625 expects. 9626 9627 When using the GNU linker, it is usually more convenient to pass 9628 arguments to linker options using the `OPTION=VALUE' syntax than 9629 as separate arguments. For example, you can specify `-Xlinker 9630 -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'. 9631 Other linkers may not support this syntax for command-line options. 9632 9633 `-Wl,OPTION' 9634 Pass OPTION as an option to the linker. If OPTION contains 9635 commas, it is split into multiple options at the commas. You can 9636 use this syntax to pass an argument to the option. For example, 9637 `-Wl,-Map,output.map' passes `-Map output.map' to the linker. 9638 When using the GNU linker, you can also get the same effect with 9639 `-Wl,-Map=output.map'. 9640 9641 `-u SYMBOL' 9642 Pretend the symbol SYMBOL is undefined, to force linking of 9643 library modules to define it. You can use `-u' multiple times with 9644 different symbols to force loading of additional library modules. 9645 9646 ---------- Footnotes ---------- 9647 9648 (1) On some systems, `gcc -shared' needs to build supplementary stub 9649 code for constructors to work. On multi-libbed systems, `gcc -shared' 9650 must select the correct support libraries to link against. Failing to 9651 supply the correct flags may lead to subtle defects. Supplying them in 9652 cases where they are not necessary is innocuous. 9653 9654 9655 File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 9656 9657 3.14 Options for Directory Search 9658 ================================= 9659 9660 These options specify directories to search for header files, for 9661 libraries and for parts of the compiler: 9662 9663 `-IDIR' 9664 Add the directory DIR to the head of the list of directories to be 9665 searched for header files. This can be used to override a system 9666 header file, substituting your own version, since these 9667 directories are searched before the system header file 9668 directories. However, you should not use this option to add 9669 directories that contain vendor-supplied system header files (use 9670 `-isystem' for that). If you use more than one `-I' option, the 9671 directories are scanned in left-to-right order; the standard 9672 system directories come after. 9673 9674 If a standard system include directory, or a directory specified 9675 with `-isystem', is also specified with `-I', the `-I' option will 9676 be ignored. The directory will still be searched but as a system 9677 directory at its normal position in the system include chain. 9678 This is to ensure that GCC's procedure to fix buggy system headers 9679 and the ordering for the include_next directive are not 9680 inadvertently changed. If you really need to change the search 9681 order for system directories, use the `-nostdinc' and/or 9682 `-isystem' options. 9683 9684 `-iplugindir=DIR' 9685 Set the directory to search for plugins which are passed by 9686 `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'. This option 9687 is not meant to be used by the user, but only passed by the driver. 9688 9689 `-iquoteDIR' 9690 Add the directory DIR to the head of the list of directories to be 9691 searched for header files only for the case of `#include "FILE"'; 9692 they are not searched for `#include <FILE>', otherwise just like 9693 `-I'. 9694 9695 `-LDIR' 9696 Add directory DIR to the list of directories to be searched for 9697 `-l'. 9698 9699 `-BPREFIX' 9700 This option specifies where to find the executables, libraries, 9701 include files, and data files of the compiler itself. 9702 9703 The compiler driver program runs one or more of the subprograms 9704 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 9705 program it tries to run, both with and without `MACHINE/VERSION/' 9706 (*note Target Options::). 9707 9708 For each subprogram to be run, the compiler driver first tries the 9709 `-B' prefix, if any. If that name is not found, or if `-B' was 9710 not specified, the driver tries two standard prefixes, which are 9711 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those 9712 results in a file name that is found, the unmodified program name 9713 is searched for using the directories specified in your `PATH' 9714 environment variable. 9715 9716 The compiler will check to see if the path provided by the `-B' 9717 refers to a directory, and if necessary it will add a directory 9718 separator character at the end of the path. 9719 9720 `-B' prefixes that effectively specify directory names also apply 9721 to libraries in the linker, because the compiler translates these 9722 options into `-L' options for the linker. They also apply to 9723 includes files in the preprocessor, because the compiler 9724 translates these options into `-isystem' options for the 9725 preprocessor. In this case, the compiler appends `include' to the 9726 prefix. 9727 9728 The run-time support file `libgcc.a' can also be searched for using 9729 the `-B' prefix, if needed. If it is not found there, the two 9730 standard prefixes above are tried, and that is all. The file is 9731 left out of the link if it is not found by those means. 9732 9733 Another way to specify a prefix much like the `-B' prefix is to use 9734 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 9735 Variables::. 9736 9737 As a special kludge, if the path provided by `-B' is 9738 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 9739 will be replaced by `[dir/]include'. This is to help with 9740 boot-strapping the compiler. 9741 9742 `-specs=FILE' 9743 Process FILE after the compiler reads in the standard `specs' 9744 file, in order to override the defaults that the `gcc' driver 9745 program uses when determining what switches to pass to `cc1', 9746 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 9747 specified on the command line, and they are processed in order, 9748 from left to right. 9749 9750 `--sysroot=DIR' 9751 Use DIR as the logical root directory for headers and libraries. 9752 For example, if the compiler would normally search for headers in 9753 `/usr/include' and libraries in `/usr/lib', it will instead search 9754 `DIR/usr/include' and `DIR/usr/lib'. 9755 9756 If you use both this option and the `-isysroot' option, then the 9757 `--sysroot' option will apply to libraries, but the `-isysroot' 9758 option will apply to header files. 9759 9760 The GNU linker (beginning with version 2.16) has the necessary 9761 support for this option. If your linker does not support this 9762 option, the header file aspect of `--sysroot' will still work, but 9763 the library aspect will not. 9764 9765 `-I-' 9766 This option has been deprecated. Please use `-iquote' instead for 9767 `-I' directories before the `-I-' and remove the `-I-'. Any 9768 directories you specify with `-I' options before the `-I-' option 9769 are searched only for the case of `#include "FILE"'; they are not 9770 searched for `#include <FILE>'. 9771 9772 If additional directories are specified with `-I' options after 9773 the `-I-', these directories are searched for all `#include' 9774 directives. (Ordinarily _all_ `-I' directories are used this way.) 9775 9776 In addition, the `-I-' option inhibits the use of the current 9777 directory (where the current input file came from) as the first 9778 search directory for `#include "FILE"'. There is no way to 9779 override this effect of `-I-'. With `-I.' you can specify 9780 searching the directory which was current when the compiler was 9781 invoked. That is not exactly the same as what the preprocessor 9782 does by default, but it is often satisfactory. 9783 9784 `-I-' does not inhibit the use of the standard system directories 9785 for header files. Thus, `-I-' and `-nostdinc' are independent. 9786 9787 9788 File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 9789 9790 3.15 Specifying subprocesses and the switches to pass to them 9791 ============================================================= 9792 9793 `gcc' is a driver program. It performs its job by invoking a sequence 9794 of other programs to do the work of compiling, assembling and linking. 9795 GCC interprets its command-line parameters and uses these to deduce 9796 which programs it should invoke, and which command-line options it 9797 ought to place on their command lines. This behavior is controlled by 9798 "spec strings". In most cases there is one spec string for each 9799 program that GCC can invoke, but a few programs have multiple spec 9800 strings to control their behavior. The spec strings built into GCC can 9801 be overridden by using the `-specs=' command-line switch to specify a 9802 spec file. 9803 9804 "Spec files" are plaintext files that are used to construct spec 9805 strings. They consist of a sequence of directives separated by blank 9806 lines. The type of directive is determined by the first non-whitespace 9807 character on the line and it can be one of the following: 9808 9809 `%COMMAND' 9810 Issues a COMMAND to the spec file processor. The commands that can 9811 appear here are: 9812 9813 `%include <FILE>' 9814 Search for FILE and insert its text at the current point in 9815 the specs file. 9816 9817 `%include_noerr <FILE>' 9818 Just like `%include', but do not generate an error message if 9819 the include file cannot be found. 9820 9821 `%rename OLD_NAME NEW_NAME' 9822 Rename the spec string OLD_NAME to NEW_NAME. 9823 9824 9825 `*[SPEC_NAME]:' 9826 This tells the compiler to create, override or delete the named 9827 spec string. All lines after this directive up to the next 9828 directive or blank line are considered to be the text for the spec 9829 string. If this results in an empty string then the spec will be 9830 deleted. (Or, if the spec did not exist, then nothing will 9831 happened.) Otherwise, if the spec does not currently exist a new 9832 spec will be created. If the spec does exist then its contents 9833 will be overridden by the text of this directive, unless the first 9834 character of that text is the `+' character, in which case the 9835 text will be appended to the spec. 9836 9837 `[SUFFIX]:' 9838 Creates a new `[SUFFIX] spec' pair. All lines after this directive 9839 and up to the next directive or blank line are considered to make 9840 up the spec string for the indicated suffix. When the compiler 9841 encounters an input file with the named suffix, it will processes 9842 the spec string in order to work out how to compile that file. 9843 For example: 9844 9845 .ZZ: 9846 z-compile -input %i 9847 9848 This says that any input file whose name ends in `.ZZ' should be 9849 passed to the program `z-compile', which should be invoked with the 9850 command-line switch `-input' and with the result of performing the 9851 `%i' substitution. (See below.) 9852 9853 As an alternative to providing a spec string, the text that 9854 follows a suffix directive can be one of the following: 9855 9856 `@LANGUAGE' 9857 This says that the suffix is an alias for a known LANGUAGE. 9858 This is similar to using the `-x' command-line switch to GCC 9859 to specify a language explicitly. For example: 9860 9861 .ZZ: 9862 @c++ 9863 9864 Says that .ZZ files are, in fact, C++ source files. 9865 9866 `#NAME' 9867 This causes an error messages saying: 9868 9869 NAME compiler not installed on this system. 9870 9871 GCC already has an extensive list of suffixes built into it. This 9872 directive will add an entry to the end of the list of suffixes, but 9873 since the list is searched from the end backwards, it is 9874 effectively possible to override earlier entries using this 9875 technique. 9876 9877 9878 GCC has the following spec strings built into it. Spec files can 9879 override these strings or create their own. Note that individual 9880 targets can also add their own spec strings to this list. 9881 9882 asm Options to pass to the assembler 9883 asm_final Options to pass to the assembler post-processor 9884 cpp Options to pass to the C preprocessor 9885 cc1 Options to pass to the C compiler 9886 cc1plus Options to pass to the C++ compiler 9887 endfile Object files to include at the end of the link 9888 link Options to pass to the linker 9889 lib Libraries to include on the command line to the linker 9890 libgcc Decides which GCC support library to pass to the linker 9891 linker Sets the name of the linker 9892 predefines Defines to be passed to the C preprocessor 9893 signed_char Defines to pass to CPP to say whether `char' is signed 9894 by default 9895 startfile Object files to include at the start of the link 9896 9897 Here is a small example of a spec file: 9898 9899 %rename lib old_lib 9900 9901 *lib: 9902 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 9903 9904 This example renames the spec called `lib' to `old_lib' and then 9905 overrides the previous definition of `lib' with a new one. The new 9906 definition adds in some extra command-line options before including the 9907 text of the old definition. 9908 9909 "Spec strings" are a list of command-line options to be passed to their 9910 corresponding program. In addition, the spec strings can contain 9911 `%'-prefixed sequences to substitute variable text or to conditionally 9912 insert text into the command line. Using these constructs it is 9913 possible to generate quite complex command lines. 9914 9915 Here is a table of all defined `%'-sequences for spec strings. Note 9916 that spaces are not generated automatically around the results of 9917 expanding these sequences. Therefore you can concatenate them together 9918 or combine them with constant text in a single argument. 9919 9920 `%%' 9921 Substitute one `%' into the program name or argument. 9922 9923 `%i' 9924 Substitute the name of the input file being processed. 9925 9926 `%b' 9927 Substitute the basename of the input file being processed. This 9928 is the substring up to (and not including) the last period and not 9929 including the directory. 9930 9931 `%B' 9932 This is the same as `%b', but include the file suffix (text after 9933 the last period). 9934 9935 `%d' 9936 Marks the argument containing or following the `%d' as a temporary 9937 file name, so that that file will be deleted if GCC exits 9938 successfully. Unlike `%g', this contributes no text to the 9939 argument. 9940 9941 `%gSUFFIX' 9942 Substitute a file name that has suffix SUFFIX and is chosen once 9943 per compilation, and mark the argument in the same way as `%d'. 9944 To reduce exposure to denial-of-service attacks, the file name is 9945 now chosen in a way that is hard to predict even when previously 9946 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 9947 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 9948 matches the regexp `[.A-Za-z]*' or the special string `%O', which 9949 is treated exactly as if `%O' had been preprocessed. Previously, 9950 `%g' was simply substituted with a file name chosen once per 9951 compilation, without regard to any appended suffix (which was 9952 therefore treated just like ordinary text), making such attacks 9953 more likely to succeed. 9954 9955 `%uSUFFIX' 9956 Like `%g', but generates a new temporary file name even if 9957 `%uSUFFIX' was already seen. 9958 9959 `%USUFFIX' 9960 Substitutes the last file name generated with `%uSUFFIX', 9961 generating a new one if there is no such last file name. In the 9962 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 9963 they don't share the same suffix _space_, so `%g.s ... %U.s ... 9964 %g.s ... %U.s' would involve the generation of two distinct file 9965 names, one for each `%g.s' and another for each `%U.s'. 9966 Previously, `%U' was simply substituted with a file name chosen 9967 for the previous `%u', without regard to any appended suffix. 9968 9969 `%jSUFFIX' 9970 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 9971 writable, and if save-temps is off; otherwise, substitute the name 9972 of a temporary file, just like `%u'. This temporary file is not 9973 meant for communication between processes, but rather as a junk 9974 disposal mechanism. 9975 9976 `%|SUFFIX' 9977 `%mSUFFIX' 9978 Like `%g', except if `-pipe' is in effect. In that case `%|' 9979 substitutes a single dash and `%m' substitutes nothing at all. 9980 These are the two most common ways to instruct a program that it 9981 should read from standard input or write to standard output. If 9982 you need something more elaborate you can use an `%{pipe:`X'}' 9983 construct: see for example `f/lang-specs.h'. 9984 9985 `%.SUFFIX' 9986 Substitutes .SUFFIX for the suffixes of a matched switch's args 9987 when it is subsequently output with `%*'. SUFFIX is terminated by 9988 the next space or %. 9989 9990 `%w' 9991 Marks the argument containing or following the `%w' as the 9992 designated output file of this compilation. This puts the argument 9993 into the sequence of arguments that `%o' will substitute later. 9994 9995 `%o' 9996 Substitutes the names of all the output files, with spaces 9997 automatically placed around them. You should write spaces around 9998 the `%o' as well or the results are undefined. `%o' is for use in 9999 the specs for running the linker. Input files whose names have no 10000 recognized suffix are not compiled at all, but they are included 10001 among the output files, so they will be linked. 10002 10003 `%O' 10004 Substitutes the suffix for object files. Note that this is 10005 handled specially when it immediately follows `%g, %u, or %U', 10006 because of the need for those to form complete file names. The 10007 handling is such that `%O' is treated exactly as if it had already 10008 been substituted, except that `%g, %u, and %U' do not currently 10009 support additional SUFFIX characters following `%O' as they would 10010 following, for example, `.o'. 10011 10012 `%p' 10013 Substitutes the standard macro predefinitions for the current 10014 target machine. Use this when running `cpp'. 10015 10016 `%P' 10017 Like `%p', but puts `__' before and after the name of each 10018 predefined macro, except for macros that start with `__' or with 10019 `_L', where L is an uppercase letter. This is for ISO C. 10020 10021 `%I' 10022 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 10023 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 10024 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 10025 necessary. 10026 10027 `%s' 10028 Current argument is the name of a library or startup file of some 10029 sort. Search for that file in a standard list of directories and 10030 substitute the full name found. The current working directory is 10031 included in the list of directories scanned. 10032 10033 `%T' 10034 Current argument is the name of a linker script. Search for that 10035 file in the current list of directories to scan for libraries. If 10036 the file is located insert a `--script' option into the command 10037 line followed by the full path name found. If the file is not 10038 found then generate an error message. Note: the current working 10039 directory is not searched. 10040 10041 `%eSTR' 10042 Print STR as an error message. STR is terminated by a newline. 10043 Use this when inconsistent options are detected. 10044 10045 `%(NAME)' 10046 Substitute the contents of spec string NAME at this point. 10047 10048 `%[NAME]' 10049 Like `%(...)' but put `__' around `-D' arguments. 10050 10051 `%x{OPTION}' 10052 Accumulate an option for `%X'. 10053 10054 `%X' 10055 Output the accumulated linker options specified by `-Wl' or a `%x' 10056 spec string. 10057 10058 `%Y' 10059 Output the accumulated assembler options specified by `-Wa'. 10060 10061 `%Z' 10062 Output the accumulated preprocessor options specified by `-Wp'. 10063 10064 `%a' 10065 Process the `asm' spec. This is used to compute the switches to 10066 be passed to the assembler. 10067 10068 `%A' 10069 Process the `asm_final' spec. This is a spec string for passing 10070 switches to an assembler post-processor, if such a program is 10071 needed. 10072 10073 `%l' 10074 Process the `link' spec. This is the spec for computing the 10075 command line passed to the linker. Typically it will make use of 10076 the `%L %G %S %D and %E' sequences. 10077 10078 `%D' 10079 Dump out a `-L' option for each directory that GCC believes might 10080 contain startup files. If the target supports multilibs then the 10081 current multilib directory will be prepended to each of these 10082 paths. 10083 10084 `%L' 10085 Process the `lib' spec. This is a spec string for deciding which 10086 libraries should be included on the command line to the linker. 10087 10088 `%G' 10089 Process the `libgcc' spec. This is a spec string for deciding 10090 which GCC support library should be included on the command line 10091 to the linker. 10092 10093 `%S' 10094 Process the `startfile' spec. This is a spec for deciding which 10095 object files should be the first ones passed to the linker. 10096 Typically this might be a file named `crt0.o'. 10097 10098 `%E' 10099 Process the `endfile' spec. This is a spec string that specifies 10100 the last object files that will be passed to the linker. 10101 10102 `%C' 10103 Process the `cpp' spec. This is used to construct the arguments 10104 to be passed to the C preprocessor. 10105 10106 `%1' 10107 Process the `cc1' spec. This is used to construct the options to 10108 be passed to the actual C compiler (`cc1'). 10109 10110 `%2' 10111 Process the `cc1plus' spec. This is used to construct the options 10112 to be passed to the actual C++ compiler (`cc1plus'). 10113 10114 `%*' 10115 Substitute the variable part of a matched option. See below. 10116 Note that each comma in the substituted string is replaced by a 10117 single space. 10118 10119 `%<`S'' 10120 Remove all occurrences of `-S' from the command line. Note--this 10121 command is position dependent. `%' commands in the spec string 10122 before this one will see `-S', `%' commands in the spec string 10123 after this one will not. 10124 10125 `%:FUNCTION(ARGS)' 10126 Call the named function FUNCTION, passing it ARGS. ARGS is first 10127 processed as a nested spec string, then split into an argument 10128 vector in the usual fashion. The function returns a string which 10129 is processed as if it had appeared literally as part of the 10130 current spec. 10131 10132 The following built-in spec functions are provided: 10133 10134 ``getenv'' 10135 The `getenv' spec function takes two arguments: an environment 10136 variable name and a string. If the environment variable is 10137 not defined, a fatal error is issued. Otherwise, the return 10138 value is the value of the environment variable concatenated 10139 with the string. For example, if `TOPDIR' is defined as 10140 `/path/to/top', then: 10141 10142 %:getenv(TOPDIR /include) 10143 10144 expands to `/path/to/top/include'. 10145 10146 ``if-exists'' 10147 The `if-exists' spec function takes one argument, an absolute 10148 pathname to a file. If the file exists, `if-exists' returns 10149 the pathname. Here is a small example of its usage: 10150 10151 *startfile: 10152 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 10153 10154 ``if-exists-else'' 10155 The `if-exists-else' spec function is similar to the 10156 `if-exists' spec function, except that it takes two 10157 arguments. The first argument is an absolute pathname to a 10158 file. If the file exists, `if-exists-else' returns the 10159 pathname. If it does not exist, it returns the second 10160 argument. This way, `if-exists-else' can be used to select 10161 one file or another, based on the existence of the first. 10162 Here is a small example of its usage: 10163 10164 *startfile: 10165 crt0%O%s %:if-exists(crti%O%s) \ 10166 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 10167 10168 ``replace-outfile'' 10169 The `replace-outfile' spec function takes two arguments. It 10170 looks for the first argument in the outfiles array and 10171 replaces it with the second argument. Here is a small 10172 example of its usage: 10173 10174 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 10175 10176 ``remove-outfile'' 10177 The `remove-outfile' spec function takes one argument. It 10178 looks for the first argument in the outfiles array and 10179 removes it. Here is a small example its usage: 10180 10181 %:remove-outfile(-lm) 10182 10183 ``pass-through-libs'' 10184 The `pass-through-libs' spec function takes any number of 10185 arguments. It finds any `-l' options and any non-options 10186 ending in ".a" (which it assumes are the names of linker 10187 input library archive files) and returns a result containing 10188 all the found arguments each prepended by 10189 `-plugin-opt=-pass-through=' and joined by spaces. This list 10190 is intended to be passed to the LTO linker plugin. 10191 10192 %:pass-through-libs(%G %L %G) 10193 10194 ``print-asm-header'' 10195 The `print-asm-header' function takes no arguments and simply 10196 prints a banner like: 10197 10198 Assembler options 10199 ================= 10200 10201 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 10202 10203 It is used to separate compiler options from assembler options 10204 in the `--target-help' output. 10205 10206 `%{`S'}' 10207 Substitutes the `-S' switch, if that switch was given to GCC. If 10208 that switch was not specified, this substitutes nothing. Note that 10209 the leading dash is omitted when specifying this option, and it is 10210 automatically inserted if the substitution is performed. Thus the 10211 spec string `%{foo}' would match the command-line option `-foo' 10212 and would output the command line option `-foo'. 10213 10214 `%W{`S'}' 10215 Like %{`S'} but mark last argument supplied within as a file to be 10216 deleted on failure. 10217 10218 `%{`S'*}' 10219 Substitutes all the switches specified to GCC whose names start 10220 with `-S', but which also take an argument. This is used for 10221 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 10222 being one switch whose names starts with `o'. %{o*} would 10223 substitute this text, including the space. Thus two arguments 10224 would be generated. 10225 10226 `%{`S'*&`T'*}' 10227 Like %{`S'*}, but preserve order of `S' and `T' options (the order 10228 of `S' and `T' in the spec is not significant). There can be any 10229 number of ampersand-separated variables; for each the wild card is 10230 optional. Useful for CPP as `%{D*&U*&A*}'. 10231 10232 `%{`S':`X'}' 10233 Substitutes `X', if the `-S' switch was given to GCC. 10234 10235 `%{!`S':`X'}' 10236 Substitutes `X', if the `-S' switch was _not_ given to GCC. 10237 10238 `%{`S'*:`X'}' 10239 Substitutes `X' if one or more switches whose names start with 10240 `-S' are specified to GCC. Normally `X' is substituted only once, 10241 no matter how many such switches appeared. However, if `%*' 10242 appears somewhere in `X', then `X' will be substituted once for 10243 each matching switch, with the `%*' replaced by the part of that 10244 switch that matched the `*'. 10245 10246 `%{.`S':`X'}' 10247 Substitutes `X', if processing a file with suffix `S'. 10248 10249 `%{!.`S':`X'}' 10250 Substitutes `X', if _not_ processing a file with suffix `S'. 10251 10252 `%{,`S':`X'}' 10253 Substitutes `X', if processing a file for language `S'. 10254 10255 `%{!,`S':`X'}' 10256 Substitutes `X', if not processing a file for language `S'. 10257 10258 `%{`S'|`P':`X'}' 10259 Substitutes `X' if either `-S' or `-P' was given to GCC. This may 10260 be combined with `!', `.', `,', and `*' sequences as well, 10261 although they have a stronger binding than the `|'. If `%*' 10262 appears in `X', all of the alternatives must be starred, and only 10263 the first matching alternative is substituted. 10264 10265 For example, a spec string like this: 10266 10267 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 10268 10269 will output the following command-line options from the following 10270 input command-line options: 10271 10272 fred.c -foo -baz 10273 jim.d -bar -boggle 10274 -d fred.c -foo -baz -boggle 10275 -d jim.d -bar -baz -boggle 10276 10277 `%{S:X; T:Y; :D}' 10278 If `S' was given to GCC, substitutes `X'; else if `T' was given to 10279 GCC, substitutes `Y'; else substitutes `D'. There can be as many 10280 clauses as you need. This may be combined with `.', `,', `!', 10281 `|', and `*' as needed. 10282 10283 `max-lipo-mem' 10284 When importing auxiliary modules during profile-use, check current 10285 memory consumption after parsing each auxiliary module. If it 10286 exceeds this limit (specified in kb), don't import any more 10287 auxiliary modules. Specifying a value of 0 means don't enforce 10288 this limit. This parameter is only useful when using 10289 `-fprofile-use' and `-fripa'. 10290 10291 10292 The conditional text `X' in a %{`S':`X'} or similar construct may 10293 contain other nested `%' constructs or spaces, or even newlines. They 10294 are processed as usual, as described above. Trailing white space in 10295 `X' is ignored. White space may also appear anywhere on the left side 10296 of the colon in these constructs, except between `.' or `*' and the 10297 corresponding word. 10298 10299 The `-O', `-f', `-m', and `-W' switches are handled specifically in 10300 these constructs. If another value of `-O' or the negated form of a 10301 `-f', `-m', or `-W' switch is found later in the command line, the 10302 earlier switch value is ignored, except with {`S'*} where `S' is just 10303 one letter, which passes all matching options. 10304 10305 The character `|' at the beginning of the predicate text is used to 10306 indicate that a command should be piped to the following command, but 10307 only if `-pipe' is specified. 10308 10309 It is built into GCC which switches take arguments and which do not. 10310 (You might think it would be useful to generalize this to allow each 10311 compiler's spec to say which switches take arguments. But this cannot 10312 be done in a consistent fashion. GCC cannot even decide which input 10313 files have been specified without knowing which switches take arguments, 10314 and it must know which input files to compile in order to tell which 10315 compilers to run). 10316 10317 GCC also knows implicitly that arguments starting in `-l' are to be 10318 treated as compiler output files, and passed to the linker in their 10319 proper position among the other output files. 10320 10321 10322 File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 10323 10324 3.16 Specifying Target Machine and Compiler Version 10325 =================================================== 10326 10327 The usual way to run GCC is to run the executable called `gcc', or 10328 `MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a 10329 version other than the one that was installed last. 10330 10331 10332 File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 10333 10334 3.17 Hardware Models and Configurations 10335 ======================================= 10336 10337 Each target machine types can have its own special options, starting 10338 with `-m', to choose among various hardware models or 10339 configurations--for example, 68010 vs 68020, floating coprocessor or 10340 none. A single installed version of the compiler can compile for any 10341 model or configuration, according to the options specified. 10342 10343 Some configurations of the compiler also support additional special 10344 options, usually for compatibility with other compilers on the same 10345 platform. 10346 10347 * Menu: 10348 10349 * ARC Options:: 10350 * ARM Options:: 10351 * AVR Options:: 10352 * Blackfin Options:: 10353 * CRIS Options:: 10354 * CRX Options:: 10355 * Darwin Options:: 10356 * DEC Alpha Options:: 10357 * DEC Alpha/VMS Options:: 10358 * FR30 Options:: 10359 * FRV Options:: 10360 * GNU/Linux Options:: 10361 * H8/300 Options:: 10362 * HPPA Options:: 10363 * i386 and x86-64 Options:: 10364 * i386 and x86-64 Windows Options:: 10365 * IA-64 Options:: 10366 * IA-64/VMS Options:: 10367 * LM32 Options:: 10368 * M32C Options:: 10369 * M32R/D Options:: 10370 * M680x0 Options:: 10371 * M68hc1x Options:: 10372 * MCore Options:: 10373 * MeP Options:: 10374 * MicroBlaze Options:: 10375 * MIPS Options:: 10376 * MMIX Options:: 10377 * MN10300 Options:: 10378 * PDP-11 Options:: 10379 * picoChip Options:: 10380 * PowerPC Options:: 10381 * RS/6000 and PowerPC Options:: 10382 * RX Options:: 10383 * S/390 and zSeries Options:: 10384 * Score Options:: 10385 * SH Options:: 10386 * Solaris 2 Options:: 10387 * SPARC Options:: 10388 * SPU Options:: 10389 * System V Options:: 10390 * V850 Options:: 10391 * VAX Options:: 10392 * VxWorks Options:: 10393 * x86-64 Options:: 10394 * Xstormy16 Options:: 10395 * Xtensa Options:: 10396 * zSeries Options:: 10397 10398 10399 File: gcc.info, Node: ARC Options, Next: ARM Options, Up: Submodel Options 10400 10401 3.17.1 ARC Options 10402 ------------------ 10403 10404 These options are defined for ARC implementations: 10405 10406 `-EL' 10407 Compile code for little endian mode. This is the default. 10408 10409 `-EB' 10410 Compile code for big endian mode. 10411 10412 `-mmangle-cpu' 10413 Prepend the name of the CPU to all public symbol names. In 10414 multiple-processor systems, there are many ARC variants with 10415 different instruction and register set characteristics. This flag 10416 prevents code compiled for one CPU to be linked with code compiled 10417 for another. No facility exists for handling variants that are 10418 "almost identical". This is an all or nothing option. 10419 10420 `-mcpu=CPU' 10421 Compile code for ARC variant CPU. Which variants are supported 10422 depend on the configuration. All variants support `-mcpu=base', 10423 this is the default. 10424 10425 `-mtext=TEXT-SECTION' 10426 `-mdata=DATA-SECTION' 10427 `-mrodata=READONLY-DATA-SECTION' 10428 Put functions, data, and readonly data in TEXT-SECTION, 10429 DATA-SECTION, and READONLY-DATA-SECTION respectively by default. 10430 This can be overridden with the `section' attribute. *Note 10431 Variable Attributes::. 10432 10433 10434 10435 File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 10436 10437 3.17.2 ARM Options 10438 ------------------ 10439 10440 These `-m' options are defined for Advanced RISC Machines (ARM) 10441 architectures: 10442 10443 `-mabi=NAME' 10444 Generate code for the specified ABI. Permissible values are: 10445 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 10446 10447 `-mapcs-frame' 10448 Generate a stack frame that is compliant with the ARM Procedure 10449 Call Standard for all functions, even if this is not strictly 10450 necessary for correct execution of the code. Specifying 10451 `-fomit-frame-pointer' with this option will cause the stack 10452 frames not to be generated for leaf functions. The default is 10453 `-mno-apcs-frame'. 10454 10455 `-mapcs' 10456 This is a synonym for `-mapcs-frame'. 10457 10458 `-mthumb-interwork' 10459 Generate code which supports calling between the ARM and Thumb 10460 instruction sets. Without this option the two instruction sets 10461 cannot be reliably used inside one program. The default is 10462 `-mno-thumb-interwork', since slightly larger code is generated 10463 when `-mthumb-interwork' is specified. 10464 10465 `-mno-sched-prolog' 10466 Prevent the reordering of instructions in the function prolog, or 10467 the merging of those instruction with the instructions in the 10468 function's body. This means that all functions will start with a 10469 recognizable set of instructions (or in fact one of a choice from 10470 a small set of different function prologues), and this information 10471 can be used to locate the start if functions inside an executable 10472 piece of code. The default is `-msched-prolog'. 10473 10474 `-mfloat-abi=NAME' 10475 Specifies which floating-point ABI to use. Permissible values 10476 are: `soft', `softfp' and `hard'. 10477 10478 Specifying `soft' causes GCC to generate output containing library 10479 calls for floating-point operations. `softfp' allows the 10480 generation of code using hardware floating-point instructions, but 10481 still uses the soft-float calling conventions. `hard' allows 10482 generation of floating-point instructions and uses FPU-specific 10483 calling conventions. 10484 10485 The default depends on the specific target configuration. Note 10486 that the hard-float and soft-float ABIs are not link-compatible; 10487 you must compile your entire program with the same ABI, and link 10488 with a compatible set of libraries. 10489 10490 `-mhard-float' 10491 Equivalent to `-mfloat-abi=hard'. 10492 10493 `-msoft-float' 10494 Equivalent to `-mfloat-abi=soft'. 10495 10496 `-mlittle-endian' 10497 Generate code for a processor running in little-endian mode. This 10498 is the default for all standard configurations. 10499 10500 `-mbig-endian' 10501 Generate code for a processor running in big-endian mode; the 10502 default is to compile code for a little-endian processor. 10503 10504 `-mwords-little-endian' 10505 This option only applies when generating code for big-endian 10506 processors. Generate code for a little-endian word order but a 10507 big-endian byte order. That is, a byte order of the form 10508 `32107654'. Note: this option should only be used if you require 10509 compatibility with code for big-endian ARM processors generated by 10510 versions of the compiler prior to 2.8. 10511 10512 `-mcpu=NAME' 10513 This specifies the name of the target ARM processor. GCC uses 10514 this name to determine what kind of instructions it can emit when 10515 generating assembly code. Permissible names are: `arm2', `arm250', 10516 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 10517 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 10518 `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500', 10519 `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', 10520 `arm740t', `strongarm', `strongarm110', `strongarm1100', 10521 `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920', 10522 `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', 10523 `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', 10524 `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', 10525 `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s', 10526 `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `cortex-a5', 10527 `cortex-a8', `cortex-a9', `cortex-a15', `cortex-r4', `cortex-r4f', 10528 `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0', `xscale', 10529 `iwmmxt', `iwmmxt2', `ep9312'. 10530 10531 `-mtune=NAME' 10532 This option is very similar to the `-mcpu=' option, except that 10533 instead of specifying the actual target processor type, and hence 10534 restricting which instructions can be used, it specifies that GCC 10535 should tune the performance of the code as if the target were of 10536 the type specified in this option, but still choosing the 10537 instructions that it will generate based on the CPU specified by a 10538 `-mcpu=' option. For some ARM implementations better performance 10539 can be obtained by using this option. 10540 10541 `-march=NAME' 10542 This specifies the name of the target ARM architecture. GCC uses 10543 this name to determine what kind of instructions it can emit when 10544 generating assembly code. This option can be used in conjunction 10545 with or instead of the `-mcpu=' option. Permissible names are: 10546 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 10547 `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2', 10548 `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r', 10549 `armv7-m', `iwmmxt', `iwmmxt2', `ep9312'. 10550 10551 `-mfpu=NAME' 10552 `-mfpe=NUMBER' 10553 `-mfp=NUMBER' 10554 This specifies what floating point hardware (or hardware 10555 emulation) is available on the target. Permissible names are: 10556 `fpa', `fpe2', `fpe3', `maverick', `vfp', `vfpv3', `vfpv3-fp16', 10557 `vfpv3-d16', `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-fp16', `neon', 10558 `neon-fp16', `vfpv4', `vfpv4-d16', `fpv4-sp-d16' and `neon-vfpv4'. 10559 `-mfp' and `-mfpe' are synonyms for `-mfpu'=`fpe'NUMBER, for 10560 compatibility with older versions of GCC. 10561 10562 If `-msoft-float' is specified this specifies the format of 10563 floating point values. 10564 10565 If the selected floating-point hardware includes the NEON extension 10566 (e.g. `-mfpu'=`neon'), note that floating-point operations will 10567 not be used by GCC's auto-vectorization pass unless 10568 `-funsafe-math-optimizations' is also specified. This is because 10569 NEON hardware does not fully implement the IEEE 754 standard for 10570 floating-point arithmetic (in particular denormal values are 10571 treated as zero), so the use of NEON instructions may lead to a 10572 loss of precision. 10573 10574 `-mfp16-format=NAME' 10575 Specify the format of the `__fp16' half-precision floating-point 10576 type. Permissible names are `none', `ieee', and `alternative'; 10577 the default is `none', in which case the `__fp16' type is not 10578 defined. *Note Half-Precision::, for more information. 10579 10580 `-mstructure-size-boundary=N' 10581 The size of all structures and unions will be rounded up to a 10582 multiple of the number of bits set by this option. Permissible 10583 values are 8, 32 and 64. The default value varies for different 10584 toolchains. For the COFF targeted toolchain the default value is 10585 8. A value of 64 is only allowed if the underlying ABI supports 10586 it. 10587 10588 Specifying the larger number can produce faster, more efficient 10589 code, but can also increase the size of the program. Different 10590 values are potentially incompatible. Code compiled with one value 10591 cannot necessarily expect to work with code or libraries compiled 10592 with another value, if they exchange information using structures 10593 or unions. 10594 10595 `-mabort-on-noreturn' 10596 Generate a call to the function `abort' at the end of a `noreturn' 10597 function. It will be executed if the function tries to return. 10598 10599 `-mlong-calls' 10600 `-mno-long-calls' 10601 Tells the compiler to perform function calls by first loading the 10602 address of the function into a register and then performing a 10603 subroutine call on this register. This switch is needed if the 10604 target function will lie outside of the 64 megabyte addressing 10605 range of the offset based version of subroutine call instruction. 10606 10607 Even if this switch is enabled, not all function calls will be 10608 turned into long calls. The heuristic is that static functions, 10609 functions which have the `short-call' attribute, functions that 10610 are inside the scope of a `#pragma no_long_calls' directive and 10611 functions whose definitions have already been compiled within the 10612 current compilation unit, will not be turned into long calls. The 10613 exception to this rule is that weak function definitions, 10614 functions with the `long-call' attribute or the `section' 10615 attribute, and functions that are within the scope of a `#pragma 10616 long_calls' directive, will always be turned into long calls. 10617 10618 This feature is not enabled by default. Specifying 10619 `-mno-long-calls' will restore the default behavior, as will 10620 placing the function calls within the scope of a `#pragma 10621 long_calls_off' directive. Note these switches have no effect on 10622 how the compiler generates code to handle function calls via 10623 function pointers. 10624 10625 `-msingle-pic-base' 10626 Treat the register used for PIC addressing as read-only, rather 10627 than loading it in the prologue for each function. The run-time 10628 system is responsible for initializing this register with an 10629 appropriate value before execution begins. 10630 10631 `-mpic-register=REG' 10632 Specify the register to be used for PIC addressing. The default 10633 is R10 unless stack-checking is enabled, when R9 is used. 10634 10635 `-mcirrus-fix-invalid-insns' 10636 Insert NOPs into the instruction stream to in order to work around 10637 problems with invalid Maverick instruction combinations. This 10638 option is only valid if the `-mcpu=ep9312' option has been used to 10639 enable generation of instructions for the Cirrus Maverick floating 10640 point co-processor. This option is not enabled by default, since 10641 the problem is only present in older Maverick implementations. 10642 The default can be re-enabled by use of the 10643 `-mno-cirrus-fix-invalid-insns' switch. 10644 10645 `-mpoke-function-name' 10646 Write the name of each function into the text section, directly 10647 preceding the function prologue. The generated code is similar to 10648 this: 10649 10650 t0 10651 .ascii "arm_poke_function_name", 0 10652 .align 10653 t1 10654 .word 0xff000000 + (t1 - t0) 10655 arm_poke_function_name 10656 mov ip, sp 10657 stmfd sp!, {fp, ip, lr, pc} 10658 sub fp, ip, #4 10659 10660 When performing a stack backtrace, code can inspect the value of 10661 `pc' stored at `fp + 0'. If the trace function then looks at 10662 location `pc - 12' and the top 8 bits are set, then we know that 10663 there is a function name embedded immediately preceding this 10664 location and has length `((pc[-3]) & 0xff000000)'. 10665 10666 `-mthumb' 10667 Generate code for the Thumb instruction set. The default is to 10668 use the 32-bit ARM instruction set. This option automatically 10669 enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2 10670 instructions based on the `-mcpu=NAME' and `-march=NAME' options. 10671 This option is not passed to the assembler. If you want to force 10672 assembler files to be interpreted as Thumb code, either add a 10673 `.thumb' directive to the source or pass the `-mthumb' option 10674 directly to the assembler by prefixing it with `-Wa'. 10675 10676 `-mtpcs-frame' 10677 Generate a stack frame that is compliant with the Thumb Procedure 10678 Call Standard for all non-leaf functions. (A leaf function is one 10679 that does not call any other functions.) The default is 10680 `-mno-tpcs-frame'. 10681 10682 `-mtpcs-leaf-frame' 10683 Generate a stack frame that is compliant with the Thumb Procedure 10684 Call Standard for all leaf functions. (A leaf function is one 10685 that does not call any other functions.) The default is 10686 `-mno-apcs-leaf-frame'. 10687 10688 `-mcallee-super-interworking' 10689 Gives all externally visible functions in the file being compiled 10690 an ARM instruction set header which switches to Thumb mode before 10691 executing the rest of the function. This allows these functions 10692 to be called from non-interworking code. This option is not valid 10693 in AAPCS configurations because interworking is enabled by default. 10694 10695 `-mcaller-super-interworking' 10696 Allows calls via function pointers (including virtual functions) to 10697 execute correctly regardless of whether the target code has been 10698 compiled for interworking or not. There is a small overhead in 10699 the cost of executing a function pointer if this option is 10700 enabled. This option is not valid in AAPCS configurations because 10701 interworking is enabled by default. 10702 10703 `-mtp=NAME' 10704 Specify the access model for the thread local storage pointer. 10705 The valid models are `soft', which generates calls to 10706 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 10707 `cp15' directly (supported in the arm6k architecture), and `auto', 10708 which uses the best available method for the selected processor. 10709 The default setting is `auto'. 10710 10711 `-mword-relocations' 10712 Only generate absolute relocations on word sized values (i.e. 10713 R_ARM_ABS32). This is enabled by default on targets (uClinux, 10714 SymbianOS) where the runtime loader imposes this restriction, and 10715 when `-fpic' or `-fPIC' is specified. 10716 10717 `-mfix-cortex-m3-ldrd' 10718 Some Cortex-M3 cores can cause data corruption when `ldrd' 10719 instructions with overlapping destination and base registers are 10720 used. This option avoids generating these instructions. This 10721 option is enabled by default when `-mcpu=cortex-m3' is specified. 10722 10723 10724 10725 File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 10726 10727 3.17.3 AVR Options 10728 ------------------ 10729 10730 These options are defined for AVR implementations: 10731 10732 `-mmcu=MCU' 10733 Specify ATMEL AVR instruction set or MCU type. 10734 10735 Instruction set avr1 is for the minimal AVR core, not supported by 10736 the C compiler, only for assembler programs (MCU types: at90s1200, 10737 attiny10, attiny11, attiny12, attiny15, attiny28). 10738 10739 Instruction set avr2 (default) is for the classic AVR core with up 10740 to 8K program memory space (MCU types: at90s2313, at90s2323, 10741 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, 10742 at90s8515, at90c8534, at90s8535). 10743 10744 Instruction set avr3 is for the classic AVR core with up to 128K 10745 program memory space (MCU types: atmega103, atmega603, at43usb320, 10746 at76c711). 10747 10748 Instruction set avr4 is for the enhanced AVR core with up to 8K 10749 program memory space (MCU types: atmega8, atmega83, atmega85). 10750 10751 Instruction set avr5 is for the enhanced AVR core with up to 128K 10752 program memory space (MCU types: atmega16, atmega161, atmega163, 10753 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k). 10754 10755 `-mno-interrupts' 10756 Generated code is not compatible with hardware interrupts. Code 10757 size will be smaller. 10758 10759 `-mcall-prologues' 10760 Functions prologues/epilogues expanded as call to appropriate 10761 subroutines. Code size will be smaller. 10762 10763 `-mtiny-stack' 10764 Change only the low 8 bits of the stack pointer. 10765 10766 `-mint8' 10767 Assume int to be 8 bit integer. This affects the sizes of all 10768 types: A char will be 1 byte, an int will be 1 byte, a long will 10769 be 2 bytes and long long will be 4 bytes. Please note that this 10770 option does not comply to the C standards, but it will provide you 10771 with smaller code size. 10772 10773 3.17.3.1 `EIND' and Devices with more than 128k Bytes of Flash 10774 .............................................................. 10775 10776 Pointers in the implementation are 16 bits wide. The address of a 10777 function or label is represented as word address so that indirect jumps 10778 and calls can address any code address in the range of 64k words. 10779 10780 In order to faciliate indirect jump on devices with more than 128k 10781 bytes of program memory space, there is a special function register 10782 called `EIND' that serves as most significant part of the target address 10783 when `EICALL' or `EIJMP' instructions are used. 10784 10785 Indirect jumps and calls on these devices are handled as follows and 10786 are subject to some limitations: 10787 10788 * The compiler never sets `EIND'. 10789 10790 * The startup code from libgcc never sets `EIND'. Notice that 10791 startup code is a blend of code from libgcc and avr-libc. For the 10792 impact of avr-libc on `EIND', see the 10793 avr-libc user manual (http://nongnu.org/avr-libc/user-manual). 10794 10795 * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP' 10796 instructions or might read `EIND' directly. 10797 10798 * The compiler assumes that `EIND' never changes during the startup 10799 code or run of the application. In particular, `EIND' is not 10800 saved/restored in function or interrupt service routine 10801 prologue/epilogue. 10802 10803 * It is legitimate for user-specific startup code to set up `EIND' 10804 early, for example by means of initialization code located in 10805 section `.init3', and thus prior to general startup code that 10806 initializes RAM and calls constructors. 10807 10808 * For indirect calls to functions and computed goto, the linker will 10809 generate _stubs_. Stubs are jump pads sometimes also called 10810 _trampolines_. Thus, the indirect call/jump will jump to such a 10811 stub. The stub contains a direct jump to the desired address. 10812 10813 * Stubs will be generated automatically by the linker if the 10814 following two conditions are met: 10815 - The address of a label is taken by means of the `gs' modifier 10816 (short for _generate stubs_) like so: 10817 LDI r24, lo8(gs(FUNC)) 10818 LDI r25, hi8(gs(FUNC)) 10819 10820 - The final location of that label is in a code segment 10821 _outside_ the segment where the stubs are located. 10822 10823 * The compiler will emit such `gs' modifiers for code labels in the 10824 following situations: 10825 - Taking address of a function or code label. 10826 10827 - Computed goto. 10828 10829 - If prologue-save function is used, see `-mcall-prologues' 10830 command line option. 10831 10832 - Switch/case dispatch tables. If you do not want such dispatch 10833 tables you can specify the `-fno-jump-tables' command line 10834 option. 10835 10836 - C and C++ constructors/destructors called during 10837 startup/shutdown. 10838 10839 - If the tools hit a `gs()' modifier explained above. 10840 10841 * The default linker script is arranged for code with `EIND = 0'. 10842 If code is supposed to work for a setup with `EIND != 0', a custom 10843 linker script has to be used in order to place the sections whose 10844 name start with `.trampolines' into the segment where `EIND' 10845 points to. 10846 10847 * Jumping to non-symbolic addresses like so is _not_ supported: 10848 10849 int main (void) 10850 { 10851 /* Call function at word address 0x2 */ 10852 return ((int(*)(void)) 0x2)(); 10853 } 10854 10855 Instead, a stub has to be set up: 10856 10857 int main (void) 10858 { 10859 extern int func_4 (void); 10860 10861 /* Call function at byte address 0x4 */ 10862 return func_4(); 10863 } 10864 10865 and the application be linked with `-Wl,--defsym,func_4=0x4'. 10866 Alternatively, `func_4' can be defined in the linker script. 10867 10868 10869 File: gcc.info, Node: Blackfin Options, Next: CRIS Options, Prev: AVR Options, Up: Submodel Options 10870 10871 3.17.4 Blackfin Options 10872 ----------------------- 10873 10874 `-mcpu=CPU[-SIREVISION]' 10875 Specifies the name of the target Blackfin processor. Currently, 10876 CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522', 10877 `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532', 10878 `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542', 10879 `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m', 10880 `bf548m', `bf549m', `bf561'. The optional SIREVISION specifies 10881 the silicon revision of the target Blackfin processor. Any 10882 workarounds available for the targeted silicon revision will be 10883 enabled. If SIREVISION is `none', no workarounds are enabled. If 10884 SIREVISION is `any', all workarounds for the targeted processor 10885 will be enabled. The `__SILICON_REVISION__' macro is defined to 10886 two hexadecimal digits representing the major and minor numbers in 10887 the silicon revision. If SIREVISION is `none', the 10888 `__SILICON_REVISION__' is not defined. If SIREVISION is `any', the 10889 `__SILICON_REVISION__' is defined to be `0xffff'. If this 10890 optional SIREVISION is not used, GCC assumes the latest known 10891 silicon revision of the targeted Blackfin processor. 10892 10893 Support for `bf561' is incomplete. For `bf561', Only the 10894 processor macro is defined. Without this option, `bf532' is used 10895 as the processor by default. The corresponding predefined 10896 processor macros for CPU is to be defined. And for `bfin-elf' 10897 toolchain, this causes the hardware BSP provided by libgloss to be 10898 linked in if `-msim' is not given. 10899 10900 `-msim' 10901 Specifies that the program will be run on the simulator. This 10902 causes the simulator BSP provided by libgloss to be linked in. 10903 This option has effect only for `bfin-elf' toolchain. Certain 10904 other options, such as `-mid-shared-library' and `-mfdpic', imply 10905 `-msim'. 10906 10907 `-momit-leaf-frame-pointer' 10908 Don't keep the frame pointer in a register for leaf functions. 10909 This avoids the instructions to save, set up and restore frame 10910 pointers and makes an extra register available in leaf functions. 10911 The option `-fomit-frame-pointer' removes the frame pointer for 10912 all functions which might make debugging harder. 10913 10914 `-mspecld-anomaly' 10915 When enabled, the compiler will ensure that the generated code 10916 does not contain speculative loads after jump instructions. If 10917 this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined. 10918 10919 `-mno-specld-anomaly' 10920 Don't generate extra code to prevent speculative loads from 10921 occurring. 10922 10923 `-mcsync-anomaly' 10924 When enabled, the compiler will ensure that the generated code 10925 does not contain CSYNC or SSYNC instructions too soon after 10926 conditional branches. If this option is used, 10927 `__WORKAROUND_SPECULATIVE_SYNCS' is defined. 10928 10929 `-mno-csync-anomaly' 10930 Don't generate extra code to prevent CSYNC or SSYNC instructions 10931 from occurring too soon after a conditional branch. 10932 10933 `-mlow-64k' 10934 When enabled, the compiler is free to take advantage of the 10935 knowledge that the entire program fits into the low 64k of memory. 10936 10937 `-mno-low-64k' 10938 Assume that the program is arbitrarily large. This is the default. 10939 10940 `-mstack-check-l1' 10941 Do stack checking using information placed into L1 scratchpad 10942 memory by the uClinux kernel. 10943 10944 `-mid-shared-library' 10945 Generate code that supports shared libraries via the library ID 10946 method. This allows for execute in place and shared libraries in 10947 an environment without virtual memory management. This option 10948 implies `-fPIC'. With a `bfin-elf' target, this option implies 10949 `-msim'. 10950 10951 `-mno-id-shared-library' 10952 Generate code that doesn't assume ID based shared libraries are 10953 being used. This is the default. 10954 10955 `-mleaf-id-shared-library' 10956 Generate code that supports shared libraries via the library ID 10957 method, but assumes that this library or executable won't link 10958 against any other ID shared libraries. That allows the compiler 10959 to use faster code for jumps and calls. 10960 10961 `-mno-leaf-id-shared-library' 10962 Do not assume that the code being compiled won't link against any 10963 ID shared libraries. Slower code will be generated for jump and 10964 call insns. 10965 10966 `-mshared-library-id=n' 10967 Specified the identification number of the ID based shared library 10968 being compiled. Specifying a value of 0 will generate more 10969 compact code, specifying other values will force the allocation of 10970 that number to the current library but is no more space or time 10971 efficient than omitting this option. 10972 10973 `-msep-data' 10974 Generate code that allows the data segment to be located in a 10975 different area of memory from the text segment. This allows for 10976 execute in place in an environment without virtual memory 10977 management by eliminating relocations against the text section. 10978 10979 `-mno-sep-data' 10980 Generate code that assumes that the data segment follows the text 10981 segment. This is the default. 10982 10983 `-mlong-calls' 10984 `-mno-long-calls' 10985 Tells the compiler to perform function calls by first loading the 10986 address of the function into a register and then performing a 10987 subroutine call on this register. This switch is needed if the 10988 target function will lie outside of the 24 bit addressing range of 10989 the offset based version of subroutine call instruction. 10990 10991 This feature is not enabled by default. Specifying 10992 `-mno-long-calls' will restore the default behavior. Note these 10993 switches have no effect on how the compiler generates code to 10994 handle function calls via function pointers. 10995 10996 `-mfast-fp' 10997 Link with the fast floating-point library. This library relaxes 10998 some of the IEEE floating-point standard's rules for checking 10999 inputs against Not-a-Number (NAN), in the interest of performance. 11000 11001 `-minline-plt' 11002 Enable inlining of PLT entries in function calls to functions that 11003 are not known to bind locally. It has no effect without `-mfdpic'. 11004 11005 `-mmulticore' 11006 Build standalone application for multicore Blackfin processor. 11007 Proper start files and link scripts will be used to support 11008 multicore. This option defines `__BFIN_MULTICORE'. It can only be 11009 used with `-mcpu=bf561[-SIREVISION]'. It can be used with 11010 `-mcorea' or `-mcoreb'. If it's used without `-mcorea' or 11011 `-mcoreb', single application/dual core programming model is used. 11012 In this model, the main function of Core B should be named as 11013 coreb_main. If it's used with `-mcorea' or `-mcoreb', one 11014 application per core programming model is used. If this option is 11015 not used, single core application programming model is used. 11016 11017 `-mcorea' 11018 Build standalone application for Core A of BF561 when using one 11019 application per core programming model. Proper start files and 11020 link scripts will be used to support Core A. This option defines 11021 `__BFIN_COREA'. It must be used with `-mmulticore'. 11022 11023 `-mcoreb' 11024 Build standalone application for Core B of BF561 when using one 11025 application per core programming model. Proper start files and 11026 link scripts will be used to support Core B. This option defines 11027 `__BFIN_COREB'. When this option is used, coreb_main should be 11028 used instead of main. It must be used with `-mmulticore'. 11029 11030 `-msdram' 11031 Build standalone application for SDRAM. Proper start files and 11032 link scripts will be used to put the application into SDRAM. 11033 Loader should initialize SDRAM before loading the application into 11034 SDRAM. This option defines `__BFIN_SDRAM'. 11035 11036 `-micplb' 11037 Assume that ICPLBs are enabled at runtime. This has an effect on 11038 certain anomaly workarounds. For Linux targets, the default is to 11039 assume ICPLBs are enabled; for standalone applications the default 11040 is off. 11041 11042 11043 File: gcc.info, Node: CRIS Options, Next: CRX Options, Prev: Blackfin Options, Up: Submodel Options 11044 11045 3.17.5 CRIS Options 11046 ------------------- 11047 11048 These options are defined specifically for the CRIS ports. 11049 11050 `-march=ARCHITECTURE-TYPE' 11051 `-mcpu=ARCHITECTURE-TYPE' 11052 Generate code for the specified architecture. The choices for 11053 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 11054 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 11055 cris-axis-linux-gnu, where the default is `v10'. 11056 11057 `-mtune=ARCHITECTURE-TYPE' 11058 Tune to ARCHITECTURE-TYPE everything applicable about the generated 11059 code, except for the ABI and the set of available instructions. 11060 The choices for ARCHITECTURE-TYPE are the same as for 11061 `-march=ARCHITECTURE-TYPE'. 11062 11063 `-mmax-stack-frame=N' 11064 Warn when the stack frame of a function exceeds N bytes. 11065 11066 `-metrax4' 11067 `-metrax100' 11068 The options `-metrax4' and `-metrax100' are synonyms for 11069 `-march=v3' and `-march=v8' respectively. 11070 11071 `-mmul-bug-workaround' 11072 `-mno-mul-bug-workaround' 11073 Work around a bug in the `muls' and `mulu' instructions for CPU 11074 models where it applies. This option is active by default. 11075 11076 `-mpdebug' 11077 Enable CRIS-specific verbose debug-related information in the 11078 assembly code. This option also has the effect to turn off the 11079 `#NO_APP' formatted-code indicator to the assembler at the 11080 beginning of the assembly file. 11081 11082 `-mcc-init' 11083 Do not use condition-code results from previous instruction; 11084 always emit compare and test instructions before use of condition 11085 codes. 11086 11087 `-mno-side-effects' 11088 Do not emit instructions with side-effects in addressing modes 11089 other than post-increment. 11090 11091 `-mstack-align' 11092 `-mno-stack-align' 11093 `-mdata-align' 11094 `-mno-data-align' 11095 `-mconst-align' 11096 `-mno-const-align' 11097 These options (no-options) arranges (eliminate arrangements) for 11098 the stack-frame, individual data and constants to be aligned for 11099 the maximum single data access size for the chosen CPU model. The 11100 default is to arrange for 32-bit alignment. ABI details such as 11101 structure layout are not affected by these options. 11102 11103 `-m32-bit' 11104 `-m16-bit' 11105 `-m8-bit' 11106 Similar to the stack- data- and const-align options above, these 11107 options arrange for stack-frame, writable data and constants to 11108 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 11109 alignment. 11110 11111 `-mno-prologue-epilogue' 11112 `-mprologue-epilogue' 11113 With `-mno-prologue-epilogue', the normal function prologue and 11114 epilogue that sets up the stack-frame are omitted and no return 11115 instructions or return sequences are generated in the code. Use 11116 this option only together with visual inspection of the compiled 11117 code: no warnings or errors are generated when call-saved 11118 registers must be saved, or storage for local variable needs to be 11119 allocated. 11120 11121 `-mno-gotplt' 11122 `-mgotplt' 11123 With `-fpic' and `-fPIC', don't generate (do generate) instruction 11124 sequences that load addresses for functions from the PLT part of 11125 the GOT rather than (traditional on other architectures) calls to 11126 the PLT. The default is `-mgotplt'. 11127 11128 `-melf' 11129 Legacy no-op option only recognized with the cris-axis-elf and 11130 cris-axis-linux-gnu targets. 11131 11132 `-mlinux' 11133 Legacy no-op option only recognized with the cris-axis-linux-gnu 11134 target. 11135 11136 `-sim' 11137 This option, recognized for the cris-axis-elf arranges to link 11138 with input-output functions from a simulator library. Code, 11139 initialized data and zero-initialized data are allocated 11140 consecutively. 11141 11142 `-sim2' 11143 Like `-sim', but pass linker options to locate initialized data at 11144 0x40000000 and zero-initialized data at 0x80000000. 11145 11146 11147 File: gcc.info, Node: CRX Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 11148 11149 3.17.6 CRX Options 11150 ------------------ 11151 11152 These options are defined specifically for the CRX ports. 11153 11154 `-mmac' 11155 Enable the use of multiply-accumulate instructions. Disabled by 11156 default. 11157 11158 `-mpush-args' 11159 Push instructions will be used to pass outgoing arguments when 11160 functions are called. Enabled by default. 11161 11162 11163 File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CRX Options, Up: Submodel Options 11164 11165 3.17.7 Darwin Options 11166 --------------------- 11167 11168 These options are defined for all architectures running the Darwin 11169 operating system. 11170 11171 FSF GCC on Darwin does not create "fat" object files; it will create 11172 an object file for the single architecture that it was built to target. 11173 Apple's GCC on Darwin does create "fat" files if multiple `-arch' 11174 options are used; it does so by running the compiler or linker multiple 11175 times and joining the results together with `lipo'. 11176 11177 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 11178 is determined by the flags that specify the ISA that GCC is targetting, 11179 like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 11180 used to override this. 11181 11182 The Darwin tools vary in their behavior when presented with an ISA 11183 mismatch. The assembler, `as', will only permit instructions to be 11184 used that are valid for the subtype of the file it is generating, so 11185 you cannot put 64-bit instructions in a `ppc750' object file. The 11186 linker for shared libraries, `/usr/bin/libtool', will fail and print an 11187 error if asked to create a shared library with a less restrictive 11188 subtype than its input files (for instance, trying to put a `ppc970' 11189 object file in a `ppc7400' library). The linker for executables, `ld', 11190 will quietly give the executable the most restrictive subtype of any of 11191 its input files. 11192 11193 `-FDIR' 11194 Add the framework directory DIR to the head of the list of 11195 directories to be searched for header files. These directories are 11196 interleaved with those specified by `-I' options and are scanned 11197 in a left-to-right order. 11198 11199 A framework directory is a directory with frameworks in it. A 11200 framework is a directory with a `"Headers"' and/or 11201 `"PrivateHeaders"' directory contained directly in it that ends in 11202 `".framework"'. The name of a framework is the name of this 11203 directory excluding the `".framework"'. Headers associated with 11204 the framework are found in one of those two directories, with 11205 `"Headers"' being searched first. A subframework is a framework 11206 directory that is in a framework's `"Frameworks"' directory. 11207 Includes of subframework headers can only appear in a header of a 11208 framework that contains the subframework, or in a sibling 11209 subframework header. Two subframeworks are siblings if they occur 11210 in the same framework. A subframework should not have the same 11211 name as a framework, a warning will be issued if this is violated. 11212 Currently a subframework cannot have subframeworks, in the future, 11213 the mechanism may be extended to support this. The standard 11214 frameworks can be found in `"/System/Library/Frameworks"' and 11215 `"/Library/Frameworks"'. An example include looks like `#include 11216 <Framework/header.h>', where `Framework' denotes the name of the 11217 framework and header.h is found in the `"PrivateHeaders"' or 11218 `"Headers"' directory. 11219 11220 `-iframeworkDIR' 11221 Like `-F' except the directory is a treated as a system directory. 11222 The main difference between this `-iframework' and `-F' is that 11223 with `-iframework' the compiler does not warn about constructs 11224 contained within header files found via DIR. This option is valid 11225 only for the C family of languages. 11226 11227 `-gused' 11228 Emit debugging information for symbols that are used. For STABS 11229 debugging format, this enables `-feliminate-unused-debug-symbols'. 11230 This is by default ON. 11231 11232 `-gfull' 11233 Emit debugging information for all symbols and types. 11234 11235 `-mmacosx-version-min=VERSION' 11236 The earliest version of MacOS X that this executable will run on 11237 is VERSION. Typical values of VERSION include `10.1', `10.2', and 11238 `10.3.9'. 11239 11240 If the compiler was built to use the system's headers by default, 11241 then the default for this option is the system version on which the 11242 compiler is running, otherwise the default is to make choices which 11243 are compatible with as many systems and code bases as possible. 11244 11245 `-mkernel' 11246 Enable kernel development mode. The `-mkernel' option sets 11247 `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions', 11248 `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and 11249 `-fno-rtti' where applicable. This mode also sets `-mno-altivec', 11250 `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC 11251 targets. 11252 11253 `-mone-byte-bool' 11254 Override the defaults for `bool' so that `sizeof(bool)==1'. By 11255 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 11256 and `1' when compiling for Darwin/x86, so this option has no 11257 effect on x86. 11258 11259 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 11260 code that is not binary compatible with code generated without 11261 that switch. Using this switch may require recompiling all other 11262 modules in a program, including system libraries. Use this switch 11263 to conform to a non-default data model. 11264 11265 `-mfix-and-continue' 11266 `-ffix-and-continue' 11267 `-findirect-data' 11268 Generate code suitable for fast turn around development. Needed to 11269 enable gdb to dynamically load `.o' files into already running 11270 programs. `-findirect-data' and `-ffix-and-continue' are provided 11271 for backwards compatibility. 11272 11273 `-all_load' 11274 Loads all members of static archive libraries. See man ld(1) for 11275 more information. 11276 11277 `-arch_errors_fatal' 11278 Cause the errors having to do with files that have the wrong 11279 architecture to be fatal. 11280 11281 `-bind_at_load' 11282 Causes the output file to be marked such that the dynamic linker 11283 will bind all undefined references when the file is loaded or 11284 launched. 11285 11286 `-bundle' 11287 Produce a Mach-o bundle format file. See man ld(1) for more 11288 information. 11289 11290 `-bundle_loader EXECUTABLE' 11291 This option specifies the EXECUTABLE that will be loading the build 11292 output file being linked. See man ld(1) for more information. 11293 11294 `-dynamiclib' 11295 When passed this option, GCC will produce a dynamic library 11296 instead of an executable when linking, using the Darwin `libtool' 11297 command. 11298 11299 `-force_cpusubtype_ALL' 11300 This causes GCC's output file to have the ALL subtype, instead of 11301 one controlled by the `-mcpu' or `-march' option. 11302 11303 `-allowable_client CLIENT_NAME' 11304 `-client_name' 11305 `-compatibility_version' 11306 `-current_version' 11307 `-dead_strip' 11308 `-dependency-file' 11309 `-dylib_file' 11310 `-dylinker_install_name' 11311 `-dynamic' 11312 `-exported_symbols_list' 11313 `-filelist' 11314 `-flat_namespace' 11315 `-force_flat_namespace' 11316 `-headerpad_max_install_names' 11317 `-image_base' 11318 `-init' 11319 `-install_name' 11320 `-keep_private_externs' 11321 `-multi_module' 11322 `-multiply_defined' 11323 `-multiply_defined_unused' 11324 `-noall_load' 11325 `-no_dead_strip_inits_and_terms' 11326 `-nofixprebinding' 11327 `-nomultidefs' 11328 `-noprebind' 11329 `-noseglinkedit' 11330 `-pagezero_size' 11331 `-prebind' 11332 `-prebind_all_twolevel_modules' 11333 `-private_bundle' 11334 `-read_only_relocs' 11335 `-sectalign' 11336 `-sectobjectsymbols' 11337 `-whyload' 11338 `-seg1addr' 11339 `-sectcreate' 11340 `-sectobjectsymbols' 11341 `-sectorder' 11342 `-segaddr' 11343 `-segs_read_only_addr' 11344 `-segs_read_write_addr' 11345 `-seg_addr_table' 11346 `-seg_addr_table_filename' 11347 `-seglinkedit' 11348 `-segprot' 11349 `-segs_read_only_addr' 11350 `-segs_read_write_addr' 11351 `-single_module' 11352 `-static' 11353 `-sub_library' 11354 `-sub_umbrella' 11355 `-twolevel_namespace' 11356 `-umbrella' 11357 `-undefined' 11358 `-unexported_symbols_list' 11359 `-weak_reference_mismatches' 11360 `-whatsloaded' 11361 These options are passed to the Darwin linker. The Darwin linker 11362 man page describes them in detail. 11363 11364 11365 File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Darwin Options, Up: Submodel Options 11366 11367 3.17.8 DEC Alpha Options 11368 ------------------------ 11369 11370 These `-m' options are defined for the DEC Alpha implementations: 11371 11372 `-mno-soft-float' 11373 `-msoft-float' 11374 Use (do not use) the hardware floating-point instructions for 11375 floating-point operations. When `-msoft-float' is specified, 11376 functions in `libgcc.a' will be used to perform floating-point 11377 operations. Unless they are replaced by routines that emulate the 11378 floating-point operations, or compiled in such a way as to call 11379 such emulations routines, these routines will issue floating-point 11380 operations. If you are compiling for an Alpha without 11381 floating-point operations, you must ensure that the library is 11382 built so as not to call them. 11383 11384 Note that Alpha implementations without floating-point operations 11385 are required to have floating-point registers. 11386 11387 `-mfp-reg' 11388 `-mno-fp-regs' 11389 Generate code that uses (does not use) the floating-point register 11390 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 11391 register set is not used, floating point operands are passed in 11392 integer registers as if they were integers and floating-point 11393 results are passed in `$0' instead of `$f0'. This is a 11394 non-standard calling sequence, so any function with a 11395 floating-point argument or return value called by code compiled 11396 with `-mno-fp-regs' must also be compiled with that option. 11397 11398 A typical use of this option is building a kernel that does not 11399 use, and hence need not save and restore, any floating-point 11400 registers. 11401 11402 `-mieee' 11403 The Alpha architecture implements floating-point hardware 11404 optimized for maximum performance. It is mostly compliant with 11405 the IEEE floating point standard. However, for full compliance, 11406 software assistance is required. This option generates code fully 11407 IEEE compliant code _except_ that the INEXACT-FLAG is not 11408 maintained (see below). If this option is turned on, the 11409 preprocessor macro `_IEEE_FP' is defined during compilation. The 11410 resulting code is less efficient but is able to correctly support 11411 denormalized numbers and exceptional IEEE values such as 11412 not-a-number and plus/minus infinity. Other Alpha compilers call 11413 this option `-ieee_with_no_inexact'. 11414 11415 `-mieee-with-inexact' 11416 This is like `-mieee' except the generated code also maintains the 11417 IEEE INEXACT-FLAG. Turning on this option causes the generated 11418 code to implement fully-compliant IEEE math. In addition to 11419 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 11420 On some Alpha implementations the resulting code may execute 11421 significantly slower than the code generated by default. Since 11422 there is very little code that depends on the INEXACT-FLAG, you 11423 should normally not specify this option. Other Alpha compilers 11424 call this option `-ieee_with_inexact'. 11425 11426 `-mfp-trap-mode=TRAP-MODE' 11427 This option controls what floating-point related traps are enabled. 11428 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 11429 trap mode can be set to one of four values: 11430 11431 `n' 11432 This is the default (normal) setting. The only traps that 11433 are enabled are the ones that cannot be disabled in software 11434 (e.g., division by zero trap). 11435 11436 `u' 11437 In addition to the traps enabled by `n', underflow traps are 11438 enabled as well. 11439 11440 `su' 11441 Like `u', but the instructions are marked to be safe for 11442 software completion (see Alpha architecture manual for 11443 details). 11444 11445 `sui' 11446 Like `su', but inexact traps are enabled as well. 11447 11448 `-mfp-rounding-mode=ROUNDING-MODE' 11449 Selects the IEEE rounding mode. Other Alpha compilers call this 11450 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 11451 11452 `n' 11453 Normal IEEE rounding mode. Floating point numbers are 11454 rounded towards the nearest machine number or towards the 11455 even machine number in case of a tie. 11456 11457 `m' 11458 Round towards minus infinity. 11459 11460 `c' 11461 Chopped rounding mode. Floating point numbers are rounded 11462 towards zero. 11463 11464 `d' 11465 Dynamic rounding mode. A field in the floating point control 11466 register (FPCR, see Alpha architecture reference manual) 11467 controls the rounding mode in effect. The C library 11468 initializes this register for rounding towards plus infinity. 11469 Thus, unless your program modifies the FPCR, `d' corresponds 11470 to round towards plus infinity. 11471 11472 `-mtrap-precision=TRAP-PRECISION' 11473 In the Alpha architecture, floating point traps are imprecise. 11474 This means without software assistance it is impossible to recover 11475 from a floating trap and program execution normally needs to be 11476 terminated. GCC can generate code that can assist operating 11477 system trap handlers in determining the exact location that caused 11478 a floating point trap. Depending on the requirements of an 11479 application, different levels of precisions can be selected: 11480 11481 `p' 11482 Program precision. This option is the default and means a 11483 trap handler can only identify which program caused a 11484 floating point exception. 11485 11486 `f' 11487 Function precision. The trap handler can determine the 11488 function that caused a floating point exception. 11489 11490 `i' 11491 Instruction precision. The trap handler can determine the 11492 exact instruction that caused a floating point exception. 11493 11494 Other Alpha compilers provide the equivalent options called 11495 `-scope_safe' and `-resumption_safe'. 11496 11497 `-mieee-conformant' 11498 This option marks the generated code as IEEE conformant. You must 11499 not use this option unless you also specify `-mtrap-precision=i' 11500 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 11501 effect is to emit the line `.eflag 48' in the function prologue of 11502 the generated assembly file. Under DEC Unix, this has the effect 11503 that IEEE-conformant math library routines will be linked in. 11504 11505 `-mbuild-constants' 11506 Normally GCC examines a 32- or 64-bit integer constant to see if 11507 it can construct it from smaller constants in two or three 11508 instructions. If it cannot, it will output the constant as a 11509 literal and generate code to load it from the data segment at 11510 runtime. 11511 11512 Use this option to require GCC to construct _all_ integer constants 11513 using code, even if it takes more instructions (the maximum is 11514 six). 11515 11516 You would typically use this option to build a shared library 11517 dynamic loader. Itself a shared library, it must relocate itself 11518 in memory before it can find the variables and constants in its 11519 own data segment. 11520 11521 `-malpha-as' 11522 `-mgas' 11523 Select whether to generate code to be assembled by the 11524 vendor-supplied assembler (`-malpha-as') or by the GNU assembler 11525 `-mgas'. 11526 11527 `-mbwx' 11528 `-mno-bwx' 11529 `-mcix' 11530 `-mno-cix' 11531 `-mfix' 11532 `-mno-fix' 11533 `-mmax' 11534 `-mno-max' 11535 Indicate whether GCC should generate code to use the optional BWX, 11536 CIX, FIX and MAX instruction sets. The default is to use the 11537 instruction sets supported by the CPU type specified via `-mcpu=' 11538 option or that of the CPU on which GCC was built if none was 11539 specified. 11540 11541 `-mfloat-vax' 11542 `-mfloat-ieee' 11543 Generate code that uses (does not use) VAX F and G floating point 11544 arithmetic instead of IEEE single and double precision. 11545 11546 `-mexplicit-relocs' 11547 `-mno-explicit-relocs' 11548 Older Alpha assemblers provided no way to generate symbol 11549 relocations except via assembler macros. Use of these macros does 11550 not allow optimal instruction scheduling. GNU binutils as of 11551 version 2.12 supports a new syntax that allows the compiler to 11552 explicitly mark which relocations should apply to which 11553 instructions. This option is mostly useful for debugging, as GCC 11554 detects the capabilities of the assembler when it is built and 11555 sets the default accordingly. 11556 11557 `-msmall-data' 11558 `-mlarge-data' 11559 When `-mexplicit-relocs' is in effect, static data is accessed via 11560 "gp-relative" relocations. When `-msmall-data' is used, objects 8 11561 bytes long or smaller are placed in a "small data area" (the 11562 `.sdata' and `.sbss' sections) and are accessed via 16-bit 11563 relocations off of the `$gp' register. This limits the size of 11564 the small data area to 64KB, but allows the variables to be 11565 directly accessed via a single instruction. 11566 11567 The default is `-mlarge-data'. With this option the data area is 11568 limited to just below 2GB. Programs that require more than 2GB of 11569 data must use `malloc' or `mmap' to allocate the data in the heap 11570 instead of in the program's data segment. 11571 11572 When generating code for shared libraries, `-fpic' implies 11573 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 11574 11575 `-msmall-text' 11576 `-mlarge-text' 11577 When `-msmall-text' is used, the compiler assumes that the code of 11578 the entire program (or shared library) fits in 4MB, and is thus 11579 reachable with a branch instruction. When `-msmall-data' is used, 11580 the compiler can assume that all local symbols share the same 11581 `$gp' value, and thus reduce the number of instructions required 11582 for a function call from 4 to 1. 11583 11584 The default is `-mlarge-text'. 11585 11586 `-mcpu=CPU_TYPE' 11587 Set the instruction set and instruction scheduling parameters for 11588 machine type CPU_TYPE. You can specify either the `EV' style name 11589 or the corresponding chip number. GCC supports scheduling 11590 parameters for the EV4, EV5 and EV6 family of processors and will 11591 choose the default values for the instruction set from the 11592 processor you specify. If you do not specify a processor type, 11593 GCC will default to the processor on which the compiler was built. 11594 11595 Supported values for CPU_TYPE are 11596 11597 `ev4' 11598 `ev45' 11599 `21064' 11600 Schedules as an EV4 and has no instruction set extensions. 11601 11602 `ev5' 11603 `21164' 11604 Schedules as an EV5 and has no instruction set extensions. 11605 11606 `ev56' 11607 `21164a' 11608 Schedules as an EV5 and supports the BWX extension. 11609 11610 `pca56' 11611 `21164pc' 11612 `21164PC' 11613 Schedules as an EV5 and supports the BWX and MAX extensions. 11614 11615 `ev6' 11616 `21264' 11617 Schedules as an EV6 and supports the BWX, FIX, and MAX 11618 extensions. 11619 11620 `ev67' 11621 `21264a' 11622 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 11623 extensions. 11624 11625 Native Linux/GNU toolchains also support the value `native', which 11626 selects the best architecture option for the host processor. 11627 `-mcpu=native' has no effect if GCC does not recognize the 11628 processor. 11629 11630 `-mtune=CPU_TYPE' 11631 Set only the instruction scheduling parameters for machine type 11632 CPU_TYPE. The instruction set is not changed. 11633 11634 Native Linux/GNU toolchains also support the value `native', which 11635 selects the best architecture option for the host processor. 11636 `-mtune=native' has no effect if GCC does not recognize the 11637 processor. 11638 11639 `-mmemory-latency=TIME' 11640 Sets the latency the scheduler should assume for typical memory 11641 references as seen by the application. This number is highly 11642 dependent on the memory access patterns used by the application 11643 and the size of the external cache on the machine. 11644 11645 Valid options for TIME are 11646 11647 `NUMBER' 11648 A decimal number representing clock cycles. 11649 11650 `L1' 11651 `L2' 11652 `L3' 11653 `main' 11654 The compiler contains estimates of the number of clock cycles 11655 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 11656 (also called Dcache, Scache, and Bcache), as well as to main 11657 memory. Note that L3 is only valid for EV5. 11658 11659 11660 11661 File: gcc.info, Node: DEC Alpha/VMS Options, Next: FR30 Options, Prev: DEC Alpha Options, Up: Submodel Options 11662 11663 3.17.9 DEC Alpha/VMS Options 11664 ---------------------------- 11665 11666 These `-m' options are defined for the DEC Alpha/VMS implementations: 11667 11668 `-mvms-return-codes' 11669 Return VMS condition codes from main. The default is to return 11670 POSIX style condition (e.g. error) codes. 11671 11672 `-mdebug-main=PREFIX' 11673 Flag the first routine whose name starts with PREFIX as the main 11674 routine for the debugger. 11675 11676 `-mmalloc64' 11677 Default to 64bit memory allocation routines. 11678 11679 11680 File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options 11681 11682 3.17.10 FR30 Options 11683 -------------------- 11684 11685 These options are defined specifically for the FR30 port. 11686 11687 `-msmall-model' 11688 Use the small address space model. This can produce smaller code, 11689 but it does assume that all symbolic values and addresses will fit 11690 into a 20-bit range. 11691 11692 `-mno-lsim' 11693 Assume that run-time support has been provided and so there is no 11694 need to include the simulator library (`libsim.a') on the linker 11695 command line. 11696 11697 11698 11699 File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 11700 11701 3.17.11 FRV Options 11702 ------------------- 11703 11704 `-mgpr-32' 11705 Only use the first 32 general purpose registers. 11706 11707 `-mgpr-64' 11708 Use all 64 general purpose registers. 11709 11710 `-mfpr-32' 11711 Use only the first 32 floating point registers. 11712 11713 `-mfpr-64' 11714 Use all 64 floating point registers 11715 11716 `-mhard-float' 11717 Use hardware instructions for floating point operations. 11718 11719 `-msoft-float' 11720 Use library routines for floating point operations. 11721 11722 `-malloc-cc' 11723 Dynamically allocate condition code registers. 11724 11725 `-mfixed-cc' 11726 Do not try to dynamically allocate condition code registers, only 11727 use `icc0' and `fcc0'. 11728 11729 `-mdword' 11730 Change ABI to use double word insns. 11731 11732 `-mno-dword' 11733 Do not use double word instructions. 11734 11735 `-mdouble' 11736 Use floating point double instructions. 11737 11738 `-mno-double' 11739 Do not use floating point double instructions. 11740 11741 `-mmedia' 11742 Use media instructions. 11743 11744 `-mno-media' 11745 Do not use media instructions. 11746 11747 `-mmuladd' 11748 Use multiply and add/subtract instructions. 11749 11750 `-mno-muladd' 11751 Do not use multiply and add/subtract instructions. 11752 11753 `-mfdpic' 11754 Select the FDPIC ABI, that uses function descriptors to represent 11755 pointers to functions. Without any PIC/PIE-related options, it 11756 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 11757 and small data are within a 12-bit range from the GOT base 11758 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 11759 bits. With a `bfin-elf' target, this option implies `-msim'. 11760 11761 `-minline-plt' 11762 Enable inlining of PLT entries in function calls to functions that 11763 are not known to bind locally. It has no effect without `-mfdpic'. 11764 It's enabled by default if optimizing for speed and compiling for 11765 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 11766 optimization option such as `-O3' or above is present in the 11767 command line. 11768 11769 `-mTLS' 11770 Assume a large TLS segment when generating thread-local code. 11771 11772 `-mtls' 11773 Do not assume a large TLS segment when generating thread-local 11774 code. 11775 11776 `-mgprel-ro' 11777 Enable the use of `GPREL' relocations in the FDPIC ABI for data 11778 that is known to be in read-only sections. It's enabled by 11779 default, except for `-fpic' or `-fpie': even though it may help 11780 make the global offset table smaller, it trades 1 instruction for 11781 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 11782 of which may be shared by multiple symbols, and it avoids the need 11783 for a GOT entry for the referenced symbol, so it's more likely to 11784 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 11785 11786 `-multilib-library-pic' 11787 Link with the (library, not FD) pic libraries. It's implied by 11788 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 11789 `-mfdpic'. You should never have to use it explicitly. 11790 11791 `-mlinked-fp' 11792 Follow the EABI requirement of always creating a frame pointer 11793 whenever a stack frame is allocated. This option is enabled by 11794 default and can be disabled with `-mno-linked-fp'. 11795 11796 `-mlong-calls' 11797 Use indirect addressing to call functions outside the current 11798 compilation unit. This allows the functions to be placed anywhere 11799 within the 32-bit address space. 11800 11801 `-malign-labels' 11802 Try to align labels to an 8-byte boundary by inserting nops into 11803 the previous packet. This option only has an effect when VLIW 11804 packing is enabled. It doesn't create new packets; it merely adds 11805 nops to existing ones. 11806 11807 `-mlibrary-pic' 11808 Generate position-independent EABI code. 11809 11810 `-macc-4' 11811 Use only the first four media accumulator registers. 11812 11813 `-macc-8' 11814 Use all eight media accumulator registers. 11815 11816 `-mpack' 11817 Pack VLIW instructions. 11818 11819 `-mno-pack' 11820 Do not pack VLIW instructions. 11821 11822 `-mno-eflags' 11823 Do not mark ABI switches in e_flags. 11824 11825 `-mcond-move' 11826 Enable the use of conditional-move instructions (default). 11827 11828 This switch is mainly for debugging the compiler and will likely 11829 be removed in a future version. 11830 11831 `-mno-cond-move' 11832 Disable the use of conditional-move instructions. 11833 11834 This switch is mainly for debugging the compiler and will likely 11835 be removed in a future version. 11836 11837 `-mscc' 11838 Enable the use of conditional set instructions (default). 11839 11840 This switch is mainly for debugging the compiler and will likely 11841 be removed in a future version. 11842 11843 `-mno-scc' 11844 Disable the use of conditional set instructions. 11845 11846 This switch is mainly for debugging the compiler and will likely 11847 be removed in a future version. 11848 11849 `-mcond-exec' 11850 Enable the use of conditional execution (default). 11851 11852 This switch is mainly for debugging the compiler and will likely 11853 be removed in a future version. 11854 11855 `-mno-cond-exec' 11856 Disable the use of conditional execution. 11857 11858 This switch is mainly for debugging the compiler and will likely 11859 be removed in a future version. 11860 11861 `-mvliw-branch' 11862 Run a pass to pack branches into VLIW instructions (default). 11863 11864 This switch is mainly for debugging the compiler and will likely 11865 be removed in a future version. 11866 11867 `-mno-vliw-branch' 11868 Do not run a pass to pack branches into VLIW instructions. 11869 11870 This switch is mainly for debugging the compiler and will likely 11871 be removed in a future version. 11872 11873 `-mmulti-cond-exec' 11874 Enable optimization of `&&' and `||' in conditional execution 11875 (default). 11876 11877 This switch is mainly for debugging the compiler and will likely 11878 be removed in a future version. 11879 11880 `-mno-multi-cond-exec' 11881 Disable optimization of `&&' and `||' in conditional execution. 11882 11883 This switch is mainly for debugging the compiler and will likely 11884 be removed in a future version. 11885 11886 `-mnested-cond-exec' 11887 Enable nested conditional execution optimizations (default). 11888 11889 This switch is mainly for debugging the compiler and will likely 11890 be removed in a future version. 11891 11892 `-mno-nested-cond-exec' 11893 Disable nested conditional execution optimizations. 11894 11895 This switch is mainly for debugging the compiler and will likely 11896 be removed in a future version. 11897 11898 `-moptimize-membar' 11899 This switch removes redundant `membar' instructions from the 11900 compiler generated code. It is enabled by default. 11901 11902 `-mno-optimize-membar' 11903 This switch disables the automatic removal of redundant `membar' 11904 instructions from the generated code. 11905 11906 `-mtomcat-stats' 11907 Cause gas to print out tomcat statistics. 11908 11909 `-mcpu=CPU' 11910 Select the processor type for which to generate code. Possible 11911 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 11912 `fr400', `fr300' and `simple'. 11913 11914 11915 11916 File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 11917 11918 3.17.12 GNU/Linux Options 11919 ------------------------- 11920 11921 These `-m' options are defined for GNU/Linux targets: 11922 11923 `-mglibc' 11924 Use the GNU C library. This is the default except on 11925 `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets. 11926 11927 `-muclibc' 11928 Use uClibc C library. This is the default on `*-*-linux-*uclibc*' 11929 targets. 11930 11931 `-mbionic' 11932 Use Bionic C library. This is the default on 11933 `*-*-linux-*android*' targets. 11934 11935 `-mandroid' 11936 Compile code compatible with Android platform. This is the 11937 default on `*-*-linux-*android*' targets. 11938 11939 When compiling, this option enables `-mbionic', `-fPIC', 11940 `-fno-exceptions' and `-fno-rtti' by default. When linking, this 11941 option makes the GCC driver pass Android-specific options to the 11942 linker. Finally, this option causes the preprocessor macro 11943 `__ANDROID__' to be defined. 11944 11945 `-tno-android-cc' 11946 Disable compilation effects of `-mandroid', i.e., do not enable 11947 `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default. 11948 11949 `-tno-android-ld' 11950 Disable linking effects of `-mandroid', i.e., pass standard Linux 11951 linking options to the linker. 11952 11953 11954 11955 File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 11956 11957 3.17.13 H8/300 Options 11958 ---------------------- 11959 11960 These `-m' options are defined for the H8/300 implementations: 11961 11962 `-mrelax' 11963 Shorten some address references at link time, when possible; uses 11964 the linker option `-relax'. *Note `ld' and the H8/300: 11965 (ld)H8/300, for a fuller description. 11966 11967 `-mh' 11968 Generate code for the H8/300H. 11969 11970 `-ms' 11971 Generate code for the H8S. 11972 11973 `-mn' 11974 Generate code for the H8S and H8/300H in the normal mode. This 11975 switch must be used either with `-mh' or `-ms'. 11976 11977 `-ms2600' 11978 Generate code for the H8S/2600. This switch must be used with 11979 `-ms'. 11980 11981 `-mint32' 11982 Make `int' data 32 bits by default. 11983 11984 `-malign-300' 11985 On the H8/300H and H8S, use the same alignment rules as for the 11986 H8/300. The default for the H8/300H and H8S is to align longs and 11987 floats on 4 byte boundaries. `-malign-300' causes them to be 11988 aligned on 2 byte boundaries. This option has no effect on the 11989 H8/300. 11990 11991 11992 File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 11993 11994 3.17.14 HPPA Options 11995 -------------------- 11996 11997 These `-m' options are defined for the HPPA family of computers: 11998 11999 `-march=ARCHITECTURE-TYPE' 12000 Generate code for the specified architecture. The choices for 12001 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 12002 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 12003 an HP-UX system to determine the proper architecture option for 12004 your machine. Code compiled for lower numbered architectures will 12005 run on higher numbered architectures, but not the other way around. 12006 12007 `-mpa-risc-1-0' 12008 `-mpa-risc-1-1' 12009 `-mpa-risc-2-0' 12010 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 12011 respectively. 12012 12013 `-mbig-switch' 12014 Generate code suitable for big switch tables. Use this option 12015 only if the assembler/linker complain about out of range branches 12016 within a switch table. 12017 12018 `-mjump-in-delay' 12019 Fill delay slots of function calls with unconditional jump 12020 instructions by modifying the return pointer for the function call 12021 to be the target of the conditional jump. 12022 12023 `-mdisable-fpregs' 12024 Prevent floating point registers from being used in any manner. 12025 This is necessary for compiling kernels which perform lazy context 12026 switching of floating point registers. If you use this option and 12027 attempt to perform floating point operations, the compiler will 12028 abort. 12029 12030 `-mdisable-indexing' 12031 Prevent the compiler from using indexing address modes. This 12032 avoids some rather obscure problems when compiling MIG generated 12033 code under MACH. 12034 12035 `-mno-space-regs' 12036 Generate code that assumes the target has no space registers. 12037 This allows GCC to generate faster indirect calls and use unscaled 12038 index address modes. 12039 12040 Such code is suitable for level 0 PA systems and kernels. 12041 12042 `-mfast-indirect-calls' 12043 Generate code that assumes calls never cross space boundaries. 12044 This allows GCC to emit code which performs faster indirect calls. 12045 12046 This option will not work in the presence of shared libraries or 12047 nested functions. 12048 12049 `-mfixed-range=REGISTER-RANGE' 12050 Generate code treating the given register range as fixed registers. 12051 A fixed register is one that the register allocator can not use. 12052 This is useful when compiling kernel code. A register range is 12053 specified as two registers separated by a dash. Multiple register 12054 ranges can be specified separated by a comma. 12055 12056 `-mlong-load-store' 12057 Generate 3-instruction load and store sequences as sometimes 12058 required by the HP-UX 10 linker. This is equivalent to the `+k' 12059 option to the HP compilers. 12060 12061 `-mportable-runtime' 12062 Use the portable calling conventions proposed by HP for ELF 12063 systems. 12064 12065 `-mgas' 12066 Enable the use of assembler directives only GAS understands. 12067 12068 `-mschedule=CPU-TYPE' 12069 Schedule code according to the constraints for the machine type 12070 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 12071 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 12072 HP-UX system to determine the proper scheduling option for your 12073 machine. The default scheduling is `8000'. 12074 12075 `-mlinker-opt' 12076 Enable the optimization pass in the HP-UX linker. Note this makes 12077 symbolic debugging impossible. It also triggers a bug in the 12078 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 12079 messages when linking some programs. 12080 12081 `-msoft-float' 12082 Generate output containing library calls for floating point. 12083 *Warning:* the requisite libraries are not available for all HPPA 12084 targets. Normally the facilities of the machine's usual C 12085 compiler are used, but this cannot be done directly in 12086 cross-compilation. You must make your own arrangements to provide 12087 suitable library functions for cross-compilation. 12088 12089 `-msoft-float' changes the calling convention in the output file; 12090 therefore, it is only useful if you compile _all_ of a program with 12091 this option. In particular, you need to compile `libgcc.a', the 12092 library that comes with GCC, with `-msoft-float' in order for this 12093 to work. 12094 12095 `-msio' 12096 Generate the predefine, `_SIO', for server IO. The default is 12097 `-mwsio'. This generates the predefines, `__hp9000s700', 12098 `__hp9000s700__' and `_WSIO', for workstation IO. These options 12099 are available under HP-UX and HI-UX. 12100 12101 `-mgnu-ld' 12102 Use GNU ld specific options. This passes `-shared' to ld when 12103 building a shared library. It is the default when GCC is 12104 configured, explicitly or implicitly, with the GNU linker. This 12105 option does not have any affect on which ld is called, it only 12106 changes what parameters are passed to that ld. The ld that is 12107 called is determined by the `--with-ld' configure option, GCC's 12108 program search path, and finally by the user's `PATH'. The linker 12109 used by GCC can be printed using `which `gcc 12110 -print-prog-name=ld`'. This option is only available on the 64 12111 bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'. 12112 12113 `-mhp-ld' 12114 Use HP ld specific options. This passes `-b' to ld when building 12115 a shared library and passes `+Accept TypeMismatch' to ld on all 12116 links. It is the default when GCC is configured, explicitly or 12117 implicitly, with the HP linker. This option does not have any 12118 affect on which ld is called, it only changes what parameters are 12119 passed to that ld. The ld that is called is determined by the 12120 `--with-ld' configure option, GCC's program search path, and 12121 finally by the user's `PATH'. The linker used by GCC can be 12122 printed using `which `gcc -print-prog-name=ld`'. This option is 12123 only available on the 64 bit HP-UX GCC, i.e. configured with 12124 `hppa*64*-*-hpux*'. 12125 12126 `-mlong-calls' 12127 Generate code that uses long call sequences. This ensures that a 12128 call is always able to reach linker generated stubs. The default 12129 is to generate long calls only when the distance from the call 12130 site to the beginning of the function or translation unit, as the 12131 case may be, exceeds a predefined limit set by the branch type 12132 being used. The limits for normal calls are 7,600,000 and 240,000 12133 bytes, respectively for the PA 2.0 and PA 1.X architectures. 12134 Sibcalls are always limited at 240,000 bytes. 12135 12136 Distances are measured from the beginning of functions when using 12137 the `-ffunction-sections' option, or when using the `-mgas' and 12138 `-mno-portable-runtime' options together under HP-UX with the SOM 12139 linker. 12140 12141 It is normally not desirable to use this option as it will degrade 12142 performance. However, it may be useful in large applications, 12143 particularly when partial linking is used to build the application. 12144 12145 The types of long calls used depends on the capabilities of the 12146 assembler and linker, and the type of code being generated. The 12147 impact on systems that support long absolute calls, and long pic 12148 symbol-difference or pc-relative calls should be relatively small. 12149 However, an indirect call is used on 32-bit ELF systems in pic code 12150 and it is quite long. 12151 12152 `-munix=UNIX-STD' 12153 Generate compiler predefines and select a startfile for the 12154 specified UNIX standard. The choices for UNIX-STD are `93', `95' 12155 and `98'. `93' is supported on all HP-UX versions. `95' is 12156 available on HP-UX 10.10 and later. `98' is available on HP-UX 12157 11.11 and later. The default values are `93' for HP-UX 10.00, 12158 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 12159 later. 12160 12161 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 12162 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 12163 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 12164 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 12165 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 12166 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 12167 12168 It is _important_ to note that this option changes the interfaces 12169 for various library routines. It also affects the operational 12170 behavior of the C library. Thus, _extreme_ care is needed in 12171 using this option. 12172 12173 Library code that is intended to operate with more than one UNIX 12174 standard must test, set and restore the variable 12175 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 12176 provide this capability. 12177 12178 `-nolibdld' 12179 Suppress the generation of link options to search libdld.sl when 12180 the `-static' option is specified on HP-UX 10 and later. 12181 12182 `-static' 12183 The HP-UX implementation of setlocale in libc has a dependency on 12184 libdld.sl. There isn't an archive version of libdld.sl. Thus, 12185 when the `-static' option is specified, special link options are 12186 needed to resolve this dependency. 12187 12188 On HP-UX 10 and later, the GCC driver adds the necessary options to 12189 link with libdld.sl when the `-static' option is specified. This 12190 causes the resulting binary to be dynamic. On the 64-bit port, 12191 the linkers generate dynamic binaries by default in any case. The 12192 `-nolibdld' option can be used to prevent the GCC driver from 12193 adding these link options. 12194 12195 `-threads' 12196 Add support for multithreading with the "dce thread" library under 12197 HP-UX. This option sets flags for both the preprocessor and 12198 linker. 12199 12200 12201 File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options 12202 12203 3.17.15 Intel 386 and AMD x86-64 Options 12204 ---------------------------------------- 12205 12206 These `-m' options are defined for the i386 and x86-64 family of 12207 computers: 12208 12209 `-mtune=CPU-TYPE' 12210 Tune to CPU-TYPE everything applicable about the generated code, 12211 except for the ABI and the set of available instructions. The 12212 choices for CPU-TYPE are: 12213 _generic_ 12214 Produce code optimized for the most common IA32/AMD64/EM64T 12215 processors. If you know the CPU on which your code will run, 12216 then you should use the corresponding `-mtune' option instead 12217 of `-mtune=generic'. But, if you do not know exactly what 12218 CPU users of your application will have, then you should use 12219 this option. 12220 12221 As new processors are deployed in the marketplace, the 12222 behavior of this option will change. Therefore, if you 12223 upgrade to a newer version of GCC, the code generated option 12224 will change to reflect the processors that were most common 12225 when that version of GCC was released. 12226 12227 There is no `-march=generic' option because `-march' 12228 indicates the instruction set the compiler can use, and there 12229 is no generic instruction set applicable to all processors. 12230 In contrast, `-mtune' indicates the processor (or, in this 12231 case, collection of processors) for which the code is 12232 optimized. 12233 12234 _native_ 12235 This selects the CPU to tune for at compilation time by 12236 determining the processor type of the compiling machine. 12237 Using `-mtune=native' will produce code optimized for the 12238 local machine under the constraints of the selected 12239 instruction set. Using `-march=native' will enable all 12240 instruction subsets supported by the local machine (hence the 12241 result might not run on different machines). 12242 12243 _i386_ 12244 Original Intel's i386 CPU. 12245 12246 _i486_ 12247 Intel's i486 CPU. (No scheduling is implemented for this 12248 chip.) 12249 12250 _i586, pentium_ 12251 Intel Pentium CPU with no MMX support. 12252 12253 _pentium-mmx_ 12254 Intel PentiumMMX CPU based on Pentium core with MMX 12255 instruction set support. 12256 12257 _pentiumpro_ 12258 Intel PentiumPro CPU. 12259 12260 _i686_ 12261 Same as `generic', but when used as `march' option, PentiumPro 12262 instruction set will be used, so the code will run on all 12263 i686 family chips. 12264 12265 _pentium2_ 12266 Intel Pentium2 CPU based on PentiumPro core with MMX 12267 instruction set support. 12268 12269 _pentium3, pentium3m_ 12270 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE 12271 instruction set support. 12272 12273 _pentium-m_ 12274 Low power version of Intel Pentium3 CPU with MMX, SSE and 12275 SSE2 instruction set support. Used by Centrino notebooks. 12276 12277 _pentium4, pentium4m_ 12278 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set 12279 support. 12280 12281 _prescott_ 12282 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 12283 and SSE3 instruction set support. 12284 12285 _nocona_ 12286 Improved version of Intel Pentium4 CPU with 64-bit 12287 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 12288 12289 _core2_ 12290 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 12291 and SSSE3 instruction set support. 12292 12293 _corei7_ 12294 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, 12295 SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support. 12296 12297 _corei7-avx_ 12298 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, 12299 SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction 12300 set support. 12301 12302 _core-avx-i_ 12303 Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, 12304 SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and 12305 F16C instruction set support. 12306 12307 _atom_ 12308 Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 12309 and SSSE3 instruction set support. 12310 12311 _k6_ 12312 AMD K6 CPU with MMX instruction set support. 12313 12314 _k6-2, k6-3_ 12315 Improved versions of AMD K6 CPU with MMX and 3DNow! 12316 instruction set support. 12317 12318 _athlon, athlon-tbird_ 12319 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE 12320 prefetch instructions support. 12321 12322 _athlon-4, athlon-xp, athlon-mp_ 12323 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and 12324 full SSE instruction set support. 12325 12326 _k8, opteron, athlon64, athlon-fx_ 12327 AMD K8 core based CPUs with x86-64 instruction set support. 12328 (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and 12329 64-bit instruction set extensions.) 12330 12331 _k8-sse3, opteron-sse3, athlon64-sse3_ 12332 Improved versions of k8, opteron and athlon64 with SSE3 12333 instruction set support. 12334 12335 _amdfam10, barcelona_ 12336 AMD Family 10h core based CPUs with x86-64 instruction set 12337 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 12338 3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set 12339 extensions.) 12340 12341 _winchip-c6_ 12342 IDT Winchip C6 CPU, dealt in same way as i486 with additional 12343 MMX instruction set support. 12344 12345 _winchip2_ 12346 IDT Winchip2 CPU, dealt in same way as i486 with additional 12347 MMX and 3DNow! instruction set support. 12348 12349 _c3_ 12350 Via C3 CPU with MMX and 3DNow! instruction set support. (No 12351 scheduling is implemented for this chip.) 12352 12353 _c3-2_ 12354 Via C3-2 CPU with MMX and SSE instruction set support. (No 12355 scheduling is implemented for this chip.) 12356 12357 _geode_ 12358 Embedded AMD CPU with MMX and 3DNow! instruction set support. 12359 12360 While picking a specific CPU-TYPE will schedule things 12361 appropriately for that particular chip, the compiler will not 12362 generate any code that does not run on the i386 without the 12363 `-march=CPU-TYPE' option being used. 12364 12365 `-march=CPU-TYPE' 12366 Generate instructions for the machine type CPU-TYPE. The choices 12367 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying 12368 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 12369 12370 `-mcpu=CPU-TYPE' 12371 A deprecated synonym for `-mtune'. 12372 12373 `-mfpmath=UNIT' 12374 Generate floating point arithmetics for selected unit UNIT. The 12375 choices for UNIT are: 12376 12377 `387' 12378 Use the standard 387 floating point coprocessor present 12379 majority of chips and emulated otherwise. Code compiled with 12380 this option will run almost everywhere. The temporary 12381 results are computed in 80bit precision instead of precision 12382 specified by the type resulting in slightly different results 12383 compared to most of other chips. See `-ffloat-store' for 12384 more detailed description. 12385 12386 This is the default choice for i386 compiler. 12387 12388 `sse' 12389 Use scalar floating point instructions present in the SSE 12390 instruction set. This instruction set is supported by 12391 Pentium3 and newer chips, in the AMD line by Athlon-4, 12392 Athlon-xp and Athlon-mp chips. The earlier version of SSE 12393 instruction set supports only single precision arithmetics, 12394 thus the double and extended precision arithmetics is still 12395 done using 387. Later version, present only in Pentium4 and 12396 the future AMD x86-64 chips supports double precision 12397 arithmetics too. 12398 12399 For the i386 compiler, you need to use `-march=CPU-TYPE', 12400 `-msse' or `-msse2' switches to enable SSE extensions and 12401 make this option effective. For the x86-64 compiler, these 12402 extensions are enabled by default. 12403 12404 The resulting code should be considerably faster in the 12405 majority of cases and avoid the numerical instability 12406 problems of 387 code, but may break some existing code that 12407 expects temporaries to be 80bit. 12408 12409 This is the default choice for the x86-64 compiler. 12410 12411 `sse,387' 12412 `sse+387' 12413 `both' 12414 Attempt to utilize both instruction sets at once. This 12415 effectively double the amount of available registers and on 12416 chips with separate execution units for 387 and SSE the 12417 execution resources too. Use this option with care, as it is 12418 still experimental, because the GCC register allocator does 12419 not model separate functional units well resulting in 12420 instable performance. 12421 12422 `-masm=DIALECT' 12423 Output asm instructions using selected DIALECT. Supported choices 12424 are `intel' or `att' (the default one). Darwin does not support 12425 `intel'. 12426 12427 `-mieee-fp' 12428 `-mno-ieee-fp' 12429 Control whether or not the compiler uses IEEE floating point 12430 comparisons. These handle correctly the case where the result of a 12431 comparison is unordered. 12432 12433 `-msoft-float' 12434 Generate output containing library calls for floating point. 12435 *Warning:* the requisite libraries are not part of GCC. Normally 12436 the facilities of the machine's usual C compiler are used, but 12437 this can't be done directly in cross-compilation. You must make 12438 your own arrangements to provide suitable library functions for 12439 cross-compilation. 12440 12441 On machines where a function returns floating point results in the 12442 80387 register stack, some floating point opcodes may be emitted 12443 even if `-msoft-float' is used. 12444 12445 `-mno-fp-ret-in-387' 12446 Do not use the FPU registers for return values of functions. 12447 12448 The usual calling convention has functions return values of types 12449 `float' and `double' in an FPU register, even if there is no FPU. 12450 The idea is that the operating system should emulate an FPU. 12451 12452 The option `-mno-fp-ret-in-387' causes such values to be returned 12453 in ordinary CPU registers instead. 12454 12455 `-mno-fancy-math-387' 12456 Some 387 emulators do not support the `sin', `cos' and `sqrt' 12457 instructions for the 387. Specify this option to avoid generating 12458 those instructions. This option is the default on FreeBSD, 12459 OpenBSD and NetBSD. This option is overridden when `-march' 12460 indicates that the target CPU will always have an FPU and so the 12461 instruction will not need emulation. As of revision 2.6.1, these 12462 instructions are not generated unless you also use the 12463 `-funsafe-math-optimizations' switch. 12464 12465 `-malign-double' 12466 `-mno-align-double' 12467 Control whether GCC aligns `double', `long double', and `long 12468 long' variables on a two word boundary or a one word boundary. 12469 Aligning `double' variables on a two word boundary will produce 12470 code that runs somewhat faster on a `Pentium' at the expense of 12471 more memory. 12472 12473 On x86-64, `-malign-double' is enabled by default. 12474 12475 *Warning:* if you use the `-malign-double' switch, structures 12476 containing the above types will be aligned differently than the 12477 published application binary interface specifications for the 386 12478 and will not be binary compatible with structures in code compiled 12479 without that switch. 12480 12481 `-m96bit-long-double' 12482 `-m128bit-long-double' 12483 These switches control the size of `long double' type. The i386 12484 application binary interface specifies the size to be 96 bits, so 12485 `-m96bit-long-double' is the default in 32 bit mode. 12486 12487 Modern architectures (Pentium and newer) would prefer `long double' 12488 to be aligned to an 8 or 16 byte boundary. In arrays or structures 12489 conforming to the ABI, this would not be possible. So specifying a 12490 `-m128bit-long-double' will align `long double' to a 16 byte 12491 boundary by padding the `long double' with an additional 32 bit 12492 zero. 12493 12494 In the x86-64 compiler, `-m128bit-long-double' is the default 12495 choice as its ABI specifies that `long double' is to be aligned on 12496 16 byte boundary. 12497 12498 Notice that neither of these options enable any extra precision 12499 over the x87 standard of 80 bits for a `long double'. 12500 12501 *Warning:* if you override the default value for your target ABI, 12502 the structures and arrays containing `long double' variables will 12503 change their size as well as function calling convention for 12504 function taking `long double' will be modified. Hence they will 12505 not be binary compatible with arrays or structures in code 12506 compiled without that switch. 12507 12508 `-mlarge-data-threshold=NUMBER' 12509 When `-mcmodel=medium' is specified, the data greater than 12510 THRESHOLD are placed in large data section. This value must be the 12511 same across all object linked into the binary and defaults to 12512 65535. 12513 12514 `-mrtd' 12515 Use a different function-calling convention, in which functions 12516 that take a fixed number of arguments return with the `ret' NUM 12517 instruction, which pops their arguments while returning. This 12518 saves one instruction in the caller since there is no need to pop 12519 the arguments there. 12520 12521 You can specify that an individual function is called with this 12522 calling sequence with the function attribute `stdcall'. You can 12523 also override the `-mrtd' option by using the function attribute 12524 `cdecl'. *Note Function Attributes::. 12525 12526 *Warning:* this calling convention is incompatible with the one 12527 normally used on Unix, so you cannot use it if you need to call 12528 libraries compiled with the Unix compiler. 12529 12530 Also, you must provide function prototypes for all functions that 12531 take variable numbers of arguments (including `printf'); otherwise 12532 incorrect code will be generated for calls to those functions. 12533 12534 In addition, seriously incorrect code will result if you call a 12535 function with too many arguments. (Normally, extra arguments are 12536 harmlessly ignored.) 12537 12538 `-mregparm=NUM' 12539 Control how many registers are used to pass integer arguments. By 12540 default, no registers are used to pass arguments, and at most 3 12541 registers can be used. You can control this behavior for a 12542 specific function by using the function attribute `regparm'. 12543 *Note Function Attributes::. 12544 12545 *Warning:* if you use this switch, and NUM is nonzero, then you 12546 must build all modules with the same value, including any 12547 libraries. This includes the system libraries and startup modules. 12548 12549 `-msseregparm' 12550 Use SSE register passing conventions for float and double arguments 12551 and return values. You can control this behavior for a specific 12552 function by using the function attribute `sseregparm'. *Note 12553 Function Attributes::. 12554 12555 *Warning:* if you use this switch then you must build all modules 12556 with the same value, including any libraries. This includes the 12557 system libraries and startup modules. 12558 12559 `-mvect8-ret-in-mem' 12560 Return 8-byte vectors in memory instead of MMX registers. This is 12561 the default on Solaris 8 and 9 and VxWorks to match the ABI of the 12562 Sun Studio compilers until version 12. Later compiler versions 12563 (starting with Studio 12 Update 1) follow the ABI used by other 12564 x86 targets, which is the default on Solaris 10 and later. _Only_ 12565 use this option if you need to remain compatible with existing 12566 code produced by those previous compiler versions or older 12567 versions of GCC. 12568 12569 `-mpc32' 12570 `-mpc64' 12571 `-mpc80' 12572 Set 80387 floating-point precision to 32, 64 or 80 bits. When 12573 `-mpc32' is specified, the significands of results of 12574 floating-point operations are rounded to 24 bits (single 12575 precision); `-mpc64' rounds the significands of results of 12576 floating-point operations to 53 bits (double precision) and 12577 `-mpc80' rounds the significands of results of floating-point 12578 operations to 64 bits (extended double precision), which is the 12579 default. When this option is used, floating-point operations in 12580 higher precisions are not available to the programmer without 12581 setting the FPU control word explicitly. 12582 12583 Setting the rounding of floating-point operations to less than the 12584 default 80 bits can speed some programs by 2% or more. Note that 12585 some mathematical libraries assume that extended precision (80 12586 bit) floating-point operations are enabled by default; routines in 12587 such libraries could suffer significant loss of accuracy, 12588 typically through so-called "catastrophic cancellation", when this 12589 option is used to set the precision to less than extended 12590 precision. 12591 12592 `-mstackrealign' 12593 Realign the stack at entry. On the Intel x86, the `-mstackrealign' 12594 option will generate an alternate prologue and epilogue that 12595 realigns the runtime stack if necessary. This supports mixing 12596 legacy codes that keep a 4-byte aligned stack with modern codes 12597 that keep a 16-byte stack for SSE compatibility. See also the 12598 attribute `force_align_arg_pointer', applicable to individual 12599 functions. 12600 12601 `-mpreferred-stack-boundary=NUM' 12602 Attempt to keep the stack boundary aligned to a 2 raised to NUM 12603 byte boundary. If `-mpreferred-stack-boundary' is not specified, 12604 the default is 4 (16 bytes or 128 bits). 12605 12606 `-mincoming-stack-boundary=NUM' 12607 Assume the incoming stack is aligned to a 2 raised to NUM byte 12608 boundary. If `-mincoming-stack-boundary' is not specified, the 12609 one specified by `-mpreferred-stack-boundary' will be used. 12610 12611 On Pentium and PentiumPro, `double' and `long double' values 12612 should be aligned to an 8 byte boundary (see `-malign-double') or 12613 suffer significant run time performance penalties. On Pentium 12614 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 12615 work properly if it is not 16 byte aligned. 12616 12617 To ensure proper alignment of this values on the stack, the stack 12618 boundary must be as aligned as that required by any value stored 12619 on the stack. Further, every function must be generated such that 12620 it keeps the stack aligned. Thus calling a function compiled with 12621 a higher preferred stack boundary from a function compiled with a 12622 lower preferred stack boundary will most likely misalign the 12623 stack. It is recommended that libraries that use callbacks always 12624 use the default setting. 12625 12626 This extra alignment does consume extra stack space, and generally 12627 increases code size. Code that is sensitive to stack space usage, 12628 such as embedded systems and operating system kernels, may want to 12629 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 12630 12631 `-mmmx' 12632 `-mno-mmx' 12633 `-msse' 12634 `-mno-sse' 12635 `-msse2' 12636 `-mno-sse2' 12637 `-msse3' 12638 `-mno-sse3' 12639 `-mssse3' 12640 `-mno-ssse3' 12641 `-msse4.1' 12642 `-mno-sse4.1' 12643 `-msse4.2' 12644 `-mno-sse4.2' 12645 `-msse4' 12646 `-mno-sse4' 12647 `-mavx' 12648 `-mno-avx' 12649 `-maes' 12650 `-mno-aes' 12651 `-mpclmul' 12652 `-mno-pclmul' 12653 `-mfsgsbase' 12654 `-mno-fsgsbase' 12655 `-mrdrnd' 12656 `-mno-rdrnd' 12657 `-mf16c' 12658 `-mno-f16c' 12659 `-msse4a' 12660 `-mno-sse4a' 12661 `-mfma4' 12662 `-mno-fma4' 12663 `-mxop' 12664 `-mno-xop' 12665 `-mlwp' 12666 `-mno-lwp' 12667 `-m3dnow' 12668 `-mno-3dnow' 12669 `-mpopcnt' 12670 `-mno-popcnt' 12671 `-mabm' 12672 `-mno-abm' 12673 `-mbmi' 12674 `-mno-bmi' 12675 `-mtbm' 12676 `-mno-tbm' 12677 These switches enable or disable the use of instructions in the 12678 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, FSGSBASE, 12679 RDRND, F16C, SSE4A, FMA4, XOP, LWP, ABM, BMI, or 3DNow! extended 12680 instruction sets. These extensions are also available as built-in 12681 functions: see *note X86 Built-in Functions::, for details of the 12682 functions enabled and disabled by these switches. 12683 12684 To have SSE/SSE2 instructions generated automatically from 12685 floating-point code (as opposed to 387 instructions), see 12686 `-mfpmath=sse'. 12687 12688 GCC depresses SSEx instructions when `-mavx' is used. Instead, it 12689 generates new AVX instructions or AVX equivalence for all SSEx 12690 instructions when needed. 12691 12692 These options will enable GCC to use these extended instructions in 12693 generated code, even without `-mfpmath=sse'. Applications which 12694 perform runtime CPU detection must compile separate files for each 12695 supported architecture, using the appropriate flags. In 12696 particular, the file containing the CPU detection code should be 12697 compiled without these options. 12698 12699 `-mfused-madd' 12700 `-mno-fused-madd' 12701 Do (don't) generate code that uses the fused multiply/add or 12702 multiply/subtract instructions. The default is to use these 12703 instructions. 12704 12705 `-mcld' 12706 This option instructs GCC to emit a `cld' instruction in the 12707 prologue of functions that use string instructions. String 12708 instructions depend on the DF flag to select between autoincrement 12709 or autodecrement mode. While the ABI specifies the DF flag to be 12710 cleared on function entry, some operating systems violate this 12711 specification by not clearing the DF flag in their exception 12712 dispatchers. The exception handler can be invoked with the DF flag 12713 set which leads to wrong direction mode, when string instructions 12714 are used. This option can be enabled by default on 32-bit x86 12715 targets by configuring GCC with the `--enable-cld' configure 12716 option. Generation of `cld' instructions can be suppressed with 12717 the `-mno-cld' compiler option in this case. 12718 12719 `-mvzeroupper' 12720 This option instructs GCC to emit a `vzeroupper' instruction 12721 before a transfer of control flow out of the function to minimize 12722 AVX to SSE transition penalty as well as remove unnecessary 12723 zeroupper intrinsics. 12724 12725 `-mcx16' 12726 This option will enable GCC to use CMPXCHG16B instruction in 12727 generated code. CMPXCHG16B allows for atomic operations on 12728 128-bit double quadword (or oword) data types. This is useful for 12729 high resolution counters that could be updated by multiple 12730 processors (or cores). This instruction is generated as part of 12731 atomic built-in functions: see *note Atomic Builtins:: for details. 12732 12733 `-msahf' 12734 This option will enable GCC to use SAHF instruction in generated 12735 64-bit code. Early Intel CPUs with Intel 64 lacked LAHF and SAHF 12736 instructions supported by AMD64 until introduction of Pentium 4 G1 12737 step in December 2005. LAHF and SAHF are load and store 12738 instructions, respectively, for certain status flags. In 64-bit 12739 mode, SAHF instruction is used to optimize `fmod', `drem' or 12740 `remainder' built-in functions: see *note Other Builtins:: for 12741 details. 12742 12743 `-mmovbe' 12744 This option will enable GCC to use movbe instruction to implement 12745 `__builtin_bswap32' and `__builtin_bswap64'. 12746 12747 `-mcrc32' 12748 This option will enable built-in functions, 12749 `__builtin_ia32_crc32qi', `__builtin_ia32_crc32hi'. 12750 `__builtin_ia32_crc32si' and `__builtin_ia32_crc32di' to generate 12751 the crc32 machine instruction. 12752 12753 `-mrecip' 12754 This option will enable GCC to use RCPSS and RSQRTSS instructions 12755 (and their vectorized variants RCPPS and RSQRTPS) with an 12756 additional Newton-Raphson step to increase precision instead of 12757 DIVSS and SQRTSS (and their vectorized variants) for single 12758 precision floating point arguments. These instructions are 12759 generated only when `-funsafe-math-optimizations' is enabled 12760 together with `-finite-math-only' and `-fno-trapping-math'. Note 12761 that while the throughput of the sequence is higher than the 12762 throughput of the non-reciprocal instruction, the precision of the 12763 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 12764 equals 0.99999994). 12765 12766 Note that GCC implements 1.0f/sqrtf(x) in terms of RSQRTSS (or 12767 RSQRTPS) already with `-ffast-math' (or the above option 12768 combination), and doesn't need `-mrecip'. 12769 12770 `-mveclibabi=TYPE' 12771 Specifies the ABI type to use for vectorizing intrinsics using an 12772 external library. Supported types are `svml' for the Intel short 12773 vector math library and `acml' for the AMD math core library style 12774 of interfacing. GCC will currently emit calls to `vmldExp2', 12775 `vmldLn2', `vmldLog102', `vmldLog102', `vmldPow2', `vmldTanh2', 12776 `vmldTan2', `vmldAtan2', `vmldAtanh2', `vmldCbrt2', `vmldSinh2', 12777 `vmldSin2', `vmldAsinh2', `vmldAsin2', `vmldCosh2', `vmldCos2', 12778 `vmldAcosh2', `vmldAcos2', `vmlsExp4', `vmlsLn4', `vmlsLog104', 12779 `vmlsLog104', `vmlsPow4', `vmlsTanh4', `vmlsTan4', `vmlsAtan4', 12780 `vmlsAtanh4', `vmlsCbrt4', `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', 12781 `vmlsAsin4', `vmlsCosh4', `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' 12782 for corresponding function type when `-mveclibabi=svml' is used 12783 and `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log', 12784 `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', 12785 `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and 12786 `__vrs4_powf' for corresponding function type when 12787 `-mveclibabi=acml' is used. Both `-ftree-vectorize' and 12788 `-funsafe-math-optimizations' have to be enabled. A SVML or ACML 12789 ABI compatible library will have to be specified at link time. 12790 12791 `-mabi=NAME' 12792 Generate code for the specified calling convention. Permissible 12793 values are: `sysv' for the ABI used on GNU/Linux and other systems 12794 and `ms' for the Microsoft ABI. The default is to use the 12795 Microsoft ABI when targeting Windows. On all other systems, the 12796 default is the SYSV ABI. You can control this behavior for a 12797 specific function by using the function attribute 12798 `ms_abi'/`sysv_abi'. *Note Function Attributes::. 12799 12800 `-mpush-args' 12801 `-mno-push-args' 12802 Use PUSH operations to store outgoing parameters. This method is 12803 shorter and usually equally fast as method using SUB/MOV 12804 operations and is enabled by default. In some cases disabling it 12805 may improve performance because of improved scheduling and reduced 12806 dependencies. 12807 12808 `-maccumulate-outgoing-args' 12809 If enabled, the maximum amount of space required for outgoing 12810 arguments will be computed in the function prologue. This is 12811 faster on most modern CPUs because of reduced dependencies, 12812 improved scheduling and reduced stack usage when preferred stack 12813 boundary is not equal to 2. The drawback is a notable increase in 12814 code size. This switch implies `-mno-push-args'. 12815 12816 `-mthreads' 12817 Support thread-safe exception handling on `Mingw32'. Code that 12818 relies on thread-safe exception handling must compile and link all 12819 code with the `-mthreads' option. When compiling, `-mthreads' 12820 defines `-D_MT'; when linking, it links in a special thread helper 12821 library `-lmingwthrd' which cleans up per thread exception 12822 handling data. 12823 12824 `-mno-align-stringops' 12825 Do not align destination of inlined string operations. This 12826 switch reduces code size and improves performance in case the 12827 destination is already aligned, but GCC doesn't know about it. 12828 12829 `-minline-all-stringops' 12830 By default GCC inlines string operations only when destination is 12831 known to be aligned at least to 4 byte boundary. This enables 12832 more inlining, increase code size, but may improve performance of 12833 code that depends on fast memcpy, strlen and memset for short 12834 lengths. 12835 12836 `-minline-stringops-dynamically' 12837 For string operation of unknown size, inline runtime checks so for 12838 small blocks inline code is used, while for large blocks library 12839 call is used. 12840 12841 `-mstringop-strategy=ALG' 12842 Overwrite internal decision heuristic about particular algorithm 12843 to inline string operation with. The allowed values are 12844 `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386 12845 `rep' prefix of specified size, `byte_loop', `loop', 12846 `unrolled_loop' for expanding inline loop, `libcall' for always 12847 expanding library call. 12848 12849 `-momit-leaf-frame-pointer' 12850 Don't keep the frame pointer in a register for leaf functions. 12851 This avoids the instructions to save, set up and restore frame 12852 pointers and makes an extra register available in leaf functions. 12853 The option `-fomit-frame-pointer' removes the frame pointer for 12854 all functions which might make debugging harder. 12855 12856 `-mtls-direct-seg-refs' 12857 `-mno-tls-direct-seg-refs' 12858 Controls whether TLS variables may be accessed with offsets from 12859 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 12860 whether the thread base pointer must be added. Whether or not this 12861 is legal depends on the operating system, and whether it maps the 12862 segment to cover the entire TLS area. 12863 12864 For systems that use GNU libc, the default is on. 12865 12866 `-msse2avx' 12867 `-mno-sse2avx' 12868 Specify that the assembler should encode SSE instructions with VEX 12869 prefix. The option `-mavx' turns this on by default. 12870 12871 `-mfentry' 12872 `-mno-fentry' 12873 If profiling is active `-pg' put the profiling counter call before 12874 prologue. Note: On x86 architectures the attribute 12875 `ms_hook_prologue' isn't possible at the moment for `-mfentry' and 12876 `-pg'. 12877 12878 `-m8bit-idiv' 12879 `-mno-8bit-idiv' 12880 On some processors, like Intel Atom, 8bit unsigned integer divide 12881 is much faster than 32bit/64bit integer divide. This option will 12882 generate a runt-time check. If both dividend and divisor are 12883 within range of 0 to 255, 8bit unsigned integer divide will be 12884 used instead of 32bit/64bit integer divide. 12885 12886 `-mavx256-split-unaligned-load' 12887 12888 `-mavx256-split-unaligned-store' 12889 Split 32-byte AVX unaligned load and store. 12890 12891 12892 These `-m' switches are supported in addition to the above on AMD 12893 x86-64 processors in 64-bit environments. 12894 12895 `-m32' 12896 `-m64' 12897 Generate code for a 32-bit or 64-bit environment. The 32-bit 12898 environment sets int, long and pointer to 32 bits and generates 12899 code that runs on any i386 system. The 64-bit environment sets 12900 int to 32 bits and long and pointer to 64 bits and generates code 12901 for AMD's x86-64 architecture. For darwin only the -m64 option 12902 turns off the `-fno-pic' and `-mdynamic-no-pic' options. 12903 12904 `-mno-red-zone' 12905 Do not use a so called red zone for x86-64 code. The red zone is 12906 mandated by the x86-64 ABI, it is a 128-byte area beyond the 12907 location of the stack pointer that will not be modified by signal 12908 or interrupt handlers and therefore can be used for temporary data 12909 without adjusting the stack pointer. The flag `-mno-red-zone' 12910 disables this red zone. 12911 12912 `-mcmodel=small' 12913 Generate code for the small code model: the program and its 12914 symbols must be linked in the lower 2 GB of the address space. 12915 Pointers are 64 bits. Programs can be statically or dynamically 12916 linked. This is the default code model. 12917 12918 `-mcmodel=kernel' 12919 Generate code for the kernel code model. The kernel runs in the 12920 negative 2 GB of the address space. This model has to be used for 12921 Linux kernel code. 12922 12923 `-mcmodel=medium' 12924 Generate code for the medium model: The program is linked in the 12925 lower 2 GB of the address space. Small symbols are also placed 12926 there. Symbols with sizes larger than `-mlarge-data-threshold' 12927 are put into large data or bss sections and can be located above 12928 2GB. Programs can be statically or dynamically linked. 12929 12930 `-mcmodel=large' 12931 Generate code for the large model: This model makes no assumptions 12932 about addresses and sizes of sections. 12933 12934 12935 File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options 12936 12937 3.17.16 i386 and x86-64 Windows Options 12938 --------------------------------------- 12939 12940 These additional options are available for Windows targets: 12941 12942 `-mconsole' 12943 This option is available for Cygwin and MinGW targets. It 12944 specifies that a console application is to be generated, by 12945 instructing the linker to set the PE header subsystem type 12946 required for console applications. This is the default behavior 12947 for Cygwin and MinGW targets. 12948 12949 `-mdll' 12950 This option is available for Cygwin and MinGW targets. It 12951 specifies that a DLL - a dynamic link library - is to be 12952 generated, enabling the selection of the required runtime startup 12953 object and entry point. 12954 12955 `-mnop-fun-dllimport' 12956 This option is available for Cygwin and MinGW targets. It 12957 specifies that the dllimport attribute should be ignored. 12958 12959 `-mthread' 12960 This option is available for MinGW targets. It specifies that 12961 MinGW-specific thread support is to be used. 12962 12963 `-municode' 12964 This option is available for mingw-w64 targets. It specifies that 12965 the UNICODE macro is getting pre-defined and that the unicode 12966 capable runtime startup code is chosen. 12967 12968 `-mwin32' 12969 This option is available for Cygwin and MinGW targets. It 12970 specifies that the typical Windows pre-defined macros are to be 12971 set in the pre-processor, but does not influence the choice of 12972 runtime library/startup code. 12973 12974 `-mwindows' 12975 This option is available for Cygwin and MinGW targets. It 12976 specifies that a GUI application is to be generated by instructing 12977 the linker to set the PE header subsystem type appropriately. 12978 12979 `-fno-set-stack-executable' 12980 This option is available for MinGW targets. It specifies that the 12981 executable flag for stack used by nested functions isn't set. This 12982 is necessary for binaries running in kernel mode of Windows, as 12983 there the user32 API, which is used to set executable privileges, 12984 isn't available. 12985 12986 `-mpe-aligned-commons' 12987 This option is available for Cygwin and MinGW targets. It 12988 specifies that the GNU extension to the PE file format that 12989 permits the correct alignment of COMMON variables should be used 12990 when generating code. It will be enabled by default if GCC 12991 detects that the target assembler found during configuration 12992 supports the feature. 12993 12994 See also under *note i386 and x86-64 Options:: for standard options. 12995 12996 12997 File: gcc.info, Node: IA-64 Options, Next: IA-64/VMS Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options 12998 12999 3.17.17 IA-64 Options 13000 --------------------- 13001 13002 These are the `-m' options defined for the Intel IA-64 architecture. 13003 13004 `-mbig-endian' 13005 Generate code for a big endian target. This is the default for 13006 HP-UX. 13007 13008 `-mlittle-endian' 13009 Generate code for a little endian target. This is the default for 13010 AIX5 and GNU/Linux. 13011 13012 `-mgnu-as' 13013 `-mno-gnu-as' 13014 Generate (or don't) code for the GNU assembler. This is the 13015 default. 13016 13017 `-mgnu-ld' 13018 `-mno-gnu-ld' 13019 Generate (or don't) code for the GNU linker. This is the default. 13020 13021 `-mno-pic' 13022 Generate code that does not use a global pointer register. The 13023 result is not position independent code, and violates the IA-64 13024 ABI. 13025 13026 `-mvolatile-asm-stop' 13027 `-mno-volatile-asm-stop' 13028 Generate (or don't) a stop bit immediately before and after 13029 volatile asm statements. 13030 13031 `-mregister-names' 13032 `-mno-register-names' 13033 Generate (or don't) `in', `loc', and `out' register names for the 13034 stacked registers. This may make assembler output more readable. 13035 13036 `-mno-sdata' 13037 `-msdata' 13038 Disable (or enable) optimizations that use the small data section. 13039 This may be useful for working around optimizer bugs. 13040 13041 `-mconstant-gp' 13042 Generate code that uses a single constant global pointer value. 13043 This is useful when compiling kernel code. 13044 13045 `-mauto-pic' 13046 Generate code that is self-relocatable. This implies 13047 `-mconstant-gp'. This is useful when compiling firmware code. 13048 13049 `-minline-float-divide-min-latency' 13050 Generate code for inline divides of floating point values using 13051 the minimum latency algorithm. 13052 13053 `-minline-float-divide-max-throughput' 13054 Generate code for inline divides of floating point values using 13055 the maximum throughput algorithm. 13056 13057 `-mno-inline-float-divide' 13058 Do not generate inline code for divides of floating point values. 13059 13060 `-minline-int-divide-min-latency' 13061 Generate code for inline divides of integer values using the 13062 minimum latency algorithm. 13063 13064 `-minline-int-divide-max-throughput' 13065 Generate code for inline divides of integer values using the 13066 maximum throughput algorithm. 13067 13068 `-mno-inline-int-divide' 13069 Do not generate inline code for divides of integer values. 13070 13071 `-minline-sqrt-min-latency' 13072 Generate code for inline square roots using the minimum latency 13073 algorithm. 13074 13075 `-minline-sqrt-max-throughput' 13076 Generate code for inline square roots using the maximum throughput 13077 algorithm. 13078 13079 `-mno-inline-sqrt' 13080 Do not generate inline code for sqrt. 13081 13082 `-mfused-madd' 13083 `-mno-fused-madd' 13084 Do (don't) generate code that uses the fused multiply/add or 13085 multiply/subtract instructions. The default is to use these 13086 instructions. 13087 13088 `-mno-dwarf2-asm' 13089 `-mdwarf2-asm' 13090 Don't (or do) generate assembler code for the DWARF2 line number 13091 debugging info. This may be useful when not using the GNU 13092 assembler. 13093 13094 `-mearly-stop-bits' 13095 `-mno-early-stop-bits' 13096 Allow stop bits to be placed earlier than immediately preceding the 13097 instruction that triggered the stop bit. This can improve 13098 instruction scheduling, but does not always do so. 13099 13100 `-mfixed-range=REGISTER-RANGE' 13101 Generate code treating the given register range as fixed registers. 13102 A fixed register is one that the register allocator can not use. 13103 This is useful when compiling kernel code. A register range is 13104 specified as two registers separated by a dash. Multiple register 13105 ranges can be specified separated by a comma. 13106 13107 `-mtls-size=TLS-SIZE' 13108 Specify bit size of immediate TLS offsets. Valid values are 14, 13109 22, and 64. 13110 13111 `-mtune=CPU-TYPE' 13112 Tune the instruction scheduling for a particular CPU, Valid values 13113 are itanium, itanium1, merced, itanium2, and mckinley. 13114 13115 `-milp32' 13116 `-mlp64' 13117 Generate code for a 32-bit or 64-bit environment. The 32-bit 13118 environment sets int, long and pointer to 32 bits. The 64-bit 13119 environment sets int to 32 bits and long and pointer to 64 bits. 13120 These are HP-UX specific flags. 13121 13122 `-mno-sched-br-data-spec' 13123 `-msched-br-data-spec' 13124 (Dis/En)able data speculative scheduling before reload. This will 13125 result in generation of the ld.a instructions and the 13126 corresponding check instructions (ld.c / chk.a). The default is 13127 'disable'. 13128 13129 `-msched-ar-data-spec' 13130 `-mno-sched-ar-data-spec' 13131 (En/Dis)able data speculative scheduling after reload. This will 13132 result in generation of the ld.a instructions and the 13133 corresponding check instructions (ld.c / chk.a). The default is 13134 'enable'. 13135 13136 `-mno-sched-control-spec' 13137 `-msched-control-spec' 13138 (Dis/En)able control speculative scheduling. This feature is 13139 available only during region scheduling (i.e. before reload). 13140 This will result in generation of the ld.s instructions and the 13141 corresponding check instructions chk.s . The default is 'disable'. 13142 13143 `-msched-br-in-data-spec' 13144 `-mno-sched-br-in-data-spec' 13145 (En/Dis)able speculative scheduling of the instructions that are 13146 dependent on the data speculative loads before reload. This is 13147 effective only with `-msched-br-data-spec' enabled. The default 13148 is 'enable'. 13149 13150 `-msched-ar-in-data-spec' 13151 `-mno-sched-ar-in-data-spec' 13152 (En/Dis)able speculative scheduling of the instructions that are 13153 dependent on the data speculative loads after reload. This is 13154 effective only with `-msched-ar-data-spec' enabled. The default 13155 is 'enable'. 13156 13157 `-msched-in-control-spec' 13158 `-mno-sched-in-control-spec' 13159 (En/Dis)able speculative scheduling of the instructions that are 13160 dependent on the control speculative loads. This is effective 13161 only with `-msched-control-spec' enabled. The default is 'enable'. 13162 13163 `-mno-sched-prefer-non-data-spec-insns' 13164 `-msched-prefer-non-data-spec-insns' 13165 If enabled, data speculative instructions will be chosen for 13166 schedule only if there are no other choices at the moment. This 13167 will make the use of the data speculation much more conservative. 13168 The default is 'disable'. 13169 13170 `-mno-sched-prefer-non-control-spec-insns' 13171 `-msched-prefer-non-control-spec-insns' 13172 If enabled, control speculative instructions will be chosen for 13173 schedule only if there are no other choices at the moment. This 13174 will make the use of the control speculation much more 13175 conservative. The default is 'disable'. 13176 13177 `-mno-sched-count-spec-in-critical-path' 13178 `-msched-count-spec-in-critical-path' 13179 If enabled, speculative dependencies will be considered during 13180 computation of the instructions priorities. This will make the 13181 use of the speculation a bit more conservative. The default is 13182 'disable'. 13183 13184 `-msched-spec-ldc' 13185 Use a simple data speculation check. This option is on by default. 13186 13187 `-msched-control-spec-ldc' 13188 Use a simple check for control speculation. This option is on by 13189 default. 13190 13191 `-msched-stop-bits-after-every-cycle' 13192 Place a stop bit after every cycle when scheduling. This option 13193 is on by default. 13194 13195 `-msched-fp-mem-deps-zero-cost' 13196 Assume that floating-point stores and loads are not likely to 13197 cause a conflict when placed into the same instruction group. 13198 This option is disabled by default. 13199 13200 `-msel-sched-dont-check-control-spec' 13201 Generate checks for control speculation in selective scheduling. 13202 This flag is disabled by default. 13203 13204 `-msched-max-memory-insns=MAX-INSNS' 13205 Limit on the number of memory insns per instruction group, giving 13206 lower priority to subsequent memory insns attempting to schedule 13207 in the same instruction group. Frequently useful to prevent cache 13208 bank conflicts. The default value is 1. 13209 13210 `-msched-max-memory-insns-hard-limit' 13211 Disallow more than `msched-max-memory-insns' in instruction group. 13212 Otherwise, limit is `soft' meaning that we would prefer non-memory 13213 operations when limit is reached but may still schedule memory 13214 operations. 13215 13216 13217 13218 File: gcc.info, Node: IA-64/VMS Options, Next: LM32 Options, Prev: IA-64 Options, Up: Submodel Options 13219 13220 3.17.18 IA-64/VMS Options 13221 ------------------------- 13222 13223 These `-m' options are defined for the IA-64/VMS implementations: 13224 13225 `-mvms-return-codes' 13226 Return VMS condition codes from main. The default is to return 13227 POSIX style condition (e.g. error) codes. 13228 13229 `-mdebug-main=PREFIX' 13230 Flag the first routine whose name starts with PREFIX as the main 13231 routine for the debugger. 13232 13233 `-mmalloc64' 13234 Default to 64bit memory allocation routines. 13235 13236 13237 File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64/VMS Options, Up: Submodel Options 13238 13239 3.17.19 LM32 Options 13240 -------------------- 13241 13242 These `-m' options are defined for the Lattice Mico32 architecture: 13243 13244 `-mbarrel-shift-enabled' 13245 Enable barrel-shift instructions. 13246 13247 `-mdivide-enabled' 13248 Enable divide and modulus instructions. 13249 13250 `-mmultiply-enabled' 13251 Enable multiply instructions. 13252 13253 `-msign-extend-enabled' 13254 Enable sign extend instructions. 13255 13256 `-muser-enabled' 13257 Enable user-defined instructions. 13258 13259 13260 13261 File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options 13262 13263 3.17.20 M32C Options 13264 -------------------- 13265 13266 `-mcpu=NAME' 13267 Select the CPU for which code is generated. NAME may be one of 13268 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 13269 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 13270 series. 13271 13272 `-msim' 13273 Specifies that the program will be run on the simulator. This 13274 causes an alternate runtime library to be linked in which 13275 supports, for example, file I/O. You must not use this option 13276 when generating programs that will run on real hardware; you must 13277 provide your own runtime library for whatever I/O functions are 13278 needed. 13279 13280 `-memregs=NUMBER' 13281 Specifies the number of memory-based pseudo-registers GCC will use 13282 during code generation. These pseudo-registers will be used like 13283 real registers, so there is a tradeoff between GCC's ability to 13284 fit the code into available registers, and the performance penalty 13285 of using memory instead of registers. Note that all modules in a 13286 program must be compiled with the same value for this option. 13287 Because of that, you must not use this option with the default 13288 runtime libraries gcc builds. 13289 13290 13291 13292 File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 13293 13294 3.17.21 M32R/D Options 13295 ---------------------- 13296 13297 These `-m' options are defined for Renesas M32R/D architectures: 13298 13299 `-m32r2' 13300 Generate code for the M32R/2. 13301 13302 `-m32rx' 13303 Generate code for the M32R/X. 13304 13305 `-m32r' 13306 Generate code for the M32R. This is the default. 13307 13308 `-mmodel=small' 13309 Assume all objects live in the lower 16MB of memory (so that their 13310 addresses can be loaded with the `ld24' instruction), and assume 13311 all subroutines are reachable with the `bl' instruction. This is 13312 the default. 13313 13314 The addressability of a particular object can be set with the 13315 `model' attribute. 13316 13317 `-mmodel=medium' 13318 Assume objects may be anywhere in the 32-bit address space (the 13319 compiler will generate `seth/add3' instructions to load their 13320 addresses), and assume all subroutines are reachable with the `bl' 13321 instruction. 13322 13323 `-mmodel=large' 13324 Assume objects may be anywhere in the 32-bit address space (the 13325 compiler will generate `seth/add3' instructions to load their 13326 addresses), and assume subroutines may not be reachable with the 13327 `bl' instruction (the compiler will generate the much slower 13328 `seth/add3/jl' instruction sequence). 13329 13330 `-msdata=none' 13331 Disable use of the small data area. Variables will be put into 13332 one of `.data', `bss', or `.rodata' (unless the `section' 13333 attribute has been specified). This is the default. 13334 13335 The small data area consists of sections `.sdata' and `.sbss'. 13336 Objects may be explicitly put in the small data area with the 13337 `section' attribute using one of these sections. 13338 13339 `-msdata=sdata' 13340 Put small global and static data in the small data area, but do not 13341 generate special code to reference them. 13342 13343 `-msdata=use' 13344 Put small global and static data in the small data area, and 13345 generate special instructions to reference them. 13346 13347 `-G NUM' 13348 Put global and static objects less than or equal to NUM bytes into 13349 the small data or bss sections instead of the normal data or bss 13350 sections. The default value of NUM is 8. The `-msdata' option 13351 must be set to one of `sdata' or `use' for this option to have any 13352 effect. 13353 13354 All modules should be compiled with the same `-G NUM' value. 13355 Compiling with different values of NUM may or may not work; if it 13356 doesn't the linker will give an error message--incorrect code will 13357 not be generated. 13358 13359 `-mdebug' 13360 Makes the M32R specific code in the compiler display some 13361 statistics that might help in debugging programs. 13362 13363 `-malign-loops' 13364 Align all loops to a 32-byte boundary. 13365 13366 `-mno-align-loops' 13367 Do not enforce a 32-byte alignment for loops. This is the default. 13368 13369 `-missue-rate=NUMBER' 13370 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 13371 13372 `-mbranch-cost=NUMBER' 13373 NUMBER can only be 1 or 2. If it is 1 then branches will be 13374 preferred over conditional code, if it is 2, then the opposite will 13375 apply. 13376 13377 `-mflush-trap=NUMBER' 13378 Specifies the trap number to use to flush the cache. The default 13379 is 12. Valid numbers are between 0 and 15 inclusive. 13380 13381 `-mno-flush-trap' 13382 Specifies that the cache cannot be flushed by using a trap. 13383 13384 `-mflush-func=NAME' 13385 Specifies the name of the operating system function to call to 13386 flush the cache. The default is __flush_cache_, but a function 13387 call will only be used if a trap is not available. 13388 13389 `-mno-flush-func' 13390 Indicates that there is no OS function for flushing the cache. 13391 13392 13393 13394 File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Prev: M32R/D Options, Up: Submodel Options 13395 13396 3.17.22 M680x0 Options 13397 ---------------------- 13398 13399 These are the `-m' options defined for M680x0 and ColdFire processors. 13400 The default settings depend on which architecture was selected when the 13401 compiler was configured; the defaults for the most common choices are 13402 given below. 13403 13404 `-march=ARCH' 13405 Generate code for a specific M680x0 or ColdFire instruction set 13406 architecture. Permissible values of ARCH for M680x0 architectures 13407 are: `68000', `68010', `68020', `68030', `68040', `68060' and 13408 `cpu32'. ColdFire architectures are selected according to 13409 Freescale's ISA classification and the permissible values are: 13410 `isaa', `isaaplus', `isab' and `isac'. 13411 13412 gcc defines a macro `__mcfARCH__' whenever it is generating code 13413 for a ColdFire target. The ARCH in this macro is one of the 13414 `-march' arguments given above. 13415 13416 When used together, `-march' and `-mtune' select code that runs on 13417 a family of similar processors but that is optimized for a 13418 particular microarchitecture. 13419 13420 `-mcpu=CPU' 13421 Generate code for a specific M680x0 or ColdFire processor. The 13422 M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040', 13423 `68060', `68302', `68332' and `cpu32'. The ColdFire CPUs are 13424 given by the table below, which also classifies the CPUs into 13425 families: 13426 13427 *Family* *`-mcpu' arguments* 13428 `51' `51' `51ac' `51cn' `51em' `51qe' 13429 `5206' `5202' `5204' `5206' 13430 `5206e' `5206e' 13431 `5208' `5207' `5208' 13432 `5211a' `5210a' `5211a' 13433 `5213' `5211' `5212' `5213' 13434 `5216' `5214' `5216' 13435 `52235' `52230' `52231' `52232' `52233' `52234' `52235' 13436 `5225' `5224' `5225' 13437 `52259' `52252' `52254' `52255' `52256' `52258' `52259' 13438 `5235' `5232' `5233' `5234' `5235' `523x' 13439 `5249' `5249' 13440 `5250' `5250' 13441 `5271' `5270' `5271' 13442 `5272' `5272' 13443 `5275' `5274' `5275' 13444 `5282' `5280' `5281' `5282' `528x' 13445 `53017' `53011' `53012' `53013' `53014' `53015' `53016' 13446 `53017' 13447 `5307' `5307' 13448 `5329' `5327' `5328' `5329' `532x' 13449 `5373' `5372' `5373' `537x' 13450 `5407' `5407' 13451 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x' 13452 `5480' `5481' `5482' `5483' `5484' `5485' 13453 13454 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with 13455 CPU. Other combinations of `-mcpu' and `-march' are rejected. 13456 13457 gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is 13458 selected. It also defines `__mcf_family_FAMILY', where the value 13459 of FAMILY is given by the table above. 13460 13461 `-mtune=TUNE' 13462 Tune the code for a particular microarchitecture, within the 13463 constraints set by `-march' and `-mcpu'. The M680x0 13464 microarchitectures are: `68000', `68010', `68020', `68030', 13465 `68040', `68060' and `cpu32'. The ColdFire microarchitectures 13466 are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'. 13467 13468 You can also use `-mtune=68020-40' for code that needs to run 13469 relatively well on 68020, 68030 and 68040 targets. 13470 `-mtune=68020-60' is similar but includes 68060 targets as well. 13471 These two options select the same tuning decisions as `-m68020-40' 13472 and `-m68020-60' respectively. 13473 13474 gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for 13475 680x0 architecture ARCH. It also defines `mcARCH' unless either 13476 `-ansi' or a non-GNU `-std' option is used. If gcc is tuning for 13477 a range of architectures, as selected by `-mtune=68020-40' or 13478 `-mtune=68020-60', it defines the macros for every architecture in 13479 the range. 13480 13481 gcc also defines the macro `__mUARCH__' when tuning for ColdFire 13482 microarchitecture UARCH, where UARCH is one of the arguments given 13483 above. 13484 13485 `-m68000' 13486 `-mc68000' 13487 Generate output for a 68000. This is the default when the 13488 compiler is configured for 68000-based systems. It is equivalent 13489 to `-march=68000'. 13490 13491 Use this option for microcontrollers with a 68000 or EC000 core, 13492 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 13493 13494 `-m68010' 13495 Generate output for a 68010. This is the default when the 13496 compiler is configured for 68010-based systems. It is equivalent 13497 to `-march=68010'. 13498 13499 `-m68020' 13500 `-mc68020' 13501 Generate output for a 68020. This is the default when the 13502 compiler is configured for 68020-based systems. It is equivalent 13503 to `-march=68020'. 13504 13505 `-m68030' 13506 Generate output for a 68030. This is the default when the 13507 compiler is configured for 68030-based systems. It is equivalent 13508 to `-march=68030'. 13509 13510 `-m68040' 13511 Generate output for a 68040. This is the default when the 13512 compiler is configured for 68040-based systems. It is equivalent 13513 to `-march=68040'. 13514 13515 This option inhibits the use of 68881/68882 instructions that have 13516 to be emulated by software on the 68040. Use this option if your 13517 68040 does not have code to emulate those instructions. 13518 13519 `-m68060' 13520 Generate output for a 68060. This is the default when the 13521 compiler is configured for 68060-based systems. It is equivalent 13522 to `-march=68060'. 13523 13524 This option inhibits the use of 68020 and 68881/68882 instructions 13525 that have to be emulated by software on the 68060. Use this 13526 option if your 68060 does not have code to emulate those 13527 instructions. 13528 13529 `-mcpu32' 13530 Generate output for a CPU32. This is the default when the 13531 compiler is configured for CPU32-based systems. It is equivalent 13532 to `-march=cpu32'. 13533 13534 Use this option for microcontrollers with a CPU32 or CPU32+ core, 13535 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 13536 68341, 68349 and 68360. 13537 13538 `-m5200' 13539 Generate output for a 520X ColdFire CPU. This is the default when 13540 the compiler is configured for 520X-based systems. It is 13541 equivalent to `-mcpu=5206', and is now deprecated in favor of that 13542 option. 13543 13544 Use this option for microcontroller with a 5200 core, including 13545 the MCF5202, MCF5203, MCF5204 and MCF5206. 13546 13547 `-m5206e' 13548 Generate output for a 5206e ColdFire CPU. The option is now 13549 deprecated in favor of the equivalent `-mcpu=5206e'. 13550 13551 `-m528x' 13552 Generate output for a member of the ColdFire 528X family. The 13553 option is now deprecated in favor of the equivalent `-mcpu=528x'. 13554 13555 `-m5307' 13556 Generate output for a ColdFire 5307 CPU. The option is now 13557 deprecated in favor of the equivalent `-mcpu=5307'. 13558 13559 `-m5407' 13560 Generate output for a ColdFire 5407 CPU. The option is now 13561 deprecated in favor of the equivalent `-mcpu=5407'. 13562 13563 `-mcfv4e' 13564 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 13565 This includes use of hardware floating point instructions. The 13566 option is equivalent to `-mcpu=547x', and is now deprecated in 13567 favor of that option. 13568 13569 `-m68020-40' 13570 Generate output for a 68040, without using any of the new 13571 instructions. This results in code which can run relatively 13572 efficiently on either a 68020/68881 or a 68030 or a 68040. The 13573 generated code does use the 68881 instructions that are emulated 13574 on the 68040. 13575 13576 The option is equivalent to `-march=68020' `-mtune=68020-40'. 13577 13578 `-m68020-60' 13579 Generate output for a 68060, without using any of the new 13580 instructions. This results in code which can run relatively 13581 efficiently on either a 68020/68881 or a 68030 or a 68040. The 13582 generated code does use the 68881 instructions that are emulated 13583 on the 68060. 13584 13585 The option is equivalent to `-march=68020' `-mtune=68020-60'. 13586 13587 `-mhard-float' 13588 `-m68881' 13589 Generate floating-point instructions. This is the default for 13590 68020 and above, and for ColdFire devices that have an FPU. It 13591 defines the macro `__HAVE_68881__' on M680x0 targets and 13592 `__mcffpu__' on ColdFire targets. 13593 13594 `-msoft-float' 13595 Do not generate floating-point instructions; use library calls 13596 instead. This is the default for 68000, 68010, and 68832 targets. 13597 It is also the default for ColdFire devices that have no FPU. 13598 13599 `-mdiv' 13600 `-mno-div' 13601 Generate (do not generate) ColdFire hardware divide and remainder 13602 instructions. If `-march' is used without `-mcpu', the default is 13603 "on" for ColdFire architectures and "off" for M680x0 13604 architectures. Otherwise, the default is taken from the target CPU 13605 (either the default CPU, or the one specified by `-mcpu'). For 13606 example, the default is "off" for `-mcpu=5206' and "on" for 13607 `-mcpu=5206e'. 13608 13609 gcc defines the macro `__mcfhwdiv__' when this option is enabled. 13610 13611 `-mshort' 13612 Consider type `int' to be 16 bits wide, like `short int'. 13613 Additionally, parameters passed on the stack are also aligned to a 13614 16-bit boundary even on targets whose API mandates promotion to 13615 32-bit. 13616 13617 `-mno-short' 13618 Do not consider type `int' to be 16 bits wide. This is the 13619 default. 13620 13621 `-mnobitfield' 13622 `-mno-bitfield' 13623 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 13624 and `-m5200' options imply `-mnobitfield'. 13625 13626 `-mbitfield' 13627 Do use the bit-field instructions. The `-m68020' option implies 13628 `-mbitfield'. This is the default if you use a configuration 13629 designed for a 68020. 13630 13631 `-mrtd' 13632 Use a different function-calling convention, in which functions 13633 that take a fixed number of arguments return with the `rtd' 13634 instruction, which pops their arguments while returning. This 13635 saves one instruction in the caller since there is no need to pop 13636 the arguments there. 13637 13638 This calling convention is incompatible with the one normally used 13639 on Unix, so you cannot use it if you need to call libraries 13640 compiled with the Unix compiler. 13641 13642 Also, you must provide function prototypes for all functions that 13643 take variable numbers of arguments (including `printf'); otherwise 13644 incorrect code will be generated for calls to those functions. 13645 13646 In addition, seriously incorrect code will result if you call a 13647 function with too many arguments. (Normally, extra arguments are 13648 harmlessly ignored.) 13649 13650 The `rtd' instruction is supported by the 68010, 68020, 68030, 13651 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 13652 13653 `-mno-rtd' 13654 Do not use the calling conventions selected by `-mrtd'. This is 13655 the default. 13656 13657 `-malign-int' 13658 `-mno-align-int' 13659 Control whether GCC aligns `int', `long', `long long', `float', 13660 `double', and `long double' variables on a 32-bit boundary 13661 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 13662 variables on 32-bit boundaries produces code that runs somewhat 13663 faster on processors with 32-bit busses at the expense of more 13664 memory. 13665 13666 *Warning:* if you use the `-malign-int' switch, GCC will align 13667 structures containing the above types differently than most 13668 published application binary interface specifications for the m68k. 13669 13670 `-mpcrel' 13671 Use the pc-relative addressing mode of the 68000 directly, instead 13672 of using a global offset table. At present, this option implies 13673 `-fpic', allowing at most a 16-bit offset for pc-relative 13674 addressing. `-fPIC' is not presently supported with `-mpcrel', 13675 though this could be supported for 68020 and higher processors. 13676 13677 `-mno-strict-align' 13678 `-mstrict-align' 13679 Do not (do) assume that unaligned memory references will be 13680 handled by the system. 13681 13682 `-msep-data' 13683 Generate code that allows the data segment to be located in a 13684 different area of memory from the text segment. This allows for 13685 execute in place in an environment without virtual memory 13686 management. This option implies `-fPIC'. 13687 13688 `-mno-sep-data' 13689 Generate code that assumes that the data segment follows the text 13690 segment. This is the default. 13691 13692 `-mid-shared-library' 13693 Generate code that supports shared libraries via the library ID 13694 method. This allows for execute in place and shared libraries in 13695 an environment without virtual memory management. This option 13696 implies `-fPIC'. 13697 13698 `-mno-id-shared-library' 13699 Generate code that doesn't assume ID based shared libraries are 13700 being used. This is the default. 13701 13702 `-mshared-library-id=n' 13703 Specified the identification number of the ID based shared library 13704 being compiled. Specifying a value of 0 will generate more 13705 compact code, specifying other values will force the allocation of 13706 that number to the current library but is no more space or time 13707 efficient than omitting this option. 13708 13709 `-mxgot' 13710 `-mno-xgot' 13711 When generating position-independent code for ColdFire, generate 13712 code that works if the GOT has more than 8192 entries. This code 13713 is larger and slower than code generated without this option. On 13714 M680x0 processors, this option is not needed; `-fPIC' suffices. 13715 13716 GCC normally uses a single instruction to load values from the GOT. 13717 While this is relatively efficient, it only works if the GOT is 13718 smaller than about 64k. Anything larger causes the linker to 13719 report an error such as: 13720 13721 relocation truncated to fit: R_68K_GOT16O foobar 13722 13723 If this happens, you should recompile your code with `-mxgot'. It 13724 should then work with very large GOTs. However, code generated 13725 with `-mxgot' is less efficient, since it takes 4 instructions to 13726 fetch the value of a global symbol. 13727 13728 Note that some linkers, including newer versions of the GNU linker, 13729 can create multiple GOTs and sort GOT entries. If you have such a 13730 linker, you should only need to use `-mxgot' when compiling a 13731 single object file that accesses more than 8192 GOT entries. Very 13732 few do. 13733 13734 These options have no effect unless GCC is generating 13735 position-independent code. 13736 13737 13738 13739 File: gcc.info, Node: M68hc1x Options, Next: MCore Options, Prev: M680x0 Options, Up: Submodel Options 13740 13741 3.17.23 M68hc1x Options 13742 ----------------------- 13743 13744 These are the `-m' options defined for the 68hc11 and 68hc12 13745 microcontrollers. The default values for these options depends on 13746 which style of microcontroller was selected when the compiler was 13747 configured; the defaults for the most common choices are given below. 13748 13749 `-m6811' 13750 `-m68hc11' 13751 Generate output for a 68HC11. This is the default when the 13752 compiler is configured for 68HC11-based systems. 13753 13754 `-m6812' 13755 `-m68hc12' 13756 Generate output for a 68HC12. This is the default when the 13757 compiler is configured for 68HC12-based systems. 13758 13759 `-m68S12' 13760 `-m68hcs12' 13761 Generate output for a 68HCS12. 13762 13763 `-mauto-incdec' 13764 Enable the use of 68HC12 pre and post auto-increment and 13765 auto-decrement addressing modes. 13766 13767 `-minmax' 13768 `-mnominmax' 13769 Enable the use of 68HC12 min and max instructions. 13770 13771 `-mlong-calls' 13772 `-mno-long-calls' 13773 Treat all calls as being far away (near). If calls are assumed to 13774 be far away, the compiler will use the `call' instruction to call 13775 a function and the `rtc' instruction for returning. 13776 13777 `-mshort' 13778 Consider type `int' to be 16 bits wide, like `short int'. 13779 13780 `-msoft-reg-count=COUNT' 13781 Specify the number of pseudo-soft registers which are used for the 13782 code generation. The maximum number is 32. Using more pseudo-soft 13783 register may or may not result in better code depending on the 13784 program. The default is 4 for 68HC11 and 2 for 68HC12. 13785 13786 13787 13788 File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M68hc1x Options, Up: Submodel Options 13789 13790 3.17.24 MCore Options 13791 --------------------- 13792 13793 These are the `-m' options defined for the Motorola M*Core processors. 13794 13795 `-mhardlit' 13796 `-mno-hardlit' 13797 Inline constants into the code stream if it can be done in two 13798 instructions or less. 13799 13800 `-mdiv' 13801 `-mno-div' 13802 Use the divide instruction. (Enabled by default). 13803 13804 `-mrelax-immediate' 13805 `-mno-relax-immediate' 13806 Allow arbitrary sized immediates in bit operations. 13807 13808 `-mwide-bitfields' 13809 `-mno-wide-bitfields' 13810 Always treat bit-fields as int-sized. 13811 13812 `-m4byte-functions' 13813 `-mno-4byte-functions' 13814 Force all functions to be aligned to a four byte boundary. 13815 13816 `-mcallgraph-data' 13817 `-mno-callgraph-data' 13818 Emit callgraph information. 13819 13820 `-mslow-bytes' 13821 `-mno-slow-bytes' 13822 Prefer word access when reading byte quantities. 13823 13824 `-mlittle-endian' 13825 `-mbig-endian' 13826 Generate code for a little endian target. 13827 13828 `-m210' 13829 `-m340' 13830 Generate code for the 210 processor. 13831 13832 `-mno-lsim' 13833 Assume that run-time support has been provided and so omit the 13834 simulator library (`libsim.a)' from the linker command line. 13835 13836 `-mstack-increment=SIZE' 13837 Set the maximum amount for a single stack increment operation. 13838 Large values can increase the speed of programs which contain 13839 functions that need a large amount of stack space, but they can 13840 also trigger a segmentation fault if the stack is extended too 13841 much. The default value is 0x1000. 13842 13843 13844 13845 File: gcc.info, Node: MeP Options, Next: MicroBlaze Options, Prev: MCore Options, Up: Submodel Options 13846 13847 3.17.25 MeP Options 13848 ------------------- 13849 13850 `-mabsdiff' 13851 Enables the `abs' instruction, which is the absolute difference 13852 between two registers. 13853 13854 `-mall-opts' 13855 Enables all the optional instructions - average, multiply, divide, 13856 bit operations, leading zero, absolute difference, min/max, clip, 13857 and saturation. 13858 13859 `-maverage' 13860 Enables the `ave' instruction, which computes the average of two 13861 registers. 13862 13863 `-mbased=N' 13864 Variables of size N bytes or smaller will be placed in the 13865 `.based' section by default. Based variables use the `$tp' 13866 register as a base register, and there is a 128 byte limit to the 13867 `.based' section. 13868 13869 `-mbitops' 13870 Enables the bit operation instructions - bit test (`btstm'), set 13871 (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set 13872 (`tas'). 13873 13874 `-mc=NAME' 13875 Selects which section constant data will be placed in. NAME may 13876 be `tiny', `near', or `far'. 13877 13878 `-mclip' 13879 Enables the `clip' instruction. Note that `-mclip' is not useful 13880 unless you also provide `-mminmax'. 13881 13882 `-mconfig=NAME' 13883 Selects one of the build-in core configurations. Each MeP chip has 13884 one or more modules in it; each module has a core CPU and a 13885 variety of coprocessors, optional instructions, and peripherals. 13886 The `MeP-Integrator' tool, not part of GCC, provides these 13887 configurations through this option; using this option is the same 13888 as using all the corresponding command line options. The default 13889 configuration is `default'. 13890 13891 `-mcop' 13892 Enables the coprocessor instructions. By default, this is a 32-bit 13893 coprocessor. Note that the coprocessor is normally enabled via the 13894 `-mconfig=' option. 13895 13896 `-mcop32' 13897 Enables the 32-bit coprocessor's instructions. 13898 13899 `-mcop64' 13900 Enables the 64-bit coprocessor's instructions. 13901 13902 `-mivc2' 13903 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. 13904 13905 `-mdc' 13906 Causes constant variables to be placed in the `.near' section. 13907 13908 `-mdiv' 13909 Enables the `div' and `divu' instructions. 13910 13911 `-meb' 13912 Generate big-endian code. 13913 13914 `-mel' 13915 Generate little-endian code. 13916 13917 `-mio-volatile' 13918 Tells the compiler that any variable marked with the `io' 13919 attribute is to be considered volatile. 13920 13921 `-ml' 13922 Causes variables to be assigned to the `.far' section by default. 13923 13924 `-mleadz' 13925 Enables the `leadz' (leading zero) instruction. 13926 13927 `-mm' 13928 Causes variables to be assigned to the `.near' section by default. 13929 13930 `-mminmax' 13931 Enables the `min' and `max' instructions. 13932 13933 `-mmult' 13934 Enables the multiplication and multiply-accumulate instructions. 13935 13936 `-mno-opts' 13937 Disables all the optional instructions enabled by `-mall-opts'. 13938 13939 `-mrepeat' 13940 Enables the `repeat' and `erepeat' instructions, used for 13941 low-overhead looping. 13942 13943 `-ms' 13944 Causes all variables to default to the `.tiny' section. Note that 13945 there is a 65536 byte limit to this section. Accesses to these 13946 variables use the `%gp' base register. 13947 13948 `-msatur' 13949 Enables the saturation instructions. Note that the compiler does 13950 not currently generate these itself, but this option is included 13951 for compatibility with other tools, like `as'. 13952 13953 `-msdram' 13954 Link the SDRAM-based runtime instead of the default ROM-based 13955 runtime. 13956 13957 `-msim' 13958 Link the simulator runtime libraries. 13959 13960 `-msimnovec' 13961 Link the simulator runtime libraries, excluding built-in support 13962 for reset and exception vectors and tables. 13963 13964 `-mtf' 13965 Causes all functions to default to the `.far' section. Without 13966 this option, functions default to the `.near' section. 13967 13968 `-mtiny=N' 13969 Variables that are N bytes or smaller will be allocated to the 13970 `.tiny' section. These variables use the `$gp' base register. 13971 The default for this option is 4, but note that there's a 65536 13972 byte limit to the `.tiny' section. 13973 13974 13975 13976 File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Options, Up: Submodel Options 13977 13978 3.17.26 MicroBlaze Options 13979 -------------------------- 13980 13981 `-msoft-float' 13982 Use software emulation for floating point (default). 13983 13984 `-mhard-float' 13985 Use hardware floating point instructions. 13986 13987 `-mmemcpy' 13988 Do not optimize block moves, use `memcpy'. 13989 13990 `-mno-clearbss' 13991 This option is deprecated. Use `-fno-zero-initialized-in-bss' 13992 instead. 13993 13994 `-mcpu=CPU-TYPE' 13995 Use features of and schedule code for given CPU. Supported values 13996 are in the format `vX.YY.Z', where X is a major version, YY is the 13997 minor version, and Z is compatibility code. Example values are 13998 `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b', `v6.00.a'. 13999 14000 `-mxl-soft-mul' 14001 Use software multiply emulation (default). 14002 14003 `-mxl-soft-div' 14004 Use software emulation for divides (default). 14005 14006 `-mxl-barrel-shift' 14007 Use the hardware barrel shifter. 14008 14009 `-mxl-pattern-compare' 14010 Use pattern compare instructions. 14011 14012 `-msmall-divides' 14013 Use table lookup optimization for small signed integer divisions. 14014 14015 `-mxl-stack-check' 14016 This option is deprecated. Use -fstack-check instead. 14017 14018 `-mxl-gp-opt' 14019 Use GP relative sdata/sbss sections. 14020 14021 `-mxl-multiply-high' 14022 Use multiply high instructions for high part of 32x32 multiply. 14023 14024 `-mxl-float-convert' 14025 Use hardware floating point conversion instructions. 14026 14027 `-mxl-float-sqrt' 14028 Use hardware floating point square root instruction. 14029 14030 `-mxl-mode-APP-MODEL' 14031 Select application model APP-MODEL. Valid models are 14032 `executable' 14033 normal executable (default), uses startup code `crt0.o'. 14034 14035 `xmdstub' 14036 for use with Xilinx Microprocessor Debugger (XMD) based 14037 software intrusive debug agent called xmdstub. This uses 14038 startup file `crt1.o' and sets the start address of the 14039 program to be 0x800. 14040 14041 `bootstrap' 14042 for applications that are loaded using a bootloader. This 14043 model uses startup file `crt2.o' which does not contain a 14044 processor reset vector handler. This is suitable for 14045 transferring control on a processor reset to the bootloader 14046 rather than the application. 14047 14048 `novectors' 14049 for applications that do not require any of the MicroBlaze 14050 vectors. This option may be useful for applications running 14051 within a monitoring application. This model uses `crt3.o' as 14052 a startup file. 14053 14054 Option `-xl-mode-APP-MODEL' is a deprecated alias for 14055 `-mxl-mode-APP-MODEL'. 14056 14057 14058 14059 File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MicroBlaze Options, Up: Submodel Options 14060 14061 3.17.27 MIPS Options 14062 -------------------- 14063 14064 `-EB' 14065 Generate big-endian code. 14066 14067 `-EL' 14068 Generate little-endian code. This is the default for `mips*el-*-*' 14069 configurations. 14070 14071 `-march=ARCH' 14072 Generate code that will run on ARCH, which can be the name of a 14073 generic MIPS ISA, or the name of a particular processor. The ISA 14074 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 14075 `mips32r2', `mips64' and `mips64r2'. The processor names are: 14076 `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd', 14077 `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec', 14078 `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc', 14079 `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1', 14080 `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', `m4k', 14081 `octeon', `orion', `r2000', `r3000', `r3900', `r4000', `r4400', 14082 `r4600', `r4650', `r6000', `r8000', `rm7000', `rm9000', `r10000', 14083 `r12000', `r14000', `r16000', `sb1', `sr71000', `vr4100', 14084 `vr4111', `vr4120', `vr4130', `vr4300', `vr5000', `vr5400', 14085 `vr5500' and `xlr'. The special value `from-abi' selects the most 14086 compatible architecture for the selected ABI (that is, `mips1' for 14087 32-bit ABIs and `mips3' for 64-bit ABIs). 14088 14089 Native Linux/GNU toolchains also support the value `native', which 14090 selects the best architecture option for the host processor. 14091 `-march=native' has no effect if GCC does not recognize the 14092 processor. 14093 14094 In processor names, a final `000' can be abbreviated as `k' (for 14095 example, `-march=r2k'). Prefixes are optional, and `vr' may be 14096 written `r'. 14097 14098 Names of the form `Nf2_1' refer to processors with FPUs clocked at 14099 half the rate of the core, names of the form `Nf1_1' refer to 14100 processors with FPUs clocked at the same rate as the core, and 14101 names of the form `Nf3_2' refer to processors with FPUs clocked a 14102 ratio of 3:2 with respect to the core. For compatibility reasons, 14103 `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are 14104 accepted as synonyms for `Nf1_1'. 14105 14106 GCC defines two macros based on the value of this option. The 14107 first is `_MIPS_ARCH', which gives the name of target 14108 architecture, as a string. The second has the form 14109 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 14110 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH' 14111 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'. 14112 14113 Note that the `_MIPS_ARCH' macro uses the processor names given 14114 above. In other words, it will have the full prefix and will not 14115 abbreviate `000' as `k'. In the case of `from-abi', the macro 14116 names the resolved architecture (either `"mips1"' or `"mips3"'). 14117 It names the default architecture when no `-march' option is given. 14118 14119 `-mtune=ARCH' 14120 Optimize for ARCH. Among other things, this option controls the 14121 way instructions are scheduled, and the perceived cost of 14122 arithmetic operations. The list of ARCH values is the same as for 14123 `-march'. 14124 14125 When this option is not used, GCC will optimize for the processor 14126 specified by `-march'. By using `-march' and `-mtune' together, 14127 it is possible to generate code that will run on a family of 14128 processors, but optimize the code for one particular member of 14129 that family. 14130 14131 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 14132 which work in the same way as the `-march' ones described above. 14133 14134 `-mips1' 14135 Equivalent to `-march=mips1'. 14136 14137 `-mips2' 14138 Equivalent to `-march=mips2'. 14139 14140 `-mips3' 14141 Equivalent to `-march=mips3'. 14142 14143 `-mips4' 14144 Equivalent to `-march=mips4'. 14145 14146 `-mips32' 14147 Equivalent to `-march=mips32'. 14148 14149 `-mips32r2' 14150 Equivalent to `-march=mips32r2'. 14151 14152 `-mips64' 14153 Equivalent to `-march=mips64'. 14154 14155 `-mips64r2' 14156 Equivalent to `-march=mips64r2'. 14157 14158 `-mips16' 14159 `-mno-mips16' 14160 Generate (do not generate) MIPS16 code. If GCC is targetting a 14161 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE. 14162 14163 MIPS16 code generation can also be controlled on a per-function 14164 basis by means of `mips16' and `nomips16' attributes. *Note 14165 Function Attributes::, for more information. 14166 14167 `-mflip-mips16' 14168 Generate MIPS16 code on alternating functions. This option is 14169 provided for regression testing of mixed MIPS16/non-MIPS16 code 14170 generation, and is not intended for ordinary use in compiling user 14171 code. 14172 14173 `-minterlink-mips16' 14174 `-mno-interlink-mips16' 14175 Require (do not require) that non-MIPS16 code be link-compatible 14176 with MIPS16 code. 14177 14178 For example, non-MIPS16 code cannot jump directly to MIPS16 code; 14179 it must either use a call or an indirect jump. 14180 `-minterlink-mips16' therefore disables direct jumps unless GCC 14181 knows that the target of the jump is not MIPS16. 14182 14183 `-mabi=32' 14184 `-mabi=o64' 14185 `-mabi=n32' 14186 `-mabi=64' 14187 `-mabi=eabi' 14188 Generate code for the given ABI. 14189 14190 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 14191 generates 64-bit code when you select a 64-bit architecture, but 14192 you can use `-mgp32' to get 32-bit code instead. 14193 14194 For information about the O64 ABI, see 14195 `http://gcc.gnu.org/projects/mipso64-abi.html'. 14196 14197 GCC supports a variant of the o32 ABI in which floating-point 14198 registers are 64 rather than 32 bits wide. You can select this 14199 combination with `-mabi=32' `-mfp64'. This ABI relies on the 14200 `mthc1' and `mfhc1' instructions and is therefore only supported 14201 for MIPS32R2 processors. 14202 14203 The register assignments for arguments and return values remain the 14204 same, but each scalar value is passed in a single 64-bit register 14205 rather than a pair of 32-bit registers. For example, scalar 14206 floating-point values are returned in `$f0' only, not a 14207 `$f0'/`$f1' pair. The set of call-saved registers also remains 14208 the same, but all 64 bits are saved. 14209 14210 `-mabicalls' 14211 `-mno-abicalls' 14212 Generate (do not generate) code that is suitable for SVR4-style 14213 dynamic objects. `-mabicalls' is the default for SVR4-based 14214 systems. 14215 14216 `-mshared' 14217 `-mno-shared' 14218 Generate (do not generate) code that is fully position-independent, 14219 and that can therefore be linked into shared libraries. This 14220 option only affects `-mabicalls'. 14221 14222 All `-mabicalls' code has traditionally been position-independent, 14223 regardless of options like `-fPIC' and `-fpic'. However, as an 14224 extension, the GNU toolchain allows executables to use absolute 14225 accesses for locally-binding symbols. It can also use shorter GP 14226 initialization sequences and generate direct calls to 14227 locally-defined functions. This mode is selected by `-mno-shared'. 14228 14229 `-mno-shared' depends on binutils 2.16 or higher and generates 14230 objects that can only be linked by the GNU linker. However, the 14231 option does not affect the ABI of the final executable; it only 14232 affects the ABI of relocatable objects. Using `-mno-shared' will 14233 generally make executables both smaller and quicker. 14234 14235 `-mshared' is the default. 14236 14237 `-mplt' 14238 `-mno-plt' 14239 Assume (do not assume) that the static and dynamic linkers support 14240 PLTs and copy relocations. This option only affects `-mno-shared 14241 -mabicalls'. For the n64 ABI, this option has no effect without 14242 `-msym32'. 14243 14244 You can make `-mplt' the default by configuring GCC with 14245 `--with-mips-plt'. The default is `-mno-plt' otherwise. 14246 14247 `-mxgot' 14248 `-mno-xgot' 14249 Lift (do not lift) the usual restrictions on the size of the global 14250 offset table. 14251 14252 GCC normally uses a single instruction to load values from the GOT. 14253 While this is relatively efficient, it will only work if the GOT 14254 is smaller than about 64k. Anything larger will cause the linker 14255 to report an error such as: 14256 14257 relocation truncated to fit: R_MIPS_GOT16 foobar 14258 14259 If this happens, you should recompile your code with `-mxgot'. It 14260 should then work with very large GOTs, although it will also be 14261 less efficient, since it will take three instructions to fetch the 14262 value of a global symbol. 14263 14264 Note that some linkers can create multiple GOTs. If you have such 14265 a linker, you should only need to use `-mxgot' when a single object 14266 file accesses more than 64k's worth of GOT entries. Very few do. 14267 14268 These options have no effect unless GCC is generating position 14269 independent code. 14270 14271 `-mgp32' 14272 Assume that general-purpose registers are 32 bits wide. 14273 14274 `-mgp64' 14275 Assume that general-purpose registers are 64 bits wide. 14276 14277 `-mfp32' 14278 Assume that floating-point registers are 32 bits wide. 14279 14280 `-mfp64' 14281 Assume that floating-point registers are 64 bits wide. 14282 14283 `-mhard-float' 14284 Use floating-point coprocessor instructions. 14285 14286 `-msoft-float' 14287 Do not use floating-point coprocessor instructions. Implement 14288 floating-point calculations using library calls instead. 14289 14290 `-msingle-float' 14291 Assume that the floating-point coprocessor only supports 14292 single-precision operations. 14293 14294 `-mdouble-float' 14295 Assume that the floating-point coprocessor supports 14296 double-precision operations. This is the default. 14297 14298 `-mllsc' 14299 `-mno-llsc' 14300 Use (do not use) `ll', `sc', and `sync' instructions to implement 14301 atomic memory built-in functions. When neither option is 14302 specified, GCC will use the instructions if the target architecture 14303 supports them. 14304 14305 `-mllsc' is useful if the runtime environment can emulate the 14306 instructions and `-mno-llsc' can be useful when compiling for 14307 nonstandard ISAs. You can make either option the default by 14308 configuring GCC with `--with-llsc' and `--without-llsc' 14309 respectively. `--with-llsc' is the default for some 14310 configurations; see the installation documentation for details. 14311 14312 `-mdsp' 14313 `-mno-dsp' 14314 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 14315 Built-in Functions::. This option defines the preprocessor macro 14316 `__mips_dsp'. It also defines `__mips_dsp_rev' to 1. 14317 14318 `-mdspr2' 14319 `-mno-dspr2' 14320 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 14321 Built-in Functions::. This option defines the preprocessor macros 14322 `__mips_dsp' and `__mips_dspr2'. It also defines `__mips_dsp_rev' 14323 to 2. 14324 14325 `-msmartmips' 14326 `-mno-smartmips' 14327 Use (do not use) the MIPS SmartMIPS ASE. 14328 14329 `-mpaired-single' 14330 `-mno-paired-single' 14331 Use (do not use) paired-single floating-point instructions. *Note 14332 MIPS Paired-Single Support::. This option requires hardware 14333 floating-point support to be enabled. 14334 14335 `-mdmx' 14336 `-mno-mdmx' 14337 Use (do not use) MIPS Digital Media Extension instructions. This 14338 option can only be used when generating 64-bit code and requires 14339 hardware floating-point support to be enabled. 14340 14341 `-mips3d' 14342 `-mno-mips3d' 14343 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 14344 Functions::. The option `-mips3d' implies `-mpaired-single'. 14345 14346 `-mmt' 14347 `-mno-mt' 14348 Use (do not use) MT Multithreading instructions. 14349 14350 `-mlong64' 14351 Force `long' types to be 64 bits wide. See `-mlong32' for an 14352 explanation of the default and the way that the pointer size is 14353 determined. 14354 14355 `-mlong32' 14356 Force `long', `int', and pointer types to be 32 bits wide. 14357 14358 The default size of `int's, `long's and pointers depends on the 14359 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 14360 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 14361 `long's. Pointers are the same size as `long's, or the same size 14362 as integer registers, whichever is smaller. 14363 14364 `-msym32' 14365 `-mno-sym32' 14366 Assume (do not assume) that all symbols have 32-bit values, 14367 regardless of the selected ABI. This option is useful in 14368 combination with `-mabi=64' and `-mno-abicalls' because it allows 14369 GCC to generate shorter and faster references to symbolic 14370 addresses. 14371 14372 `-G NUM' 14373 Put definitions of externally-visible data in a small data section 14374 if that data is no bigger than NUM bytes. GCC can then access the 14375 data more efficiently; see `-mgpopt' for details. 14376 14377 The default `-G' option depends on the configuration. 14378 14379 `-mlocal-sdata' 14380 `-mno-local-sdata' 14381 Extend (do not extend) the `-G' behavior to local data too, such 14382 as to static variables in C. `-mlocal-sdata' is the default for 14383 all configurations. 14384 14385 If the linker complains that an application is using too much 14386 small data, you might want to try rebuilding the less 14387 performance-critical parts with `-mno-local-sdata'. You might 14388 also want to build large libraries with `-mno-local-sdata', so 14389 that the libraries leave more room for the main program. 14390 14391 `-mextern-sdata' 14392 `-mno-extern-sdata' 14393 Assume (do not assume) that externally-defined data will be in a 14394 small data section if that data is within the `-G' limit. 14395 `-mextern-sdata' is the default for all configurations. 14396 14397 If you compile a module MOD with `-mextern-sdata' `-G NUM' 14398 `-mgpopt', and MOD references a variable VAR that is no bigger 14399 than NUM bytes, you must make sure that VAR is placed in a small 14400 data section. If VAR is defined by another module, you must 14401 either compile that module with a high-enough `-G' setting or 14402 attach a `section' attribute to VAR's definition. If VAR is 14403 common, you must link the application with a high-enough `-G' 14404 setting. 14405 14406 The easiest way of satisfying these restrictions is to compile and 14407 link every module with the same `-G' option. However, you may 14408 wish to build a library that supports several different small data 14409 limits. You can do this by compiling the library with the highest 14410 supported `-G' setting and additionally using `-mno-extern-sdata' 14411 to stop the library from making assumptions about 14412 externally-defined data. 14413 14414 `-mgpopt' 14415 `-mno-gpopt' 14416 Use (do not use) GP-relative accesses for symbols that are known 14417 to be in a small data section; see `-G', `-mlocal-sdata' and 14418 `-mextern-sdata'. `-mgpopt' is the default for all configurations. 14419 14420 `-mno-gpopt' is useful for cases where the `$gp' register might 14421 not hold the value of `_gp'. For example, if the code is part of 14422 a library that might be used in a boot monitor, programs that call 14423 boot monitor routines will pass an unknown value in `$gp'. (In 14424 such situations, the boot monitor itself would usually be compiled 14425 with `-G0'.) 14426 14427 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'. 14428 14429 `-membedded-data' 14430 `-mno-embedded-data' 14431 Allocate variables to the read-only data section first if 14432 possible, then next in the small data section if possible, 14433 otherwise in data. This gives slightly slower code than the 14434 default, but reduces the amount of RAM required when executing, 14435 and thus may be preferred for some embedded systems. 14436 14437 `-muninit-const-in-rodata' 14438 `-mno-uninit-const-in-rodata' 14439 Put uninitialized `const' variables in the read-only data section. 14440 This option is only meaningful in conjunction with 14441 `-membedded-data'. 14442 14443 `-mcode-readable=SETTING' 14444 Specify whether GCC may generate code that reads from executable 14445 sections. There are three possible settings: 14446 14447 `-mcode-readable=yes' 14448 Instructions may freely access executable sections. This is 14449 the default setting. 14450 14451 `-mcode-readable=pcrel' 14452 MIPS16 PC-relative load instructions can access executable 14453 sections, but other instructions must not do so. This option 14454 is useful on 4KSc and 4KSd processors when the code TLBs have 14455 the Read Inhibit bit set. It is also useful on processors 14456 that can be configured to have a dual instruction/data SRAM 14457 interface and that, like the M4K, automatically redirect 14458 PC-relative loads to the instruction RAM. 14459 14460 `-mcode-readable=no' 14461 Instructions must not access executable sections. This 14462 option can be useful on targets that are configured to have a 14463 dual instruction/data SRAM interface but that (unlike the 14464 M4K) do not automatically redirect PC-relative loads to the 14465 instruction RAM. 14466 14467 `-msplit-addresses' 14468 `-mno-split-addresses' 14469 Enable (disable) use of the `%hi()' and `%lo()' assembler 14470 relocation operators. This option has been superseded by 14471 `-mexplicit-relocs' but is retained for backwards compatibility. 14472 14473 `-mexplicit-relocs' 14474 `-mno-explicit-relocs' 14475 Use (do not use) assembler relocation operators when dealing with 14476 symbolic addresses. The alternative, selected by 14477 `-mno-explicit-relocs', is to use assembler macros instead. 14478 14479 `-mexplicit-relocs' is the default if GCC was configured to use an 14480 assembler that supports relocation operators. 14481 14482 `-mcheck-zero-division' 14483 `-mno-check-zero-division' 14484 Trap (do not trap) on integer division by zero. 14485 14486 The default is `-mcheck-zero-division'. 14487 14488 `-mdivide-traps' 14489 `-mdivide-breaks' 14490 MIPS systems check for division by zero by generating either a 14491 conditional trap or a break instruction. Using traps results in 14492 smaller code, but is only supported on MIPS II and later. Also, 14493 some versions of the Linux kernel have a bug that prevents trap 14494 from generating the proper signal (`SIGFPE'). Use 14495 `-mdivide-traps' to allow conditional traps on architectures that 14496 support them and `-mdivide-breaks' to force the use of breaks. 14497 14498 The default is usually `-mdivide-traps', but this can be 14499 overridden at configure time using `--with-divide=breaks'. 14500 Divide-by-zero checks can be completely disabled using 14501 `-mno-check-zero-division'. 14502 14503 `-mmemcpy' 14504 `-mno-memcpy' 14505 Force (do not force) the use of `memcpy()' for non-trivial block 14506 moves. The default is `-mno-memcpy', which allows GCC to inline 14507 most constant-sized copies. 14508 14509 `-mlong-calls' 14510 `-mno-long-calls' 14511 Disable (do not disable) use of the `jal' instruction. Calling 14512 functions using `jal' is more efficient but requires the caller 14513 and callee to be in the same 256 megabyte segment. 14514 14515 This option has no effect on abicalls code. The default is 14516 `-mno-long-calls'. 14517 14518 `-mmad' 14519 `-mno-mad' 14520 Enable (disable) use of the `mad', `madu' and `mul' instructions, 14521 as provided by the R4650 ISA. 14522 14523 `-mfused-madd' 14524 `-mno-fused-madd' 14525 Enable (disable) use of the floating point multiply-accumulate 14526 instructions, when they are available. The default is 14527 `-mfused-madd'. 14528 14529 When multiply-accumulate instructions are used, the intermediate 14530 product is calculated to infinite precision and is not subject to 14531 the FCSR Flush to Zero bit. This may be undesirable in some 14532 circumstances. 14533 14534 `-nocpp' 14535 Tell the MIPS assembler to not run its preprocessor over user 14536 assembler files (with a `.s' suffix) when assembling them. 14537 14538 `-mfix-r4000' 14539 `-mno-fix-r4000' 14540 Work around certain R4000 CPU errata: 14541 - A double-word or a variable shift may give an incorrect 14542 result if executed immediately after starting an integer 14543 division. 14544 14545 - A double-word or a variable shift may give an incorrect 14546 result if executed while an integer multiplication is in 14547 progress. 14548 14549 - An integer division may give an incorrect result if started 14550 in a delay slot of a taken branch or a jump. 14551 14552 `-mfix-r4400' 14553 `-mno-fix-r4400' 14554 Work around certain R4400 CPU errata: 14555 - A double-word or a variable shift may give an incorrect 14556 result if executed immediately after starting an integer 14557 division. 14558 14559 `-mfix-r10000' 14560 `-mno-fix-r10000' 14561 Work around certain R10000 errata: 14562 - `ll'/`sc' sequences may not behave atomically on revisions 14563 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 14564 14565 This option can only be used if the target architecture supports 14566 branch-likely instructions. `-mfix-r10000' is the default when 14567 `-march=r10000' is used; `-mno-fix-r10000' is the default 14568 otherwise. 14569 14570 `-mfix-vr4120' 14571 `-mno-fix-vr4120' 14572 Work around certain VR4120 errata: 14573 - `dmultu' does not always produce the correct result. 14574 14575 - `div' and `ddiv' do not always produce the correct result if 14576 one of the operands is negative. 14577 The workarounds for the division errata rely on special functions 14578 in `libgcc.a'. At present, these functions are only provided by 14579 the `mips64vr*-elf' configurations. 14580 14581 Other VR4120 errata require a nop to be inserted between certain 14582 pairs of instructions. These errata are handled by the assembler, 14583 not by GCC itself. 14584 14585 `-mfix-vr4130' 14586 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 14587 implemented by the assembler rather than by GCC, although GCC will 14588 avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 14589 `dmacc' and `dmacchi' instructions are available instead. 14590 14591 `-mfix-sb1' 14592 `-mno-fix-sb1' 14593 Work around certain SB-1 CPU core errata. (This flag currently 14594 works around the SB-1 revision 2 "F1" and "F2" floating point 14595 errata.) 14596 14597 `-mr10k-cache-barrier=SETTING' 14598 Specify whether GCC should insert cache barriers to avoid the 14599 side-effects of speculation on R10K processors. 14600 14601 In common with many processors, the R10K tries to predict the 14602 outcome of a conditional branch and speculatively executes 14603 instructions from the "taken" branch. It later aborts these 14604 instructions if the predicted outcome was wrong. However, on the 14605 R10K, even aborted instructions can have side effects. 14606 14607 This problem only affects kernel stores and, depending on the 14608 system, kernel loads. As an example, a speculatively-executed 14609 store may load the target memory into cache and mark the cache 14610 line as dirty, even if the store itself is later aborted. If a 14611 DMA operation writes to the same area of memory before the "dirty" 14612 line is flushed, the cached data will overwrite the DMA-ed data. 14613 See the R10K processor manual for a full description, including 14614 other potential problems. 14615 14616 One workaround is to insert cache barrier instructions before 14617 every memory access that might be speculatively executed and that 14618 might have side effects even if aborted. 14619 `-mr10k-cache-barrier=SETTING' controls GCC's implementation of 14620 this workaround. It assumes that aborted accesses to any byte in 14621 the following regions will not have side effects: 14622 14623 1. the memory occupied by the current function's stack frame; 14624 14625 2. the memory occupied by an incoming stack argument; 14626 14627 3. the memory occupied by an object with a link-time-constant 14628 address. 14629 14630 It is the kernel's responsibility to ensure that speculative 14631 accesses to these regions are indeed safe. 14632 14633 If the input program contains a function declaration such as: 14634 14635 void foo (void); 14636 14637 then the implementation of `foo' must allow `j foo' and `jal foo' 14638 to be executed speculatively. GCC honors this restriction for 14639 functions it compiles itself. It expects non-GCC functions (such 14640 as hand-written assembly code) to do the same. 14641 14642 The option has three forms: 14643 14644 `-mr10k-cache-barrier=load-store' 14645 Insert a cache barrier before a load or store that might be 14646 speculatively executed and that might have side effects even 14647 if aborted. 14648 14649 `-mr10k-cache-barrier=store' 14650 Insert a cache barrier before a store that might be 14651 speculatively executed and that might have side effects even 14652 if aborted. 14653 14654 `-mr10k-cache-barrier=none' 14655 Disable the insertion of cache barriers. This is the default 14656 setting. 14657 14658 `-mflush-func=FUNC' 14659 `-mno-flush-func' 14660 Specifies the function to call to flush the I and D caches, or to 14661 not call any such function. If called, the function must take the 14662 same arguments as the common `_flush_func()', that is, the address 14663 of the memory range for which the cache is being flushed, the size 14664 of the memory range, and the number 3 (to flush both caches). The 14665 default depends on the target GCC was configured for, but commonly 14666 is either `_flush_func' or `__cpu_flush'. 14667 14668 `mbranch-cost=NUM' 14669 Set the cost of branches to roughly NUM "simple" instructions. 14670 This cost is only a heuristic and is not guaranteed to produce 14671 consistent results across releases. A zero cost redundantly 14672 selects the default, which is based on the `-mtune' setting. 14673 14674 `-mbranch-likely' 14675 `-mno-branch-likely' 14676 Enable or disable use of Branch Likely instructions, regardless of 14677 the default for the selected architecture. By default, Branch 14678 Likely instructions may be generated if they are supported by the 14679 selected architecture. An exception is for the MIPS32 and MIPS64 14680 architectures and processors which implement those architectures; 14681 for those, Branch Likely instructions will not be generated by 14682 default because the MIPS32 and MIPS64 architectures specifically 14683 deprecate their use. 14684 14685 `-mfp-exceptions' 14686 `-mno-fp-exceptions' 14687 Specifies whether FP exceptions are enabled. This affects how we 14688 schedule FP instructions for some processors. The default is that 14689 FP exceptions are enabled. 14690 14691 For instance, on the SB-1, if FP exceptions are disabled, and we 14692 are emitting 64-bit code, then we can use both FP pipes. 14693 Otherwise, we can only use one FP pipe. 14694 14695 `-mvr4130-align' 14696 `-mno-vr4130-align' 14697 The VR4130 pipeline is two-way superscalar, but can only issue two 14698 instructions together if the first one is 8-byte aligned. When 14699 this option is enabled, GCC will align pairs of instructions that 14700 it thinks should execute in parallel. 14701 14702 This option only has an effect when optimizing for the VR4130. It 14703 normally makes code faster, but at the expense of making it bigger. 14704 It is enabled by default at optimization level `-O3'. 14705 14706 `-msynci' 14707 `-mno-synci' 14708 Enable (disable) generation of `synci' instructions on 14709 architectures that support it. The `synci' instructions (if 14710 enabled) will be generated when `__builtin___clear_cache()' is 14711 compiled. 14712 14713 This option defaults to `-mno-synci', but the default can be 14714 overridden by configuring with `--with-synci'. 14715 14716 When compiling code for single processor systems, it is generally 14717 safe to use `synci'. However, on many multi-core (SMP) systems, it 14718 will not invalidate the instruction caches on all cores and may 14719 lead to undefined behavior. 14720 14721 `-mrelax-pic-calls' 14722 `-mno-relax-pic-calls' 14723 Try to turn PIC calls that are normally dispatched via register 14724 `$25' into direct calls. This is only possible if the linker can 14725 resolve the destination at link-time and if the destination is 14726 within range for a direct call. 14727 14728 `-mrelax-pic-calls' is the default if GCC was configured to use an 14729 assembler and a linker that supports the `.reloc' assembly 14730 directive and `-mexplicit-relocs' is in effect. With 14731 `-mno-explicit-relocs', this optimization can be performed by the 14732 assembler and the linker alone without help from the compiler. 14733 14734 `-mmcount-ra-address' 14735 `-mno-mcount-ra-address' 14736 Emit (do not emit) code that allows `_mcount' to modify the 14737 calling function's return address. When enabled, this option 14738 extends the usual `_mcount' interface with a new RA-ADDRESS 14739 parameter, which has type `intptr_t *' and is passed in register 14740 `$12'. `_mcount' can then modify the return address by doing both 14741 of the following: 14742 * Returning the new address in register `$31'. 14743 14744 * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is 14745 nonnull. 14746 14747 The default is `-mno-mcount-ra-address'. 14748 14749 14750 14751 File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 14752 14753 3.17.28 MMIX Options 14754 -------------------- 14755 14756 These options are defined for the MMIX: 14757 14758 `-mlibfuncs' 14759 `-mno-libfuncs' 14760 Specify that intrinsic library functions are being compiled, 14761 passing all values in registers, no matter the size. 14762 14763 `-mepsilon' 14764 `-mno-epsilon' 14765 Generate floating-point comparison instructions that compare with 14766 respect to the `rE' epsilon register. 14767 14768 `-mabi=mmixware' 14769 `-mabi=gnu' 14770 Generate code that passes function parameters and return values 14771 that (in the called function) are seen as registers `$0' and up, 14772 as opposed to the GNU ABI which uses global registers `$231' and 14773 up. 14774 14775 `-mzero-extend' 14776 `-mno-zero-extend' 14777 When reading data from memory in sizes shorter than 64 bits, use 14778 (do not use) zero-extending load instructions by default, rather 14779 than sign-extending ones. 14780 14781 `-mknuthdiv' 14782 `-mno-knuthdiv' 14783 Make the result of a division yielding a remainder have the same 14784 sign as the divisor. With the default, `-mno-knuthdiv', the sign 14785 of the remainder follows the sign of the dividend. Both methods 14786 are arithmetically valid, the latter being almost exclusively used. 14787 14788 `-mtoplevel-symbols' 14789 `-mno-toplevel-symbols' 14790 Prepend (do not prepend) a `:' to all global symbols, so the 14791 assembly code can be used with the `PREFIX' assembly directive. 14792 14793 `-melf' 14794 Generate an executable in the ELF format, rather than the default 14795 `mmo' format used by the `mmix' simulator. 14796 14797 `-mbranch-predict' 14798 `-mno-branch-predict' 14799 Use (do not use) the probable-branch instructions, when static 14800 branch prediction indicates a probable branch. 14801 14802 `-mbase-addresses' 14803 `-mno-base-addresses' 14804 Generate (do not generate) code that uses _base addresses_. Using 14805 a base address automatically generates a request (handled by the 14806 assembler and the linker) for a constant to be set up in a global 14807 register. The register is used for one or more base address 14808 requests within the range 0 to 255 from the value held in the 14809 register. The generally leads to short and fast code, but the 14810 number of different data items that can be addressed is limited. 14811 This means that a program that uses lots of static data may 14812 require `-mno-base-addresses'. 14813 14814 `-msingle-exit' 14815 `-mno-single-exit' 14816 Force (do not force) generated code to have a single exit point in 14817 each function. 14818 14819 14820 File: gcc.info, Node: MN10300 Options, Next: PDP-11 Options, Prev: MMIX Options, Up: Submodel Options 14821 14822 3.17.29 MN10300 Options 14823 ----------------------- 14824 14825 These `-m' options are defined for Matsushita MN10300 architectures: 14826 14827 `-mmult-bug' 14828 Generate code to avoid bugs in the multiply instructions for the 14829 MN10300 processors. This is the default. 14830 14831 `-mno-mult-bug' 14832 Do not generate code to avoid bugs in the multiply instructions 14833 for the MN10300 processors. 14834 14835 `-mam33' 14836 Generate code which uses features specific to the AM33 processor. 14837 14838 `-mno-am33' 14839 Do not generate code which uses features specific to the AM33 14840 processor. This is the default. 14841 14842 `-mam33-2' 14843 Generate code which uses features specific to the AM33/2.0 14844 processor. 14845 14846 `-mam34' 14847 Generate code which uses features specific to the AM34 processor. 14848 14849 `-mtune=CPU-TYPE' 14850 Use the timing characteristics of the indicated CPU type when 14851 scheduling instructions. This does not change the targeted 14852 processor type. The CPU type must be one of `mn10300', `am33', 14853 `am33-2' or `am34'. 14854 14855 `-mreturn-pointer-on-d0' 14856 When generating a function which returns a pointer, return the 14857 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 14858 only in a0, and attempts to call such functions without a prototype 14859 would result in errors. Note that this option is on by default; 14860 use `-mno-return-pointer-on-d0' to disable it. 14861 14862 `-mno-crt0' 14863 Do not link in the C run-time initialization object file. 14864 14865 `-mrelax' 14866 Indicate to the linker that it should perform a relaxation 14867 optimization pass to shorten branches, calls and absolute memory 14868 addresses. This option only has an effect when used on the 14869 command line for the final link step. 14870 14871 This option makes symbolic debugging impossible. 14872 14873 `-mliw' 14874 Allow the compiler to generate _Long Instruction Word_ 14875 instructions if the target is the `AM33' or later. This is the 14876 default. This option defines the preprocessor macro `__LIW__'. 14877 14878 `-mnoliw' 14879 Do not allow the compiler to generate _Long Instruction Word_ 14880 instructions. This option defines the preprocessor macro 14881 `__NO_LIW__'. 14882 14883 14884 14885 File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: MN10300 Options, Up: Submodel Options 14886 14887 3.17.30 PDP-11 Options 14888 ---------------------- 14889 14890 These options are defined for the PDP-11: 14891 14892 `-mfpu' 14893 Use hardware FPP floating point. This is the default. (FIS 14894 floating point on the PDP-11/40 is not supported.) 14895 14896 `-msoft-float' 14897 Do not use hardware floating point. 14898 14899 `-mac0' 14900 Return floating-point results in ac0 (fr0 in Unix assembler 14901 syntax). 14902 14903 `-mno-ac0' 14904 Return floating-point results in memory. This is the default. 14905 14906 `-m40' 14907 Generate code for a PDP-11/40. 14908 14909 `-m45' 14910 Generate code for a PDP-11/45. This is the default. 14911 14912 `-m10' 14913 Generate code for a PDP-11/10. 14914 14915 `-mbcopy-builtin' 14916 Use inline `movmemhi' patterns for copying memory. This is the 14917 default. 14918 14919 `-mbcopy' 14920 Do not use inline `movmemhi' patterns for copying memory. 14921 14922 `-mint16' 14923 `-mno-int32' 14924 Use 16-bit `int'. This is the default. 14925 14926 `-mint32' 14927 `-mno-int16' 14928 Use 32-bit `int'. 14929 14930 `-mfloat64' 14931 `-mno-float32' 14932 Use 64-bit `float'. This is the default. 14933 14934 `-mfloat32' 14935 `-mno-float64' 14936 Use 32-bit `float'. 14937 14938 `-mabshi' 14939 Use `abshi2' pattern. This is the default. 14940 14941 `-mno-abshi' 14942 Do not use `abshi2' pattern. 14943 14944 `-mbranch-expensive' 14945 Pretend that branches are expensive. This is for experimenting 14946 with code generation only. 14947 14948 `-mbranch-cheap' 14949 Do not pretend that branches are expensive. This is the default. 14950 14951 `-munix-asm' 14952 Use Unix assembler syntax. This is the default when configured for 14953 `pdp11-*-bsd'. 14954 14955 `-mdec-asm' 14956 Use DEC assembler syntax. This is the default when configured for 14957 any PDP-11 target other than `pdp11-*-bsd'. 14958 14959 14960 File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 14961 14962 3.17.31 picoChip Options 14963 ------------------------ 14964 14965 These `-m' options are defined for picoChip implementations: 14966 14967 `-mae=AE_TYPE' 14968 Set the instruction set, register set, and instruction scheduling 14969 parameters for array element type AE_TYPE. Supported values for 14970 AE_TYPE are `ANY', `MUL', and `MAC'. 14971 14972 `-mae=ANY' selects a completely generic AE type. Code generated 14973 with this option will run on any of the other AE types. The code 14974 will not be as efficient as it would be if compiled for a specific 14975 AE type, and some types of operation (e.g., multiplication) will 14976 not work properly on all types of AE. 14977 14978 `-mae=MUL' selects a MUL AE type. This is the most useful AE type 14979 for compiled code, and is the default. 14980 14981 `-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 14982 option may suffer from poor performance of byte (char) 14983 manipulation, since the DSP AE does not provide hardware support 14984 for byte load/stores. 14985 14986 `-msymbol-as-address' 14987 Enable the compiler to directly use a symbol name as an address in 14988 a load/store instruction, without first loading it into a 14989 register. Typically, the use of this option will generate larger 14990 programs, which run faster than when the option isn't used. 14991 However, the results vary from program to program, so it is left 14992 as a user option, rather than being permanently enabled. 14993 14994 `-mno-inefficient-warnings' 14995 Disables warnings about the generation of inefficient code. These 14996 warnings can be generated, for example, when compiling code which 14997 performs byte-level memory operations on the MAC AE type. The MAC 14998 AE has no hardware support for byte-level memory operations, so 14999 all byte load/stores must be synthesized from word load/store 15000 operations. This is inefficient and a warning will be generated 15001 indicating to the programmer that they should rewrite the code to 15002 avoid byte operations, or to target an AE type which has the 15003 necessary hardware support. This option enables the warning to be 15004 turned off. 15005 15006 15007 15008 File: gcc.info, Node: PowerPC Options, Next: RS/6000 and PowerPC Options, Prev: picoChip Options, Up: Submodel Options 15009 15010 3.17.32 PowerPC Options 15011 ----------------------- 15012 15013 These are listed under *Note RS/6000 and PowerPC Options::. 15014 15015 15016 File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: PowerPC Options, Up: Submodel Options 15017 15018 3.17.33 IBM RS/6000 and PowerPC Options 15019 --------------------------------------- 15020 15021 These `-m' options are defined for the IBM RS/6000 and PowerPC: 15022 `-mpower' 15023 `-mno-power' 15024 `-mpower2' 15025 `-mno-power2' 15026 `-mpowerpc' 15027 `-mno-powerpc' 15028 `-mpowerpc-gpopt' 15029 `-mno-powerpc-gpopt' 15030 `-mpowerpc-gfxopt' 15031 `-mno-powerpc-gfxopt' 15032 `-mpowerpc64' 15033 `-mno-powerpc64' 15034 `-mmfcrf' 15035 `-mno-mfcrf' 15036 `-mpopcntb' 15037 `-mno-popcntb' 15038 `-mpopcntd' 15039 `-mno-popcntd' 15040 `-mfprnd' 15041 `-mno-fprnd' 15042 `-mcmpb' 15043 `-mno-cmpb' 15044 `-mmfpgpr' 15045 `-mno-mfpgpr' 15046 `-mhard-dfp' 15047 `-mno-hard-dfp' 15048 GCC supports two related instruction set architectures for the 15049 RS/6000 and PowerPC. The "POWER" instruction set are those 15050 instructions supported by the `rios' chip set used in the original 15051 RS/6000 systems and the "PowerPC" instruction set is the 15052 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx 15053 microprocessors, and the IBM 4xx, 6xx, and follow-on 15054 microprocessors. 15055 15056 Neither architecture is a subset of the other. However there is a 15057 large common subset of instructions supported by both. An MQ 15058 register is included in processors supporting the POWER 15059 architecture. 15060 15061 You use these options to specify which instructions are available 15062 on the processor you are using. The default value of these 15063 options is determined when configuring GCC. Specifying the 15064 `-mcpu=CPU_TYPE' overrides the specification of these options. We 15065 recommend you use the `-mcpu=CPU_TYPE' option rather than the 15066 options listed above. 15067 15068 The `-mpower' option allows GCC to generate instructions that are 15069 found only in the POWER architecture and to use the MQ register. 15070 Specifying `-mpower2' implies `-power' and also allows GCC to 15071 generate instructions that are present in the POWER2 architecture 15072 but not the original POWER architecture. 15073 15074 The `-mpowerpc' option allows GCC to generate instructions that 15075 are found only in the 32-bit subset of the PowerPC architecture. 15076 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 15077 GCC to use the optional PowerPC architecture instructions in the 15078 General Purpose group, including floating-point square root. 15079 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 15080 GCC to use the optional PowerPC architecture instructions in the 15081 Graphics group, including floating-point select. 15082 15083 The `-mmfcrf' option allows GCC to generate the move from 15084 condition register field instruction implemented on the POWER4 15085 processor and other processors that support the PowerPC V2.01 15086 architecture. The `-mpopcntb' option allows GCC to generate the 15087 popcount and double precision FP reciprocal estimate instruction 15088 implemented on the POWER5 processor and other processors that 15089 support the PowerPC V2.02 architecture. The `-mpopcntd' option 15090 allows GCC to generate the popcount instruction implemented on the 15091 POWER7 processor and other processors that support the PowerPC 15092 V2.06 architecture. The `-mfprnd' option allows GCC to generate 15093 the FP round to integer instructions implemented on the POWER5+ 15094 processor and other processors that support the PowerPC V2.03 15095 architecture. The `-mcmpb' option allows GCC to generate the 15096 compare bytes instruction implemented on the POWER6 processor and 15097 other processors that support the PowerPC V2.05 architecture. The 15098 `-mmfpgpr' option allows GCC to generate the FP move to/from 15099 general purpose register instructions implemented on the POWER6X 15100 processor and other processors that support the extended PowerPC 15101 V2.05 architecture. The `-mhard-dfp' option allows GCC to 15102 generate the decimal floating point instructions implemented on 15103 some POWER processors. 15104 15105 The `-mpowerpc64' option allows GCC to generate the additional 15106 64-bit instructions that are found in the full PowerPC64 15107 architecture and to treat GPRs as 64-bit, doubleword quantities. 15108 GCC defaults to `-mno-powerpc64'. 15109 15110 If you specify both `-mno-power' and `-mno-powerpc', GCC will use 15111 only the instructions in the common subset of both architectures 15112 plus some special AIX common-mode calls, and will not use the MQ 15113 register. Specifying both `-mpower' and `-mpowerpc' permits GCC 15114 to use any instruction from either architecture and to allow use 15115 of the MQ register; specify this for the Motorola MPC601. 15116 15117 `-mnew-mnemonics' 15118 `-mold-mnemonics' 15119 Select which mnemonics to use in the generated assembler code. 15120 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined 15121 for the PowerPC architecture. With `-mold-mnemonics' it uses the 15122 assembler mnemonics defined for the POWER architecture. 15123 Instructions defined in only one architecture have only one 15124 mnemonic; GCC uses that mnemonic irrespective of which of these 15125 options is specified. 15126 15127 GCC defaults to the mnemonics appropriate for the architecture in 15128 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of 15129 these option. Unless you are building a cross-compiler, you 15130 should normally not specify either `-mnew-mnemonics' or 15131 `-mold-mnemonics', but should instead accept the default. 15132 15133 `-mcpu=CPU_TYPE' 15134 Set architecture type, register usage, choice of mnemonics, and 15135 instruction scheduling parameters for machine type CPU_TYPE. 15136 Supported values for CPU_TYPE are `401', `403', `405', `405fp', 15137 `440', `440fp', `464', `464fp', `476', `476fp', `505', `601', 15138 `602', `603', `603e', `604', `604e', `620', `630', `740', `7400', 15139 `7450', `750', `801', `821', `823', `860', `970', `8540', `a2', 15140 `e300c2', `e300c3', `e500mc', `e500mc64', `ec603e', `G3', `G4', 15141 `G5', `titan', `power', `power2', `power3', `power4', `power5', 15142 `power5+', `power6', `power6x', `power7', `common', `powerpc', 15143 `powerpc64', `rios', `rios1', `rios2', `rsc', and `rs64'. 15144 15145 `-mcpu=common' selects a completely generic processor. Code 15146 generated under this option will run on any POWER or PowerPC 15147 processor. GCC will use only the instructions in the common 15148 subset of both architectures, and will not use the MQ register. 15149 GCC assumes a generic processor model for scheduling purposes. 15150 15151 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and 15152 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit 15153 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 15154 types, with an appropriate, generic processor model assumed for 15155 scheduling purposes. 15156 15157 The other options specify a specific processor. Code generated 15158 under those options will run best on that processor, and may not 15159 run at all on others. 15160 15161 The `-mcpu' options automatically enable or disable the following 15162 options: 15163 15164 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 15165 -mnew-mnemonics -mpopcntb -mpopcntd -mpower -mpower2 -mpowerpc64 15166 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 15167 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx 15168 15169 The particular options set for any particular CPU will vary between 15170 compiler versions, depending on what setting seems to produce 15171 optimal code for that CPU; it doesn't necessarily reflect the 15172 actual hardware's capabilities. If you wish to set an individual 15173 option to a particular value, you may specify it after the `-mcpu' 15174 option, like `-mcpu=970 -mno-altivec'. 15175 15176 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 15177 or disabled by the `-mcpu' option at present because AIX does not 15178 have full support for these options. You may still enable or 15179 disable them individually if you're sure it'll work in your 15180 environment. 15181 15182 `-mtune=CPU_TYPE' 15183 Set the instruction scheduling parameters for machine type 15184 CPU_TYPE, but do not set the architecture type, register usage, or 15185 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values 15186 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are 15187 specified, the code generated will use the architecture, 15188 registers, and mnemonics set by `-mcpu', but the scheduling 15189 parameters set by `-mtune'. 15190 15191 `-mcmodel=small' 15192 Generate PowerPC64 code for the small model: The TOC is limited to 15193 64k. 15194 15195 `-mcmodel=medium' 15196 Generate PowerPC64 code for the medium model: The TOC and other 15197 static data may be up to a total of 4G in size. 15198 15199 `-mcmodel=large' 15200 Generate PowerPC64 code for the large model: The TOC may be up to 15201 4G in size. Other data and code is only limited by the 64-bit 15202 address space. 15203 15204 `-maltivec' 15205 `-mno-altivec' 15206 Generate code that uses (does not use) AltiVec instructions, and 15207 also enable the use of built-in functions that allow more direct 15208 access to the AltiVec instruction set. You may also need to set 15209 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 15210 enhancements. 15211 15212 `-mvrsave' 15213 `-mno-vrsave' 15214 Generate VRSAVE instructions when generating AltiVec code. 15215 15216 `-mgen-cell-microcode' 15217 Generate Cell microcode instructions 15218 15219 `-mwarn-cell-microcode' 15220 Warning when a Cell microcode instruction is going to emitted. An 15221 example of a Cell microcode instruction is a variable shift. 15222 15223 `-msecure-plt' 15224 Generate code that allows ld and ld.so to build executables and 15225 shared libraries with non-exec .plt and .got sections. This is a 15226 PowerPC 32-bit SYSV ABI option. 15227 15228 `-mbss-plt' 15229 Generate code that uses a BSS .plt section that ld.so fills in, and 15230 requires .plt and .got sections that are both writable and 15231 executable. This is a PowerPC 32-bit SYSV ABI option. 15232 15233 `-misel' 15234 `-mno-isel' 15235 This switch enables or disables the generation of ISEL 15236 instructions. 15237 15238 `-misel=YES/NO' 15239 This switch has been deprecated. Use `-misel' and `-mno-isel' 15240 instead. 15241 15242 `-mspe' 15243 `-mno-spe' 15244 This switch enables or disables the generation of SPE simd 15245 instructions. 15246 15247 `-mpaired' 15248 `-mno-paired' 15249 This switch enables or disables the generation of PAIRED simd 15250 instructions. 15251 15252 `-mspe=YES/NO' 15253 This option has been deprecated. Use `-mspe' and `-mno-spe' 15254 instead. 15255 15256 `-mvsx' 15257 `-mno-vsx' 15258 Generate code that uses (does not use) vector/scalar (VSX) 15259 instructions, and also enable the use of built-in functions that 15260 allow more direct access to the VSX instruction set. 15261 15262 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 15263 `-mfloat-gprs' 15264 This switch enables or disables the generation of floating point 15265 operations on the general purpose registers for architectures that 15266 support it. 15267 15268 The argument YES or SINGLE enables the use of single-precision 15269 floating point operations. 15270 15271 The argument DOUBLE enables the use of single and double-precision 15272 floating point operations. 15273 15274 The argument NO disables floating point operations on the general 15275 purpose registers. 15276 15277 This option is currently only available on the MPC854x. 15278 15279 `-m32' 15280 `-m64' 15281 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 15282 targets (including GNU/Linux). The 32-bit environment sets int, 15283 long and pointer to 32 bits and generates code that runs on any 15284 PowerPC variant. The 64-bit environment sets int to 32 bits and 15285 long and pointer to 64 bits, and generates code for PowerPC64, as 15286 for `-mpowerpc64'. 15287 15288 `-mfull-toc' 15289 `-mno-fp-in-toc' 15290 `-mno-sum-in-toc' 15291 `-mminimal-toc' 15292 Modify generation of the TOC (Table Of Contents), which is created 15293 for every executable file. The `-mfull-toc' option is selected by 15294 default. In that case, GCC will allocate at least one TOC entry 15295 for each unique non-automatic variable reference in your program. 15296 GCC will also place floating-point constants in the TOC. However, 15297 only 16,384 entries are available in the TOC. 15298 15299 If you receive a linker error message that saying you have 15300 overflowed the available TOC space, you can reduce the amount of 15301 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 15302 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 15303 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 15304 code to calculate the sum of an address and a constant at run-time 15305 instead of putting that sum into the TOC. You may specify one or 15306 both of these options. Each causes GCC to produce very slightly 15307 slower and larger code at the expense of conserving TOC space. 15308 15309 If you still run out of space in the TOC even when you specify 15310 both of these options, specify `-mminimal-toc' instead. This 15311 option causes GCC to make only one TOC entry for every file. When 15312 you specify this option, GCC will produce code that is slower and 15313 larger but which uses extremely little TOC space. You may wish to 15314 use this option only on files that contain less frequently 15315 executed code. 15316 15317 `-maix64' 15318 `-maix32' 15319 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 15320 64-bit `long' type, and the infrastructure needed to support them. 15321 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while 15322 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'. 15323 GCC defaults to `-maix32'. 15324 15325 `-mxl-compat' 15326 `-mno-xl-compat' 15327 Produce code that conforms more closely to IBM XL compiler 15328 semantics when using AIX-compatible ABI. Pass floating-point 15329 arguments to prototyped functions beyond the register save area 15330 (RSA) on the stack in addition to argument FPRs. Do not assume 15331 that most significant double in 128-bit long double value is 15332 properly rounded when comparing values and converting to double. 15333 Use XL symbol names for long double support routines. 15334 15335 The AIX calling convention was extended but not initially 15336 documented to handle an obscure K&R C case of calling a function 15337 that takes the address of its arguments with fewer arguments than 15338 declared. IBM XL compilers access floating point arguments which 15339 do not fit in the RSA from the stack when a subroutine is compiled 15340 without optimization. Because always storing floating-point 15341 arguments on the stack is inefficient and rarely needed, this 15342 option is not enabled by default and only is necessary when 15343 calling subroutines compiled by IBM XL compilers without 15344 optimization. 15345 15346 `-mpe' 15347 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 15348 application written to use message passing with special startup 15349 code to enable the application to run. The system must have PE 15350 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 15351 `specs' file must be overridden with the `-specs=' option to 15352 specify the appropriate directory location. The Parallel 15353 Environment does not support threads, so the `-mpe' option and the 15354 `-pthread' option are incompatible. 15355 15356 `-malign-natural' 15357 `-malign-power' 15358 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 15359 `-malign-natural' overrides the ABI-defined alignment of larger 15360 types, such as floating-point doubles, on their natural size-based 15361 boundary. The option `-malign-power' instructs GCC to follow the 15362 ABI-specified alignment rules. GCC defaults to the standard 15363 alignment defined in the ABI. 15364 15365 On 64-bit Darwin, natural alignment is the default, and 15366 `-malign-power' is not supported. 15367 15368 `-msoft-float' 15369 `-mhard-float' 15370 Generate code that does not use (uses) the floating-point register 15371 set. Software floating point emulation is provided if you use the 15372 `-msoft-float' option, and pass the option to GCC when linking. 15373 15374 `-msingle-float' 15375 `-mdouble-float' 15376 Generate code for single or double-precision floating point 15377 operations. `-mdouble-float' implies `-msingle-float'. 15378 15379 `-msimple-fpu' 15380 Do not generate sqrt and div instructions for hardware floating 15381 point unit. 15382 15383 `-mfpu' 15384 Specify type of floating point unit. Valid values are SP_LITE 15385 (equivalent to -msingle-float -msimple-fpu), DP_LITE (equivalent 15386 to -mdouble-float -msimple-fpu), SP_FULL (equivalent to 15387 -msingle-float), and DP_FULL (equivalent to -mdouble-float). 15388 15389 `-mxilinx-fpu' 15390 Perform optimizations for floating point unit on Xilinx PPC 15391 405/440. 15392 15393 `-mmultiple' 15394 `-mno-multiple' 15395 Generate code that uses (does not use) the load multiple word 15396 instructions and the store multiple word instructions. These 15397 instructions are generated by default on POWER systems, and not 15398 generated on PowerPC systems. Do not use `-mmultiple' on little 15399 endian PowerPC systems, since those instructions do not work when 15400 the processor is in little endian mode. The exceptions are PPC740 15401 and PPC750 which permit the instructions usage in little endian 15402 mode. 15403 15404 `-mstring' 15405 `-mno-string' 15406 Generate code that uses (does not use) the load string instructions 15407 and the store string word instructions to save multiple registers 15408 and do small block moves. These instructions are generated by 15409 default on POWER systems, and not generated on PowerPC systems. 15410 Do not use `-mstring' on little endian PowerPC systems, since those 15411 instructions do not work when the processor is in little endian 15412 mode. The exceptions are PPC740 and PPC750 which permit the 15413 instructions usage in little endian mode. 15414 15415 `-mupdate' 15416 `-mno-update' 15417 Generate code that uses (does not use) the load or store 15418 instructions that update the base register to the address of the 15419 calculated memory location. These instructions are generated by 15420 default. If you use `-mno-update', there is a small window 15421 between the time that the stack pointer is updated and the address 15422 of the previous frame is stored, which means code that walks the 15423 stack frame across interrupts or signals may get corrupted data. 15424 15425 `-mavoid-indexed-addresses' 15426 `-mno-avoid-indexed-addresses' 15427 Generate code that tries to avoid (not avoid) the use of indexed 15428 load or store instructions. These instructions can incur a 15429 performance penalty on Power6 processors in certain situations, 15430 such as when stepping through large arrays that cross a 16M 15431 boundary. This option is enabled by default when targetting 15432 Power6 and disabled otherwise. 15433 15434 `-mfused-madd' 15435 `-mno-fused-madd' 15436 Generate code that uses (does not use) the floating point multiply 15437 and accumulate instructions. These instructions are generated by 15438 default if hardware floating point is used. The machine dependent 15439 `-mfused-madd' option is now mapped to the machine independent 15440 `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to 15441 `-ffp-contract=off'. 15442 15443 `-mmulhw' 15444 `-mno-mulhw' 15445 Generate code that uses (does not use) the half-word multiply and 15446 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 15447 processors. These instructions are generated by default when 15448 targetting those processors. 15449 15450 `-mdlmzb' 15451 `-mno-dlmzb' 15452 Generate code that uses (does not use) the string-search `dlmzb' 15453 instruction on the IBM 405, 440, 464 and 476 processors. This 15454 instruction is generated by default when targetting those 15455 processors. 15456 15457 `-mno-bit-align' 15458 `-mbit-align' 15459 On System V.4 and embedded PowerPC systems do not (do) force 15460 structures and unions that contain bit-fields to be aligned to the 15461 base type of the bit-field. 15462 15463 For example, by default a structure containing nothing but 8 15464 `unsigned' bit-fields of length 1 would be aligned to a 4 byte 15465 boundary and have a size of 4 bytes. By using `-mno-bit-align', 15466 the structure would be aligned to a 1 byte boundary and be one 15467 byte in size. 15468 15469 `-mno-strict-align' 15470 `-mstrict-align' 15471 On System V.4 and embedded PowerPC systems do not (do) assume that 15472 unaligned memory references will be handled by the system. 15473 15474 `-mrelocatable' 15475 `-mno-relocatable' 15476 Generate code that allows (does not allow) a static executable to 15477 be relocated to a different address at runtime. A simple embedded 15478 PowerPC system loader should relocate the entire contents of 15479 `.got2' and 4-byte locations listed in the `.fixup' section, a 15480 table of 32-bit addresses generated by this option. For this to 15481 work, all objects linked together must be compiled with 15482 `-mrelocatable' or `-mrelocatable-lib'. `-mrelocatable' code 15483 aligns the stack to an 8 byte boundary. 15484 15485 `-mrelocatable-lib' 15486 `-mno-relocatable-lib' 15487 Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup' 15488 section to allow static executables to be relocated at runtime, 15489 but `-mrelocatable-lib' does not use the smaller stack alignment 15490 of `-mrelocatable'. Objects compiled with `-mrelocatable-lib' may 15491 be linked with objects compiled with any combination of the 15492 `-mrelocatable' options. 15493 15494 `-mno-toc' 15495 `-mtoc' 15496 On System V.4 and embedded PowerPC systems do not (do) assume that 15497 register 2 contains a pointer to a global area pointing to the 15498 addresses used in the program. 15499 15500 `-mlittle' 15501 `-mlittle-endian' 15502 On System V.4 and embedded PowerPC systems compile code for the 15503 processor in little endian mode. The `-mlittle-endian' option is 15504 the same as `-mlittle'. 15505 15506 `-mbig' 15507 `-mbig-endian' 15508 On System V.4 and embedded PowerPC systems compile code for the 15509 processor in big endian mode. The `-mbig-endian' option is the 15510 same as `-mbig'. 15511 15512 `-mdynamic-no-pic' 15513 On Darwin and Mac OS X systems, compile code so that it is not 15514 relocatable, but that its external references are relocatable. The 15515 resulting code is suitable for applications, but not shared 15516 libraries. 15517 15518 `-msingle-pic-base' 15519 Treat the register used for PIC addressing as read-only, rather 15520 than loading it in the prologue for each function. The run-time 15521 system is responsible for initializing this register with an 15522 appropriate value before execution begins. 15523 15524 `-mprioritize-restricted-insns=PRIORITY' 15525 This option controls the priority that is assigned to 15526 dispatch-slot restricted instructions during the second scheduling 15527 pass. The argument PRIORITY takes the value 0/1/2 to assign 15528 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted 15529 instructions. 15530 15531 `-msched-costly-dep=DEPENDENCE_TYPE' 15532 This option controls which dependences are considered costly by 15533 the target during instruction scheduling. The argument 15534 DEPENDENCE_TYPE takes one of the following values: NO: no 15535 dependence is costly, ALL: all dependences are costly, 15536 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly, 15537 STORE_TO_LOAD: any dependence from store to load is costly, 15538 NUMBER: any dependence which latency >= NUMBER is costly. 15539 15540 `-minsert-sched-nops=SCHEME' 15541 This option controls which nop insertion scheme will be used during 15542 the second scheduling pass. The argument SCHEME takes one of the 15543 following values: NO: Don't insert nops. PAD: Pad with nops any 15544 dispatch group which has vacant issue slots, according to the 15545 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly 15546 dependent insns into separate groups. Insert exactly as many nops 15547 as needed to force an insn to a new group, according to the 15548 estimated processor grouping. NUMBER: Insert nops to force costly 15549 dependent insns into separate groups. Insert NUMBER nops to force 15550 an insn to a new group. 15551 15552 `-mcall-sysv' 15553 On System V.4 and embedded PowerPC systems compile code using 15554 calling conventions that adheres to the March 1995 draft of the 15555 System V Application Binary Interface, PowerPC processor 15556 supplement. This is the default unless you configured GCC using 15557 `powerpc-*-eabiaix'. 15558 15559 `-mcall-sysv-eabi' 15560 `-mcall-eabi' 15561 Specify both `-mcall-sysv' and `-meabi' options. 15562 15563 `-mcall-sysv-noeabi' 15564 Specify both `-mcall-sysv' and `-mno-eabi' options. 15565 15566 `-mcall-aixdesc' 15567 On System V.4 and embedded PowerPC systems compile code for the AIX 15568 operating system. 15569 15570 `-mcall-linux' 15571 On System V.4 and embedded PowerPC systems compile code for the 15572 Linux-based GNU system. 15573 15574 `-mcall-gnu' 15575 On System V.4 and embedded PowerPC systems compile code for the 15576 Hurd-based GNU system. 15577 15578 `-mcall-freebsd' 15579 On System V.4 and embedded PowerPC systems compile code for the 15580 FreeBSD operating system. 15581 15582 `-mcall-netbsd' 15583 On System V.4 and embedded PowerPC systems compile code for the 15584 NetBSD operating system. 15585 15586 `-mcall-openbsd' 15587 On System V.4 and embedded PowerPC systems compile code for the 15588 OpenBSD operating system. 15589 15590 `-maix-struct-return' 15591 Return all structures in memory (as specified by the AIX ABI). 15592 15593 `-msvr4-struct-return' 15594 Return structures smaller than 8 bytes in registers (as specified 15595 by the SVR4 ABI). 15596 15597 `-mabi=ABI-TYPE' 15598 Extend the current ABI with a particular extension, or remove such 15599 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 15600 IBMLONGDOUBLE, IEEELONGDOUBLE. 15601 15602 `-mabi=spe' 15603 Extend the current ABI with SPE ABI extensions. This does not 15604 change the default ABI, instead it adds the SPE ABI extensions to 15605 the current ABI. 15606 15607 `-mabi=no-spe' 15608 Disable Booke SPE ABI extensions for the current ABI. 15609 15610 `-mabi=ibmlongdouble' 15611 Change the current ABI to use IBM extended precision long double. 15612 This is a PowerPC 32-bit SYSV ABI option. 15613 15614 `-mabi=ieeelongdouble' 15615 Change the current ABI to use IEEE extended precision long double. 15616 This is a PowerPC 32-bit Linux ABI option. 15617 15618 `-mprototype' 15619 `-mno-prototype' 15620 On System V.4 and embedded PowerPC systems assume that all calls to 15621 variable argument functions are properly prototyped. Otherwise, 15622 the compiler must insert an instruction before every non 15623 prototyped call to set or clear bit 6 of the condition code 15624 register (CR) to indicate whether floating point values were 15625 passed in the floating point registers in case the function takes 15626 a variable arguments. With `-mprototype', only calls to 15627 prototyped variable argument functions will set or clear the bit. 15628 15629 `-msim' 15630 On embedded PowerPC systems, assume that the startup module is 15631 called `sim-crt0.o' and that the standard C libraries are 15632 `libsim.a' and `libc.a'. This is the default for 15633 `powerpc-*-eabisim' configurations. 15634 15635 `-mmvme' 15636 On embedded PowerPC systems, assume that the startup module is 15637 called `crt0.o' and the standard C libraries are `libmvme.a' and 15638 `libc.a'. 15639 15640 `-mads' 15641 On embedded PowerPC systems, assume that the startup module is 15642 called `crt0.o' and the standard C libraries are `libads.a' and 15643 `libc.a'. 15644 15645 `-myellowknife' 15646 On embedded PowerPC systems, assume that the startup module is 15647 called `crt0.o' and the standard C libraries are `libyk.a' and 15648 `libc.a'. 15649 15650 `-mvxworks' 15651 On System V.4 and embedded PowerPC systems, specify that you are 15652 compiling for a VxWorks system. 15653 15654 `-memb' 15655 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 15656 header to indicate that `eabi' extended relocations are used. 15657 15658 `-meabi' 15659 `-mno-eabi' 15660 On System V.4 and embedded PowerPC systems do (do not) adhere to 15661 the Embedded Applications Binary Interface (eabi) which is a set of 15662 modifications to the System V.4 specifications. Selecting `-meabi' 15663 means that the stack is aligned to an 8 byte boundary, a function 15664 `__eabi' is called to from `main' to set up the eabi environment, 15665 and the `-msdata' option can use both `r2' and `r13' to point to 15666 two separate small data areas. Selecting `-mno-eabi' means that 15667 the stack is aligned to a 16 byte boundary, do not call an 15668 initialization function from `main', and the `-msdata' option will 15669 only use `r13' to point to a single small data area. The `-meabi' 15670 option is on by default if you configured GCC using one of the 15671 `powerpc*-*-eabi*' options. 15672 15673 `-msdata=eabi' 15674 On System V.4 and embedded PowerPC systems, put small initialized 15675 `const' global and static data in the `.sdata2' section, which is 15676 pointed to by register `r2'. Put small initialized non-`const' 15677 global and static data in the `.sdata' section, which is pointed 15678 to by register `r13'. Put small uninitialized global and static 15679 data in the `.sbss' section, which is adjacent to the `.sdata' 15680 section. The `-msdata=eabi' option is incompatible with the 15681 `-mrelocatable' option. The `-msdata=eabi' option also sets the 15682 `-memb' option. 15683 15684 `-msdata=sysv' 15685 On System V.4 and embedded PowerPC systems, put small global and 15686 static data in the `.sdata' section, which is pointed to by 15687 register `r13'. Put small uninitialized global and static data in 15688 the `.sbss' section, which is adjacent to the `.sdata' section. 15689 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 15690 option. 15691 15692 `-msdata=default' 15693 `-msdata' 15694 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 15695 compile code the same as `-msdata=eabi', otherwise compile code the 15696 same as `-msdata=sysv'. 15697 15698 `-msdata=data' 15699 On System V.4 and embedded PowerPC systems, put small global data 15700 in the `.sdata' section. Put small uninitialized global data in 15701 the `.sbss' section. Do not use register `r13' to address small 15702 data however. This is the default behavior unless other `-msdata' 15703 options are used. 15704 15705 `-msdata=none' 15706 `-mno-sdata' 15707 On embedded PowerPC systems, put all initialized global and static 15708 data in the `.data' section, and all uninitialized data in the 15709 `.bss' section. 15710 15711 `-mblock-move-inline-limit=NUM' 15712 Inline all block moves (such as calls to `memcpy' or structure 15713 copies) less than or equal to NUM bytes. The minimum value for 15714 NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. 15715 The default value is target-specific. 15716 15717 `-G NUM' 15718 On embedded PowerPC systems, put global and static items less than 15719 or equal to NUM bytes into the small data or bss sections instead 15720 of the normal data or bss section. By default, NUM is 8. The `-G 15721 NUM' switch is also passed to the linker. All modules should be 15722 compiled with the same `-G NUM' value. 15723 15724 `-mregnames' 15725 `-mno-regnames' 15726 On System V.4 and embedded PowerPC systems do (do not) emit 15727 register names in the assembly language output using symbolic 15728 forms. 15729 15730 `-mlongcall' 15731 `-mno-longcall' 15732 By default assume that all calls are far away so that a longer more 15733 expensive calling sequence is required. This is required for calls 15734 further than 32 megabytes (33,554,432 bytes) from the current 15735 location. A short call will be generated if the compiler knows 15736 the call cannot be that far away. This setting can be overridden 15737 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 15738 15739 Some linkers are capable of detecting out-of-range calls and 15740 generating glue code on the fly. On these systems, long calls are 15741 unnecessary and generate slower code. As of this writing, the AIX 15742 linker can do this, as can the GNU linker for PowerPC/64. It is 15743 planned to add this feature to the GNU linker for 32-bit PowerPC 15744 systems as well. 15745 15746 On Darwin/PPC systems, `#pragma longcall' will generate "jbsr 15747 callee, L42", plus a "branch island" (glue code). The two target 15748 addresses represent the callee and the "branch island". The 15749 Darwin/PPC linker will prefer the first address and generate a "bl 15750 callee" if the PPC "bl" instruction will reach the callee directly; 15751 otherwise, the linker will generate "bl L42" to call the "branch 15752 island". The "branch island" is appended to the body of the 15753 calling function; it computes the full 32-bit address of the callee 15754 and jumps to it. 15755 15756 On Mach-O (Darwin) systems, this option directs the compiler emit 15757 to the glue for every direct call, and the Darwin linker decides 15758 whether to use or discard it. 15759 15760 In the future, we may cause GCC to ignore all longcall 15761 specifications when the linker is known to generate glue. 15762 15763 `-mtls-markers' 15764 `-mno-tls-markers' 15765 Mark (do not mark) calls to `__tls_get_addr' with a relocation 15766 specifying the function argument. The relocation allows ld to 15767 reliably associate function call with argument setup instructions 15768 for TLS optimization, which in turn allows gcc to better schedule 15769 the sequence. 15770 15771 `-pthread' 15772 Adds support for multithreading with the "pthreads" library. This 15773 option sets flags for both the preprocessor and linker. 15774 15775 `-mrecip' 15776 `-mno-recip' 15777 This option will enable GCC to use the reciprocal estimate and 15778 reciprocal square root estimate instructions with additional 15779 Newton-Raphson steps to increase precision instead of doing a 15780 divide or square root and divide for floating point arguments. 15781 You should use the `-ffast-math' option when using `-mrecip' (or at 15782 least `-funsafe-math-optimizations', `-finite-math-only', 15783 `-freciprocal-math' and `-fno-trapping-math'). Note that while 15784 the throughput of the sequence is generally higher than the 15785 throughput of the non-reciprocal instruction, the precision of the 15786 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 15787 equals 0.99999994) for reciprocal square roots. 15788 15789 `-mrecip=OPT' 15790 This option allows to control which reciprocal estimate 15791 instructions may be used. OPT is a comma separated list of 15792 options, that may be preceded by a `!' to invert the option: 15793 `all': enable all estimate instructions, `default': enable the 15794 default instructions, equivalent to `-mrecip', `none': disable all 15795 estimate instructions, equivalent to `-mno-recip'; `div': enable 15796 the reciprocal approximation instructions for both single and 15797 double precision; `divf': enable the single precision reciprocal 15798 approximation instructions; `divd': enable the double precision 15799 reciprocal approximation instructions; `rsqrt': enable the 15800 reciprocal square root approximation instructions for both single 15801 and double precision; `rsqrtf': enable the single precision 15802 reciprocal square root approximation instructions; `rsqrtd': 15803 enable the double precision reciprocal square root approximation 15804 instructions; 15805 15806 So for example, `-mrecip=all,!rsqrtd' would enable the all of the 15807 reciprocal estimate instructions, except for the `FRSQRTE', 15808 `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the 15809 double precision reciprocal square root calculations. 15810 15811 `-mrecip-precision' 15812 `-mno-recip-precision' 15813 Assume (do not assume) that the reciprocal estimate instructions 15814 provide higher precision estimates than is mandated by the powerpc 15815 ABI. Selecting `-mcpu=power6' or `-mcpu=power7' automatically 15816 selects `-mrecip-precision'. The double precision square root 15817 estimate instructions are not generated by default on low 15818 precision machines, since they do not provide an estimate that 15819 converges after three steps. 15820 15821 `-mveclibabi=TYPE' 15822 Specifies the ABI type to use for vectorizing intrinsics using an 15823 external library. The only type supported at present is `mass', 15824 which specifies to use IBM's Mathematical Acceleration Subsystem 15825 (MASS) libraries for vectorizing intrinsics using external 15826 libraries. GCC will currently emit calls to `acosd2', `acosf4', 15827 `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4', 15828 `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4', 15829 `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4', 15830 `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2', 15831 `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2', 15832 `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2', 15833 `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4', 15834 `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4', 15835 `tanhd2', and `tanhf4' when generating code for power7. Both 15836 `-ftree-vectorize' and `-funsafe-math-optimizations' have to be 15837 enabled. The MASS libraries will have to be specified at link 15838 time. 15839 15840 `-mfriz' 15841 `-mno-friz' 15842 Generate (do not generate) the `friz' instruction when the 15843 `-funsafe-math-optimizations' option is used to optimize rounding 15844 a floating point value to 64-bit integer and back to floating 15845 point. The `friz' instruction does not return the same value if 15846 the floating point number is too large to fit in an integer. 15847 15848 15849 File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 15850 15851 3.17.34 RX Options 15852 ------------------ 15853 15854 These command line options are defined for RX targets: 15855 15856 `-m64bit-doubles' 15857 `-m32bit-doubles' 15858 Make the `double' data type be 64-bits (`-m64bit-doubles') or 15859 32-bits (`-m32bit-doubles') in size. The default is 15860 `-m32bit-doubles'. _Note_ RX floating point hardware only works 15861 on 32-bit values, which is why the default is `-m32bit-doubles'. 15862 15863 `-fpu' 15864 `-nofpu' 15865 Enables (`-fpu') or disables (`-nofpu') the use of RX floating 15866 point hardware. The default is enabled for the RX600 series and 15867 disabled for the RX200 series. 15868 15869 Floating point instructions will only be generated for 32-bit 15870 floating point values however, so if the `-m64bit-doubles' option 15871 is in use then the FPU hardware will not be used for doubles. 15872 15873 _Note_ If the `-fpu' option is enabled then 15874 `-funsafe-math-optimizations' is also enabled automatically. This 15875 is because the RX FPU instructions are themselves unsafe. 15876 15877 `-mcpu=NAME' 15878 Selects the type of RX CPU to be targeted. Currently three types 15879 are supported, the generic RX600 and RX200 series hardware and the 15880 specific RX610 CPU. The default is RX600. 15881 15882 The only difference between RX600 and RX610 is that the RX610 does 15883 not support the `MVTIPL' instruction. 15884 15885 The RX200 series does not have a hardware floating point unit and 15886 so `-nofpu' is enabled by default when this type is selected. 15887 15888 `-mbig-endian-data' 15889 `-mlittle-endian-data' 15890 Store data (but not code) in the big-endian format. The default is 15891 `-mlittle-endian-data', i.e. to store data in the little endian 15892 format. 15893 15894 `-msmall-data-limit=N' 15895 Specifies the maximum size in bytes of global and static variables 15896 which can be placed into the small data area. Using the small data 15897 area can lead to smaller and faster code, but the size of area is 15898 limited and it is up to the programmer to ensure that the area does 15899 not overflow. Also when the small data area is used one of the 15900 RX's registers (`r13') is reserved for use pointing to this area, 15901 so it is no longer available for use by the compiler. This could 15902 result in slower and/or larger code if variables which once could 15903 have been held in `r13' are now pushed onto the stack. 15904 15905 Note, common variables (variables which have not been initialised) 15906 and constants are not placed into the small data area as they are 15907 assigned to other sections in the output executable. 15908 15909 The default value is zero, which disables this feature. Note, this 15910 feature is not enabled by default with higher optimization levels 15911 (`-O2' etc) because of the potentially detrimental effects of 15912 reserving register `r13'. It is up to the programmer to 15913 experiment and discover whether this feature is of benefit to their 15914 program. 15915 15916 `-msim' 15917 `-mno-sim' 15918 Use the simulator runtime. The default is to use the libgloss 15919 board specific runtime. 15920 15921 `-mas100-syntax' 15922 `-mno-as100-syntax' 15923 When generating assembler output use a syntax that is compatible 15924 with Renesas's AS100 assembler. This syntax can also be handled 15925 by the GAS assembler but it has some restrictions so generating it 15926 is not the default option. 15927 15928 `-mmax-constant-size=N' 15929 Specifies the maximum size, in bytes, of a constant that can be 15930 used as an operand in a RX instruction. Although the RX 15931 instruction set does allow constants of up to 4 bytes in length to 15932 be used in instructions, a longer value equates to a longer 15933 instruction. Thus in some circumstances it can be beneficial to 15934 restrict the size of constants that are used in instructions. 15935 Constants that are too big are instead placed into a constant pool 15936 and referenced via register indirection. 15937 15938 The value N can be between 0 and 4. A value of 0 (the default) or 15939 4 means that constants of any size are allowed. 15940 15941 `-mrelax' 15942 Enable linker relaxation. Linker relaxation is a process whereby 15943 the linker will attempt to reduce the size of a program by finding 15944 shorter versions of various instructions. Disabled by default. 15945 15946 `-mint-register=N' 15947 Specify the number of registers to reserve for fast interrupt 15948 handler functions. The value N can be between 0 and 4. A value 15949 of 1 means that register `r13' will be reserved for the exclusive 15950 use of fast interrupt handlers. A value of 2 reserves `r13' and 15951 `r12'. A value of 3 reserves `r13', `r12' and `r11', and a value 15952 of 4 reserves `r13' through `r10'. A value of 0, the default, 15953 does not reserve any registers. 15954 15955 `-msave-acc-in-interrupts' 15956 Specifies that interrupt handler functions should preserve the 15957 accumulator register. This is only necessary if normal code might 15958 use the accumulator register, for example because it performs 15959 64-bit multiplications. The default is to ignore the accumulator 15960 as this makes the interrupt handlers faster. 15961 15962 15963 _Note:_ The generic GCC command line `-ffixed-REG' has special 15964 significance to the RX port when used with the `interrupt' function 15965 attribute. This attribute indicates a function intended to process 15966 fast interrupts. GCC will will ensure that it only uses the registers 15967 `r10', `r11', `r12' and/or `r13' and only provided that the normal use 15968 of the corresponding registers have been restricted via the 15969 `-ffixed-REG' or `-mint-register' command line options. 15970 15971 15972 File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options 15973 15974 3.17.35 S/390 and zSeries Options 15975 --------------------------------- 15976 15977 These are the `-m' options defined for the S/390 and zSeries 15978 architecture. 15979 15980 `-mhard-float' 15981 `-msoft-float' 15982 Use (do not use) the hardware floating-point instructions and 15983 registers for floating-point operations. When `-msoft-float' is 15984 specified, functions in `libgcc.a' will be used to perform 15985 floating-point operations. When `-mhard-float' is specified, the 15986 compiler generates IEEE floating-point instructions. This is the 15987 default. 15988 15989 `-mhard-dfp' 15990 `-mno-hard-dfp' 15991 Use (do not use) the hardware decimal-floating-point instructions 15992 for decimal-floating-point operations. When `-mno-hard-dfp' is 15993 specified, functions in `libgcc.a' will be used to perform 15994 decimal-floating-point operations. When `-mhard-dfp' is 15995 specified, the compiler generates decimal-floating-point hardware 15996 instructions. This is the default for `-march=z9-ec' or higher. 15997 15998 `-mlong-double-64' 15999 `-mlong-double-128' 16000 These switches control the size of `long double' type. A size of 16001 64bit makes the `long double' type equivalent to the `double' 16002 type. This is the default. 16003 16004 `-mbackchain' 16005 `-mno-backchain' 16006 Store (do not store) the address of the caller's frame as 16007 backchain pointer into the callee's stack frame. A backchain may 16008 be needed to allow debugging using tools that do not understand 16009 DWARF-2 call frame information. When `-mno-packed-stack' is in 16010 effect, the backchain pointer is stored at the bottom of the stack 16011 frame; when `-mpacked-stack' is in effect, the backchain is placed 16012 into the topmost word of the 96/160 byte register save area. 16013 16014 In general, code compiled with `-mbackchain' is call-compatible 16015 with code compiled with `-mmo-backchain'; however, use of the 16016 backchain for debugging purposes usually requires that the whole 16017 binary is built with `-mbackchain'. Note that the combination of 16018 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 16019 supported. In order to build a linux kernel use `-msoft-float'. 16020 16021 The default is to not maintain the backchain. 16022 16023 `-mpacked-stack' 16024 `-mno-packed-stack' 16025 Use (do not use) the packed stack layout. When 16026 `-mno-packed-stack' is specified, the compiler uses the all fields 16027 of the 96/160 byte register save area only for their default 16028 purpose; unused fields still take up stack space. When 16029 `-mpacked-stack' is specified, register save slots are densely 16030 packed at the top of the register save area; unused space is 16031 reused for other purposes, allowing for more efficient use of the 16032 available stack space. However, when `-mbackchain' is also in 16033 effect, the topmost word of the save area is always used to store 16034 the backchain, and the return address register is always saved two 16035 words below the backchain. 16036 16037 As long as the stack frame backchain is not used, code generated 16038 with `-mpacked-stack' is call-compatible with code generated with 16039 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 16040 for S/390 or zSeries generated code that uses the stack frame 16041 backchain at run time, not just for debugging purposes. Such code 16042 is not call-compatible with code compiled with `-mpacked-stack'. 16043 Also, note that the combination of `-mbackchain', `-mpacked-stack' 16044 and `-mhard-float' is not supported. In order to build a linux 16045 kernel use `-msoft-float'. 16046 16047 The default is to not use the packed stack layout. 16048 16049 `-msmall-exec' 16050 `-mno-small-exec' 16051 Generate (or do not generate) code using the `bras' instruction to 16052 do subroutine calls. This only works reliably if the total 16053 executable size does not exceed 64k. The default is to use the 16054 `basr' instruction instead, which does not have this limitation. 16055 16056 `-m64' 16057 `-m31' 16058 When `-m31' is specified, generate code compliant to the GNU/Linux 16059 for S/390 ABI. When `-m64' is specified, generate code compliant 16060 to the GNU/Linux for zSeries ABI. This allows GCC in particular 16061 to generate 64-bit instructions. For the `s390' targets, the 16062 default is `-m31', while the `s390x' targets default to `-m64'. 16063 16064 `-mzarch' 16065 `-mesa' 16066 When `-mzarch' is specified, generate code using the instructions 16067 available on z/Architecture. When `-mesa' is specified, generate 16068 code using the instructions available on ESA/390. Note that 16069 `-mesa' is not possible with `-m64'. When generating code 16070 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 16071 When generating code compliant to the GNU/Linux for zSeries ABI, 16072 the default is `-mzarch'. 16073 16074 `-mmvcle' 16075 `-mno-mvcle' 16076 Generate (or do not generate) code using the `mvcle' instruction 16077 to perform block moves. When `-mno-mvcle' is specified, use a 16078 `mvc' loop instead. This is the default unless optimizing for 16079 size. 16080 16081 `-mdebug' 16082 `-mno-debug' 16083 Print (or do not print) additional debug information when 16084 compiling. The default is to not print debug information. 16085 16086 `-march=CPU-TYPE' 16087 Generate code that will run on CPU-TYPE, which is the name of a 16088 system representing a certain processor type. Possible values for 16089 CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and 16090 `z10'. When generating code using the instructions available on 16091 z/Architecture, the default is `-march=z900'. Otherwise, the 16092 default is `-march=g5'. 16093 16094 `-mtune=CPU-TYPE' 16095 Tune to CPU-TYPE everything applicable about the generated code, 16096 except for the ABI and the set of available instructions. The 16097 list of CPU-TYPE values is the same as for `-march'. The default 16098 is the value used for `-march'. 16099 16100 `-mtpf-trace' 16101 `-mno-tpf-trace' 16102 Generate code that adds (does not add) in TPF OS specific branches 16103 to trace routines in the operating system. This option is off by 16104 default, even when compiling for the TPF OS. 16105 16106 `-mfused-madd' 16107 `-mno-fused-madd' 16108 Generate code that uses (does not use) the floating point multiply 16109 and accumulate instructions. These instructions are generated by 16110 default if hardware floating point is used. 16111 16112 `-mwarn-framesize=FRAMESIZE' 16113 Emit a warning if the current function exceeds the given frame 16114 size. Because this is a compile time check it doesn't need to be 16115 a real problem when the program runs. It is intended to identify 16116 functions which most probably cause a stack overflow. It is 16117 useful to be used in an environment with limited stack size e.g. 16118 the linux kernel. 16119 16120 `-mwarn-dynamicstack' 16121 Emit a warning if the function calls alloca or uses dynamically 16122 sized arrays. This is generally a bad idea with a limited stack 16123 size. 16124 16125 `-mstack-guard=STACK-GUARD' 16126 `-mstack-size=STACK-SIZE' 16127 If these options are provided the s390 back end emits additional 16128 instructions in the function prologue which trigger a trap if the 16129 stack size is STACK-GUARD bytes above the STACK-SIZE (remember 16130 that the stack on s390 grows downward). If the STACK-GUARD option 16131 is omitted the smallest power of 2 larger than the frame size of 16132 the compiled function is chosen. These options are intended to be 16133 used to help debugging stack overflow problems. The additionally 16134 emitted code causes only little overhead and hence can also be 16135 used in production like systems without greater performance 16136 degradation. The given values have to be exact powers of 2 and 16137 STACK-SIZE has to be greater than STACK-GUARD without exceeding 16138 64k. In order to be efficient the extra code makes the assumption 16139 that the stack starts at an address aligned to the value given by 16140 STACK-SIZE. The STACK-GUARD option can only be used in 16141 conjunction with STACK-SIZE. 16142 16143 16144 File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 16145 16146 3.17.36 Score Options 16147 --------------------- 16148 16149 These options are defined for Score implementations: 16150 16151 `-meb' 16152 Compile code for big endian mode. This is the default. 16153 16154 `-mel' 16155 Compile code for little endian mode. 16156 16157 `-mnhwloop' 16158 Disable generate bcnz instruction. 16159 16160 `-muls' 16161 Enable generate unaligned load and store instruction. 16162 16163 `-mmac' 16164 Enable the use of multiply-accumulate instructions. Disabled by 16165 default. 16166 16167 `-mscore5' 16168 Specify the SCORE5 as the target architecture. 16169 16170 `-mscore5u' 16171 Specify the SCORE5U of the target architecture. 16172 16173 `-mscore7' 16174 Specify the SCORE7 as the target architecture. This is the default. 16175 16176 `-mscore7d' 16177 Specify the SCORE7D as the target architecture. 16178 16179 16180 File: gcc.info, Node: SH Options, Next: Solaris 2 Options, Prev: Score Options, Up: Submodel Options 16181 16182 3.17.37 SH Options 16183 ------------------ 16184 16185 These `-m' options are defined for the SH implementations: 16186 16187 `-m1' 16188 Generate code for the SH1. 16189 16190 `-m2' 16191 Generate code for the SH2. 16192 16193 `-m2e' 16194 Generate code for the SH2e. 16195 16196 `-m2a-nofpu' 16197 Generate code for the SH2a without FPU, or for a SH2a-FPU in such 16198 a way that the floating-point unit is not used. 16199 16200 `-m2a-single-only' 16201 Generate code for the SH2a-FPU, in such a way that no 16202 double-precision floating point operations are used. 16203 16204 `-m2a-single' 16205 Generate code for the SH2a-FPU assuming the floating-point unit is 16206 in single-precision mode by default. 16207 16208 `-m2a' 16209 Generate code for the SH2a-FPU assuming the floating-point unit is 16210 in double-precision mode by default. 16211 16212 `-m3' 16213 Generate code for the SH3. 16214 16215 `-m3e' 16216 Generate code for the SH3e. 16217 16218 `-m4-nofpu' 16219 Generate code for the SH4 without a floating-point unit. 16220 16221 `-m4-single-only' 16222 Generate code for the SH4 with a floating-point unit that only 16223 supports single-precision arithmetic. 16224 16225 `-m4-single' 16226 Generate code for the SH4 assuming the floating-point unit is in 16227 single-precision mode by default. 16228 16229 `-m4' 16230 Generate code for the SH4. 16231 16232 `-m4a-nofpu' 16233 Generate code for the SH4al-dsp, or for a SH4a in such a way that 16234 the floating-point unit is not used. 16235 16236 `-m4a-single-only' 16237 Generate code for the SH4a, in such a way that no double-precision 16238 floating point operations are used. 16239 16240 `-m4a-single' 16241 Generate code for the SH4a assuming the floating-point unit is in 16242 single-precision mode by default. 16243 16244 `-m4a' 16245 Generate code for the SH4a. 16246 16247 `-m4al' 16248 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 16249 the assembler. GCC doesn't generate any DSP instructions at the 16250 moment. 16251 16252 `-mb' 16253 Compile code for the processor in big endian mode. 16254 16255 `-ml' 16256 Compile code for the processor in little endian mode. 16257 16258 `-mdalign' 16259 Align doubles at 64-bit boundaries. Note that this changes the 16260 calling conventions, and thus some functions from the standard C 16261 library will not work unless you recompile it first with 16262 `-mdalign'. 16263 16264 `-mrelax' 16265 Shorten some address references at link time, when possible; uses 16266 the linker option `-relax'. 16267 16268 `-mbigtable' 16269 Use 32-bit offsets in `switch' tables. The default is to use 16270 16-bit offsets. 16271 16272 `-mbitops' 16273 Enable the use of bit manipulation instructions on SH2A. 16274 16275 `-mfmovd' 16276 Enable the use of the instruction `fmovd'. Check `-mdalign' for 16277 alignment constraints. 16278 16279 `-mhitachi' 16280 Comply with the calling conventions defined by Renesas. 16281 16282 `-mrenesas' 16283 Comply with the calling conventions defined by Renesas. 16284 16285 `-mno-renesas' 16286 Comply with the calling conventions defined for GCC before the 16287 Renesas conventions were available. This option is the default 16288 for all targets of the SH toolchain except for `sh-symbianelf'. 16289 16290 `-mnomacsave' 16291 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 16292 given. 16293 16294 `-mieee' 16295 Increase IEEE-compliance of floating-point code. At the moment, 16296 this is equivalent to `-fno-finite-math-only'. When generating 16 16297 bit SH opcodes, getting IEEE-conforming results for comparisons of 16298 NANs / infinities incurs extra overhead in every floating point 16299 comparison, therefore the default is set to `-ffinite-math-only'. 16300 16301 `-minline-ic_invalidate' 16302 Inline code to invalidate instruction cache entries after setting 16303 up nested function trampolines. This option has no effect if 16304 -musermode is in effect and the selected code generation option 16305 (e.g. -m4) does not allow the use of the icbi instruction. If the 16306 selected code generation option does not allow the use of the icbi 16307 instruction, and -musermode is not in effect, the inlined code will 16308 manipulate the instruction cache address array directly with an 16309 associative write. This not only requires privileged mode, but it 16310 will also fail if the cache line had been mapped via the TLB and 16311 has become unmapped. 16312 16313 `-misize' 16314 Dump instruction size and location in the assembly code. 16315 16316 `-mpadstruct' 16317 This option is deprecated. It pads structures to multiple of 4 16318 bytes, which is incompatible with the SH ABI. 16319 16320 `-mspace' 16321 Optimize for space instead of speed. Implied by `-Os'. 16322 16323 `-mprefergot' 16324 When generating position-independent code, emit function calls 16325 using the Global Offset Table instead of the Procedure Linkage 16326 Table. 16327 16328 `-musermode' 16329 Don't generate privileged mode only code; implies 16330 -mno-inline-ic_invalidate if the inlined code would not work in 16331 user mode. This is the default when the target is `sh-*-linux*'. 16332 16333 `-multcost=NUMBER' 16334 Set the cost to assume for a multiply insn. 16335 16336 `-mdiv=STRATEGY' 16337 Set the division strategy to use for SHmedia code. STRATEGY must 16338 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, 16339 inv:call, inv:call2, inv:fp . "fp" performs the operation in 16340 floating point. This has a very high latency, but needs only a 16341 few instructions, so it might be a good choice if your code has 16342 enough easily exploitable ILP to allow the compiler to schedule 16343 the floating point instructions together with other instructions. 16344 Division by zero causes a floating point exception. "inv" uses 16345 integer operations to calculate the inverse of the divisor, and 16346 then multiplies the dividend with the inverse. This strategy 16347 allows cse and hoisting of the inverse calculation. Division by 16348 zero calculates an unspecified result, but does not trap. 16349 "inv:minlat" is a variant of "inv" where if no cse / hoisting 16350 opportunities have been found, or if the entire operation has been 16351 hoisted to the same place, the last stages of the inverse 16352 calculation are intertwined with the final multiply to reduce the 16353 overall latency, at the expense of using a few more instructions, 16354 and thus offering fewer scheduling opportunities with other code. 16355 "call" calls a library function that usually implements the 16356 inv:minlat strategy. This gives high code density for 16357 m5-*media-nofpu compilations. "call2" uses a different entry 16358 point of the same library function, where it assumes that a 16359 pointer to a lookup table has already been set up, which exposes 16360 the pointer load to cse / code hoisting optimizations. 16361 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm 16362 for initial code generation, but if the code stays unoptimized, 16363 revert to the "call", "call2", or "fp" strategies, respectively. 16364 Note that the potentially-trapping side effect of division by zero 16365 is carried by a separate instruction, so it is possible that all 16366 the integer instructions are hoisted out, but the marker for the 16367 side effect stays where it is. A recombination to fp operations 16368 or a call is not possible in that case. "inv20u" and "inv20l" are 16369 variants of the "inv:minlat" strategy. In the case that the 16370 inverse calculation was nor separated from the multiply, they speed 16371 up division where the dividend fits into 20 bits (plus sign where 16372 applicable), by inserting a test to skip a number of operations in 16373 this case; this test slows down the case of larger dividends. 16374 inv20u assumes the case of a such a small dividend to be unlikely, 16375 and inv20l assumes it to be likely. 16376 16377 `-maccumulate-outgoing-args' 16378 Reserve space once for outgoing arguments in the function prologue 16379 rather than around each call. Generally beneficial for 16380 performance and size. Also needed for unwinding to avoid changing 16381 the stack frame around conditional code. 16382 16383 `-mdivsi3_libfunc=NAME' 16384 Set the name of the library function used for 32 bit signed 16385 division to NAME. This only affect the name used in the call and 16386 inv:call division strategies, and the compiler will still expect 16387 the same sets of input/output/clobbered registers as if this 16388 option was not present. 16389 16390 `-mfixed-range=REGISTER-RANGE' 16391 Generate code treating the given register range as fixed registers. 16392 A fixed register is one that the register allocator can not use. 16393 This is useful when compiling kernel code. A register range is 16394 specified as two registers separated by a dash. Multiple register 16395 ranges can be specified separated by a comma. 16396 16397 `-madjust-unroll' 16398 Throttle unrolling to avoid thrashing target registers. This 16399 option only has an effect if the gcc code base supports the 16400 TARGET_ADJUST_UNROLL_MAX target hook. 16401 16402 `-mindexed-addressing' 16403 Enable the use of the indexed addressing mode for 16404 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 16405 implement 32 bit wrap-around semantics for the indexed addressing 16406 mode. The architecture allows the implementation of processors 16407 with 64 bit MMU, which the OS could use to get 32 bit addressing, 16408 but since no current hardware implementation supports this or any 16409 other way to make the indexed addressing mode safe to use in the 16410 32 bit ABI, the default is -mno-indexed-addressing. 16411 16412 `-mgettrcost=NUMBER' 16413 Set the cost assumed for the gettr instruction to NUMBER. The 16414 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 16415 16416 `-mpt-fixed' 16417 Assume pt* instructions won't trap. This will generally generate 16418 better scheduled code, but is unsafe on current hardware. The 16419 current architecture definition says that ptabs and ptrel trap 16420 when the target anded with 3 is 3. This has the unintentional 16421 effect of making it unsafe to schedule ptabs / ptrel before a 16422 branch, or hoist it out of a loop. For example, 16423 __do_global_ctors, a part of libgcc that runs constructors at 16424 program startup, calls functions in a list which is delimited by 16425 -1. With the -mpt-fixed option, the ptabs will be done before 16426 testing against -1. That means that all the constructors will be 16427 run a bit quicker, but when the loop comes to the end of the list, 16428 the program crashes because ptabs loads -1 into a target register. 16429 Since this option is unsafe for any hardware implementing the 16430 current architecture specification, the default is -mno-pt-fixed. 16431 Unless the user specifies a specific cost with `-mgettrcost', 16432 -mno-pt-fixed also implies `-mgettrcost=100'; this deters register 16433 allocation using target registers for storing ordinary integers. 16434 16435 `-minvalid-symbols' 16436 Assume symbols might be invalid. Ordinary function symbols 16437 generated by the compiler will always be valid to load with 16438 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or 16439 linker tricks it is possible to generate symbols that will cause 16440 ptabs / ptrel to trap. This option is only meaningful when 16441 `-mno-pt-fixed' is in effect. It will then prevent 16442 cross-basic-block cse, hoisting and most scheduling of symbol 16443 loads. The default is `-mno-invalid-symbols'. 16444 16445 16446 File: gcc.info, Node: Solaris 2 Options, Next: SPARC Options, Prev: SH Options, Up: Submodel Options 16447 16448 3.17.38 Solaris 2 Options 16449 ------------------------- 16450 16451 These `-m' options are supported on Solaris 2: 16452 16453 `-mimpure-text' 16454 `-mimpure-text', used in addition to `-shared', tells the compiler 16455 to not pass `-z text' to the linker when linking a shared object. 16456 Using this option, you can link position-dependent code into a 16457 shared object. 16458 16459 `-mimpure-text' suppresses the "relocations remain against 16460 allocatable but non-writable sections" linker error message. 16461 However, the necessary relocations will trigger copy-on-write, and 16462 the shared object is not actually shared across processes. 16463 Instead of using `-mimpure-text', you should compile all source 16464 code with `-fpic' or `-fPIC'. 16465 16466 16467 These switches are supported in addition to the above on Solaris 2: 16468 16469 `-threads' 16470 Add support for multithreading using the Solaris threads library. 16471 This option sets flags for both the preprocessor and linker. This 16472 option does not affect the thread safety of object code produced 16473 by the compiler or that of libraries supplied with it. 16474 16475 `-pthreads' 16476 Add support for multithreading using the POSIX threads library. 16477 This option sets flags for both the preprocessor and linker. This 16478 option does not affect the thread safety of object code produced 16479 by the compiler or that of libraries supplied with it. 16480 16481 `-pthread' 16482 This is a synonym for `-pthreads'. 16483 16484 16485 File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: Solaris 2 Options, Up: Submodel Options 16486 16487 3.17.39 SPARC Options 16488 --------------------- 16489 16490 These `-m' options are supported on the SPARC: 16491 16492 `-mno-app-regs' 16493 `-mapp-regs' 16494 Specify `-mapp-regs' to generate output using the global registers 16495 2 through 4, which the SPARC SVR4 ABI reserves for applications. 16496 This is the default. 16497 16498 To be fully SVR4 ABI compliant at the cost of some performance 16499 loss, specify `-mno-app-regs'. You should compile libraries and 16500 system software with this option. 16501 16502 `-mfpu' 16503 `-mhard-float' 16504 Generate output containing floating point instructions. This is 16505 the default. 16506 16507 `-mno-fpu' 16508 `-msoft-float' 16509 Generate output containing library calls for floating point. 16510 *Warning:* the requisite libraries are not available for all SPARC 16511 targets. Normally the facilities of the machine's usual C 16512 compiler are used, but this cannot be done directly in 16513 cross-compilation. You must make your own arrangements to provide 16514 suitable library functions for cross-compilation. The embedded 16515 targets `sparc-*-aout' and `sparclite-*-*' do provide software 16516 floating point support. 16517 16518 `-msoft-float' changes the calling convention in the output file; 16519 therefore, it is only useful if you compile _all_ of a program with 16520 this option. In particular, you need to compile `libgcc.a', the 16521 library that comes with GCC, with `-msoft-float' in order for this 16522 to work. 16523 16524 `-mhard-quad-float' 16525 Generate output containing quad-word (long double) floating point 16526 instructions. 16527 16528 `-msoft-quad-float' 16529 Generate output containing library calls for quad-word (long 16530 double) floating point instructions. The functions called are 16531 those specified in the SPARC ABI. This is the default. 16532 16533 As of this writing, there are no SPARC implementations that have 16534 hardware support for the quad-word floating point instructions. 16535 They all invoke a trap handler for one of these instructions, and 16536 then the trap handler emulates the effect of the instruction. 16537 Because of the trap handler overhead, this is much slower than 16538 calling the ABI library routines. Thus the `-msoft-quad-float' 16539 option is the default. 16540 16541 `-mno-unaligned-doubles' 16542 `-munaligned-doubles' 16543 Assume that doubles have 8 byte alignment. This is the default. 16544 16545 With `-munaligned-doubles', GCC assumes that doubles have 8 byte 16546 alignment only if they are contained in another type, or if they 16547 have an absolute address. Otherwise, it assumes they have 4 byte 16548 alignment. Specifying this option avoids some rare compatibility 16549 problems with code generated by other compilers. It is not the 16550 default because it results in a performance loss, especially for 16551 floating point code. 16552 16553 `-mno-faster-structs' 16554 `-mfaster-structs' 16555 With `-mfaster-structs', the compiler assumes that structures 16556 should have 8 byte alignment. This enables the use of pairs of 16557 `ldd' and `std' instructions for copies in structure assignment, 16558 in place of twice as many `ld' and `st' pairs. However, the use 16559 of this changed alignment directly violates the SPARC ABI. Thus, 16560 it's intended only for use on targets where the developer 16561 acknowledges that their resulting code will not be directly in 16562 line with the rules of the ABI. 16563 16564 `-mcpu=CPU_TYPE' 16565 Set the instruction set, register set, and instruction scheduling 16566 parameters for machine type CPU_TYPE. Supported values for 16567 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc', 16568 `leon', `sparclite', `f930', `f934', `sparclite86x', `sparclet', 16569 `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and 16570 `niagara2'. 16571 16572 Default instruction scheduling parameters are used for values that 16573 select an architecture and not an implementation. These are `v7', 16574 `v8', `sparclite', `sparclet', `v9'. 16575 16576 Here is a list of each supported architecture and their supported 16577 implementations. 16578 16579 v7: cypress 16580 v8: supersparc, hypersparc, leon 16581 sparclite: f930, f934, sparclite86x 16582 sparclet: tsc701 16583 v9: ultrasparc, ultrasparc3, niagara, niagara2 16584 16585 By default (unless configured otherwise), GCC generates code for 16586 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 16587 the compiler additionally optimizes it for the Cypress CY7C602 16588 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 16589 also appropriate for the older SPARCStation 1, 2, IPX etc. 16590 16591 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 16592 architecture. The only difference from V7 code is that the 16593 compiler emits the integer multiply and integer divide 16594 instructions which exist in SPARC-V8 but not in SPARC-V7. With 16595 `-mcpu=supersparc', the compiler additionally optimizes it for the 16596 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 16597 series. 16598 16599 With `-mcpu=sparclite', GCC generates code for the SPARClite 16600 variant of the SPARC architecture. This adds the integer 16601 multiply, integer divide step and scan (`ffs') instructions which 16602 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 16603 compiler additionally optimizes it for the Fujitsu MB86930 chip, 16604 which is the original SPARClite, with no FPU. With `-mcpu=f934', 16605 the compiler additionally optimizes it for the Fujitsu MB86934 16606 chip, which is the more recent SPARClite with FPU. 16607 16608 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 16609 of the SPARC architecture. This adds the integer multiply, 16610 multiply/accumulate, integer divide step and scan (`ffs') 16611 instructions which exist in SPARClet but not in SPARC-V7. With 16612 `-mcpu=tsc701', the compiler additionally optimizes it for the 16613 TEMIC SPARClet chip. 16614 16615 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 16616 architecture. This adds 64-bit integer and floating-point move 16617 instructions, 3 additional floating-point condition code registers 16618 and conditional move instructions. With `-mcpu=ultrasparc', the 16619 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 16620 chips. With `-mcpu=ultrasparc3', the compiler additionally 16621 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 16622 chips. With `-mcpu=niagara', the compiler additionally optimizes 16623 it for Sun UltraSPARC T1 chips. With `-mcpu=niagara2', the 16624 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 16625 16626 `-mtune=CPU_TYPE' 16627 Set the instruction scheduling parameters for machine type 16628 CPU_TYPE, but do not set the instruction set or register set that 16629 the option `-mcpu=CPU_TYPE' would. 16630 16631 The same values for `-mcpu=CPU_TYPE' can be used for 16632 `-mtune=CPU_TYPE', but the only useful values are those that 16633 select a particular CPU implementation. Those are `cypress', 16634 `supersparc', `hypersparc', `leon', `f930', `f934', 16635 `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', `niagara', 16636 and `niagara2'. 16637 16638 `-mv8plus' 16639 `-mno-v8plus' 16640 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 16641 difference from the V8 ABI is that the global and out registers are 16642 considered 64-bit wide. This is enabled by default on Solaris in 16643 32-bit mode for all SPARC-V9 processors. 16644 16645 `-mvis' 16646 `-mno-vis' 16647 With `-mvis', GCC generates code that takes advantage of the 16648 UltraSPARC Visual Instruction Set extensions. The default is 16649 `-mno-vis'. 16650 16651 `-mfix-at697f' 16652 Enable the documented workaround for the single erratum of the 16653 Atmel AT697F processor (which corresponds to erratum #13 of the 16654 AT697E processor). 16655 16656 These `-m' options are supported in addition to the above on SPARC-V9 16657 processors in 64-bit environments: 16658 16659 `-mlittle-endian' 16660 Generate code for a processor running in little-endian mode. It 16661 is only available for a few configurations and most notably not on 16662 Solaris and Linux. 16663 16664 `-m32' 16665 `-m64' 16666 Generate code for a 32-bit or 64-bit environment. The 32-bit 16667 environment sets int, long and pointer to 32 bits. The 64-bit 16668 environment sets int to 32 bits and long and pointer to 64 bits. 16669 16670 `-mcmodel=medlow' 16671 Generate code for the Medium/Low code model: 64-bit addresses, 16672 programs must be linked in the low 32 bits of memory. Programs 16673 can be statically or dynamically linked. 16674 16675 `-mcmodel=medmid' 16676 Generate code for the Medium/Middle code model: 64-bit addresses, 16677 programs must be linked in the low 44 bits of memory, the text and 16678 data segments must be less than 2GB in size and the data segment 16679 must be located within 2GB of the text segment. 16680 16681 `-mcmodel=medany' 16682 Generate code for the Medium/Anywhere code model: 64-bit 16683 addresses, programs may be linked anywhere in memory, the text and 16684 data segments must be less than 2GB in size and the data segment 16685 must be located within 2GB of the text segment. 16686 16687 `-mcmodel=embmedany' 16688 Generate code for the Medium/Anywhere code model for embedded 16689 systems: 64-bit addresses, the text and data segments must be less 16690 than 2GB in size, both starting anywhere in memory (determined at 16691 link time). The global register %g4 points to the base of the 16692 data segment. Programs are statically linked and PIC is not 16693 supported. 16694 16695 `-mstack-bias' 16696 `-mno-stack-bias' 16697 With `-mstack-bias', GCC assumes that the stack pointer, and frame 16698 pointer if present, are offset by -2047 which must be added back 16699 when making stack frame references. This is the default in 64-bit 16700 mode. Otherwise, assume no such offset is present. 16701 16702 16703 File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 16704 16705 3.17.40 SPU Options 16706 ------------------- 16707 16708 These `-m' options are supported on the SPU: 16709 16710 `-mwarn-reloc' 16711 `-merror-reloc' 16712 The loader for SPU does not handle dynamic relocations. By 16713 default, GCC will give an error when it generates code that 16714 requires a dynamic relocation. `-mno-error-reloc' disables the 16715 error, `-mwarn-reloc' will generate a warning instead. 16716 16717 `-msafe-dma' 16718 `-munsafe-dma' 16719 Instructions which initiate or test completion of DMA must not be 16720 reordered with respect to loads and stores of the memory which is 16721 being accessed. Users typically address this problem using the 16722 volatile keyword, but that can lead to inefficient code in places 16723 where the memory is known to not change. Rather than mark the 16724 memory as volatile we treat the DMA instructions as potentially 16725 effecting all memory. With `-munsafe-dma' users must use the 16726 volatile keyword to protect memory accesses. 16727 16728 `-mbranch-hints' 16729 By default, GCC will generate a branch hint instruction to avoid 16730 pipeline stalls for always taken or probably taken branches. A 16731 hint will not be generated closer than 8 instructions away from 16732 its branch. There is little reason to disable them, except for 16733 debugging purposes, or to make an object a little bit smaller. 16734 16735 `-msmall-mem' 16736 `-mlarge-mem' 16737 By default, GCC generates code assuming that addresses are never 16738 larger than 18 bits. With `-mlarge-mem' code is generated that 16739 assumes a full 32 bit address. 16740 16741 `-mstdmain' 16742 By default, GCC links against startup code that assumes the 16743 SPU-style main function interface (which has an unconventional 16744 parameter list). With `-mstdmain', GCC will link your program 16745 against startup code that assumes a C99-style interface to `main', 16746 including a local copy of `argv' strings. 16747 16748 `-mfixed-range=REGISTER-RANGE' 16749 Generate code treating the given register range as fixed registers. 16750 A fixed register is one that the register allocator can not use. 16751 This is useful when compiling kernel code. A register range is 16752 specified as two registers separated by a dash. Multiple register 16753 ranges can be specified separated by a comma. 16754 16755 `-mea32' 16756 `-mea64' 16757 Compile code assuming that pointers to the PPU address space 16758 accessed via the `__ea' named address space qualifier are either 16759 32 or 64 bits wide. The default is 32 bits. As this is an ABI 16760 changing option, all object code in an executable must be compiled 16761 with the same setting. 16762 16763 `-maddress-space-conversion' 16764 `-mno-address-space-conversion' 16765 Allow/disallow treating the `__ea' address space as superset of 16766 the generic address space. This enables explicit type casts 16767 between `__ea' and generic pointer as well as implicit conversions 16768 of generic pointers to `__ea' pointers. The default is to allow 16769 address space pointer conversions. 16770 16771 `-mcache-size=CACHE-SIZE' 16772 This option controls the version of libgcc that the compiler links 16773 to an executable and selects a software-managed cache for 16774 accessing variables in the `__ea' address space with a particular 16775 cache size. Possible options for CACHE-SIZE are `8', `16', `32', 16776 `64' and `128'. The default cache size is 64KB. 16777 16778 `-matomic-updates' 16779 `-mno-atomic-updates' 16780 This option controls the version of libgcc that the compiler links 16781 to an executable and selects whether atomic updates to the 16782 software-managed cache of PPU-side variables are used. If you use 16783 atomic updates, changes to a PPU variable from SPU code using the 16784 `__ea' named address space qualifier will not interfere with 16785 changes to other PPU variables residing in the same cache line 16786 from PPU code. If you do not use atomic updates, such 16787 interference may occur; however, writing back cache lines will be 16788 more efficient. The default behavior is to use atomic updates. 16789 16790 `-mdual-nops' 16791 `-mdual-nops=N' 16792 By default, GCC will insert nops to increase dual issue when it 16793 expects it to increase performance. N can be a value from 0 to 16794 10. A smaller N will insert fewer nops. 10 is the default, 0 is 16795 the same as `-mno-dual-nops'. Disabled with `-Os'. 16796 16797 `-mhint-max-nops=N' 16798 Maximum number of nops to insert for a branch hint. A branch hint 16799 must be at least 8 instructions away from the branch it is 16800 effecting. GCC will insert up to N nops to enforce this, 16801 otherwise it will not generate the branch hint. 16802 16803 `-mhint-max-distance=N' 16804 The encoding of the branch hint instruction limits the hint to be 16805 within 256 instructions of the branch it is effecting. By 16806 default, GCC makes sure it is within 125. 16807 16808 `-msafe-hints' 16809 Work around a hardware bug which causes the SPU to stall 16810 indefinitely. By default, GCC will insert the `hbrp' instruction 16811 to make sure this stall won't happen. 16812 16813 16814 16815 File: gcc.info, Node: System V Options, Next: V850 Options, Prev: SPU Options, Up: Submodel Options 16816 16817 3.17.41 Options for System V 16818 ---------------------------- 16819 16820 These additional options are available on System V Release 4 for 16821 compatibility with other compilers on those systems: 16822 16823 `-G' 16824 Create a shared object. It is recommended that `-symbolic' or 16825 `-shared' be used instead. 16826 16827 `-Qy' 16828 Identify the versions of each tool used by the compiler, in a 16829 `.ident' assembler directive in the output. 16830 16831 `-Qn' 16832 Refrain from adding `.ident' directives to the output file (this is 16833 the default). 16834 16835 `-YP,DIRS' 16836 Search the directories DIRS, and no others, for libraries 16837 specified with `-l'. 16838 16839 `-Ym,DIR' 16840 Look in the directory DIR to find the M4 preprocessor. The 16841 assembler uses this option. 16842 16843 16844 File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: System V Options, Up: Submodel Options 16845 16846 3.17.42 V850 Options 16847 -------------------- 16848 16849 These `-m' options are defined for V850 implementations: 16850 16851 `-mlong-calls' 16852 `-mno-long-calls' 16853 Treat all calls as being far away (near). If calls are assumed to 16854 be far away, the compiler will always load the functions address 16855 up into a register, and call indirect through the pointer. 16856 16857 `-mno-ep' 16858 `-mep' 16859 Do not optimize (do optimize) basic blocks that use the same index 16860 pointer 4 or more times to copy pointer into the `ep' register, and 16861 use the shorter `sld' and `sst' instructions. The `-mep' option 16862 is on by default if you optimize. 16863 16864 `-mno-prolog-function' 16865 `-mprolog-function' 16866 Do not use (do use) external functions to save and restore 16867 registers at the prologue and epilogue of a function. The 16868 external functions are slower, but use less code space if more 16869 than one function saves the same number of registers. The 16870 `-mprolog-function' option is on by default if you optimize. 16871 16872 `-mspace' 16873 Try to make the code as small as possible. At present, this just 16874 turns on the `-mep' and `-mprolog-function' options. 16875 16876 `-mtda=N' 16877 Put static or global variables whose size is N bytes or less into 16878 the tiny data area that register `ep' points to. The tiny data 16879 area can hold up to 256 bytes in total (128 bytes for byte 16880 references). 16881 16882 `-msda=N' 16883 Put static or global variables whose size is N bytes or less into 16884 the small data area that register `gp' points to. The small data 16885 area can hold up to 64 kilobytes. 16886 16887 `-mzda=N' 16888 Put static or global variables whose size is N bytes or less into 16889 the first 32 kilobytes of memory. 16890 16891 `-mv850' 16892 Specify that the target processor is the V850. 16893 16894 `-mbig-switch' 16895 Generate code suitable for big switch tables. Use this option 16896 only if the assembler/linker complain about out of range branches 16897 within a switch table. 16898 16899 `-mapp-regs' 16900 This option will cause r2 and r5 to be used in the code generated 16901 by the compiler. This setting is the default. 16902 16903 `-mno-app-regs' 16904 This option will cause r2 and r5 to be treated as fixed registers. 16905 16906 `-mv850e2v3' 16907 Specify that the target processor is the V850E2V3. The 16908 preprocessor constants `__v850e2v3__' will be defined if this 16909 option is used. 16910 16911 `-mv850e2' 16912 Specify that the target processor is the V850E2. The preprocessor 16913 constants `__v850e2__' will be defined if 16914 16915 `-mv850e1' 16916 Specify that the target processor is the V850E1. The preprocessor 16917 constants `__v850e1__' and `__v850e__' will be defined if 16918 16919 `-mv850es' 16920 Specify that the target processor is the V850ES. This is an alias 16921 for the `-mv850e1' option. 16922 16923 `-mv850e' 16924 Specify that the target processor is the V850E. The preprocessor 16925 constant `__v850e__' will be defined if this option is used. 16926 16927 If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2' 16928 nor `-mv850e2v3' are defined then a default target processor will 16929 be chosen and the relevant `__v850*__' preprocessor constant will 16930 be defined. 16931 16932 The preprocessor constants `__v850' and `__v851__' are always 16933 defined, regardless of which processor variant is the target. 16934 16935 `-mdisable-callt' 16936 This option will suppress generation of the CALLT instruction for 16937 the v850e, v850e1, v850e2 and v850e2v3 flavors of the v850 16938 architecture. The default is `-mno-disable-callt' which allows 16939 the CALLT instruction to be used. 16940 16941 16942 16943 File: gcc.info, Node: VAX Options, Next: VxWorks Options, Prev: V850 Options, Up: Submodel Options 16944 16945 3.17.43 VAX Options 16946 ------------------- 16947 16948 These `-m' options are defined for the VAX: 16949 16950 `-munix' 16951 Do not output certain jump instructions (`aobleq' and so on) that 16952 the Unix assembler for the VAX cannot handle across long ranges. 16953 16954 `-mgnu' 16955 Do output those jump instructions, on the assumption that you will 16956 assemble with the GNU assembler. 16957 16958 `-mg' 16959 Output code for g-format floating point numbers instead of 16960 d-format. 16961 16962 16963 File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VAX Options, Up: Submodel Options 16964 16965 3.17.44 VxWorks Options 16966 ----------------------- 16967 16968 The options in this section are defined for all VxWorks targets. 16969 Options specific to the target hardware are listed with the other 16970 options for that target. 16971 16972 `-mrtp' 16973 GCC can generate code for both VxWorks kernels and real time 16974 processes (RTPs). This option switches from the former to the 16975 latter. It also defines the preprocessor macro `__RTP__'. 16976 16977 `-non-static' 16978 Link an RTP executable against shared libraries rather than static 16979 libraries. The options `-static' and `-shared' can also be used 16980 for RTPs (*note Link Options::); `-static' is the default. 16981 16982 `-Bstatic' 16983 `-Bdynamic' 16984 These options are passed down to the linker. They are defined for 16985 compatibility with Diab. 16986 16987 `-Xbind-lazy' 16988 Enable lazy binding of function calls. This option is equivalent 16989 to `-Wl,-z,now' and is defined for compatibility with Diab. 16990 16991 `-Xbind-now' 16992 Disable lazy binding of function calls. This option is the 16993 default and is defined for compatibility with Diab. 16994 16995 16996 File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options 16997 16998 3.17.45 x86-64 Options 16999 ---------------------- 17000 17001 These are listed under *Note i386 and x86-64 Options::. 17002 17003 17004 File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 17005 17006 3.17.46 Xstormy16 Options 17007 ------------------------- 17008 17009 These options are defined for Xstormy16: 17010 17011 `-msim' 17012 Choose startup files and linker script suitable for the simulator. 17013 17014 17015 File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 17016 17017 3.17.47 Xtensa Options 17018 ---------------------- 17019 17020 These options are supported for Xtensa targets: 17021 17022 `-mconst16' 17023 `-mno-const16' 17024 Enable or disable use of `CONST16' instructions for loading 17025 constant values. The `CONST16' instruction is currently not a 17026 standard option from Tensilica. When enabled, `CONST16' 17027 instructions are always used in place of the standard `L32R' 17028 instructions. The use of `CONST16' is enabled by default only if 17029 the `L32R' instruction is not available. 17030 17031 `-mfused-madd' 17032 `-mno-fused-madd' 17033 Enable or disable use of fused multiply/add and multiply/subtract 17034 instructions in the floating-point option. This has no effect if 17035 the floating-point option is not also enabled. Disabling fused 17036 multiply/add and multiply/subtract instructions forces the 17037 compiler to use separate instructions for the multiply and 17038 add/subtract operations. This may be desirable in some cases 17039 where strict IEEE 754-compliant results are required: the fused 17040 multiply add/subtract instructions do not round the intermediate 17041 result, thereby producing results with _more_ bits of precision 17042 than specified by the IEEE standard. Disabling fused multiply 17043 add/subtract instructions also ensures that the program output is 17044 not sensitive to the compiler's ability to combine multiply and 17045 add/subtract operations. 17046 17047 `-mserialize-volatile' 17048 `-mno-serialize-volatile' 17049 When this option is enabled, GCC inserts `MEMW' instructions before 17050 `volatile' memory references to guarantee sequential consistency. 17051 The default is `-mserialize-volatile'. Use 17052 `-mno-serialize-volatile' to omit the `MEMW' instructions. 17053 17054 `-mforce-no-pic' 17055 For targets, like GNU/Linux, where all user-mode Xtensa code must 17056 be position-independent code (PIC), this option disables PIC for 17057 compiling kernel code. 17058 17059 `-mtext-section-literals' 17060 `-mno-text-section-literals' 17061 Control the treatment of literal pools. The default is 17062 `-mno-text-section-literals', which places literals in a separate 17063 section in the output file. This allows the literal pool to be 17064 placed in a data RAM/ROM, and it also allows the linker to combine 17065 literal pools from separate object files to remove redundant 17066 literals and improve code size. With `-mtext-section-literals', 17067 the literals are interspersed in the text section in order to keep 17068 them as close as possible to their references. This may be 17069 necessary for large assembly files. 17070 17071 `-mtarget-align' 17072 `-mno-target-align' 17073 When this option is enabled, GCC instructs the assembler to 17074 automatically align instructions to reduce branch penalties at the 17075 expense of some code density. The assembler attempts to widen 17076 density instructions to align branch targets and the instructions 17077 following call instructions. If there are not enough preceding 17078 safe density instructions to align a target, no widening will be 17079 performed. The default is `-mtarget-align'. These options do not 17080 affect the treatment of auto-aligned instructions like `LOOP', 17081 which the assembler will always align, either by widening density 17082 instructions or by inserting no-op instructions. 17083 17084 `-mlongcalls' 17085 `-mno-longcalls' 17086 When this option is enabled, GCC instructs the assembler to 17087 translate direct calls to indirect calls unless it can determine 17088 that the target of a direct call is in the range allowed by the 17089 call instruction. This translation typically occurs for calls to 17090 functions in other source files. Specifically, the assembler 17091 translates a direct `CALL' instruction into an `L32R' followed by 17092 a `CALLX' instruction. The default is `-mno-longcalls'. This 17093 option should be used in programs where the call target can 17094 potentially be out of range. This option is implemented in the 17095 assembler, not the compiler, so the assembly code generated by GCC 17096 will still show direct call instructions--look at the disassembled 17097 object code to see the actual instructions. Note that the 17098 assembler will use an indirect call for every cross-file call, not 17099 just those that really will be out of range. 17100 17101 17102 File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 17103 17104 3.17.48 zSeries Options 17105 ----------------------- 17106 17107 These are listed under *Note S/390 and zSeries Options::. 17108 17109 17110 File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 17111 17112 3.18 Options for Code Generation Conventions 17113 ============================================ 17114 17115 These machine-independent options control the interface conventions 17116 used in code generation. 17117 17118 Most of them have both positive and negative forms; the negative form 17119 of `-ffoo' would be `-fno-foo'. In the table below, only one of the 17120 forms is listed--the one which is not the default. You can figure out 17121 the other form by either removing `no-' or adding it. 17122 17123 `-fbounds-check' 17124 For front-ends that support it, generate additional code to check 17125 that indices used to access arrays are within the declared range. 17126 This is currently only supported by the Java and Fortran 17127 front-ends, where this option defaults to true and false 17128 respectively. 17129 17130 `-ftrapv' 17131 This option generates traps for signed overflow on addition, 17132 subtraction, multiplication operations. 17133 17134 `-fwrapv' 17135 This option instructs the compiler to assume that signed arithmetic 17136 overflow of addition, subtraction and multiplication wraps around 17137 using twos-complement representation. This flag enables some 17138 optimizations and disables others. This option is enabled by 17139 default for the Java front-end, as required by the Java language 17140 specification. 17141 17142 `-fexceptions' 17143 Enable exception handling. Generates extra code needed to 17144 propagate exceptions. For some targets, this implies GCC will 17145 generate frame unwind information for all functions, which can 17146 produce significant data size overhead, although it does not 17147 affect execution. If you do not specify this option, GCC will 17148 enable it by default for languages like C++ which normally require 17149 exception handling, and disable it for languages like C that do 17150 not normally require it. However, you may need to enable this 17151 option when compiling C code that needs to interoperate properly 17152 with exception handlers written in C++. You may also wish to 17153 disable this option if you are compiling older C++ programs that 17154 don't use exception handling. 17155 17156 `-fnon-call-exceptions' 17157 Generate code that allows trapping instructions to throw 17158 exceptions. Note that this requires platform-specific runtime 17159 support that does not exist everywhere. Moreover, it only allows 17160 _trapping_ instructions to throw exceptions, i.e. memory 17161 references or floating point instructions. It does not allow 17162 exceptions to be thrown from arbitrary signal handlers such as 17163 `SIGALRM'. 17164 17165 `-funwind-tables' 17166 Similar to `-fexceptions', except that it will just generate any 17167 needed static data, but will not affect the generated code in any 17168 other way. You will normally not enable this option; instead, a 17169 language processor that needs this handling would enable it on 17170 your behalf. 17171 17172 `-fasynchronous-unwind-tables' 17173 Generate unwind table in dwarf2 format, if supported by target 17174 machine. The table is exact at each instruction boundary, so it 17175 can be used for stack unwinding from asynchronous events (such as 17176 debugger or garbage collector). 17177 17178 `-fpcc-struct-return' 17179 Return "short" `struct' and `union' values in memory like longer 17180 ones, rather than in registers. This convention is less 17181 efficient, but it has the advantage of allowing intercallability 17182 between GCC-compiled files and files compiled with other 17183 compilers, particularly the Portable C Compiler (pcc). 17184 17185 The precise convention for returning structures in memory depends 17186 on the target configuration macros. 17187 17188 Short structures and unions are those whose size and alignment 17189 match that of some integer type. 17190 17191 *Warning:* code compiled with the `-fpcc-struct-return' switch is 17192 not binary compatible with code compiled with the 17193 `-freg-struct-return' switch. Use it to conform to a non-default 17194 application binary interface. 17195 17196 `-freg-struct-return' 17197 Return `struct' and `union' values in registers when possible. 17198 This is more efficient for small structures than 17199 `-fpcc-struct-return'. 17200 17201 If you specify neither `-fpcc-struct-return' nor 17202 `-freg-struct-return', GCC defaults to whichever convention is 17203 standard for the target. If there is no standard convention, GCC 17204 defaults to `-fpcc-struct-return', except on targets where GCC is 17205 the principal compiler. In those cases, we can choose the 17206 standard, and we chose the more efficient register return 17207 alternative. 17208 17209 *Warning:* code compiled with the `-freg-struct-return' switch is 17210 not binary compatible with code compiled with the 17211 `-fpcc-struct-return' switch. Use it to conform to a non-default 17212 application binary interface. 17213 17214 `-fshort-enums' 17215 Allocate to an `enum' type only as many bytes as it needs for the 17216 declared range of possible values. Specifically, the `enum' type 17217 will be equivalent to the smallest integer type which has enough 17218 room. 17219 17220 *Warning:* the `-fshort-enums' switch causes GCC to generate code 17221 that is not binary compatible with code generated without that 17222 switch. Use it to conform to a non-default application binary 17223 interface. 17224 17225 `-fshort-double' 17226 Use the same size for `double' as for `float'. 17227 17228 *Warning:* the `-fshort-double' switch causes GCC to generate code 17229 that is not binary compatible with code generated without that 17230 switch. Use it to conform to a non-default application binary 17231 interface. 17232 17233 `-fshort-wchar' 17234 Override the underlying type for `wchar_t' to be `short unsigned 17235 int' instead of the default for the target. This option is useful 17236 for building programs to run under WINE. 17237 17238 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 17239 that is not binary compatible with code generated without that 17240 switch. Use it to conform to a non-default application binary 17241 interface. 17242 17243 `-fno-common' 17244 In C code, controls the placement of uninitialized global 17245 variables. Unix C compilers have traditionally permitted multiple 17246 definitions of such variables in different compilation units by 17247 placing the variables in a common block. This is the behavior 17248 specified by `-fcommon', and is the default for GCC on most 17249 targets. On the other hand, this behavior is not required by ISO 17250 C, and on some targets may carry a speed or code size penalty on 17251 variable references. The `-fno-common' option specifies that the 17252 compiler should place uninitialized global variables in the data 17253 section of the object file, rather than generating them as common 17254 blocks. This has the effect that if the same variable is declared 17255 (without `extern') in two different compilations, you will get a 17256 multiple-definition error when you link them. In this case, you 17257 must compile with `-fcommon' instead. Compiling with 17258 `-fno-common' is useful on targets for which it provides better 17259 performance, or if you wish to verify that the program will work 17260 on other systems which always treat uninitialized variable 17261 declarations this way. 17262 17263 `-fno-ident' 17264 Ignore the `#ident' directive. 17265 17266 `-finhibit-size-directive' 17267 Don't output a `.size' assembler directive, or anything else that 17268 would cause trouble if the function is split in the middle, and the 17269 two halves are placed at locations far apart in memory. This 17270 option is used when compiling `crtstuff.c'; you should not need to 17271 use it for anything else. 17272 17273 `-fverbose-asm' 17274 Put extra commentary information in the generated assembly code to 17275 make it more readable. This option is generally only of use to 17276 those who actually need to read the generated assembly code 17277 (perhaps while debugging the compiler itself). 17278 17279 `-fno-verbose-asm', the default, causes the extra information to 17280 be omitted and is useful when comparing two assembler files. 17281 17282 `-frecord-gcc-switches' 17283 This switch causes the command line that was used to invoke the 17284 compiler to be recorded into the object file that is being created. 17285 This switch is only implemented on some targets and the exact 17286 format of the recording is target and binary file format 17287 dependent, but it usually takes the form of a section containing 17288 ASCII text. This switch is related to the `-fverbose-asm' switch, 17289 but that switch only records information in the assembler output 17290 file as comments, so it never reaches the object file. 17291 17292 `-fpic' 17293 Generate position-independent code (PIC) suitable for use in a 17294 shared library, if supported for the target machine. Such code 17295 accesses all constant addresses through a global offset table 17296 (GOT). The dynamic loader resolves the GOT entries when the 17297 program starts (the dynamic loader is not part of GCC; it is part 17298 of the operating system). If the GOT size for the linked 17299 executable exceeds a machine-specific maximum size, you get an 17300 error message from the linker indicating that `-fpic' does not 17301 work; in that case, recompile with `-fPIC' instead. (These 17302 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 17303 386 has no such limit.) 17304 17305 Position-independent code requires special support, and therefore 17306 works only on certain machines. For the 386, GCC supports PIC for 17307 System V but not for the Sun 386i. Code generated for the IBM 17308 RS/6000 is always position-independent. 17309 17310 When this flag is set, the macros `__pic__' and `__PIC__' are 17311 defined to 1. 17312 17313 `-fPIC' 17314 If supported for the target machine, emit position-independent 17315 code, suitable for dynamic linking and avoiding any limit on the 17316 size of the global offset table. This option makes a difference 17317 on the m68k, PowerPC and SPARC. 17318 17319 Position-independent code requires special support, and therefore 17320 works only on certain machines. 17321 17322 When this flag is set, the macros `__pic__' and `__PIC__' are 17323 defined to 2. 17324 17325 `-fpie' 17326 `-fPIE' 17327 These options are similar to `-fpic' and `-fPIC', but generated 17328 position independent code can be only linked into executables. 17329 Usually these options are used when `-pie' GCC option will be used 17330 during linking. 17331 17332 `-fpie' and `-fPIE' both define the macros `__pie__' and 17333 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for 17334 `-fPIE'. 17335 17336 `-fno-jump-tables' 17337 Do not use jump tables for switch statements even where it would be 17338 more efficient than other code generation strategies. This option 17339 is of use in conjunction with `-fpic' or `-fPIC' for building code 17340 which forms part of a dynamic linker and cannot reference the 17341 address of a jump table. On some targets, jump tables do not 17342 require a GOT and this option is not needed. 17343 17344 `-ffixed-REG' 17345 Treat the register named REG as a fixed register; generated code 17346 should never refer to it (except perhaps as a stack pointer, frame 17347 pointer or in some other fixed role). 17348 17349 REG must be the name of a register. The register names accepted 17350 are machine-specific and are defined in the `REGISTER_NAMES' macro 17351 in the machine description macro file. 17352 17353 This flag does not have a negative form, because it specifies a 17354 three-way choice. 17355 17356 `-fcall-used-REG' 17357 Treat the register named REG as an allocable register that is 17358 clobbered by function calls. It may be allocated for temporaries 17359 or variables that do not live across a call. Functions compiled 17360 this way will not save and restore the register REG. 17361 17362 It is an error to used this flag with the frame pointer or stack 17363 pointer. Use of this flag for other registers that have fixed 17364 pervasive roles in the machine's execution model will produce 17365 disastrous results. 17366 17367 This flag does not have a negative form, because it specifies a 17368 three-way choice. 17369 17370 `-fcall-saved-REG' 17371 Treat the register named REG as an allocable register saved by 17372 functions. It may be allocated even for temporaries or variables 17373 that live across a call. Functions compiled this way will save 17374 and restore the register REG if they use it. 17375 17376 It is an error to used this flag with the frame pointer or stack 17377 pointer. Use of this flag for other registers that have fixed 17378 pervasive roles in the machine's execution model will produce 17379 disastrous results. 17380 17381 A different sort of disaster will result from the use of this flag 17382 for a register in which function values may be returned. 17383 17384 This flag does not have a negative form, because it specifies a 17385 three-way choice. 17386 17387 `-fpack-struct[=N]' 17388 Without a value specified, pack all structure members together 17389 without holes. When a value is specified (which must be a small 17390 power of two), pack structure members according to this value, 17391 representing the maximum alignment (that is, objects with default 17392 alignment requirements larger than this will be output potentially 17393 unaligned at the next fitting location. 17394 17395 *Warning:* the `-fpack-struct' switch causes GCC to generate code 17396 that is not binary compatible with code generated without that 17397 switch. Additionally, it makes the code suboptimal. Use it to 17398 conform to a non-default application binary interface. 17399 17400 `-finstrument-functions' 17401 Generate instrumentation calls for entry and exit to functions. 17402 Just after function entry and just before function exit, the 17403 following profiling functions will be called with the address of 17404 the current function and its call site. (On some platforms, 17405 `__builtin_return_address' does not work beyond the current 17406 function, so the call site information may not be available to the 17407 profiling functions otherwise.) 17408 17409 void __cyg_profile_func_enter (void *this_fn, 17410 void *call_site); 17411 void __cyg_profile_func_exit (void *this_fn, 17412 void *call_site); 17413 17414 The first argument is the address of the start of the current 17415 function, which may be looked up exactly in the symbol table. 17416 17417 This instrumentation is also done for functions expanded inline in 17418 other functions. The profiling calls will indicate where, 17419 conceptually, the inline function is entered and exited. This 17420 means that addressable versions of such functions must be 17421 available. If all your uses of a function are expanded inline, 17422 this may mean an additional expansion of code size. If you use 17423 `extern inline' in your C code, an addressable version of such 17424 functions must be provided. (This is normally the case anyways, 17425 but if you get lucky and the optimizer always expands the 17426 functions inline, you might have gotten away without providing 17427 static copies.) 17428 17429 A function may be given the attribute `no_instrument_function', in 17430 which case this instrumentation will not be done. This can be 17431 used, for example, for the profiling functions listed above, 17432 high-priority interrupt routines, and any functions from which the 17433 profiling functions cannot safely be called (perhaps signal 17434 handlers, if the profiling routines generate output or allocate 17435 memory). 17436 17437 `-finstrument-functions-exclude-file-list=FILE,FILE,...' 17438 Set the list of functions that are excluded from instrumentation 17439 (see the description of `-finstrument-functions'). If the file 17440 that contains a function definition matches with one of FILE, then 17441 that function is not instrumented. The match is done on 17442 substrings: if the FILE parameter is a substring of the file name, 17443 it is considered to be a match. 17444 17445 For example: 17446 17447 -finstrument-functions-exclude-file-list=/bits/stl,include/sys 17448 17449 will exclude any inline function defined in files whose pathnames 17450 contain `/bits/stl' or `include/sys'. 17451 17452 If, for some reason, you want to include letter `','' in one of 17453 SYM, write `'\,''. For example, 17454 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 17455 single quote surrounding the option). 17456 17457 `-finstrument-functions-exclude-function-list=SYM,SYM,...' 17458 This is similar to `-finstrument-functions-exclude-file-list', but 17459 this option sets the list of function names to be excluded from 17460 instrumentation. The function name to be matched is its 17461 user-visible name, such as `vector<int> blah(const vector<int> 17462 &)', not the internal mangled name (e.g., 17463 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 17464 the SYM parameter is a substring of the function name, it is 17465 considered to be a match. For C99 and C++ extended identifiers, 17466 the function name must be given in UTF-8, not using universal 17467 character names. 17468 17469 `-fstack-check' 17470 Generate code to verify that you do not go beyond the boundary of 17471 the stack. You should specify this flag if you are running in an 17472 environment with multiple threads, but only rarely need to specify 17473 it in a single-threaded environment since stack overflow is 17474 automatically detected on nearly all systems if there is only one 17475 stack. 17476 17477 Note that this switch does not actually cause checking to be done; 17478 the operating system or the language runtime must do that. The 17479 switch causes generation of code to ensure that they see the stack 17480 being extended. 17481 17482 You can additionally specify a string parameter: `no' means no 17483 checking, `generic' means force the use of old-style checking, 17484 `specific' means use the best checking method and is equivalent to 17485 bare `-fstack-check'. 17486 17487 Old-style checking is a generic mechanism that requires no specific 17488 target support in the compiler but comes with the following 17489 drawbacks: 17490 17491 1. Modified allocation strategy for large objects: they will 17492 always be allocated dynamically if their size exceeds a fixed 17493 threshold. 17494 17495 2. Fixed limit on the size of the static frame of functions: 17496 when it is topped by a particular function, stack checking is 17497 not reliable and a warning is issued by the compiler. 17498 17499 3. Inefficiency: because of both the modified allocation 17500 strategy and the generic implementation, the performances of 17501 the code are hampered. 17502 17503 Note that old-style stack checking is also the fallback method for 17504 `specific' if no target support has been added in the compiler. 17505 17506 `-fstack-limit-register=REG' 17507 `-fstack-limit-symbol=SYM' 17508 `-fno-stack-limit' 17509 Generate code to ensure that the stack does not grow beyond a 17510 certain value, either the value of a register or the address of a 17511 symbol. If the stack would grow beyond the value, a signal is 17512 raised. For most targets, the signal is raised before the stack 17513 overruns the boundary, so it is possible to catch the signal 17514 without taking special precautions. 17515 17516 For instance, if the stack starts at absolute address `0x80000000' 17517 and grows downwards, you can use the flags 17518 `-fstack-limit-symbol=__stack_limit' and 17519 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 17520 of 128KB. Note that this may only work with the GNU linker. 17521 17522 `-fsplit-stack' 17523 Generate code to automatically split the stack before it overflows. 17524 The resulting program has a discontiguous stack which can only 17525 overflow if the program is unable to allocate any more memory. 17526 This is most useful when running threaded programs, as it is no 17527 longer necessary to calculate a good stack size to use for each 17528 thread. This is currently only implemented for the i386 and 17529 x86_64 backends running GNU/Linux. 17530 17531 When code compiled with `-fsplit-stack' calls code compiled 17532 without `-fsplit-stack', there may not be much stack space 17533 available for the latter code to run. If compiling all code, 17534 including library code, with `-fsplit-stack' is not an option, 17535 then the linker can fix up these calls so that the code compiled 17536 without `-fsplit-stack' always has a large stack. Support for 17537 this is implemented in the gold linker in GNU binutils release 2.21 17538 and later. 17539 17540 `-fleading-underscore' 17541 This option and its counterpart, `-fno-leading-underscore', 17542 forcibly change the way C symbols are represented in the object 17543 file. One use is to help link with legacy assembly code. 17544 17545 *Warning:* the `-fleading-underscore' switch causes GCC to 17546 generate code that is not binary compatible with code generated 17547 without that switch. Use it to conform to a non-default 17548 application binary interface. Not all targets provide complete 17549 support for this switch. 17550 17551 `-ftls-model=MODEL' 17552 Alter the thread-local storage model to be used (*note 17553 Thread-Local::). The MODEL argument should be one of 17554 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 17555 17556 The default without `-fpic' is `initial-exec'; with `-fpic' the 17557 default is `global-dynamic'. 17558 17559 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 17560 Set the default ELF image symbol visibility to the specified 17561 option--all symbols will be marked with this unless overridden 17562 within the code. Using this feature can very substantially 17563 improve linking and load times of shared object libraries, produce 17564 more optimized code, provide near-perfect API export and prevent 17565 symbol clashes. It is *strongly* recommended that you use this in 17566 any shared objects you distribute. 17567 17568 Despite the nomenclature, `default' always means public; i.e., 17569 available to be linked against from outside the shared object. 17570 `protected' and `internal' are pretty useless in real-world usage 17571 so the only other commonly used option will be `hidden'. The 17572 default if `-fvisibility' isn't specified is `default', i.e., make 17573 every symbol public--this causes the same behavior as previous 17574 versions of GCC. 17575 17576 A good explanation of the benefits offered by ensuring ELF symbols 17577 have the correct visibility is given by "How To Write Shared 17578 Libraries" by Ulrich Drepper (which can be found at 17579 `http://people.redhat.com/~drepper/')--however a superior solution 17580 made possible by this option to marking things hidden when the 17581 default is public is to make the default hidden and mark things 17582 public. This is the norm with DLL's on Windows and with 17583 `-fvisibility=hidden' and `__attribute__ 17584 ((visibility("default")))' instead of `__declspec(dllexport)' you 17585 get almost identical semantics with identical syntax. This is a 17586 great boon to those working with cross-platform projects. 17587 17588 For those adding visibility support to existing code, you may find 17589 `#pragma GCC visibility' of use. This works by you enclosing the 17590 declarations you wish to set visibility for with (for example) 17591 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 17592 pop'. Bear in mind that symbol visibility should be viewed *as 17593 part of the API interface contract* and thus all new code should 17594 always specify visibility when it is not the default; i.e., 17595 declarations only for use within the local DSO should *always* be 17596 marked explicitly as hidden as so to avoid PLT indirection 17597 overheads--making this abundantly clear also aids readability and 17598 self-documentation of the code. Note that due to ISO C++ 17599 specification requirements, operator new and operator delete must 17600 always be of default visibility. 17601 17602 Be aware that headers from outside your project, in particular 17603 system headers and headers from any other library you use, may not 17604 be expecting to be compiled with visibility other than the 17605 default. You may need to explicitly say `#pragma GCC visibility 17606 push(default)' before including any such headers. 17607 17608 `extern' declarations are not affected by `-fvisibility', so a lot 17609 of code can be recompiled with `-fvisibility=hidden' with no 17610 modifications. However, this means that calls to `extern' 17611 functions with no explicit visibility will use the PLT, so it is 17612 more effective to use `__attribute ((visibility))' and/or `#pragma 17613 GCC visibility' to tell the compiler which `extern' declarations 17614 should be treated as hidden. 17615 17616 Note that `-fvisibility' does affect C++ vague linkage entities. 17617 This means that, for instance, an exception class that will be 17618 thrown between DSOs must be explicitly marked with default 17619 visibility so that the `type_info' nodes will be unified between 17620 the DSOs. 17621 17622 An overview of these techniques, their benefits and how to use them 17623 is at `http://gcc.gnu.org/wiki/Visibility'. 17624 17625 `-fstrict-volatile-bitfields' 17626 This option should be used if accesses to volatile bitfields (or 17627 other structure fields, although the compiler usually honors those 17628 types anyway) should use a single access of the width of the 17629 field's type, aligned to a natural alignment if possible. For 17630 example, targets with memory-mapped peripheral registers might 17631 require all such accesses to be 16 bits wide; with this flag the 17632 user could declare all peripheral bitfields as "unsigned short" 17633 (assuming short is 16 bits on these targets) to force GCC to use 17634 16 bit accesses instead of, perhaps, a more efficient 32 bit 17635 access. 17636 17637 If this option is disabled, the compiler will use the most 17638 efficient instruction. In the previous example, that might be a 17639 32-bit load instruction, even though that will access bytes that 17640 do not contain any portion of the bitfield, or memory-mapped 17641 registers unrelated to the one being updated. 17642 17643 If the target requires strict alignment, and honoring the field 17644 type would require violating this alignment, a warning is issued. 17645 If the field has `packed' attribute, the access is done without 17646 honoring the field type. If the field doesn't have `packed' 17647 attribute, the access is done honoring the field type. In both 17648 cases, GCC assumes that the user knows something about the target 17649 hardware that it is unaware of. 17650 17651 The default value of this option is determined by the application 17652 binary interface for the target processor. 17653 17654 17655 17656 File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 17657 17658 3.19 Environment Variables Affecting GCC 17659 ======================================== 17660 17661 This section describes several environment variables that affect how GCC 17662 operates. Some of them work by specifying directories or prefixes to 17663 use when searching for various kinds of files. Some are used to 17664 specify other aspects of the compilation environment. 17665 17666 Note that you can also specify places to search using options such as 17667 `-B', `-I' and `-L' (*note Directory Options::). These take precedence 17668 over places specified using environment variables, which in turn take 17669 precedence over those specified by the configuration of GCC. *Note 17670 Controlling the Compilation Driver `gcc': (gccint)Driver. 17671 17672 `LANG' 17673 `LC_CTYPE' 17674 `LC_MESSAGES' 17675 `LC_ALL' 17676 These environment variables control the way that GCC uses 17677 localization information that allow GCC to work with different 17678 national conventions. GCC inspects the locale categories 17679 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 17680 These locale categories can be set to any value supported by your 17681 installation. A typical value is `en_GB.UTF-8' for English in the 17682 United Kingdom encoded in UTF-8. 17683 17684 The `LC_CTYPE' environment variable specifies character 17685 classification. GCC uses it to determine the character boundaries 17686 in a string; this is needed for some multibyte encodings that 17687 contain quote and escape characters that would otherwise be 17688 interpreted as a string end or escape. 17689 17690 The `LC_MESSAGES' environment variable specifies the language to 17691 use in diagnostic messages. 17692 17693 If the `LC_ALL' environment variable is set, it overrides the value 17694 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 17695 `LC_MESSAGES' default to the value of the `LANG' environment 17696 variable. If none of these variables are set, GCC defaults to 17697 traditional C English behavior. 17698 17699 `TMPDIR' 17700 If `TMPDIR' is set, it specifies the directory to use for temporary 17701 files. GCC uses temporary files to hold the output of one stage of 17702 compilation which is to be used as input to the next stage: for 17703 example, the output of the preprocessor, which is the input to the 17704 compiler proper. 17705 17706 `GCC_EXEC_PREFIX' 17707 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 17708 names of the subprograms executed by the compiler. No slash is 17709 added when this prefix is combined with the name of a subprogram, 17710 but you can specify a prefix that ends with a slash if you wish. 17711 17712 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an 17713 appropriate prefix to use based on the pathname it was invoked 17714 with. 17715 17716 If GCC cannot find the subprogram using the specified prefix, it 17717 tries looking in the usual places for the subprogram. 17718 17719 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 17720 PREFIX is the prefix to the installed compiler. In many cases 17721 PREFIX is the value of `prefix' when you ran the `configure' 17722 script. 17723 17724 Other prefixes specified with `-B' take precedence over this 17725 prefix. 17726 17727 This prefix is also used for finding files such as `crt0.o' that 17728 are used for linking. 17729 17730 In addition, the prefix is used in an unusual way in finding the 17731 directories to search for header files. For each of the standard 17732 directories whose name normally begins with `/usr/local/lib/gcc' 17733 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 17734 replacing that beginning with the specified prefix to produce an 17735 alternate directory name. Thus, with `-Bfoo/', GCC will search 17736 `foo/bar' where it would normally search `/usr/local/lib/bar'. 17737 These alternate directories are searched first; the standard 17738 directories come next. If a standard directory begins with the 17739 configured PREFIX then the value of PREFIX is replaced by 17740 `GCC_EXEC_PREFIX' when looking for header files. 17741 17742 `COMPILER_PATH' 17743 The value of `COMPILER_PATH' is a colon-separated list of 17744 directories, much like `PATH'. GCC tries the directories thus 17745 specified when searching for subprograms, if it can't find the 17746 subprograms using `GCC_EXEC_PREFIX'. 17747 17748 `LIBRARY_PATH' 17749 The value of `LIBRARY_PATH' is a colon-separated list of 17750 directories, much like `PATH'. When configured as a native 17751 compiler, GCC tries the directories thus specified when searching 17752 for special linker files, if it can't find them using 17753 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 17754 when searching for ordinary libraries for the `-l' option (but 17755 directories specified with `-L' come first). 17756 17757 `LANG' 17758 This variable is used to pass locale information to the compiler. 17759 One way in which this information is used is to determine the 17760 character set to be used when character literals, string literals 17761 and comments are parsed in C and C++. When the compiler is 17762 configured to allow multibyte characters, the following values for 17763 `LANG' are recognized: 17764 17765 `C-JIS' 17766 Recognize JIS characters. 17767 17768 `C-SJIS' 17769 Recognize SJIS characters. 17770 17771 `C-EUCJP' 17772 Recognize EUCJP characters. 17773 17774 If `LANG' is not defined, or if it has some other value, then the 17775 compiler will use mblen and mbtowc as defined by the default 17776 locale to recognize and translate multibyte characters. 17777 17778 Some additional environments variables affect the behavior of the 17779 preprocessor. 17780 17781 `CPATH' 17782 `C_INCLUDE_PATH' 17783 `CPLUS_INCLUDE_PATH' 17784 `OBJC_INCLUDE_PATH' 17785 Each variable's value is a list of directories separated by a 17786 special character, much like `PATH', in which to look for header 17787 files. The special character, `PATH_SEPARATOR', is 17788 target-dependent and determined at GCC build time. For Microsoft 17789 Windows-based targets it is a semicolon, and for almost all other 17790 targets it is a colon. 17791 17792 `CPATH' specifies a list of directories to be searched as if 17793 specified with `-I', but after any paths given with `-I' options 17794 on the command line. This environment variable is used regardless 17795 of which language is being preprocessed. 17796 17797 The remaining environment variables apply only when preprocessing 17798 the particular language indicated. Each specifies a list of 17799 directories to be searched as if specified with `-isystem', but 17800 after any paths given with `-isystem' options on the command line. 17801 17802 In all these variables, an empty element instructs the compiler to 17803 search its current working directory. Empty elements can appear 17804 at the beginning or end of a path. For instance, if the value of 17805 `CPATH' is `:/special/include', that has the same effect as 17806 `-I. -I/special/include'. 17807 17808 `DEPENDENCIES_OUTPUT' 17809 If this variable is set, its value specifies how to output 17810 dependencies for Make based on the non-system header files 17811 processed by the compiler. System header files are ignored in the 17812 dependency output. 17813 17814 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 17815 which case the Make rules are written to that file, guessing the 17816 target name from the source file name. Or the value can have the 17817 form `FILE TARGET', in which case the rules are written to file 17818 FILE using TARGET as the target name. 17819 17820 In other words, this environment variable is equivalent to 17821 combining the options `-MM' and `-MF' (*note Preprocessor 17822 Options::), with an optional `-MT' switch too. 17823 17824 `SUNPRO_DEPENDENCIES' 17825 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 17826 except that system header files are not ignored, so it implies 17827 `-M' rather than `-MM'. However, the dependence on the main input 17828 file is omitted. *Note Preprocessor Options::. 17829 17830 17831 File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC 17832 17833 3.20 Using Precompiled Headers 17834 ============================== 17835 17836 Often large projects have many header files that are included in every 17837 source file. The time the compiler takes to process these header files 17838 over and over again can account for nearly all of the time required to 17839 build the project. To make builds faster, GCC allows users to 17840 `precompile' a header file; then, if builds can use the precompiled 17841 header file they will be much faster. 17842 17843 To create a precompiled header file, simply compile it as you would any 17844 other file, if necessary using the `-x' option to make the driver treat 17845 it as a C or C++ header file. You will probably want to use a tool 17846 like `make' to keep the precompiled header up-to-date when the headers 17847 it contains change. 17848 17849 A precompiled header file will be searched for when `#include' is seen 17850 in the compilation. As it searches for the included file (*note Search 17851 Path: (cpp)Search Path.) the compiler looks for a precompiled header in 17852 each directory just before it looks for the include file in that 17853 directory. The name searched for is the name specified in the 17854 `#include' with `.gch' appended. If the precompiled header file can't 17855 be used, it is ignored. 17856 17857 For instance, if you have `#include "all.h"', and you have `all.h.gch' 17858 in the same directory as `all.h', then the precompiled header file will 17859 be used if possible, and the original header will be used otherwise. 17860 17861 Alternatively, you might decide to put the precompiled header file in a 17862 directory and use `-I' to ensure that directory is searched before (or 17863 instead of) the directory containing the original header. Then, if you 17864 want to check that the precompiled header file is always used, you can 17865 put a file of the same name as the original header in this directory 17866 containing an `#error' command. 17867 17868 This also works with `-include'. So yet another way to use 17869 precompiled headers, good for projects not designed with precompiled 17870 header files in mind, is to simply take most of the header files used by 17871 a project, include them from another header file, precompile that header 17872 file, and `-include' the precompiled header. If the header files have 17873 guards against multiple inclusion, they will be skipped because they've 17874 already been included (in the precompiled header). 17875 17876 If you need to precompile the same header file for different 17877 languages, targets, or compiler options, you can instead make a 17878 _directory_ named like `all.h.gch', and put each precompiled header in 17879 the directory, perhaps using `-o'. It doesn't matter what you call the 17880 files in the directory, every precompiled header in the directory will 17881 be considered. The first precompiled header encountered in the 17882 directory that is valid for this compilation will be used; they're 17883 searched in no particular order. 17884 17885 There are many other possibilities, limited only by your imagination, 17886 good sense, and the constraints of your build system. 17887 17888 A precompiled header file can be used only when these conditions apply: 17889 17890 * Only one precompiled header can be used in a particular 17891 compilation. 17892 17893 * A precompiled header can't be used once the first C token is seen. 17894 You can have preprocessor directives before a precompiled header; 17895 you can even include a precompiled header from inside another 17896 header, so long as there are no C tokens before the `#include'. 17897 17898 * The precompiled header file must be produced for the same language 17899 as the current compilation. You can't use a C precompiled header 17900 for a C++ compilation. 17901 17902 * The precompiled header file must have been produced by the same 17903 compiler binary as the current compilation is using. 17904 17905 * Any macros defined before the precompiled header is included must 17906 either be defined in the same way as when the precompiled header 17907 was generated, or must not affect the precompiled header, which 17908 usually means that they don't appear in the precompiled header at 17909 all. 17910 17911 The `-D' option is one way to define a macro before a precompiled 17912 header is included; using a `#define' can also do it. There are 17913 also some options that define macros implicitly, like `-O' and 17914 `-Wdeprecated'; the same rule applies to macros defined this way. 17915 17916 * If debugging information is output when using the precompiled 17917 header, using `-g' or similar, the same kind of debugging 17918 information must have been output when building the precompiled 17919 header. However, a precompiled header built using `-g' can be 17920 used in a compilation when no debugging information is being 17921 output. 17922 17923 * The same `-m' options must generally be used when building and 17924 using the precompiled header. *Note Submodel Options::, for any 17925 cases where this rule is relaxed. 17926 17927 * Each of the following options must be the same when building and 17928 using the precompiled header: 17929 17930 -fexceptions 17931 17932 * Some other command-line options starting with `-f', `-p', or `-O' 17933 must be defined in the same way as when the precompiled header was 17934 generated. At present, it's not clear which options are safe to 17935 change and which are not; the safest choice is to use exactly the 17936 same options when generating and using the precompiled header. 17937 The following are known to be safe: 17938 17939 -fmessage-length= -fpreprocessed -fsched-interblock 17940 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 17941 -fsched-verbose=NUMBER -fschedule-insns -fvisibility= 17942 -pedantic-errors 17943 17944 17945 For all of these except the last, the compiler will automatically 17946 ignore the precompiled header if the conditions aren't met. If you 17947 find an option combination that doesn't work and doesn't cause the 17948 precompiled header to be ignored, please consider filing a bug report, 17949 see *note Bugs::. 17950 17951 If you do use differing options when generating and using the 17952 precompiled header, the actual behavior will be a mixture of the 17953 behavior for the options. For instance, if you use `-g' to generate 17954 the precompiled header but not when using it, you may or may not get 17955 debugging information for routines in the precompiled header. 17956 17957 17958 File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top 17959 17960 4 C Implementation-defined behavior 17961 *********************************** 17962 17963 A conforming implementation of ISO C is required to document its choice 17964 of behavior in each of the areas that are designated "implementation 17965 defined". The following lists all such areas, along with the section 17966 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 17967 Some areas are only implementation-defined in one version of the 17968 standard. 17969 17970 Some choices depend on the externally determined ABI for the platform 17971 (including standard character encodings) which GCC follows; these are 17972 listed as "determined by ABI" below. *Note Binary Compatibility: 17973 Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 17974 are documented in the preprocessor manual. *Note 17975 Implementation-defined behavior: (cpp)Implementation-defined behavior. 17976 Some choices are made by the library and operating system (or other 17977 environment when compiling for a freestanding environment); refer to 17978 their documentation for details. 17979 17980 * Menu: 17981 17982 * Translation implementation:: 17983 * Environment implementation:: 17984 * Identifiers implementation:: 17985 * Characters implementation:: 17986 * Integers implementation:: 17987 * Floating point implementation:: 17988 * Arrays and pointers implementation:: 17989 * Hints implementation:: 17990 * Structures unions enumerations and bit-fields implementation:: 17991 * Qualifiers implementation:: 17992 * Declarators implementation:: 17993 * Statements implementation:: 17994 * Preprocessing directives implementation:: 17995 * Library functions implementation:: 17996 * Architecture implementation:: 17997 * Locale-specific behavior implementation:: 17998 17999 18000 File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 18001 18002 4.1 Translation 18003 =============== 18004 18005 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 18006 5.1.1.3).' 18007 18008 Diagnostics consist of all the output sent to stderr by GCC. 18009 18010 * `Whether each nonempty sequence of white-space characters other 18011 than new-line is retained or replaced by one space character in 18012 translation phase 3 (C90 and C99 5.1.1.2).' 18013 18014 *Note Implementation-defined behavior: (cpp)Implementation-defined 18015 behavior. 18016 18017 18018 18019 File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 18020 18021 4.2 Environment 18022 =============== 18023 18024 The behavior of most of these points are dependent on the implementation 18025 of the C library, and are not defined by GCC itself. 18026 18027 * `The mapping between physical source file multibyte characters and 18028 the source character set in translation phase 1 (C90 and C99 18029 5.1.1.2).' 18030 18031 *Note Implementation-defined behavior: (cpp)Implementation-defined 18032 behavior. 18033 18034 18035 18036 File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 18037 18038 4.3 Identifiers 18039 =============== 18040 18041 * `Which additional multibyte characters may appear in identifiers 18042 and their correspondence to universal character names (C99 6.4.2).' 18043 18044 *Note Implementation-defined behavior: (cpp)Implementation-defined 18045 behavior. 18046 18047 * `The number of significant initial characters in an identifier 18048 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 18049 18050 For internal names, all characters are significant. For external 18051 names, the number of significant characters are defined by the 18052 linker; for almost all targets, all characters are significant. 18053 18054 * `Whether case distinctions are significant in an identifier with 18055 external linkage (C90 6.1.2).' 18056 18057 This is a property of the linker. C99 requires that case 18058 distinctions are always significant in identifiers with external 18059 linkage and systems without this property are not supported by GCC. 18060 18061 18062 18063 File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 18064 18065 4.4 Characters 18066 ============== 18067 18068 * `The number of bits in a byte (C90 3.4, C99 3.6).' 18069 18070 Determined by ABI. 18071 18072 * `The values of the members of the execution character set (C90 and 18073 C99 5.2.1).' 18074 18075 Determined by ABI. 18076 18077 * `The unique value of the member of the execution character set 18078 produced for each of the standard alphabetic escape sequences (C90 18079 and C99 5.2.2).' 18080 18081 Determined by ABI. 18082 18083 * `The value of a `char' object into which has been stored any 18084 character other than a member of the basic execution character set 18085 (C90 6.1.2.5, C99 6.2.5).' 18086 18087 Determined by ABI. 18088 18089 * `Which of `signed char' or `unsigned char' has the same range, 18090 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 18091 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 18092 18093 Determined by ABI. The options `-funsigned-char' and 18094 `-fsigned-char' change the default. *Note Options Controlling C 18095 Dialect: C Dialect Options. 18096 18097 * `The mapping of members of the source character set (in character 18098 constants and string literals) to members of the execution 18099 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 18100 18101 Determined by ABI. 18102 18103 * `The value of an integer character constant containing more than 18104 one character or containing a character or escape sequence that 18105 does not map to a single-byte execution character (C90 6.1.3.4, 18106 C99 6.4.4.4).' 18107 18108 *Note Implementation-defined behavior: (cpp)Implementation-defined 18109 behavior. 18110 18111 * `The value of a wide character constant containing more than one 18112 multibyte character, or containing a multibyte character or escape 18113 sequence not represented in the extended execution character set 18114 (C90 6.1.3.4, C99 6.4.4.4).' 18115 18116 *Note Implementation-defined behavior: (cpp)Implementation-defined 18117 behavior. 18118 18119 * `The current locale used to convert a wide character constant 18120 consisting of a single multibyte character that maps to a member 18121 of the extended execution character set into a corresponding wide 18122 character code (C90 6.1.3.4, C99 6.4.4.4).' 18123 18124 *Note Implementation-defined behavior: (cpp)Implementation-defined 18125 behavior. 18126 18127 * `The current locale used to convert a wide string literal into 18128 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 18129 18130 *Note Implementation-defined behavior: (cpp)Implementation-defined 18131 behavior. 18132 18133 * `The value of a string literal containing a multibyte character or 18134 escape sequence not represented in the execution character set 18135 (C90 6.1.4, C99 6.4.5).' 18136 18137 *Note Implementation-defined behavior: (cpp)Implementation-defined 18138 behavior. 18139 18140 18141 File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 18142 18143 4.5 Integers 18144 ============ 18145 18146 * `Any extended integer types that exist in the implementation (C99 18147 6.2.5).' 18148 18149 GCC does not support any extended integer types. 18150 18151 * `Whether signed integer types are represented using sign and 18152 magnitude, two's complement, or one's complement, and whether the 18153 extraordinary value is a trap representation or an ordinary value 18154 (C99 6.2.6.2).' 18155 18156 GCC supports only two's complement integer types, and all bit 18157 patterns are ordinary values. 18158 18159 * `The rank of any extended integer type relative to another extended 18160 integer type with the same precision (C99 6.3.1.1).' 18161 18162 GCC does not support any extended integer types. 18163 18164 * `The result of, or the signal raised by, converting an integer to a 18165 signed integer type when the value cannot be represented in an 18166 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 18167 18168 For conversion to a type of width N, the value is reduced modulo 18169 2^N to be within range of the type; no signal is raised. 18170 18171 * `The results of some bitwise operations on signed integers (C90 18172 6.3, C99 6.5).' 18173 18174 Bitwise operators act on the representation of the value including 18175 both the sign and value bits, where the sign bit is considered 18176 immediately above the highest-value value bit. Signed `>>' acts 18177 on negative numbers by sign extension. 18178 18179 GCC does not use the latitude given in C99 only to treat certain 18180 aspects of signed `<<' as undefined, but this is subject to change. 18181 18182 * `The sign of the remainder on integer division (C90 6.3.5).' 18183 18184 GCC always follows the C99 requirement that the result of division 18185 is truncated towards zero. 18186 18187 18188 18189 File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 18190 18191 4.6 Floating point 18192 ================== 18193 18194 * `The accuracy of the floating-point operations and of the library 18195 functions in `<math.h>' and `<complex.h>' that return 18196 floating-point results (C90 and C99 5.2.4.2.2).' 18197 18198 The accuracy is unknown. 18199 18200 * `The rounding behaviors characterized by non-standard values of 18201 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 18202 18203 GCC does not use such values. 18204 18205 * `The evaluation methods characterized by non-standard negative 18206 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 18207 18208 GCC does not use such values. 18209 18210 * `The direction of rounding when an integer is converted to a 18211 floating-point number that cannot exactly represent the original 18212 value (C90 6.2.1.3, C99 6.3.1.4).' 18213 18214 C99 Annex F is followed. 18215 18216 * `The direction of rounding when a floating-point number is 18217 converted to a narrower floating-point number (C90 6.2.1.4, C99 18218 6.3.1.5).' 18219 18220 C99 Annex F is followed. 18221 18222 * `How the nearest representable value or the larger or smaller 18223 representable value immediately adjacent to the nearest 18224 representable value is chosen for certain floating constants (C90 18225 6.1.3.1, C99 6.4.4.2).' 18226 18227 C99 Annex F is followed. 18228 18229 * `Whether and how floating expressions are contracted when not 18230 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 18231 18232 Expressions are currently only contracted if 18233 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 18234 subject to change. 18235 18236 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 18237 18238 This pragma is not implemented, but the default is to "off" unless 18239 `-frounding-math' is used in which case it is "on". 18240 18241 * `Additional floating-point exceptions, rounding modes, 18242 environments, and classifications, and their macro names (C99 7.6, 18243 C99 7.12).' 18244 18245 This is dependent on the implementation of the C library, and is 18246 not defined by GCC itself. 18247 18248 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 18249 18250 This pragma is not implemented. Expressions are currently only 18251 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 18252 used. This is subject to change. 18253 18254 * `Whether the "inexact" floating-point exception can be raised when 18255 the rounded result actually does equal the mathematical result in 18256 an IEC 60559 conformant implementation (C99 F.9).' 18257 18258 This is dependent on the implementation of the C library, and is 18259 not defined by GCC itself. 18260 18261 * `Whether the "underflow" (and "inexact") floating-point exception 18262 can be raised when a result is tiny but not inexact in an IEC 18263 60559 conformant implementation (C99 F.9).' 18264 18265 This is dependent on the implementation of the C library, and is 18266 not defined by GCC itself. 18267 18268 18269 18270 File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 18271 18272 4.7 Arrays and pointers 18273 ======================= 18274 18275 * `The result of converting a pointer to an integer or vice versa 18276 (C90 6.3.4, C99 6.3.2.3).' 18277 18278 A cast from pointer to integer discards most-significant bits if 18279 the pointer representation is larger than the integer type, 18280 sign-extends(1) if the pointer representation is smaller than the 18281 integer type, otherwise the bits are unchanged. 18282 18283 A cast from integer to pointer discards most-significant bits if 18284 the pointer representation is smaller than the integer type, 18285 extends according to the signedness of the integer type if the 18286 pointer representation is larger than the integer type, otherwise 18287 the bits are unchanged. 18288 18289 When casting from pointer to integer and back again, the resulting 18290 pointer must reference the same object as the original pointer, 18291 otherwise the behavior is undefined. That is, one may not use 18292 integer arithmetic to avoid the undefined behavior of pointer 18293 arithmetic as proscribed in C99 6.5.6/8. 18294 18295 * `The size of the result of subtracting two pointers to elements of 18296 the same array (C90 6.3.6, C99 6.5.6).' 18297 18298 The value is as specified in the standard and the type is 18299 determined by the ABI. 18300 18301 18302 ---------- Footnotes ---------- 18303 18304 (1) Future versions of GCC may zero-extend, or use a target-defined 18305 `ptr_extend' pattern. Do not rely on sign extension. 18306 18307 18308 File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 18309 18310 4.8 Hints 18311 ========= 18312 18313 * `The extent to which suggestions made by using the `register' 18314 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 18315 18316 The `register' specifier affects code generation only in these 18317 ways: 18318 18319 * When used as part of the register variable extension, see 18320 *note Explicit Reg Vars::. 18321 18322 * When `-O0' is in use, the compiler allocates distinct stack 18323 memory for all variables that do not have the `register' 18324 storage-class specifier; if `register' is specified, the 18325 variable may have a shorter lifespan than the code would 18326 indicate and may never be placed in memory. 18327 18328 * On some rare x86 targets, `setjmp' doesn't save the registers 18329 in all circumstances. In those cases, GCC doesn't allocate 18330 any variables in registers unless they are marked `register'. 18331 18332 18333 * `The extent to which suggestions made by using the inline function 18334 specifier are effective (C99 6.7.4).' 18335 18336 GCC will not inline any functions if the `-fno-inline' option is 18337 used or if `-O0' is used. Otherwise, GCC may still be unable to 18338 inline a function for many reasons; the `-Winline' option may be 18339 used to determine if a function has not been inlined and why not. 18340 18341 18342 18343 File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 18344 18345 4.9 Structures, unions, enumerations, and bit-fields 18346 ==================================================== 18347 18348 * `A member of a union object is accessed using a member of a 18349 different type (C90 6.3.2.3).' 18350 18351 The relevant bytes of the representation of the object are treated 18352 as an object of the type used for the access. *Note 18353 Type-punning::. This may be a trap representation. 18354 18355 * `Whether a "plain" `int' bit-field is treated as a `signed int' 18356 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 18357 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 18358 18359 By default it is treated as `signed int' but this may be changed 18360 by the `-funsigned-bitfields' option. 18361 18362 * `Allowable bit-field types other than `_Bool', `signed int', and 18363 `unsigned int' (C99 6.7.2.1).' 18364 18365 No other types are permitted in strictly conforming mode. 18366 18367 * `Whether a bit-field can straddle a storage-unit boundary (C90 18368 6.5.2.1, C99 6.7.2.1).' 18369 18370 Determined by ABI. 18371 18372 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 18373 C99 6.7.2.1).' 18374 18375 Determined by ABI. 18376 18377 * `The alignment of non-bit-field members of structures (C90 18378 6.5.2.1, C99 6.7.2.1).' 18379 18380 Determined by ABI. 18381 18382 * `The integer type compatible with each enumerated type (C90 18383 6.5.2.2, C99 6.7.2.2).' 18384 18385 Normally, the type is `unsigned int' if there are no negative 18386 values in the enumeration, otherwise `int'. If `-fshort-enums' is 18387 specified, then if there are negative values it is the first of 18388 `signed char', `short' and `int' that can represent all the 18389 values, otherwise it is the first of `unsigned char', `unsigned 18390 short' and `unsigned int' that can represent all the values. 18391 18392 On some targets, `-fshort-enums' is the default; this is 18393 determined by the ABI. 18394 18395 18396 18397 File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 18398 18399 4.10 Qualifiers 18400 =============== 18401 18402 * `What constitutes an access to an object that has 18403 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 18404 18405 Such an object is normally accessed by pointers and used for 18406 accessing hardware. In most expressions, it is intuitively 18407 obvious what is a read and what is a write. For example 18408 18409 volatile int *dst = SOMEVALUE; 18410 volatile int *src = SOMEOTHERVALUE; 18411 *dst = *src; 18412 18413 will cause a read of the volatile object pointed to by SRC and 18414 store the value into the volatile object pointed to by DST. There 18415 is no guarantee that these reads and writes are atomic, especially 18416 for objects larger than `int'. 18417 18418 However, if the volatile storage is not being modified, and the 18419 value of the volatile storage is not used, then the situation is 18420 less obvious. For example 18421 18422 volatile int *src = SOMEVALUE; 18423 *src; 18424 18425 According to the C standard, such an expression is an rvalue whose 18426 type is the unqualified version of its original type, i.e. `int'. 18427 Whether GCC interprets this as a read of the volatile object being 18428 pointed to or only as a request to evaluate the expression for its 18429 side-effects depends on this type. 18430 18431 If it is a scalar type, or on most targets an aggregate type whose 18432 only member object is of a scalar type, or a union type whose 18433 member objects are of scalar types, the expression is interpreted 18434 by GCC as a read of the volatile object; in the other cases, the 18435 expression is only evaluated for its side-effects. 18436 18437 18438 18439 File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 18440 18441 4.11 Declarators 18442 ================ 18443 18444 * `The maximum number of declarators that may modify an arithmetic, 18445 structure or union type (C90 6.5.4).' 18446 18447 GCC is only limited by available memory. 18448 18449 18450 18451 File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 18452 18453 4.12 Statements 18454 =============== 18455 18456 * `The maximum number of `case' values in a `switch' statement (C90 18457 6.6.4.2).' 18458 18459 GCC is only limited by available memory. 18460 18461 18462 18463 File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 18464 18465 4.13 Preprocessing directives 18466 ============================= 18467 18468 *Note Implementation-defined behavior: (cpp)Implementation-defined 18469 behavior, for details of these aspects of implementation-defined 18470 behavior. 18471 18472 * `How sequences in both forms of header names are mapped to headers 18473 or external source file names (C90 6.1.7, C99 6.4.7).' 18474 18475 * `Whether the value of a character constant in a constant expression 18476 that controls conditional inclusion matches the value of the same 18477 character constant in the execution character set (C90 6.8.1, C99 18478 6.10.1).' 18479 18480 * `Whether the value of a single-character character constant in a 18481 constant expression that controls conditional inclusion may have a 18482 negative value (C90 6.8.1, C99 6.10.1).' 18483 18484 * `The places that are searched for an included `<>' delimited 18485 header, and how the places are specified or the header is 18486 identified (C90 6.8.2, C99 6.10.2).' 18487 18488 * `How the named source file is searched for in an included `""' 18489 delimited header (C90 6.8.2, C99 6.10.2).' 18490 18491 * `The method by which preprocessing tokens (possibly resulting from 18492 macro expansion) in a `#include' directive are combined into a 18493 header name (C90 6.8.2, C99 6.10.2).' 18494 18495 * `The nesting limit for `#include' processing (C90 6.8.2, C99 18496 6.10.2).' 18497 18498 * `Whether the `#' operator inserts a `\' character before the `\' 18499 character that begins a universal character name in a character 18500 constant or string literal (C99 6.10.3.2).' 18501 18502 * `The behavior on each recognized non-`STDC #pragma' directive (C90 18503 6.8.6, C99 6.10.6).' 18504 18505 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 18506 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 18507 details of target-specific pragmas. 18508 18509 * `The definitions for `__DATE__' and `__TIME__' when respectively, 18510 the date and time of translation are not available (C90 6.8.8, C99 18511 6.10.8).' 18512 18513 18514 18515 File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 18516 18517 4.14 Library functions 18518 ====================== 18519 18520 The behavior of most of these points are dependent on the implementation 18521 of the C library, and are not defined by GCC itself. 18522 18523 * `The null pointer constant to which the macro `NULL' expands (C90 18524 7.1.6, C99 7.17).' 18525 18526 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 18527 provide the other headers which define `NULL' and some library 18528 implementations may use other definitions in those headers. 18529 18530 18531 18532 File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 18533 18534 4.15 Architecture 18535 ================= 18536 18537 * `The values or expressions assigned to the macros specified in the 18538 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 18539 5.2.4.2, C99 7.18.2, C99 7.18.3).' 18540 18541 Determined by ABI. 18542 18543 * `The number, order, and encoding of bytes in any object (when not 18544 explicitly specified in this International Standard) (C99 18545 6.2.6.1).' 18546 18547 Determined by ABI. 18548 18549 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 18550 C99 6.5.3.4).' 18551 18552 Determined by ABI. 18553 18554 18555 18556 File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 18557 18558 4.16 Locale-specific behavior 18559 ============================= 18560 18561 The behavior of these points are dependent on the implementation of the 18562 C library, and are not defined by GCC itself. 18563 18564 18565 File: gcc.info, Node: C++ Implementation, Next: C++ Extensions, Prev: C Extensions, Up: Top 18566 18567 5 C++ Implementation-defined behavior 18568 ************************************* 18569 18570 A conforming implementation of ISO C++ is required to document its 18571 choice of behavior in each of the areas that are designated 18572 "implementation defined". The following lists all such areas, along 18573 with the section numbers from the ISO/IEC 14822:1998 and ISO/IEC 18574 14822:2003 standards. Some areas are only implementation-defined in 18575 one version of the standard. 18576 18577 Some choices depend on the externally determined ABI for the platform 18578 (including standard character encodings) which GCC follows; these are 18579 listed as "determined by ABI" below. *Note Binary Compatibility: 18580 Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 18581 are documented in the preprocessor manual. *Note 18582 Implementation-defined behavior: (cpp)Implementation-defined behavior. 18583 Some choices are documented in the corresponding document for the C 18584 language. *Note C Implementation::. Some choices are made by the 18585 library and operating system (or other environment when compiling for a 18586 freestanding environment); refer to their documentation for details. 18587 18588 * Menu: 18589 18590 * Conditionally-supported behavior:: 18591 * Exception handling:: 18592 18593 18594 File: gcc.info, Node: Conditionally-supported behavior, Next: Exception handling, Up: C++ Implementation 18595 18596 5.1 Conditionally-supported behavior 18597 ==================================== 18598 18599 `Each implementation shall include documentation that identifies all 18600 conditionally-supported constructs that it does not support (C++0x 18601 1.4).' 18602 18603 * `Whether an argument of class type with a non-trivial copy 18604 constructor or destructor can be passed to ... (C++0x 5.2.2).' 18605 18606 Such argument passing is not supported. 18607 18608 18609 18610 File: gcc.info, Node: Exception handling, Prev: Conditionally-supported behavior, Up: C++ Implementation 18611 18612 5.2 Exception handling 18613 ====================== 18614 18615 * `In the situation where no matching handler is found, it is 18616 implementation-defined whether or not the stack is unwound before 18617 std::terminate() is called (C++98 15.5.1).' 18618 18619 The stack is not unwound before std::terminate is called. 18620 18621 18622 18623 File: gcc.info, Node: C Extensions, Next: C++ Implementation, Prev: C Implementation, Up: Top 18624 18625 6 Extensions to the C Language Family 18626 ************************************* 18627 18628 GNU C provides several language features not found in ISO standard C. 18629 (The `-pedantic' option directs GCC to print a warning message if any 18630 of these features is used.) To test for the availability of these 18631 features in conditional compilation, check for a predefined macro 18632 `__GNUC__', which is always defined under GCC. 18633 18634 These extensions are available in C and Objective-C. Most of them are 18635 also available in C++. *Note Extensions to the C++ Language: C++ 18636 Extensions, for extensions that apply _only_ to C++. 18637 18638 Some features that are in ISO C99 but not C90 or C++ are also, as 18639 extensions, accepted by GCC in C90 mode and in C++. 18640 18641 * Menu: 18642 18643 * Statement Exprs:: Putting statements and declarations inside expressions. 18644 * Local Labels:: Labels local to a block. 18645 * Labels as Values:: Getting pointers to labels, and computed gotos. 18646 * Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 18647 * Constructing Calls:: Dispatching a call to another function. 18648 * Typeof:: `typeof': referring to the type of an expression. 18649 * Conditionals:: Omitting the middle operand of a `?:' expression. 18650 * Long Long:: Double-word integers---`long long int'. 18651 * __int128:: 128-bit integers---`__int128'. 18652 * Complex:: Data types for complex numbers. 18653 * Floating Types:: Additional Floating Types. 18654 * Half-Precision:: Half-Precision Floating Point. 18655 * Decimal Float:: Decimal Floating Types. 18656 * Hex Floats:: Hexadecimal floating-point constants. 18657 * Fixed-Point:: Fixed-Point Types. 18658 * Named Address Spaces::Named address spaces. 18659 * Zero Length:: Zero-length arrays. 18660 * Variable Length:: Arrays whose length is computed at run time. 18661 * Empty Structures:: Structures with no members. 18662 * Variadic Macros:: Macros with a variable number of arguments. 18663 * Escaped Newlines:: Slightly looser rules for escaped newlines. 18664 * Subscripting:: Any array can be subscripted, even if not an lvalue. 18665 * Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 18666 * Initializers:: Non-constant initializers. 18667 * Compound Literals:: Compound literals give structures, unions 18668 or arrays as values. 18669 * Designated Inits:: Labeling elements of initializers. 18670 * Cast to Union:: Casting to union type from any member of the union. 18671 * Case Ranges:: `case 1 ... 9' and such. 18672 * Mixed Declarations:: Mixing declarations and code. 18673 * Function Attributes:: Declaring that functions have no side effects, 18674 or that they can never return. 18675 * Attribute Syntax:: Formal syntax for attributes. 18676 * Function Prototypes:: Prototype declarations and old-style definitions. 18677 * C++ Comments:: C++ comments are recognized. 18678 * Dollar Signs:: Dollar sign is allowed in identifiers. 18679 * Character Escapes:: `\e' stands for the character <ESC>. 18680 * Variable Attributes:: Specifying attributes of variables. 18681 * Type Attributes:: Specifying attributes of types. 18682 * Alignment:: Inquiring about the alignment of a type or variable. 18683 * Inline:: Defining inline functions (as fast as macros). 18684 * Volatiles:: What constitutes an access to a volatile object. 18685 * Extended Asm:: Assembler instructions with C expressions as operands. 18686 (With them you can define ``built-in'' functions.) 18687 * Constraints:: Constraints for asm operands 18688 * Asm Labels:: Specifying the assembler name to use for a C symbol. 18689 * Explicit Reg Vars:: Defining variables residing in specified registers. 18690 * Alternate Keywords:: `__const__', `__asm__', etc., for header files. 18691 * Incomplete Enums:: `enum foo;', with details to follow. 18692 * Function Names:: Printable strings which are the name of the current 18693 function. 18694 * Return Address:: Getting the return or frame address of a function. 18695 * Vector Extensions:: Using vector instructions through built-in functions. 18696 * Offsetof:: Special syntax for implementing `offsetof'. 18697 * Atomic Builtins:: Built-in functions for atomic memory access. 18698 * Object Size Checking:: Built-in functions for limited buffer overflow 18699 checking. 18700 * Other Builtins:: Other built-in functions. 18701 * Target Builtins:: Built-in functions specific to particular targets. 18702 * Target Format Checks:: Format checks specific to particular targets. 18703 * Pragmas:: Pragmas accepted by GCC. 18704 * Unnamed Fields:: Unnamed struct/union fields within structs/unions. 18705 * Thread-Local:: Per-thread variables. 18706 * Binary constants:: Binary constants using the `0b' prefix. 18707 18708 18709 File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 18710 18711 6.1 Statements and Declarations in Expressions 18712 ============================================== 18713 18714 A compound statement enclosed in parentheses may appear as an expression 18715 in GNU C. This allows you to use loops, switches, and local variables 18716 within an expression. 18717 18718 Recall that a compound statement is a sequence of statements surrounded 18719 by braces; in this construct, parentheses go around the braces. For 18720 example: 18721 18722 ({ int y = foo (); int z; 18723 if (y > 0) z = y; 18724 else z = - y; 18725 z; }) 18726 18727 is a valid (though slightly more complex than necessary) expression for 18728 the absolute value of `foo ()'. 18729 18730 The last thing in the compound statement should be an expression 18731 followed by a semicolon; the value of this subexpression serves as the 18732 value of the entire construct. (If you use some other kind of statement 18733 last within the braces, the construct has type `void', and thus 18734 effectively no value.) 18735 18736 This feature is especially useful in making macro definitions "safe" 18737 (so that they evaluate each operand exactly once). For example, the 18738 "maximum" function is commonly defined as a macro in standard C as 18739 follows: 18740 18741 #define max(a,b) ((a) > (b) ? (a) : (b)) 18742 18743 But this definition computes either A or B twice, with bad results if 18744 the operand has side effects. In GNU C, if you know the type of the 18745 operands (here taken as `int'), you can define the macro safely as 18746 follows: 18747 18748 #define maxint(a,b) \ 18749 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 18750 18751 Embedded statements are not allowed in constant expressions, such as 18752 the value of an enumeration constant, the width of a bit-field, or the 18753 initial value of a static variable. 18754 18755 If you don't know the type of the operand, you can still do this, but 18756 you must use `typeof' (*note Typeof::). 18757 18758 In G++, the result value of a statement expression undergoes array and 18759 function pointer decay, and is returned by value to the enclosing 18760 expression. For instance, if `A' is a class, then 18761 18762 A a; 18763 18764 ({a;}).Foo () 18765 18766 will construct a temporary `A' object to hold the result of the 18767 statement expression, and that will be used to invoke `Foo'. Therefore 18768 the `this' pointer observed by `Foo' will not be the address of `a'. 18769 18770 Any temporaries created within a statement within a statement 18771 expression will be destroyed at the statement's end. This makes 18772 statement expressions inside macros slightly different from function 18773 calls. In the latter case temporaries introduced during argument 18774 evaluation will be destroyed at the end of the statement that includes 18775 the function call. In the statement expression case they will be 18776 destroyed during the statement expression. For instance, 18777 18778 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 18779 template<typename T> T function(T a) { T b = a; return b + 3; } 18780 18781 void foo () 18782 { 18783 macro (X ()); 18784 function (X ()); 18785 } 18786 18787 will have different places where temporaries are destroyed. For the 18788 `macro' case, the temporary `X' will be destroyed just after the 18789 initialization of `b'. In the `function' case that temporary will be 18790 destroyed when the function returns. 18791 18792 These considerations mean that it is probably a bad idea to use 18793 statement-expressions of this form in header files that are designed to 18794 work with C++. (Note that some versions of the GNU C Library contained 18795 header files using statement-expression that lead to precisely this 18796 bug.) 18797 18798 Jumping into a statement expression with `goto' or using a `switch' 18799 statement outside the statement expression with a `case' or `default' 18800 label inside the statement expression is not permitted. Jumping into a 18801 statement expression with a computed `goto' (*note Labels as Values::) 18802 yields undefined behavior. Jumping out of a statement expression is 18803 permitted, but if the statement expression is part of a larger 18804 expression then it is unspecified which other subexpressions of that 18805 expression have been evaluated except where the language definition 18806 requires certain subexpressions to be evaluated before or after the 18807 statement expression. In any case, as with a function call the 18808 evaluation of a statement expression is not interleaved with the 18809 evaluation of other parts of the containing expression. For example, 18810 18811 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 18812 18813 will call `foo' and `bar1' and will not call `baz' but may or may not 18814 call `bar2'. If `bar2' is called, it will be called after `foo' and 18815 before `bar1' 18816 18817 18818 File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 18819 18820 6.2 Locally Declared Labels 18821 =========================== 18822 18823 GCC allows you to declare "local labels" in any nested block scope. A 18824 local label is just like an ordinary label, but you can only reference 18825 it (with a `goto' statement, or by taking its address) within the block 18826 in which it was declared. 18827 18828 A local label declaration looks like this: 18829 18830 __label__ LABEL; 18831 18832 or 18833 18834 __label__ LABEL1, LABEL2, /* ... */; 18835 18836 Local label declarations must come at the beginning of the block, 18837 before any ordinary declarations or statements. 18838 18839 The label declaration defines the label _name_, but does not define 18840 the label itself. You must do this in the usual way, with `LABEL:', 18841 within the statements of the statement expression. 18842 18843 The local label feature is useful for complex macros. If a macro 18844 contains nested loops, a `goto' can be useful for breaking out of them. 18845 However, an ordinary label whose scope is the whole function cannot be 18846 used: if the macro can be expanded several times in one function, the 18847 label will be multiply defined in that function. A local label avoids 18848 this problem. For example: 18849 18850 #define SEARCH(value, array, target) \ 18851 do { \ 18852 __label__ found; \ 18853 typeof (target) _SEARCH_target = (target); \ 18854 typeof (*(array)) *_SEARCH_array = (array); \ 18855 int i, j; \ 18856 int value; \ 18857 for (i = 0; i < max; i++) \ 18858 for (j = 0; j < max; j++) \ 18859 if (_SEARCH_array[i][j] == _SEARCH_target) \ 18860 { (value) = i; goto found; } \ 18861 (value) = -1; \ 18862 found:; \ 18863 } while (0) 18864 18865 This could also be written using a statement-expression: 18866 18867 #define SEARCH(array, target) \ 18868 ({ \ 18869 __label__ found; \ 18870 typeof (target) _SEARCH_target = (target); \ 18871 typeof (*(array)) *_SEARCH_array = (array); \ 18872 int i, j; \ 18873 int value; \ 18874 for (i = 0; i < max; i++) \ 18875 for (j = 0; j < max; j++) \ 18876 if (_SEARCH_array[i][j] == _SEARCH_target) \ 18877 { value = i; goto found; } \ 18878 value = -1; \ 18879 found: \ 18880 value; \ 18881 }) 18882 18883 Local label declarations also make the labels they declare visible to 18884 nested functions, if there are any. *Note Nested Functions::, for 18885 details. 18886 18887 18888 File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 18889 18890 6.3 Labels as Values 18891 ==================== 18892 18893 You can get the address of a label defined in the current function (or 18894 a containing function) with the unary operator `&&'. The value has 18895 type `void *'. This value is a constant and can be used wherever a 18896 constant of that type is valid. For example: 18897 18898 void *ptr; 18899 /* ... */ 18900 ptr = &&foo; 18901 18902 To use these values, you need to be able to jump to one. This is done 18903 with the computed goto statement(1), `goto *EXP;'. For example, 18904 18905 goto *ptr; 18906 18907 Any expression of type `void *' is allowed. 18908 18909 One way of using these constants is in initializing a static array that 18910 will serve as a jump table: 18911 18912 static void *array[] = { &&foo, &&bar, &&hack }; 18913 18914 Then you can select a label with indexing, like this: 18915 18916 goto *array[i]; 18917 18918 Note that this does not check whether the subscript is in bounds--array 18919 indexing in C never does that. 18920 18921 Such an array of label values serves a purpose much like that of the 18922 `switch' statement. The `switch' statement is cleaner, so use that 18923 rather than an array unless the problem does not fit a `switch' 18924 statement very well. 18925 18926 Another use of label values is in an interpreter for threaded code. 18927 The labels within the interpreter function can be stored in the 18928 threaded code for super-fast dispatching. 18929 18930 You may not use this mechanism to jump to code in a different function. 18931 If you do that, totally unpredictable things will happen. The best way 18932 to avoid this is to store the label address only in automatic variables 18933 and never pass it as an argument. 18934 18935 An alternate way to write the above example is 18936 18937 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 18938 &&hack - &&foo }; 18939 goto *(&&foo + array[i]); 18940 18941 This is more friendly to code living in shared libraries, as it reduces 18942 the number of dynamic relocations that are needed, and by consequence, 18943 allows the data to be read-only. 18944 18945 The `&&foo' expressions for the same label might have different values 18946 if the containing function is inlined or cloned. If a program relies 18947 on them being always the same, 18948 `__attribute__((__noinline__,__noclone__))' should be used to prevent 18949 inlining and cloning. If `&&foo' is used in a static variable 18950 initializer, inlining and cloning is forbidden. 18951 18952 ---------- Footnotes ---------- 18953 18954 (1) The analogous feature in Fortran is called an assigned goto, but 18955 that name seems inappropriate in C, where one can do more than simply 18956 store label addresses in label variables. 18957 18958 18959 File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 18960 18961 6.4 Nested Functions 18962 ==================== 18963 18964 A "nested function" is a function defined inside another function. 18965 (Nested functions are not supported for GNU C++.) The nested function's 18966 name is local to the block where it is defined. For example, here we 18967 define a nested function named `square', and call it twice: 18968 18969 foo (double a, double b) 18970 { 18971 double square (double z) { return z * z; } 18972 18973 return square (a) + square (b); 18974 } 18975 18976 The nested function can access all the variables of the containing 18977 function that are visible at the point of its definition. This is 18978 called "lexical scoping". For example, here we show a nested function 18979 which uses an inherited variable named `offset': 18980 18981 bar (int *array, int offset, int size) 18982 { 18983 int access (int *array, int index) 18984 { return array[index + offset]; } 18985 int i; 18986 /* ... */ 18987 for (i = 0; i < size; i++) 18988 /* ... */ access (array, i) /* ... */ 18989 } 18990 18991 Nested function definitions are permitted within functions in the 18992 places where variable definitions are allowed; that is, in any block, 18993 mixed with the other declarations and statements in the block. 18994 18995 It is possible to call the nested function from outside the scope of 18996 its name by storing its address or passing the address to another 18997 function: 18998 18999 hack (int *array, int size) 19000 { 19001 void store (int index, int value) 19002 { array[index] = value; } 19003 19004 intermediate (store, size); 19005 } 19006 19007 Here, the function `intermediate' receives the address of `store' as 19008 an argument. If `intermediate' calls `store', the arguments given to 19009 `store' are used to store into `array'. But this technique works only 19010 so long as the containing function (`hack', in this example) does not 19011 exit. 19012 19013 If you try to call the nested function through its address after the 19014 containing function has exited, all hell will break loose. If you try 19015 to call it after a containing scope level has exited, and if it refers 19016 to some of the variables that are no longer in scope, you may be lucky, 19017 but it's not wise to take the risk. If, however, the nested function 19018 does not refer to anything that has gone out of scope, you should be 19019 safe. 19020 19021 GCC implements taking the address of a nested function using a 19022 technique called "trampolines". This technique was described in 19023 `Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference 19024 Proceedings, October 17-21, 1988). 19025 19026 A nested function can jump to a label inherited from a containing 19027 function, provided the label was explicitly declared in the containing 19028 function (*note Local Labels::). Such a jump returns instantly to the 19029 containing function, exiting the nested function which did the `goto' 19030 and any intermediate functions as well. Here is an example: 19031 19032 bar (int *array, int offset, int size) 19033 { 19034 __label__ failure; 19035 int access (int *array, int index) 19036 { 19037 if (index > size) 19038 goto failure; 19039 return array[index + offset]; 19040 } 19041 int i; 19042 /* ... */ 19043 for (i = 0; i < size; i++) 19044 /* ... */ access (array, i) /* ... */ 19045 /* ... */ 19046 return 0; 19047 19048 /* Control comes here from `access' 19049 if it detects an error. */ 19050 failure: 19051 return -1; 19052 } 19053 19054 A nested function always has no linkage. Declaring one with `extern' 19055 or `static' is erroneous. If you need to declare the nested function 19056 before its definition, use `auto' (which is otherwise meaningless for 19057 function declarations). 19058 19059 bar (int *array, int offset, int size) 19060 { 19061 __label__ failure; 19062 auto int access (int *, int); 19063 /* ... */ 19064 int access (int *array, int index) 19065 { 19066 if (index > size) 19067 goto failure; 19068 return array[index + offset]; 19069 } 19070 /* ... */ 19071 } 19072 19073 19074 File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 19075 19076 6.5 Constructing Function Calls 19077 =============================== 19078 19079 Using the built-in functions described below, you can record the 19080 arguments a function received, and call another function with the same 19081 arguments, without knowing the number or types of the arguments. 19082 19083 You can also record the return value of that function call, and later 19084 return that value, without knowing what data type the function tried to 19085 return (as long as your caller expects that data type). 19086 19087 However, these built-in functions may interact badly with some 19088 sophisticated features or other extensions of the language. It is, 19089 therefore, not recommended to use them outside very simple functions 19090 acting as mere forwarders for their arguments. 19091 19092 -- Built-in Function: void * __builtin_apply_args () 19093 This built-in function returns a pointer to data describing how to 19094 perform a call with the same arguments as were passed to the 19095 current function. 19096 19097 The function saves the arg pointer register, structure value 19098 address, and all registers that might be used to pass arguments to 19099 a function into a block of memory allocated on the stack. Then it 19100 returns the address of that block. 19101 19102 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 19103 *ARGUMENTS, size_t SIZE) 19104 This built-in function invokes FUNCTION with a copy of the 19105 parameters described by ARGUMENTS and SIZE. 19106 19107 The value of ARGUMENTS should be the value returned by 19108 `__builtin_apply_args'. The argument SIZE specifies the size of 19109 the stack argument data, in bytes. 19110 19111 This function returns a pointer to data describing how to return 19112 whatever value was returned by FUNCTION. The data is saved in a 19113 block of memory allocated on the stack. 19114 19115 It is not always simple to compute the proper value for SIZE. The 19116 value is used by `__builtin_apply' to compute the amount of data 19117 that should be pushed on the stack and copied from the incoming 19118 argument area. 19119 19120 -- Built-in Function: void __builtin_return (void *RESULT) 19121 This built-in function returns the value described by RESULT from 19122 the containing function. You should specify, for RESULT, a value 19123 returned by `__builtin_apply'. 19124 19125 -- Built-in Function: __builtin_va_arg_pack () 19126 This built-in function represents all anonymous arguments of an 19127 inline function. It can be used only in inline functions which 19128 will be always inlined, never compiled as a separate function, 19129 such as those using `__attribute__ ((__always_inline__))' or 19130 `__attribute__ ((__gnu_inline__))' extern inline functions. It 19131 must be only passed as last argument to some other function with 19132 variable arguments. This is useful for writing small wrapper 19133 inlines for variable argument functions, when using preprocessor 19134 macros is undesirable. For example: 19135 extern int myprintf (FILE *f, const char *format, ...); 19136 extern inline __attribute__ ((__gnu_inline__)) int 19137 myprintf (FILE *f, const char *format, ...) 19138 { 19139 int r = fprintf (f, "myprintf: "); 19140 if (r < 0) 19141 return r; 19142 int s = fprintf (f, format, __builtin_va_arg_pack ()); 19143 if (s < 0) 19144 return s; 19145 return r + s; 19146 } 19147 19148 -- Built-in Function: size_t __builtin_va_arg_pack_len () 19149 This built-in function returns the number of anonymous arguments of 19150 an inline function. It can be used only in inline functions which 19151 will be always inlined, never compiled as a separate function, such 19152 as those using `__attribute__ ((__always_inline__))' or 19153 `__attribute__ ((__gnu_inline__))' extern inline functions. For 19154 example following will do link or runtime checking of open 19155 arguments for optimized code: 19156 #ifdef __OPTIMIZE__ 19157 extern inline __attribute__((__gnu_inline__)) int 19158 myopen (const char *path, int oflag, ...) 19159 { 19160 if (__builtin_va_arg_pack_len () > 1) 19161 warn_open_too_many_arguments (); 19162 19163 if (__builtin_constant_p (oflag)) 19164 { 19165 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 19166 { 19167 warn_open_missing_mode (); 19168 return __open_2 (path, oflag); 19169 } 19170 return open (path, oflag, __builtin_va_arg_pack ()); 19171 } 19172 19173 if (__builtin_va_arg_pack_len () < 1) 19174 return __open_2 (path, oflag); 19175 19176 return open (path, oflag, __builtin_va_arg_pack ()); 19177 } 19178 #endif 19179 19180 19181 File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 19182 19183 6.6 Referring to a Type with `typeof' 19184 ===================================== 19185 19186 Another way to refer to the type of an expression is with `typeof'. 19187 The syntax of using of this keyword looks like `sizeof', but the 19188 construct acts semantically like a type name defined with `typedef'. 19189 19190 There are two ways of writing the argument to `typeof': with an 19191 expression or with a type. Here is an example with an expression: 19192 19193 typeof (x[0](1)) 19194 19195 This assumes that `x' is an array of pointers to functions; the type 19196 described is that of the values of the functions. 19197 19198 Here is an example with a typename as the argument: 19199 19200 typeof (int *) 19201 19202 Here the type described is that of pointers to `int'. 19203 19204 If you are writing a header file that must work when included in ISO C 19205 programs, write `__typeof__' instead of `typeof'. *Note Alternate 19206 Keywords::. 19207 19208 A `typeof'-construct can be used anywhere a typedef name could be 19209 used. For example, you can use it in a declaration, in a cast, or 19210 inside of `sizeof' or `typeof'. 19211 19212 The operand of `typeof' is evaluated for its side effects if and only 19213 if it is an expression of variably modified type or the name of such a 19214 type. 19215 19216 `typeof' is often useful in conjunction with the 19217 statements-within-expressions feature. Here is how the two together can 19218 be used to define a safe "maximum" macro that operates on any 19219 arithmetic type and evaluates each of its arguments exactly once: 19220 19221 #define max(a,b) \ 19222 ({ typeof (a) _a = (a); \ 19223 typeof (b) _b = (b); \ 19224 _a > _b ? _a : _b; }) 19225 19226 The reason for using names that start with underscores for the local 19227 variables is to avoid conflicts with variable names that occur within 19228 the expressions that are substituted for `a' and `b'. Eventually we 19229 hope to design a new form of declaration syntax that allows you to 19230 declare variables whose scopes start only after their initializers; 19231 this will be a more reliable way to prevent such conflicts. 19232 19233 Some more examples of the use of `typeof': 19234 19235 * This declares `y' with the type of what `x' points to. 19236 19237 typeof (*x) y; 19238 19239 * This declares `y' as an array of such values. 19240 19241 typeof (*x) y[4]; 19242 19243 * This declares `y' as an array of pointers to characters: 19244 19245 typeof (typeof (char *)[4]) y; 19246 19247 It is equivalent to the following traditional C declaration: 19248 19249 char *y[4]; 19250 19251 To see the meaning of the declaration using `typeof', and why it 19252 might be a useful way to write, rewrite it with these macros: 19253 19254 #define pointer(T) typeof(T *) 19255 #define array(T, N) typeof(T [N]) 19256 19257 Now the declaration can be rewritten this way: 19258 19259 array (pointer (char), 4) y; 19260 19261 Thus, `array (pointer (char), 4)' is the type of arrays of 4 19262 pointers to `char'. 19263 19264 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 19265 limited extension which permitted one to write 19266 19267 typedef T = EXPR; 19268 19269 with the effect of declaring T to have the type of the expression EXPR. 19270 This extension does not work with GCC 3 (versions between 3.0 and 3.2 19271 will crash; 3.2.1 and later give an error). Code which relies on it 19272 should be rewritten to use `typeof': 19273 19274 typedef typeof(EXPR) T; 19275 19276 This will work with all versions of GCC. 19277 19278 19279 File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Typeof, Up: C Extensions 19280 19281 6.7 Conditionals with Omitted Operands 19282 ====================================== 19283 19284 The middle operand in a conditional expression may be omitted. Then if 19285 the first operand is nonzero, its value is the value of the conditional 19286 expression. 19287 19288 Therefore, the expression 19289 19290 x ? : y 19291 19292 has the value of `x' if that is nonzero; otherwise, the value of `y'. 19293 19294 This example is perfectly equivalent to 19295 19296 x ? x : y 19297 19298 In this simple case, the ability to omit the middle operand is not 19299 especially useful. When it becomes useful is when the first operand 19300 does, or may (if it is a macro argument), contain a side effect. Then 19301 repeating the operand in the middle would perform the side effect 19302 twice. Omitting the middle operand uses the value already computed 19303 without the undesirable effects of recomputing it. 19304 19305 19306 File: gcc.info, Node: __int128, Next: Complex, Prev: Long Long, Up: C Extensions 19307 19308 6.8 128-bits integers 19309 ===================== 19310 19311 As an extension the integer scalar type `__int128' is supported for 19312 targets having an integer mode wide enough to hold 128-bit. Simply 19313 write `__int128' for a signed 128-bit integer, or `unsigned __int128' 19314 for an unsigned 128-bit integer. There is no support in GCC to express 19315 an integer constant of type `__int128' for targets having `long long' 19316 integer with less then 128 bit width. 19317 19318 19319 File: gcc.info, Node: Long Long, Next: __int128, Prev: Conditionals, Up: C Extensions 19320 19321 6.9 Double-Word Integers 19322 ======================== 19323 19324 ISO C99 supports data types for integers that are at least 64 bits wide, 19325 and as an extension GCC supports them in C90 mode and in C++. Simply 19326 write `long long int' for a signed integer, or `unsigned long long int' 19327 for an unsigned integer. To make an integer constant of type `long 19328 long int', add the suffix `LL' to the integer. To make an integer 19329 constant of type `unsigned long long int', add the suffix `ULL' to the 19330 integer. 19331 19332 You can use these types in arithmetic like any other integer types. 19333 Addition, subtraction, and bitwise boolean operations on these types 19334 are open-coded on all types of machines. Multiplication is open-coded 19335 if the machine supports fullword-to-doubleword a widening multiply 19336 instruction. Division and shifts are open-coded only on machines that 19337 provide special support. The operations that are not open-coded use 19338 special library routines that come with GCC. 19339 19340 There may be pitfalls when you use `long long' types for function 19341 arguments, unless you declare function prototypes. If a function 19342 expects type `int' for its argument, and you pass a value of type `long 19343 long int', confusion will result because the caller and the subroutine 19344 will disagree about the number of bytes for the argument. Likewise, if 19345 the function expects `long long int' and you pass `int'. The best way 19346 to avoid such problems is to use prototypes. 19347 19348 19349 File: gcc.info, Node: Complex, Next: Floating Types, Prev: __int128, Up: C Extensions 19350 19351 6.10 Complex Numbers 19352 ==================== 19353 19354 ISO C99 supports complex floating data types, and as an extension GCC 19355 supports them in C90 mode and in C++, and supports complex integer data 19356 types which are not part of ISO C99. You can declare complex types 19357 using the keyword `_Complex'. As an extension, the older GNU keyword 19358 `__complex__' is also supported. 19359 19360 For example, `_Complex double x;' declares `x' as a variable whose 19361 real part and imaginary part are both of type `double'. `_Complex 19362 short int y;' declares `y' to have real and imaginary parts of type 19363 `short int'; this is not likely to be useful, but it shows that the set 19364 of complex types is complete. 19365 19366 To write a constant with a complex data type, use the suffix `i' or 19367 `j' (either one; they are equivalent). For example, `2.5fi' has type 19368 `_Complex float' and `3i' has type `_Complex int'. Such a constant 19369 always has a pure imaginary value, but you can form any complex value 19370 you like by adding one to a real constant. This is a GNU extension; if 19371 you have an ISO C99 conforming C library (such as GNU libc), and want 19372 to construct complex constants of floating type, you should include 19373 `<complex.h>' and use the macros `I' or `_Complex_I' instead. 19374 19375 To extract the real part of a complex-valued expression EXP, write 19376 `__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 19377 part. This is a GNU extension; for values of floating type, you should 19378 use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 19379 `cimag' and `cimagl', declared in `<complex.h>' and also provided as 19380 built-in functions by GCC. 19381 19382 The operator `~' performs complex conjugation when used on a value 19383 with a complex type. This is a GNU extension; for values of floating 19384 type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 19385 declared in `<complex.h>' and also provided as built-in functions by 19386 GCC. 19387 19388 GCC can allocate complex automatic variables in a noncontiguous 19389 fashion; it's even possible for the real part to be in a register while 19390 the imaginary part is on the stack (or vice-versa). Only the DWARF2 19391 debug info format can represent this, so use of DWARF2 is recommended. 19392 If you are using the stabs debug info format, GCC describes a 19393 noncontiguous complex variable as if it were two separate variables of 19394 noncomplex type. If the variable's actual name is `foo', the two 19395 fictitious variables are named `foo$real' and `foo$imag'. You can 19396 examine and set these two fictitious variables with your debugger. 19397 19398 19399 File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions 19400 19401 6.11 Additional Floating Types 19402 ============================== 19403 19404 As an extension, the GNU C compiler supports additional floating types, 19405 `__float80' and `__float128' to support 80bit (`XFmode') and 128 bit 19406 (`TFmode') floating types. Support for additional types includes the 19407 arithmetic operators: add, subtract, multiply, divide; unary arithmetic 19408 operators; relational operators; equality operators; and conversions to 19409 and from integer and other floating types. Use a suffix `w' or `W' in 19410 a literal constant of type `__float80' and `q' or `Q' for `_float128'. 19411 You can declare complex types using the corresponding internal complex 19412 type, `XCmode' for `__float80' type and `TCmode' for `__float128' type: 19413 19414 typedef _Complex float __attribute__((mode(TC))) _Complex128; 19415 typedef _Complex float __attribute__((mode(XC))) _Complex80; 19416 19417 Not all targets support additional floating point types. `__float80' 19418 and `__float128' types are supported on i386, x86_64 and ia64 targets. 19419 The `__float128' type is supported on hppa HP-UX targets. 19420 19421 19422 File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions 19423 19424 6.12 Half-Precision Floating Point 19425 ================================== 19426 19427 On ARM targets, GCC supports half-precision (16-bit) floating point via 19428 the `__fp16' type. You must enable this type explicitly with the 19429 `-mfp16-format' command-line option in order to use it. 19430 19431 ARM supports two incompatible representations for half-precision 19432 floating-point values. You must choose one of the representations and 19433 use it consistently in your program. 19434 19435 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format. 19436 This format can represent normalized values in the range of 2^-14 to 19437 65504. There are 11 bits of significand precision, approximately 3 19438 decimal digits. 19439 19440 Specifying `-mfp16-format=alternative' selects the ARM alternative 19441 format. This representation is similar to the IEEE format, but does 19442 not support infinities or NaNs. Instead, the range of exponents is 19443 extended, so that this format can represent normalized values in the 19444 range of 2^-14 to 131008. 19445 19446 The `__fp16' type is a storage format only. For purposes of 19447 arithmetic and other operations, `__fp16' values in C or C++ 19448 expressions are automatically promoted to `float'. In addition, you 19449 cannot declare a function with a return value or parameters of type 19450 `__fp16'. 19451 19452 Note that conversions from `double' to `__fp16' involve an 19453 intermediate conversion to `float'. Because of rounding, this can 19454 sometimes produce a different result than a direct conversion. 19455 19456 ARM provides hardware support for conversions between `__fp16' and 19457 `float' values as an extension to VFP and NEON (Advanced SIMD). GCC 19458 generates code using these hardware instructions if you compile with 19459 options to select an FPU that provides them; for example, 19460 `-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the 19461 `-mfp16-format' option to select a half-precision format. 19462 19463 Language-level support for the `__fp16' data type is independent of 19464 whether GCC generates code using hardware floating-point instructions. 19465 In cases where hardware support is not specified, GCC implements 19466 conversions between `__fp16' and `float' values as library calls. 19467 19468 19469 File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions 19470 19471 6.13 Decimal Floating Types 19472 =========================== 19473 19474 As an extension, the GNU C compiler supports decimal floating types as 19475 defined in the N1312 draft of ISO/IEC WDTR24732. Support for decimal 19476 floating types in GCC will evolve as the draft technical report changes. 19477 Calling conventions for any target might also change. Not all targets 19478 support decimal floating types. 19479 19480 The decimal floating types are `_Decimal32', `_Decimal64', and 19481 `_Decimal128'. They use a radix of ten, unlike the floating types 19482 `float', `double', and `long double' whose radix is not specified by 19483 the C standard but is usually two. 19484 19485 Support for decimal floating types includes the arithmetic operators 19486 add, subtract, multiply, divide; unary arithmetic operators; relational 19487 operators; equality operators; and conversions to and from integer and 19488 other floating types. Use a suffix `df' or `DF' in a literal constant 19489 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 19490 for `_Decimal128'. 19491 19492 GCC support of decimal float as specified by the draft technical report 19493 is incomplete: 19494 19495 * When the value of a decimal floating type cannot be represented in 19496 the integer type to which it is being converted, the result is 19497 undefined rather than the result value specified by the draft 19498 technical report. 19499 19500 * GCC does not provide the C library functionality associated with 19501 `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which 19502 must come from a separate C library implementation. Because of 19503 this the GNU C compiler does not define macro `__STDC_DEC_FP__' to 19504 indicate that the implementation conforms to the technical report. 19505 19506 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 19507 the DWARF2 debug information format. 19508 19509 19510 File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 19511 19512 6.14 Hex Floats 19513 =============== 19514 19515 ISO C99 supports floating-point numbers written not only in the usual 19516 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 19517 written in hexadecimal format. As a GNU extension, GCC supports this 19518 in C90 mode (except in some cases when strictly conforming) and in C++. 19519 In that format the `0x' hex introducer and the `p' or `P' exponent 19520 field are mandatory. The exponent is a decimal number that indicates 19521 the power of 2 by which the significant part will be multiplied. Thus 19522 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 19523 is the same as `1.55e1'. 19524 19525 Unlike for floating-point numbers in the decimal notation the exponent 19526 is always required in the hexadecimal notation. Otherwise the compiler 19527 would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 19528 could mean `1.0f' or `1.9375' since `f' is also the extension for 19529 floating-point constants of type `float'. 19530 19531 19532 File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions 19533 19534 6.15 Fixed-Point Types 19535 ====================== 19536 19537 As an extension, the GNU C compiler supports fixed-point types as 19538 defined in the N1169 draft of ISO/IEC DTR 18037. Support for 19539 fixed-point types in GCC will evolve as the draft technical report 19540 changes. Calling conventions for any target might also change. Not 19541 all targets support fixed-point types. 19542 19543 The fixed-point types are `short _Fract', `_Fract', `long _Fract', 19544 `long long _Fract', `unsigned short _Fract', `unsigned _Fract', 19545 `unsigned long _Fract', `unsigned long long _Fract', `_Sat short 19546 _Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract', 19547 `_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned 19548 long _Fract', `_Sat unsigned long long _Fract', `short _Accum', 19549 `_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum', 19550 `unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum', 19551 `_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long 19552 _Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat 19553 unsigned long _Accum', `_Sat unsigned long long _Accum'. 19554 19555 Fixed-point data values contain fractional and optional integral parts. 19556 The format of fixed-point data varies and depends on the target machine. 19557 19558 Support for fixed-point types includes: 19559 * prefix and postfix increment and decrement operators (`++', `--') 19560 19561 * unary arithmetic operators (`+', `-', `!') 19562 19563 * binary arithmetic operators (`+', `-', `*', `/') 19564 19565 * binary shift operators (`<<', `>>') 19566 19567 * relational operators (`<', `<=', `>=', `>') 19568 19569 * equality operators (`==', `!=') 19570 19571 * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=') 19572 19573 * conversions to and from integer, floating-point, or fixed-point 19574 types 19575 19576 Use a suffix in a fixed-point literal constant: 19577 * `hr' or `HR' for `short _Fract' and `_Sat short _Fract' 19578 19579 * `r' or `R' for `_Fract' and `_Sat _Fract' 19580 19581 * `lr' or `LR' for `long _Fract' and `_Sat long _Fract' 19582 19583 * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract' 19584 19585 * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned 19586 short _Fract' 19587 19588 * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract' 19589 19590 * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long 19591 _Fract' 19592 19593 * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat 19594 unsigned long long _Fract' 19595 19596 * `hk' or `HK' for `short _Accum' and `_Sat short _Accum' 19597 19598 * `k' or `K' for `_Accum' and `_Sat _Accum' 19599 19600 * `lk' or `LK' for `long _Accum' and `_Sat long _Accum' 19601 19602 * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum' 19603 19604 * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned 19605 short _Accum' 19606 19607 * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum' 19608 19609 * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long 19610 _Accum' 19611 19612 * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat 19613 unsigned long long _Accum' 19614 19615 GCC support of fixed-point types as specified by the draft technical 19616 report is incomplete: 19617 19618 * Pragmas to control overflow and rounding behaviors are not 19619 implemented. 19620 19621 Fixed-point types are supported by the DWARF2 debug information format. 19622 19623 19624 File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions 19625 19626 6.16 Named address spaces 19627 ========================= 19628 19629 As an extension, the GNU C compiler supports named address spaces as 19630 defined in the N1275 draft of ISO/IEC DTR 18037. Support for named 19631 address spaces in GCC will evolve as the draft technical report changes. 19632 Calling conventions for any target might also change. At present, only 19633 the SPU and M32C targets support other address spaces. On the SPU 19634 target, for example, variables may be declared as belonging to another 19635 address space by qualifying the type with the `__ea' address space 19636 identifier: 19637 19638 extern int __ea i; 19639 19640 When the variable `i' is accessed, the compiler will generate special 19641 code to access this variable. It may use runtime library support, or 19642 generate special machine instructions to access that address space. 19643 19644 The `__ea' identifier may be used exactly like any other C type 19645 qualifier (e.g., `const' or `volatile'). See the N1275 document for 19646 more details. 19647 19648 On the M32C target, with the R8C and M16C cpu variants, variables 19649 qualified with `__far' are accessed using 32-bit addresses in order to 19650 access memory beyond the first 64k bytes. If `__far' is used with the 19651 M32CM or M32C cpu variants, it has no effect. 19652 19653 19654 File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Named Address Spaces, Up: C Extensions 19655 19656 6.17 Arrays of Length Zero 19657 ========================== 19658 19659 Zero-length arrays are allowed in GNU C. They are very useful as the 19660 last element of a structure which is really a header for a 19661 variable-length object: 19662 19663 struct line { 19664 int length; 19665 char contents[0]; 19666 }; 19667 19668 struct line *thisline = (struct line *) 19669 malloc (sizeof (struct line) + this_length); 19670 thisline->length = this_length; 19671 19672 In ISO C90, you would have to give `contents' a length of 1, which 19673 means either you waste space or complicate the argument to `malloc'. 19674 19675 In ISO C99, you would use a "flexible array member", which is slightly 19676 different in syntax and semantics: 19677 19678 * Flexible array members are written as `contents[]' without the `0'. 19679 19680 * Flexible array members have incomplete type, and so the `sizeof' 19681 operator may not be applied. As a quirk of the original 19682 implementation of zero-length arrays, `sizeof' evaluates to zero. 19683 19684 * Flexible array members may only appear as the last member of a 19685 `struct' that is otherwise non-empty. 19686 19687 * A structure containing a flexible array member, or a union 19688 containing such a structure (possibly recursively), may not be a 19689 member of a structure or an element of an array. (However, these 19690 uses are permitted by GCC as extensions.) 19691 19692 GCC versions before 3.0 allowed zero-length arrays to be statically 19693 initialized, as if they were flexible arrays. In addition to those 19694 cases that were useful, it also allowed initializations in situations 19695 that would corrupt later data. Non-empty initialization of zero-length 19696 arrays is now treated like any case where there are more initializer 19697 elements than the array holds, in that a suitable warning about "excess 19698 elements in array" is given, and the excess elements (all of them, in 19699 this case) are ignored. 19700 19701 Instead GCC allows static initialization of flexible array members. 19702 This is equivalent to defining a new structure containing the original 19703 structure followed by an array of sufficient size to contain the data. 19704 I.e. in the following, `f1' is constructed as if it were declared like 19705 `f2'. 19706 19707 struct f1 { 19708 int x; int y[]; 19709 } f1 = { 1, { 2, 3, 4 } }; 19710 19711 struct f2 { 19712 struct f1 f1; int data[3]; 19713 } f2 = { { 1 }, { 2, 3, 4 } }; 19714 19715 The convenience of this extension is that `f1' has the desired type, 19716 eliminating the need to consistently refer to `f2.f1'. 19717 19718 This has symmetry with normal static arrays, in that an array of 19719 unknown size is also written with `[]'. 19720 19721 Of course, this extension only makes sense if the extra data comes at 19722 the end of a top-level object, as otherwise we would be overwriting 19723 data at subsequent offsets. To avoid undue complication and confusion 19724 with initialization of deeply nested arrays, we simply disallow any 19725 non-empty initialization except when the structure is the top-level 19726 object. For example: 19727 19728 struct foo { int x; int y[]; }; 19729 struct bar { struct foo z; }; 19730 19731 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 19732 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 19733 struct bar c = { { 1, { } } }; // Valid. 19734 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 19735 19736 19737 File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions 19738 19739 6.18 Structures With No Members 19740 =============================== 19741 19742 GCC permits a C structure to have no members: 19743 19744 struct empty { 19745 }; 19746 19747 The structure will have size zero. In C++, empty structures are part 19748 of the language. G++ treats empty structures as if they had a single 19749 member of type `char'. 19750 19751 19752 File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions 19753 19754 6.19 Arrays of Variable Length 19755 ============================== 19756 19757 Variable-length automatic arrays are allowed in ISO C99, and as an 19758 extension GCC accepts them in C90 mode and in C++. These arrays are 19759 declared like any other automatic arrays, but with a length that is not 19760 a constant expression. The storage is allocated at the point of 19761 declaration and deallocated when the brace-level is exited. For 19762 example: 19763 19764 FILE * 19765 concat_fopen (char *s1, char *s2, char *mode) 19766 { 19767 char str[strlen (s1) + strlen (s2) + 1]; 19768 strcpy (str, s1); 19769 strcat (str, s2); 19770 return fopen (str, mode); 19771 } 19772 19773 Jumping or breaking out of the scope of the array name deallocates the 19774 storage. Jumping into the scope is not allowed; you get an error 19775 message for it. 19776 19777 You can use the function `alloca' to get an effect much like 19778 variable-length arrays. The function `alloca' is available in many 19779 other C implementations (but not in all). On the other hand, 19780 variable-length arrays are more elegant. 19781 19782 There are other differences between these two methods. Space allocated 19783 with `alloca' exists until the containing _function_ returns. The 19784 space for a variable-length array is deallocated as soon as the array 19785 name's scope ends. (If you use both variable-length arrays and 19786 `alloca' in the same function, deallocation of a variable-length array 19787 will also deallocate anything more recently allocated with `alloca'.) 19788 19789 You can also use variable-length arrays as arguments to functions: 19790 19791 struct entry 19792 tester (int len, char data[len][len]) 19793 { 19794 /* ... */ 19795 } 19796 19797 The length of an array is computed once when the storage is allocated 19798 and is remembered for the scope of the array in case you access it with 19799 `sizeof'. 19800 19801 If you want to pass the array first and the length afterward, you can 19802 use a forward declaration in the parameter list--another GNU extension. 19803 19804 struct entry 19805 tester (int len; char data[len][len], int len) 19806 { 19807 /* ... */ 19808 } 19809 19810 The `int len' before the semicolon is a "parameter forward 19811 declaration", and it serves the purpose of making the name `len' known 19812 when the declaration of `data' is parsed. 19813 19814 You can write any number of such parameter forward declarations in the 19815 parameter list. They can be separated by commas or semicolons, but the 19816 last one must end with a semicolon, which is followed by the "real" 19817 parameter declarations. Each forward declaration must match a "real" 19818 declaration in parameter name and data type. ISO C99 does not support 19819 parameter forward declarations. 19820 19821 19822 File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions 19823 19824 6.20 Macros with a Variable Number of Arguments. 19825 ================================================ 19826 19827 In the ISO C standard of 1999, a macro can be declared to accept a 19828 variable number of arguments much as a function can. The syntax for 19829 defining the macro is similar to that of a function. Here is an 19830 example: 19831 19832 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 19833 19834 Here `...' is a "variable argument". In the invocation of such a 19835 macro, it represents the zero or more tokens until the closing 19836 parenthesis that ends the invocation, including any commas. This set of 19837 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 19838 it appears. See the CPP manual for more information. 19839 19840 GCC has long supported variadic macros, and used a different syntax 19841 that allowed you to give a name to the variable arguments just like any 19842 other argument. Here is an example: 19843 19844 #define debug(format, args...) fprintf (stderr, format, args) 19845 19846 This is in all ways equivalent to the ISO C example above, but arguably 19847 more readable and descriptive. 19848 19849 GNU CPP has two further variadic macro extensions, and permits them to 19850 be used with either of the above forms of macro definition. 19851 19852 In standard C, you are not allowed to leave the variable argument out 19853 entirely; but you are allowed to pass an empty argument. For example, 19854 this invocation is invalid in ISO C, because there is no comma after 19855 the string: 19856 19857 debug ("A message") 19858 19859 GNU CPP permits you to completely omit the variable arguments in this 19860 way. In the above examples, the compiler would complain, though since 19861 the expansion of the macro still has the extra comma after the format 19862 string. 19863 19864 To help solve this problem, CPP behaves specially for variable 19865 arguments used with the token paste operator, `##'. If instead you 19866 write 19867 19868 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 19869 19870 and if the variable arguments are omitted or empty, the `##' operator 19871 causes the preprocessor to remove the comma before it. If you do 19872 provide some variable arguments in your macro invocation, GNU CPP does 19873 not complain about the paste operation and instead places the variable 19874 arguments after the comma. Just like any other pasted macro argument, 19875 these arguments are not macro expanded. 19876 19877 19878 File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 19879 19880 6.21 Slightly Looser Rules for Escaped Newlines 19881 =============================================== 19882 19883 Recently, the preprocessor has relaxed its treatment of escaped 19884 newlines. Previously, the newline had to immediately follow a 19885 backslash. The current implementation allows whitespace in the form of 19886 spaces, horizontal and vertical tabs, and form feeds between the 19887 backslash and the subsequent newline. The preprocessor issues a 19888 warning, but treats it as a valid escaped newline and combines the two 19889 lines to form a single logical line. This works within comments and 19890 tokens, as well as between tokens. Comments are _not_ treated as 19891 whitespace for the purposes of this relaxation, since they have not yet 19892 been replaced with spaces. 19893 19894 19895 File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 19896 19897 6.22 Non-Lvalue Arrays May Have Subscripts 19898 ========================================== 19899 19900 In ISO C99, arrays that are not lvalues still decay to pointers, and 19901 may be subscripted, although they may not be modified or used after the 19902 next sequence point and the unary `&' operator may not be applied to 19903 them. As an extension, GCC allows such arrays to be subscripted in C90 19904 mode, though otherwise they do not decay to pointers outside C99 mode. 19905 For example, this is valid in GNU C though not valid in C90: 19906 19907 struct foo {int a[4];}; 19908 19909 struct foo f(); 19910 19911 bar (int index) 19912 { 19913 return f().a[index]; 19914 } 19915 19916 19917 File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 19918 19919 6.23 Arithmetic on `void'- and Function-Pointers 19920 ================================================ 19921 19922 In GNU C, addition and subtraction operations are supported on pointers 19923 to `void' and on pointers to functions. This is done by treating the 19924 size of a `void' or of a function as 1. 19925 19926 A consequence of this is that `sizeof' is also allowed on `void' and 19927 on function types, and returns 1. 19928 19929 The option `-Wpointer-arith' requests a warning if these extensions 19930 are used. 19931 19932 19933 File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 19934 19935 6.24 Non-Constant Initializers 19936 ============================== 19937 19938 As in standard C++ and ISO C99, the elements of an aggregate 19939 initializer for an automatic variable are not required to be constant 19940 expressions in GNU C. Here is an example of an initializer with 19941 run-time varying elements: 19942 19943 foo (float f, float g) 19944 { 19945 float beat_freqs[2] = { f-g, f+g }; 19946 /* ... */ 19947 } 19948 19949 19950 File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 19951 19952 6.25 Compound Literals 19953 ====================== 19954 19955 ISO C99 supports compound literals. A compound literal looks like a 19956 cast containing an initializer. Its value is an object of the type 19957 specified in the cast, containing the elements specified in the 19958 initializer; it is an lvalue. As an extension, GCC supports compound 19959 literals in C90 mode and in C++. 19960 19961 Usually, the specified type is a structure. Assume that `struct foo' 19962 and `structure' are declared as shown: 19963 19964 struct foo {int a; char b[2];} structure; 19965 19966 Here is an example of constructing a `struct foo' with a compound 19967 literal: 19968 19969 structure = ((struct foo) {x + y, 'a', 0}); 19970 19971 This is equivalent to writing the following: 19972 19973 { 19974 struct foo temp = {x + y, 'a', 0}; 19975 structure = temp; 19976 } 19977 19978 You can also construct an array. If all the elements of the compound 19979 literal are (made up of) simple constant expressions, suitable for use 19980 in initializers of objects of static storage duration, then the compound 19981 literal can be coerced to a pointer to its first element and used in 19982 such an initializer, as shown here: 19983 19984 char **foo = (char *[]) { "x", "y", "z" }; 19985 19986 Compound literals for scalar types and union types are is also 19987 allowed, but then the compound literal is equivalent to a cast. 19988 19989 As a GNU extension, GCC allows initialization of objects with static 19990 storage duration by compound literals (which is not possible in ISO 19991 C99, because the initializer is not a constant). It is handled as if 19992 the object was initialized only with the bracket enclosed list if the 19993 types of the compound literal and the object match. The initializer 19994 list of the compound literal must be constant. If the object being 19995 initialized has array type of unknown size, the size is determined by 19996 compound literal size. 19997 19998 static struct foo x = (struct foo) {1, 'a', 'b'}; 19999 static int y[] = (int []) {1, 2, 3}; 20000 static int z[] = (int [3]) {1}; 20001 20002 The above lines are equivalent to the following: 20003 static struct foo x = {1, 'a', 'b'}; 20004 static int y[] = {1, 2, 3}; 20005 static int z[] = {1, 0, 0}; 20006 20007 20008 File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions 20009 20010 6.26 Designated Initializers 20011 ============================ 20012 20013 Standard C90 requires the elements of an initializer to appear in a 20014 fixed order, the same as the order of the elements in the array or 20015 structure being initialized. 20016 20017 In ISO C99 you can give the elements in any order, specifying the array 20018 indices or structure field names they apply to, and GNU C allows this as 20019 an extension in C90 mode as well. This extension is not implemented in 20020 GNU C++. 20021 20022 To specify an array index, write `[INDEX] =' before the element value. 20023 For example, 20024 20025 int a[6] = { [4] = 29, [2] = 15 }; 20026 20027 is equivalent to 20028 20029 int a[6] = { 0, 0, 15, 0, 29, 0 }; 20030 20031 The index values must be constant expressions, even if the array being 20032 initialized is automatic. 20033 20034 An alternative syntax for this which has been obsolete since GCC 2.5 20035 but GCC still accepts is to write `[INDEX]' before the element value, 20036 with no `='. 20037 20038 To initialize a range of elements to the same value, write `[FIRST ... 20039 LAST] = VALUE'. This is a GNU extension. For example, 20040 20041 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 20042 20043 If the value in it has side-effects, the side-effects will happen only 20044 once, not for each initialized field by the range initializer. 20045 20046 Note that the length of the array is the highest value specified plus 20047 one. 20048 20049 In a structure initializer, specify the name of a field to initialize 20050 with `.FIELDNAME =' before the element value. For example, given the 20051 following structure, 20052 20053 struct point { int x, y; }; 20054 20055 the following initialization 20056 20057 struct point p = { .y = yvalue, .x = xvalue }; 20058 20059 is equivalent to 20060 20061 struct point p = { xvalue, yvalue }; 20062 20063 Another syntax which has the same meaning, obsolete since GCC 2.5, is 20064 `FIELDNAME:', as shown here: 20065 20066 struct point p = { y: yvalue, x: xvalue }; 20067 20068 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 20069 also use a designator (or the obsolete colon syntax) when initializing 20070 a union, to specify which element of the union should be used. For 20071 example, 20072 20073 union foo { int i; double d; }; 20074 20075 union foo f = { .d = 4 }; 20076 20077 will convert 4 to a `double' to store it in the union using the second 20078 element. By contrast, casting 4 to type `union foo' would store it 20079 into the union as the integer `i', since it is an integer. (*Note Cast 20080 to Union::.) 20081 20082 You can combine this technique of naming elements with ordinary C 20083 initialization of successive elements. Each initializer element that 20084 does not have a designator applies to the next consecutive element of 20085 the array or structure. For example, 20086 20087 int a[6] = { [1] = v1, v2, [4] = v4 }; 20088 20089 is equivalent to 20090 20091 int a[6] = { 0, v1, v2, 0, v4, 0 }; 20092 20093 Labeling the elements of an array initializer is especially useful 20094 when the indices are characters or belong to an `enum' type. For 20095 example: 20096 20097 int whitespace[256] 20098 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 20099 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 20100 20101 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 20102 before an `=' to specify a nested subobject to initialize; the list is 20103 taken relative to the subobject corresponding to the closest 20104 surrounding brace pair. For example, with the `struct point' 20105 declaration above: 20106 20107 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 20108 20109 If the same field is initialized multiple times, it will have value from 20110 the last initialization. If any such overridden initialization has 20111 side-effect, it is unspecified whether the side-effect happens or not. 20112 Currently, GCC will discard them and issue a warning. 20113 20114 20115 File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions 20116 20117 6.27 Case Ranges 20118 ================ 20119 20120 You can specify a range of consecutive values in a single `case' label, 20121 like this: 20122 20123 case LOW ... HIGH: 20124 20125 This has the same effect as the proper number of individual `case' 20126 labels, one for each integer value from LOW to HIGH, inclusive. 20127 20128 This feature is especially useful for ranges of ASCII character codes: 20129 20130 case 'A' ... 'Z': 20131 20132 *Be careful:* Write spaces around the `...', for otherwise it may be 20133 parsed wrong when you use it with integer values. For example, write 20134 this: 20135 20136 case 1 ... 5: 20137 20138 rather than this: 20139 20140 case 1...5: 20141 20142 20143 File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions 20144 20145 6.28 Cast to a Union Type 20146 ========================= 20147 20148 A cast to union type is similar to other casts, except that the type 20149 specified is a union type. You can specify the type either with `union 20150 TAG' or with a typedef name. A cast to union is actually a constructor 20151 though, not a cast, and hence does not yield an lvalue like normal 20152 casts. (*Note Compound Literals::.) 20153 20154 The types that may be cast to the union type are those of the members 20155 of the union. Thus, given the following union and variables: 20156 20157 union foo { int i; double d; }; 20158 int x; 20159 double y; 20160 20161 both `x' and `y' can be cast to type `union foo'. 20162 20163 Using the cast as the right-hand side of an assignment to a variable of 20164 union type is equivalent to storing in a member of the union: 20165 20166 union foo u; 20167 /* ... */ 20168 u = (union foo) x == u.i = x 20169 u = (union foo) y == u.d = y 20170 20171 You can also use the union cast as a function argument: 20172 20173 void hack (union foo); 20174 /* ... */ 20175 hack ((union foo) x); 20176 20177 20178 File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions 20179 20180 6.29 Mixed Declarations and Code 20181 ================================ 20182 20183 ISO C99 and ISO C++ allow declarations and code to be freely mixed 20184 within compound statements. As an extension, GCC also allows this in 20185 C90 mode. For example, you could do: 20186 20187 int i; 20188 /* ... */ 20189 i++; 20190 int j = i + 2; 20191 20192 Each identifier is visible from where it is declared until the end of 20193 the enclosing block. 20194 20195 20196 File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 20197 20198 6.30 Declaring Attributes of Functions 20199 ====================================== 20200 20201 In GNU C, you declare certain things about functions called in your 20202 program which help the compiler optimize function calls and check your 20203 code more carefully. 20204 20205 The keyword `__attribute__' allows you to specify special attributes 20206 when making a declaration. This keyword is followed by an attribute 20207 specification inside double parentheses. The following attributes are 20208 currently defined for functions on all targets: `aligned', 20209 `alloc_size', `noreturn', `returns_twice', `noinline', `noclone', 20210 `always_inline', `flatten', `pure', `const', `nothrow', `sentinel', 20211 `format', `format_arg', `no_instrument_function', `no_split_stack', 20212 `section', `constructor', `destructor', `used', `unused', `deprecated', 20213 `weak', `malloc', `alias', `ifunc', `warn_unused_result', `nonnull', 20214 `gnu_inline', `externally_visible', `hot', `cold', `artificial', 20215 `error' and `warning'. Several other attributes are defined for 20216 functions on particular target systems. Other attributes, including 20217 `section' are supported for variables declarations (*note Variable 20218 Attributes::) and for types (*note Type Attributes::). 20219 20220 GCC plugins may provide their own attributes. 20221 20222 You may also specify attributes with `__' preceding and following each 20223 keyword. This allows you to use them in header files without being 20224 concerned about a possible macro of the same name. For example, you 20225 may use `__noreturn__' instead of `noreturn'. 20226 20227 *Note Attribute Syntax::, for details of the exact syntax for using 20228 attributes. 20229 20230 `alias ("TARGET")' 20231 The `alias' attribute causes the declaration to be emitted as an 20232 alias for another symbol, which must be specified. For instance, 20233 20234 void __f () { /* Do something. */; } 20235 void f () __attribute__ ((weak, alias ("__f"))); 20236 20237 defines `f' to be a weak alias for `__f'. In C++, the mangled 20238 name for the target must be used. It is an error if `__f' is not 20239 defined in the same translation unit. 20240 20241 Not all target machines support this attribute. 20242 20243 `aligned (ALIGNMENT)' 20244 This attribute specifies a minimum alignment for the function, 20245 measured in bytes. 20246 20247 You cannot use this attribute to decrease the alignment of a 20248 function, only to increase it. However, when you explicitly 20249 specify a function alignment this will override the effect of the 20250 `-falign-functions' (*note Optimize Options::) option for this 20251 function. 20252 20253 Note that the effectiveness of `aligned' attributes may be limited 20254 by inherent limitations in your linker. On many systems, the 20255 linker is only able to arrange for functions to be aligned up to a 20256 certain maximum alignment. (For some linkers, the maximum 20257 supported alignment may be very very small.) See your linker 20258 documentation for further information. 20259 20260 The `aligned' attribute can also be used for variables and fields 20261 (*note Variable Attributes::.) 20262 20263 `alloc_size' 20264 The `alloc_size' attribute is used to tell the compiler that the 20265 function return value points to memory, where the size is given by 20266 one or two of the functions parameters. GCC uses this information 20267 to improve the correctness of `__builtin_object_size'. 20268 20269 The function parameter(s) denoting the allocated size are 20270 specified by one or two integer arguments supplied to the 20271 attribute. The allocated size is either the value of the single 20272 function argument specified or the product of the two function 20273 arguments specified. Argument numbering starts at one. 20274 20275 For instance, 20276 20277 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 20278 void my_realloc(void*, size_t) __attribute__((alloc_size(2))) 20279 20280 declares that my_calloc will return memory of the size given by 20281 the product of parameter 1 and 2 and that my_realloc will return 20282 memory of the size given by parameter 2. 20283 20284 `always_inline' 20285 Generally, functions are not inlined unless optimization is 20286 specified. For functions declared inline, this attribute inlines 20287 the function even if no optimization level was specified. 20288 20289 `gnu_inline' 20290 This attribute should be used with a function which is also 20291 declared with the `inline' keyword. It directs GCC to treat the 20292 function as if it were defined in gnu90 mode even when compiling 20293 in C99 or gnu99 mode. 20294 20295 If the function is declared `extern', then this definition of the 20296 function is used only for inlining. In no case is the function 20297 compiled as a standalone function, not even if you take its address 20298 explicitly. Such an address becomes an external reference, as if 20299 you had only declared the function, and had not defined it. This 20300 has almost the effect of a macro. The way to use this is to put a 20301 function definition in a header file with this attribute, and put 20302 another copy of the function, without `extern', in a library file. 20303 The definition in the header file will cause most calls to the 20304 function to be inlined. If any uses of the function remain, they 20305 will refer to the single copy in the library. Note that the two 20306 definitions of the functions need not be precisely the same, 20307 although if they do not have the same effect your program may 20308 behave oddly. 20309 20310 In C, if the function is neither `extern' nor `static', then the 20311 function is compiled as a standalone function, as well as being 20312 inlined where possible. 20313 20314 This is how GCC traditionally handled functions declared `inline'. 20315 Since ISO C99 specifies a different semantics for `inline', this 20316 function attribute is provided as a transition measure and as a 20317 useful feature in its own right. This attribute is available in 20318 GCC 4.1.3 and later. It is available if either of the 20319 preprocessor macros `__GNUC_GNU_INLINE__' or 20320 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 20321 As Fast As a Macro: Inline. 20322 20323 In C++, this attribute does not depend on `extern' in any way, but 20324 it still requires the `inline' keyword to enable its special 20325 behavior. 20326 20327 `artificial' 20328 This attribute is useful for small inline wrappers which if 20329 possible should appear during debugging as a unit, depending on 20330 the debug info format it will either mean marking the function as 20331 artificial or using the caller location for all instructions 20332 within the inlined body. 20333 20334 `bank_switch' 20335 When added to an interrupt handler with the M32C port, causes the 20336 prologue and epilogue to use bank switching to preserve the 20337 registers rather than saving them on the stack. 20338 20339 `flatten' 20340 Generally, inlining into a function is limited. For a function 20341 marked with this attribute, every call inside this function will 20342 be inlined, if possible. Whether the function itself is 20343 considered for inlining depends on its size and the current 20344 inlining parameters. 20345 20346 `error ("MESSAGE")' 20347 If this attribute is used on a function declaration and a call to 20348 such a function is not eliminated through dead code elimination or 20349 other optimizations, an error which will include MESSAGE will be 20350 diagnosed. This is useful for compile time checking, especially 20351 together with `__builtin_constant_p' and inline functions where 20352 checking the inline function arguments is not possible through 20353 `extern char [(condition) ? 1 : -1];' tricks. While it is 20354 possible to leave the function undefined and thus invoke a link 20355 failure, when using this attribute the problem will be diagnosed 20356 earlier and with exact location of the call even in presence of 20357 inline functions or when not emitting debugging information. 20358 20359 `warning ("MESSAGE")' 20360 If this attribute is used on a function declaration and a call to 20361 such a function is not eliminated through dead code elimination or 20362 other optimizations, a warning which will include MESSAGE will be 20363 diagnosed. This is useful for compile time checking, especially 20364 together with `__builtin_constant_p' and inline functions. While 20365 it is possible to define the function with a message in 20366 `.gnu.warning*' section, when using this attribute the problem 20367 will be diagnosed earlier and with exact location of the call even 20368 in presence of inline functions or when not emitting debugging 20369 information. 20370 20371 `cdecl' 20372 On the Intel 386, the `cdecl' attribute causes the compiler to 20373 assume that the calling function will pop off the stack space used 20374 to pass arguments. This is useful to override the effects of the 20375 `-mrtd' switch. 20376 20377 `const' 20378 Many functions do not examine any values except their arguments, 20379 and have no effects except the return value. Basically this is 20380 just slightly more strict class than the `pure' attribute below, 20381 since function is not allowed to read global memory. 20382 20383 Note that a function that has pointer arguments and examines the 20384 data pointed to must _not_ be declared `const'. Likewise, a 20385 function that calls a non-`const' function usually must not be 20386 `const'. It does not make sense for a `const' function to return 20387 `void'. 20388 20389 The attribute `const' is not implemented in GCC versions earlier 20390 than 2.5. An alternative way to declare that a function has no 20391 side effects, which works in the current version and in some older 20392 versions, is as follows: 20393 20394 typedef int intfn (); 20395 20396 extern const intfn square; 20397 20398 This approach does not work in GNU C++ from 2.6.0 on, since the 20399 language specifies that the `const' must be attached to the return 20400 value. 20401 20402 `constructor' 20403 `destructor' 20404 `constructor (PRIORITY)' 20405 `destructor (PRIORITY)' 20406 The `constructor' attribute causes the function to be called 20407 automatically before execution enters `main ()'. Similarly, the 20408 `destructor' attribute causes the function to be called 20409 automatically after `main ()' has completed or `exit ()' has been 20410 called. Functions with these attributes are useful for 20411 initializing data that will be used implicitly during the 20412 execution of the program. 20413 20414 You may provide an optional integer priority to control the order 20415 in which constructor and destructor functions are run. A 20416 constructor with a smaller priority number runs before a 20417 constructor with a larger priority number; the opposite 20418 relationship holds for destructors. So, if you have a constructor 20419 that allocates a resource and a destructor that deallocates the 20420 same resource, both functions typically have the same priority. 20421 The priorities for constructor and destructor functions are the 20422 same as those specified for namespace-scope C++ objects (*note C++ 20423 Attributes::). 20424 20425 These attributes are not currently implemented for Objective-C. 20426 20427 `deprecated' 20428 `deprecated (MSG)' 20429 The `deprecated' attribute results in a warning if the function is 20430 used anywhere in the source file. This is useful when identifying 20431 functions that are expected to be removed in a future version of a 20432 program. The warning also includes the location of the declaration 20433 of the deprecated function, to enable users to easily find further 20434 information about why the function is deprecated, or what they 20435 should do instead. Note that the warnings only occurs for uses: 20436 20437 int old_fn () __attribute__ ((deprecated)); 20438 int old_fn (); 20439 int (*fn_ptr)() = old_fn; 20440 20441 results in a warning on line 3 but not line 2. The optional msg 20442 argument, which must be a string, will be printed in the warning if 20443 present. 20444 20445 The `deprecated' attribute can also be used for variables and 20446 types (*note Variable Attributes::, *note Type Attributes::.) 20447 20448 `disinterrupt' 20449 On MeP targets, this attribute causes the compiler to emit 20450 instructions to disable interrupts for the duration of the given 20451 function. 20452 20453 `dllexport' 20454 On Microsoft Windows targets and Symbian OS targets the 20455 `dllexport' attribute causes the compiler to provide a global 20456 pointer to a pointer in a DLL, so that it can be referenced with 20457 the `dllimport' attribute. On Microsoft Windows targets, the 20458 pointer name is formed by combining `_imp__' and the function or 20459 variable name. 20460 20461 You can use `__declspec(dllexport)' as a synonym for 20462 `__attribute__ ((dllexport))' for compatibility with other 20463 compilers. 20464 20465 On systems that support the `visibility' attribute, this attribute 20466 also implies "default" visibility. It is an error to explicitly 20467 specify any other visibility. 20468 20469 In previous versions of GCC, the `dllexport' attribute was ignored 20470 for inlined functions, unless the `-fkeep-inline-functions' flag 20471 had been used. The default behaviour now is to emit all 20472 dllexported inline functions; however, this can cause object 20473 file-size bloat, in which case the old behaviour can be restored 20474 by using `-fno-keep-inline-dllexport'. 20475 20476 The attribute is also ignored for undefined symbols. 20477 20478 When applied to C++ classes, the attribute marks defined 20479 non-inlined member functions and static data members as exports. 20480 Static consts initialized in-class are not marked unless they are 20481 also defined out-of-class. 20482 20483 For Microsoft Windows targets there are alternative methods for 20484 including the symbol in the DLL's export table such as using a 20485 `.def' file with an `EXPORTS' section or, with GNU ld, using the 20486 `--export-all' linker flag. 20487 20488 `dllimport' 20489 On Microsoft Windows and Symbian OS targets, the `dllimport' 20490 attribute causes the compiler to reference a function or variable 20491 via a global pointer to a pointer that is set up by the DLL 20492 exporting the symbol. The attribute implies `extern'. On 20493 Microsoft Windows targets, the pointer name is formed by combining 20494 `_imp__' and the function or variable name. 20495 20496 You can use `__declspec(dllimport)' as a synonym for 20497 `__attribute__ ((dllimport))' for compatibility with other 20498 compilers. 20499 20500 On systems that support the `visibility' attribute, this attribute 20501 also implies "default" visibility. It is an error to explicitly 20502 specify any other visibility. 20503 20504 Currently, the attribute is ignored for inlined functions. If the 20505 attribute is applied to a symbol _definition_, an error is 20506 reported. If a symbol previously declared `dllimport' is later 20507 defined, the attribute is ignored in subsequent references, and a 20508 warning is emitted. The attribute is also overridden by a 20509 subsequent declaration as `dllexport'. 20510 20511 When applied to C++ classes, the attribute marks non-inlined 20512 member functions and static data members as imports. However, the 20513 attribute is ignored for virtual methods to allow creation of 20514 vtables using thunks. 20515 20516 On the SH Symbian OS target the `dllimport' attribute also has 20517 another affect--it can cause the vtable and run-time type 20518 information for a class to be exported. This happens when the 20519 class has a dllimport'ed constructor or a non-inline, non-pure 20520 virtual function and, for either of those two conditions, the 20521 class also has an inline constructor or destructor and has a key 20522 function that is defined in the current translation unit. 20523 20524 For Microsoft Windows based targets the use of the `dllimport' 20525 attribute on functions is not necessary, but provides a small 20526 performance benefit by eliminating a thunk in the DLL. The use of 20527 the `dllimport' attribute on imported variables was required on 20528 older versions of the GNU linker, but can now be avoided by 20529 passing the `--enable-auto-import' switch to the GNU linker. As 20530 with functions, using the attribute for a variable eliminates a 20531 thunk in the DLL. 20532 20533 One drawback to using this attribute is that a pointer to a 20534 _variable_ marked as `dllimport' cannot be used as a constant 20535 address. However, a pointer to a _function_ with the `dllimport' 20536 attribute can be used as a constant initializer; in this case, the 20537 address of a stub function in the import lib is referenced. On 20538 Microsoft Windows targets, the attribute can be disabled for 20539 functions by setting the `-mnop-fun-dllimport' flag. 20540 20541 `eightbit_data' 20542 Use this attribute on the H8/300, H8/300H, and H8S to indicate 20543 that the specified variable should be placed into the eight bit 20544 data section. The compiler will generate more efficient code for 20545 certain operations on data in the eight bit data area. Note the 20546 eight bit data area is limited to 256 bytes of data. 20547 20548 You must use GAS and GLD from GNU binutils version 2.7 or later for 20549 this attribute to work correctly. 20550 20551 `exception_handler' 20552 Use this attribute on the Blackfin to indicate that the specified 20553 function is an exception handler. The compiler will generate 20554 function entry and exit sequences suitable for use in an exception 20555 handler when this attribute is present. 20556 20557 `externally_visible' 20558 This attribute, attached to a global variable or function, 20559 nullifies the effect of the `-fwhole-program' command-line option, 20560 so the object remains visible outside the current compilation 20561 unit. If `-fwhole-program' is used together with `-flto' and 20562 `gold' is used as the linker plugin, `externally_visible' 20563 attributes are automatically added to functions (not variable yet 20564 due to a current `gold' issue) that are accessed outside of LTO 20565 objects according to resolution file produced by `gold'. For 20566 other linkers that cannot generate resolution file, explicit 20567 `externally_visible' attributes are still necessary. 20568 20569 `far' 20570 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 20571 use a calling convention that takes care of switching memory banks 20572 when entering and leaving a function. This calling convention is 20573 also the default when using the `-mlong-calls' option. 20574 20575 On 68HC12 the compiler will use the `call' and `rtc' instructions 20576 to call and return from a function. 20577 20578 On 68HC11 the compiler will generate a sequence of instructions to 20579 invoke a board-specific routine to switch the memory bank and call 20580 the real function. The board-specific routine simulates a `call'. 20581 At the end of a function, it will jump to a board-specific routine 20582 instead of using `rts'. The board-specific return routine 20583 simulates the `rtc'. 20584 20585 On MeP targets this causes the compiler to use a calling convention 20586 which assumes the called function is too far away for the built-in 20587 addressing modes. 20588 20589 `fast_interrupt' 20590 Use this attribute on the M32C and RX ports to indicate that the 20591 specified function is a fast interrupt handler. This is just like 20592 the `interrupt' attribute, except that `freit' is used to return 20593 instead of `reit'. 20594 20595 `fastcall' 20596 On the Intel 386, the `fastcall' attribute causes the compiler to 20597 pass the first argument (if of integral type) in the register ECX 20598 and the second argument (if of integral type) in the register EDX. 20599 Subsequent and other typed arguments are passed on the stack. The 20600 called function will pop the arguments off the stack. If the 20601 number of arguments is variable all arguments are pushed on the 20602 stack. 20603 20604 `thiscall' 20605 On the Intel 386, the `thiscall' attribute causes the compiler to 20606 pass the first argument (if of integral type) in the register ECX. 20607 Subsequent and other typed arguments are passed on the stack. The 20608 called function will pop the arguments off the stack. If the 20609 number of arguments is variable all arguments are pushed on the 20610 stack. The `thiscall' attribute is intended for C++ non-static 20611 member functions. As gcc extension this calling convention can be 20612 used for C-functions and for static member methods. 20613 20614 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 20615 The `format' attribute specifies that a function takes `printf', 20616 `scanf', `strftime' or `strfmon' style arguments which should be 20617 type-checked against a format string. For example, the 20618 declaration: 20619 20620 extern int 20621 my_printf (void *my_object, const char *my_format, ...) 20622 __attribute__ ((format (printf, 2, 3))); 20623 20624 causes the compiler to check the arguments in calls to `my_printf' 20625 for consistency with the `printf' style format string argument 20626 `my_format'. 20627 20628 The parameter ARCHETYPE determines how the format string is 20629 interpreted, and should be `printf', `scanf', `strftime', 20630 `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'. (You can 20631 also use `__printf__', `__scanf__', `__strftime__' or 20632 `__strfmon__'.) On MinGW targets, `ms_printf', `ms_scanf', and 20633 `ms_strftime' are also present. ARCHTYPE values such as `printf' 20634 refer to the formats accepted by the system's C run-time library, 20635 while `gnu_' values always refer to the formats accepted by the 20636 GNU C Library. On Microsoft Windows targets, `ms_' values refer 20637 to the formats accepted by the `msvcrt.dll' library. The 20638 parameter STRING-INDEX specifies which argument is the format 20639 string argument (starting from 1), while FIRST-TO-CHECK is the 20640 number of the first argument to check against the format string. 20641 For functions where the arguments are not available to be checked 20642 (such as `vprintf'), specify the third parameter as zero. In this 20643 case the compiler only checks the format string for consistency. 20644 For `strftime' formats, the third parameter is required to be zero. 20645 Since non-static C++ methods have an implicit `this' argument, the 20646 arguments of such methods should be counted from two, not one, when 20647 giving values for STRING-INDEX and FIRST-TO-CHECK. 20648 20649 In the example above, the format string (`my_format') is the second 20650 argument of the function `my_print', and the arguments to check 20651 start with the third argument, so the correct parameters for the 20652 format attribute are 2 and 3. 20653 20654 The `format' attribute allows you to identify your own functions 20655 which take format strings as arguments, so that GCC can check the 20656 calls to these functions for errors. The compiler always (unless 20657 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 20658 standard library functions `printf', `fprintf', `sprintf', 20659 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 20660 `vsprintf' whenever such warnings are requested (using 20661 `-Wformat'), so there is no need to modify the header file 20662 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 20663 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 20664 strictly conforming C standard modes, the X/Open function 20665 `strfmon' is also checked as are `printf_unlocked' and 20666 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 20667 Dialect Options. 20668 20669 For Objective-C dialects, `NSString' (or `__NSString__') is 20670 recognized in the same context. Declarations including these 20671 format attributes will be parsed for correct syntax, however the 20672 result of checking of such format strings is not yet defined, and 20673 will not be carried out by this version of the compiler. 20674 20675 The target may also provide additional types of format checks. 20676 *Note Format Checks Specific to Particular Target Machines: Target 20677 Format Checks. 20678 20679 `format_arg (STRING-INDEX)' 20680 The `format_arg' attribute specifies that a function takes a format 20681 string for a `printf', `scanf', `strftime' or `strfmon' style 20682 function and modifies it (for example, to translate it into 20683 another language), so the result can be passed to a `printf', 20684 `scanf', `strftime' or `strfmon' style function (with the 20685 remaining arguments to the format function the same as they would 20686 have been for the unmodified string). For example, the 20687 declaration: 20688 20689 extern char * 20690 my_dgettext (char *my_domain, const char *my_format) 20691 __attribute__ ((format_arg (2))); 20692 20693 causes the compiler to check the arguments in calls to a `printf', 20694 `scanf', `strftime' or `strfmon' type function, whose format 20695 string argument is a call to the `my_dgettext' function, for 20696 consistency with the format string argument `my_format'. If the 20697 `format_arg' attribute had not been specified, all the compiler 20698 could tell in such calls to format functions would be that the 20699 format string argument is not constant; this would generate a 20700 warning when `-Wformat-nonliteral' is used, but the calls could 20701 not be checked without the attribute. 20702 20703 The parameter STRING-INDEX specifies which argument is the format 20704 string argument (starting from one). Since non-static C++ methods 20705 have an implicit `this' argument, the arguments of such methods 20706 should be counted from two. 20707 20708 The `format-arg' attribute allows you to identify your own 20709 functions which modify format strings, so that GCC can check the 20710 calls to `printf', `scanf', `strftime' or `strfmon' type function 20711 whose operands are a call to one of your own function. The 20712 compiler always treats `gettext', `dgettext', and `dcgettext' in 20713 this manner except when strict ISO C support is requested by 20714 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 20715 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 20716 Dialect Options. 20717 20718 For Objective-C dialects, the `format-arg' attribute may refer to 20719 an `NSString' reference for compatibility with the `format' 20720 attribute above. 20721 20722 The target may also allow additional types in `format-arg' 20723 attributes. *Note Format Checks Specific to Particular Target 20724 Machines: Target Format Checks. 20725 20726 `function_vector' 20727 Use this attribute on the H8/300, H8/300H, and H8S to indicate 20728 that the specified function should be called through the function 20729 vector. Calling a function through the function vector will 20730 reduce code size, however; the function vector has a limited size 20731 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 20732 and H8S) and shares space with the interrupt vector. 20733 20734 In SH2A target, this attribute declares a function to be called 20735 using the TBR relative addressing mode. The argument to this 20736 attribute is the entry number of the same function in a vector 20737 table containing all the TBR relative addressable functions. For 20738 the successful jump, register TBR should contain the start address 20739 of this TBR relative vector table. In the startup routine of the 20740 user application, user needs to care of this TBR register 20741 initialization. The TBR relative vector table can have at max 256 20742 function entries. The jumps to these functions will be generated 20743 using a SH2A specific, non delayed branch instruction JSR/N 20744 @(disp8,TBR). You must use GAS and GLD from GNU binutils version 20745 2.7 or later for this attribute to work correctly. 20746 20747 Please refer the example of M16C target, to see the use of this 20748 attribute while declaring a function, 20749 20750 In an application, for a function being called once, this 20751 attribute will save at least 8 bytes of code; and if other 20752 successive calls are being made to the same function, it will save 20753 2 bytes of code per each of these calls. 20754 20755 On M16C/M32C targets, the `function_vector' attribute declares a 20756 special page subroutine call function. Use of this attribute 20757 reduces the code size by 2 bytes for each call generated to the 20758 subroutine. The argument to the attribute is the vector number 20759 entry from the special page vector table which contains the 16 20760 low-order bits of the subroutine's entry address. Each vector 20761 table has special page number (18 to 255) which are used in `jsrs' 20762 instruction. Jump addresses of the routines are generated by 20763 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 20764 M32C targets), to the 2 byte addresses set in the vector table. 20765 Therefore you need to ensure that all the special page vector 20766 routines should get mapped within the address range 0x0F0000 to 20767 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 20768 20769 In the following example 2 bytes will be saved for each call to 20770 function `foo'. 20771 20772 void foo (void) __attribute__((function_vector(0x18))); 20773 void foo (void) 20774 { 20775 } 20776 20777 void bar (void) 20778 { 20779 foo(); 20780 } 20781 20782 If functions are defined in one file and are called in another 20783 file, then be sure to write this declaration in both files. 20784 20785 This attribute is ignored for R8C target. 20786 20787 `interrupt' 20788 Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MeP, 20789 MIPS, RX and Xstormy16 ports to indicate that the specified 20790 function is an interrupt handler. The compiler will generate 20791 function entry and exit sequences suitable for use in an interrupt 20792 handler when this attribute is present. 20793 20794 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 20795 MicroBlaze, and SH processors can be specified via the 20796 `interrupt_handler' attribute. 20797 20798 Note, on the AVR, interrupts will be enabled inside the function. 20799 20800 Note, for the ARM, you can specify the kind of interrupt to be 20801 handled by adding an optional parameter to the interrupt attribute 20802 like this: 20803 20804 void f () __attribute__ ((interrupt ("IRQ"))); 20805 20806 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT 20807 and UNDEF. 20808 20809 On ARMv7-M the interrupt type is ignored, and the attribute means 20810 the function may be called with a word aligned stack pointer. 20811 20812 On MIPS targets, you can use the following attributes to modify 20813 the behavior of an interrupt handler: 20814 `use_shadow_register_set' 20815 Assume that the handler uses a shadow register set, instead of 20816 the main general-purpose registers. 20817 20818 `keep_interrupts_masked' 20819 Keep interrupts masked for the whole function. Without this 20820 attribute, GCC tries to reenable interrupts for as much of 20821 the function as it can. 20822 20823 `use_debug_exception_return' 20824 Return using the `deret' instruction. Interrupt handlers 20825 that don't have this attribute return using `eret' instead. 20826 20827 You can use any combination of these attributes, as shown below: 20828 void __attribute__ ((interrupt)) v0 (); 20829 void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); 20830 void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); 20831 void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); 20832 void __attribute__ ((interrupt, use_shadow_register_set, 20833 keep_interrupts_masked)) v4 (); 20834 void __attribute__ ((interrupt, use_shadow_register_set, 20835 use_debug_exception_return)) v5 (); 20836 void __attribute__ ((interrupt, keep_interrupts_masked, 20837 use_debug_exception_return)) v6 (); 20838 void __attribute__ ((interrupt, use_shadow_register_set, 20839 keep_interrupts_masked, 20840 use_debug_exception_return)) v7 (); 20841 20842 `ifunc ("RESOLVER")' 20843 The `ifunc' attribute is used to mark a function as an indirect 20844 function using the STT_GNU_IFUNC symbol type extension to the ELF 20845 standard. This allows the resolution of the symbol value to be 20846 determined dynamically at load time, and an optimized version of 20847 the routine can be selected for the particular processor or other 20848 system characteristics determined then. To use this attribute, 20849 first define the implementation functions available, and a 20850 resolver function that returns a pointer to the selected 20851 implementation function. The implementation functions' 20852 declarations must match the API of the function being implemented, 20853 the resolver's declaration is be a function returning pointer to 20854 void function returning void: 20855 20856 void *my_memcpy (void *dst, const void *src, size_t len) 20857 { 20858 ... 20859 } 20860 20861 static void (*resolve_memcpy (void)) (void) 20862 { 20863 return my_memcpy; // we'll just always select this routine 20864 } 20865 20866 The exported header file declaring the function the user calls 20867 would contain: 20868 20869 extern void *memcpy (void *, const void *, size_t); 20870 20871 allowing the user to call this as a regular function, unaware of 20872 the implementation. Finally, the indirect function needs to be 20873 defined in the same translation unit as the resolver function: 20874 20875 void *memcpy (void *, const void *, size_t) 20876 __attribute__ ((ifunc ("resolve_memcpy"))); 20877 20878 Indirect functions cannot be weak, and require a recent binutils 20879 (at least version 2.20.1), and GNU C library (at least version 20880 2.11.1). 20881 20882 `interrupt_handler' 20883 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 20884 and SH to indicate that the specified function is an interrupt 20885 handler. The compiler will generate function entry and exit 20886 sequences suitable for use in an interrupt handler when this 20887 attribute is present. 20888 20889 `interrupt_thread' 20890 Use this attribute on fido, a subarchitecture of the m68k, to 20891 indicate that the specified function is an interrupt handler that 20892 is designed to run as a thread. The compiler omits generate 20893 prologue/epilogue sequences and replaces the return instruction 20894 with a `sleep' instruction. This attribute is available only on 20895 fido. 20896 20897 `isr' 20898 Use this attribute on ARM to write Interrupt Service Routines. 20899 This is an alias to the `interrupt' attribute above. 20900 20901 `kspisusp' 20902 When used together with `interrupt_handler', `exception_handler' 20903 or `nmi_handler', code will be generated to load the stack pointer 20904 from the USP register in the function prologue. 20905 20906 `l1_text' 20907 This attribute specifies a function to be placed into L1 20908 Instruction SRAM. The function will be put into a specific section 20909 named `.l1.text'. With `-mfdpic', function calls with a such 20910 function as the callee or caller will use inlined PLT. 20911 20912 `l2' 20913 On the Blackfin, this attribute specifies a function to be placed 20914 into L2 SRAM. The function will be put into a specific section 20915 named `.l1.text'. With `-mfdpic', callers of such functions will 20916 use an inlined PLT. 20917 20918 `leaf' 20919 Calls to external functions with this attribute must return to the 20920 current compilation unit only by return or by exception handling. 20921 In particular, leaf functions are not allowed to call callback 20922 function passed to it from the current compilation unit or 20923 directly call functions exported by the unit or longjmp into the 20924 unit. Leaf function might still call functions from other 20925 compilation units and thus they are not necessarily leaf in the 20926 sense that they contain no function calls at all. 20927 20928 The attribute is intended for library functions to improve 20929 dataflow analysis. The compiler takes the hint that any data not 20930 escaping the current compilation unit can not be used or modified 20931 by the leaf function. For example, the `sin' function is a leaf 20932 function, but `qsort' is not. 20933 20934 Note that leaf functions might invoke signals and signal handlers 20935 might be defined in the current compilation unit and use static 20936 variables. The only compliant way to write such a signal handler 20937 is to declare such variables `volatile'. 20938 20939 The attribute has no effect on functions defined within the 20940 current compilation unit. This is to allow easy merging of 20941 multiple compilation units into one, for example, by using the 20942 link time optimization. For this reason the attribute is not 20943 allowed on types to annotate indirect calls. 20944 20945 `long_call/short_call' 20946 This attribute specifies how a particular function is called on 20947 ARM. Both attributes override the `-mlong-calls' (*note ARM 20948 Options::) command-line switch and `#pragma long_calls' settings. 20949 The `long_call' attribute indicates that the function might be far 20950 away from the call site and require a different (more expensive) 20951 calling sequence. The `short_call' attribute always places the 20952 offset to the function from the call site into the `BL' 20953 instruction directly. 20954 20955 `longcall/shortcall' 20956 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 20957 indicates that the function might be far away from the call site 20958 and require a different (more expensive) calling sequence. The 20959 `shortcall' attribute indicates that the function is always close 20960 enough for the shorter calling sequence to be used. These 20961 attributes override both the `-mlongcall' switch and, on the 20962 RS/6000 and PowerPC, the `#pragma longcall' setting. 20963 20964 *Note RS/6000 and PowerPC Options::, for more information on 20965 whether long calls are necessary. 20966 20967 `long_call/near/far' 20968 These attributes specify how a particular function is called on 20969 MIPS. The attributes override the `-mlong-calls' (*note MIPS 20970 Options::) command-line switch. The `long_call' and `far' 20971 attributes are synonyms, and cause the compiler to always call the 20972 function by first loading its address into a register, and then 20973 using the contents of that register. The `near' attribute has the 20974 opposite effect; it specifies that non-PIC calls should be made 20975 using the more efficient `jal' instruction. 20976 20977 `malloc' 20978 The `malloc' attribute is used to tell the compiler that a function 20979 may be treated as if any non-`NULL' pointer it returns cannot 20980 alias any other pointer valid when the function returns. This 20981 will often improve optimization. Standard functions with this 20982 property include `malloc' and `calloc'. `realloc'-like functions 20983 have this property as long as the old pointer is never referred to 20984 (including comparing it to the new pointer) after the function 20985 returns a non-`NULL' value. 20986 20987 `mips16/nomips16' 20988 On MIPS targets, you can use the `mips16' and `nomips16' function 20989 attributes to locally select or turn off MIPS16 code generation. 20990 A function with the `mips16' attribute is emitted as MIPS16 code, 20991 while MIPS16 code generation is disabled for functions with the 20992 `nomips16' attribute. These attributes override the `-mips16' and 20993 `-mno-mips16' options on the command line (*note MIPS Options::). 20994 20995 When compiling files containing mixed MIPS16 and non-MIPS16 code, 20996 the preprocessor symbol `__mips16' reflects the setting on the 20997 command line, not that within individual functions. Mixed MIPS16 20998 and non-MIPS16 code may interact badly with some GCC extensions 20999 such as `__builtin_apply' (*note Constructing Calls::). 21000 21001 `model (MODEL-NAME)' 21002 On the M32R/D, use this attribute to set the addressability of an 21003 object, and of the code generated for a function. The identifier 21004 MODEL-NAME is one of `small', `medium', or `large', representing 21005 each of the code models. 21006 21007 Small model objects live in the lower 16MB of memory (so that their 21008 addresses can be loaded with the `ld24' instruction), and are 21009 callable with the `bl' instruction. 21010 21011 Medium model objects may live anywhere in the 32-bit address space 21012 (the compiler will generate `seth/add3' instructions to load their 21013 addresses), and are callable with the `bl' instruction. 21014 21015 Large model objects may live anywhere in the 32-bit address space 21016 (the compiler will generate `seth/add3' instructions to load their 21017 addresses), and may not be reachable with the `bl' instruction 21018 (the compiler will generate the much slower `seth/add3/jl' 21019 instruction sequence). 21020 21021 On IA-64, use this attribute to set the addressability of an 21022 object. At present, the only supported identifier for MODEL-NAME 21023 is `small', indicating addressability via "small" (22-bit) 21024 addresses (so that their addresses can be loaded with the `addl' 21025 instruction). Caveat: such addressing is by definition not 21026 position independent and hence this attribute must not be used for 21027 objects defined by shared libraries. 21028 21029 `ms_abi/sysv_abi' 21030 On 64-bit x86_64-*-* targets, you can use an ABI attribute to 21031 indicate which calling convention should be used for a function. 21032 The `ms_abi' attribute tells the compiler to use the Microsoft 21033 ABI, while the `sysv_abi' attribute tells the compiler to use the 21034 ABI used on GNU/Linux and other systems. The default is to use 21035 the Microsoft ABI when targeting Windows. On all other systems, 21036 the default is the AMD ABI. 21037 21038 Note, the `ms_abi' attribute for Windows targets currently requires 21039 the `-maccumulate-outgoing-args' option. 21040 21041 `callee_pop_aggregate_return (NUMBER)' 21042 On 32-bit i?86-*-* targets, you can control by those attribute for 21043 aggregate return in memory, if the caller is responsible to pop 21044 the hidden pointer together with the rest of the arguments - 21045 NUMBER equal to zero -, or if the callee is responsible to pop 21046 hidden pointer - NUMBER equal to one. 21047 21048 For i?86-netware, the caller pops the stack for the hidden 21049 arguments pointing to aggregate return value. This differs from 21050 the default i386 ABI which assumes that the callee pops the stack 21051 for hidden pointer. 21052 21053 `ms_hook_prologue' 21054 On 32 bit i[34567]86-*-* targets and 64 bit x86_64-*-* targets, 21055 you can use this function attribute to make gcc generate the 21056 "hot-patching" function prologue used in Win32 API functions in 21057 Microsoft Windows XP Service Pack 2 and newer. 21058 21059 `naked' 21060 Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to 21061 indicate that the specified function does not need 21062 prologue/epilogue sequences generated by the compiler. It is up 21063 to the programmer to provide these sequences. The only statements 21064 that can be safely included in naked functions are `asm' 21065 statements that do not have operands. All other statements, 21066 including declarations of local variables, `if' statements, and so 21067 forth, should be avoided. Naked functions should be used to 21068 implement the body of an assembly function, while allowing the 21069 compiler to construct the requisite function declaration for the 21070 assembler. 21071 21072 `near' 21073 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 21074 use the normal calling convention based on `jsr' and `rts'. This 21075 attribute can be used to cancel the effect of the `-mlong-calls' 21076 option. 21077 21078 On MeP targets this attribute causes the compiler to assume the 21079 called function is close enough to use the normal calling 21080 convention, overriding the `-mtf' command line option. 21081 21082 `nesting' 21083 Use this attribute together with `interrupt_handler', 21084 `exception_handler' or `nmi_handler' to indicate that the function 21085 entry code should enable nested interrupts or exceptions. 21086 21087 `nmi_handler' 21088 Use this attribute on the Blackfin to indicate that the specified 21089 function is an NMI handler. The compiler will generate function 21090 entry and exit sequences suitable for use in an NMI handler when 21091 this attribute is present. 21092 21093 `no_instrument_function' 21094 If `-finstrument-functions' is given, profiling function calls will 21095 be generated at entry and exit of most user-compiled functions. 21096 Functions with this attribute will not be so instrumented. 21097 21098 `no_split_stack' 21099 If `-fsplit-stack' is given, functions will have a small prologue 21100 which decides whether to split the stack. Functions with the 21101 `no_split_stack' attribute will not have that prologue, and thus 21102 may run with only a small amount of stack space available. 21103 21104 `noinline' 21105 This function attribute prevents a function from being considered 21106 for inlining. If the function does not have side-effects, there 21107 are optimizations other than inlining that causes function calls 21108 to be optimized away, although the function call is live. To keep 21109 such calls from being optimized away, put 21110 asm (""); 21111 (*note Extended Asm::) in the called function, to serve as a 21112 special side-effect. 21113 21114 `noclone' 21115 This function attribute prevents a function from being considered 21116 for cloning - a mechanism which produces specialized copies of 21117 functions and which is (currently) performed by interprocedural 21118 constant propagation. 21119 21120 `nonnull (ARG-INDEX, ...)' 21121 The `nonnull' attribute specifies that some function parameters 21122 should be non-null pointers. For instance, the declaration: 21123 21124 extern void * 21125 my_memcpy (void *dest, const void *src, size_t len) 21126 __attribute__((nonnull (1, 2))); 21127 21128 causes the compiler to check that, in calls to `my_memcpy', 21129 arguments DEST and SRC are non-null. If the compiler determines 21130 that a null pointer is passed in an argument slot marked as 21131 non-null, and the `-Wnonnull' option is enabled, a warning is 21132 issued. The compiler may also choose to make optimizations based 21133 on the knowledge that certain function arguments will not be null. 21134 21135 Since non-static C++ methods have an implicit `this' argument, the 21136 arguments of such methods should be counted from two, not one, when 21137 giving values for ARG-INDEX. 21138 21139 If no argument index list is given to the `nonnull' attribute, all 21140 pointer arguments are marked as non-null. To illustrate, the 21141 following declaration is equivalent to the previous example: 21142 21143 extern void * 21144 my_memcpy (void *dest, const void *src, size_t len) 21145 __attribute__((nonnull)); 21146 21147 `noreturn' 21148 A few standard library functions, such as `abort' and `exit', 21149 cannot return. GCC knows this automatically. Some programs define 21150 their own functions that never return. You can declare them 21151 `noreturn' to tell the compiler this fact. For example, 21152 21153 void fatal () __attribute__ ((noreturn)); 21154 21155 void 21156 fatal (/* ... */) 21157 { 21158 /* ... */ /* Print error message. */ /* ... */ 21159 exit (1); 21160 } 21161 21162 The `noreturn' keyword tells the compiler to assume that `fatal' 21163 cannot return. It can then optimize without regard to what would 21164 happen if `fatal' ever did return. This makes slightly better 21165 code. More importantly, it helps avoid spurious warnings of 21166 uninitialized variables. 21167 21168 The `noreturn' keyword does not affect the exceptional path when 21169 that applies: a `noreturn'-marked function may still return to the 21170 caller by throwing an exception or calling `longjmp'. 21171 21172 Do not assume that registers saved by the calling function are 21173 restored before calling the `noreturn' function. 21174 21175 It does not make sense for a `noreturn' function to have a return 21176 type other than `void'. 21177 21178 The attribute `noreturn' is not implemented in GCC versions 21179 earlier than 2.5. An alternative way to declare that a function 21180 does not return, which works in the current version and in some 21181 older versions, is as follows: 21182 21183 typedef void voidfn (); 21184 21185 volatile voidfn fatal; 21186 21187 This approach does not work in GNU C++. 21188 21189 `nothrow' 21190 The `nothrow' attribute is used to inform the compiler that a 21191 function cannot throw an exception. For example, most functions in 21192 the standard C library can be guaranteed not to throw an exception 21193 with the notable exceptions of `qsort' and `bsearch' that take 21194 function pointer arguments. The `nothrow' attribute is not 21195 implemented in GCC versions earlier than 3.3. 21196 21197 `optimize' 21198 The `optimize' attribute is used to specify that a function is to 21199 be compiled with different optimization options than specified on 21200 the command line. Arguments can either be numbers or strings. 21201 Numbers are assumed to be an optimization level. Strings that 21202 begin with `O' are assumed to be an optimization option, while 21203 other options are assumed to be used with a `-f' prefix. You can 21204 also use the `#pragma GCC optimize' pragma to set the optimization 21205 options that affect more than one function. *Note Function 21206 Specific Option Pragmas::, for details about the `#pragma GCC 21207 optimize' pragma. 21208 21209 This can be used for instance to have frequently executed functions 21210 compiled with more aggressive optimization options that produce 21211 faster and larger code, while other functions can be called with 21212 less aggressive options. 21213 21214 `OS_main/OS_task' 21215 On AVR, functions with the `OS_main' or `OS_task' attribute do not 21216 save/restore any call-saved register in their prologue/epilogue. 21217 21218 The `OS_main' attribute can be used when there _is guarantee_ that 21219 interrupts are disabled at the time when the function is entered. 21220 This will save resources when the stack pointer has to be changed 21221 to set up a frame for local variables. 21222 21223 The `OS_task' attribute can be used when there is _no guarantee_ 21224 that interrupts are disabled at that time when the function is 21225 entered like for, e.g. task functions in a multi-threading 21226 operating system. In that case, changing the stack pointer 21227 register will be guarded by save/clear/restore of the global 21228 interrupt enable flag. 21229 21230 The differences to the `naked' function attrubute are: 21231 * `naked' functions do not have a return instruction whereas 21232 `OS_main' and `OS_task' functions will have a `RET' or `RETI' 21233 return instruction. 21234 21235 * `naked' functions do not set up a frame for local variables 21236 or a frame pointer whereas `OS_main' and `OS_task' do this as 21237 needed. 21238 21239 `pcs' 21240 The `pcs' attribute can be used to control the calling convention 21241 used for a function on ARM. The attribute takes an argument that 21242 specifies the calling convention to use. 21243 21244 When compiling using the AAPCS ABI (or a variant of that) then 21245 valid values for the argument are `"aapcs"' and `"aapcs-vfp"'. In 21246 order to use a variant other than `"aapcs"' then the compiler must 21247 be permitted to use the appropriate co-processor registers (i.e., 21248 the VFP registers must be available in order to use `"aapcs-vfp"'). 21249 For example, 21250 21251 /* Argument passed in r0, and result returned in r0+r1. */ 21252 double f2d (float) __attribute__((pcs("aapcs"))); 21253 21254 Variadic functions always use the `"aapcs"' calling convention and 21255 the compiler will reject attempts to specify an alternative. 21256 21257 `pure' 21258 Many functions have no effects except the return value and their 21259 return value depends only on the parameters and/or global 21260 variables. Such a function can be subject to common subexpression 21261 elimination and loop optimization just as an arithmetic operator 21262 would be. These functions should be declared with the attribute 21263 `pure'. For example, 21264 21265 int square (int) __attribute__ ((pure)); 21266 21267 says that the hypothetical function `square' is safe to call fewer 21268 times than the program says. 21269 21270 Some of common examples of pure functions are `strlen' or `memcmp'. 21271 Interesting non-pure functions are functions with infinite loops 21272 or those depending on volatile memory or other system resource, 21273 that may change between two consecutive calls (such as `feof' in a 21274 multithreading environment). 21275 21276 The attribute `pure' is not implemented in GCC versions earlier 21277 than 2.96. 21278 21279 `hot' 21280 The `hot' attribute is used to inform the compiler that a function 21281 is a hot spot of the compiled program. The function is optimized 21282 more aggressively and on many target it is placed into special 21283 subsection of the text section so all hot functions appears close 21284 together improving locality. 21285 21286 When profile feedback is available, via `-fprofile-use', hot 21287 functions are automatically detected and this attribute is ignored. 21288 21289 The `hot' attribute is not implemented in GCC versions earlier 21290 than 4.3. 21291 21292 `cold' 21293 The `cold' attribute is used to inform the compiler that a 21294 function is unlikely executed. The function is optimized for size 21295 rather than speed and on many targets it is placed into special 21296 subsection of the text section so all cold functions appears close 21297 together improving code locality of non-cold parts of program. 21298 The paths leading to call of cold functions within code are marked 21299 as unlikely by the branch prediction mechanism. It is thus useful 21300 to mark functions used to handle unlikely conditions, such as 21301 `perror', as cold to improve optimization of hot functions that do 21302 call marked functions in rare occasions. 21303 21304 When profile feedback is available, via `-fprofile-use', hot 21305 functions are automatically detected and this attribute is ignored. 21306 21307 The `cold' attribute is not implemented in GCC versions earlier 21308 than 4.3. 21309 21310 `regparm (NUMBER)' 21311 On the Intel 386, the `regparm' attribute causes the compiler to 21312 pass arguments number one to NUMBER if they are of integral type 21313 in registers EAX, EDX, and ECX instead of on the stack. Functions 21314 that take a variable number of arguments will continue to be 21315 passed all of their arguments on the stack. 21316 21317 Beware that on some ELF systems this attribute is unsuitable for 21318 global functions in shared libraries with lazy binding (which is 21319 the default). Lazy binding will send the first call via resolving 21320 code in the loader, which might assume EAX, EDX and ECX can be 21321 clobbered, as per the standard calling conventions. Solaris 8 is 21322 affected by this. GNU systems with GLIBC 2.1 or higher, and 21323 FreeBSD, are believed to be safe since the loaders there save EAX, 21324 EDX and ECX. (Lazy binding can be disabled with the linker or the 21325 loader if desired, to avoid the problem.) 21326 21327 `sseregparm' 21328 On the Intel 386 with SSE support, the `sseregparm' attribute 21329 causes the compiler to pass up to 3 floating point arguments in 21330 SSE registers instead of on the stack. Functions that take a 21331 variable number of arguments will continue to pass all of their 21332 floating point arguments on the stack. 21333 21334 `force_align_arg_pointer' 21335 On the Intel x86, the `force_align_arg_pointer' attribute may be 21336 applied to individual function definitions, generating an alternate 21337 prologue and epilogue that realigns the runtime stack if necessary. 21338 This supports mixing legacy codes that run with a 4-byte aligned 21339 stack with modern codes that keep a 16-byte stack for SSE 21340 compatibility. 21341 21342 `resbank' 21343 On the SH2A target, this attribute enables the high-speed register 21344 saving and restoration using a register bank for 21345 `interrupt_handler' routines. Saving to the bank is performed 21346 automatically after the CPU accepts an interrupt that uses a 21347 register bank. 21348 21349 The nineteen 32-bit registers comprising general register R0 to 21350 R14, control register GBR, and system registers MACH, MACL, and PR 21351 and the vector table address offset are saved into a register 21352 bank. Register banks are stacked in first-in last-out (FILO) 21353 sequence. Restoration from the bank is executed by issuing a 21354 RESBANK instruction. 21355 21356 `returns_twice' 21357 The `returns_twice' attribute tells the compiler that a function 21358 may return more than one time. The compiler will ensure that all 21359 registers are dead before calling such a function and will emit a 21360 warning about the variables that may be clobbered after the second 21361 return from the function. Examples of such functions are `setjmp' 21362 and `vfork'. The `longjmp'-like counterpart of such function, if 21363 any, might need to be marked with the `noreturn' attribute. 21364 21365 `saveall' 21366 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 21367 indicate that all registers except the stack pointer should be 21368 saved in the prologue regardless of whether they are used or not. 21369 21370 `save_volatiles' 21371 Use this attribute on the MicroBlaze to indicate that the function 21372 is an interrupt handler. All volatile registers (in addition to 21373 non-volatile registers) will be saved in the function prologue. 21374 If the function is a leaf function, only volatiles used by the 21375 function are saved. A normal function return is generated instead 21376 of a return from interrupt. 21377 21378 `section ("SECTION-NAME")' 21379 Normally, the compiler places the code it generates in the `text' 21380 section. Sometimes, however, you need additional sections, or you 21381 need certain particular functions to appear in special sections. 21382 The `section' attribute specifies that a function lives in a 21383 particular section. For example, the declaration: 21384 21385 extern void foobar (void) __attribute__ ((section ("bar"))); 21386 21387 puts the function `foobar' in the `bar' section. 21388 21389 Some file formats do not support arbitrary sections so the 21390 `section' attribute is not available on all platforms. If you 21391 need to map the entire contents of a module to a particular 21392 section, consider using the facilities of the linker instead. 21393 21394 `sentinel' 21395 This function attribute ensures that a parameter in a function 21396 call is an explicit `NULL'. The attribute is only valid on 21397 variadic functions. By default, the sentinel is located at 21398 position zero, the last parameter of the function call. If an 21399 optional integer position argument P is supplied to the attribute, 21400 the sentinel must be located at position P counting backwards from 21401 the end of the argument list. 21402 21403 __attribute__ ((sentinel)) 21404 is equivalent to 21405 __attribute__ ((sentinel(0))) 21406 21407 The attribute is automatically set with a position of 0 for the 21408 built-in functions `execl' and `execlp'. The built-in function 21409 `execle' has the attribute set with a position of 1. 21410 21411 A valid `NULL' in this context is defined as zero with any pointer 21412 type. If your system defines the `NULL' macro with an integer type 21413 then you need to add an explicit cast. GCC replaces `stddef.h' 21414 with a copy that redefines NULL appropriately. 21415 21416 The warnings for missing or incorrect sentinels are enabled with 21417 `-Wformat'. 21418 21419 `short_call' 21420 See long_call/short_call. 21421 21422 `shortcall' 21423 See longcall/shortcall. 21424 21425 `signal' 21426 Use this attribute on the AVR to indicate that the specified 21427 function is a signal handler. The compiler will generate function 21428 entry and exit sequences suitable for use in a signal handler when 21429 this attribute is present. Interrupts will be disabled inside the 21430 function. 21431 21432 `sp_switch' 21433 Use this attribute on the SH to indicate an `interrupt_handler' 21434 function should switch to an alternate stack. It expects a string 21435 argument that names a global variable holding the address of the 21436 alternate stack. 21437 21438 void *alt_stack; 21439 void f () __attribute__ ((interrupt_handler, 21440 sp_switch ("alt_stack"))); 21441 21442 `stdcall' 21443 On the Intel 386, the `stdcall' attribute causes the compiler to 21444 assume that the called function will pop off the stack space used 21445 to pass arguments, unless it takes a variable number of arguments. 21446 21447 `syscall_linkage' 21448 This attribute is used to modify the IA64 calling convention by 21449 marking all input registers as live at all function exits. This 21450 makes it possible to restart a system call after an interrupt 21451 without having to save/restore the input registers. This also 21452 prevents kernel data from leaking into application code. 21453 21454 `target' 21455 The `target' attribute is used to specify that a function is to be 21456 compiled with different target options than specified on the 21457 command line. This can be used for instance to have functions 21458 compiled with a different ISA (instruction set architecture) than 21459 the default. You can also use the `#pragma GCC target' pragma to 21460 set more than one function to be compiled with specific target 21461 options. *Note Function Specific Option Pragmas::, for details 21462 about the `#pragma GCC target' pragma. 21463 21464 For instance on a 386, you could compile one function with 21465 `target("sse4.1,arch=core2")' and another with 21466 `target("sse4a,arch=amdfam10")' that would be equivalent to 21467 compiling the first function with `-msse4.1' and `-march=core2' 21468 options, and the second function with `-msse4a' and 21469 `-march=amdfam10' options. It is up to the user to make sure that 21470 a function is only invoked on a machine that supports the 21471 particular ISA it was compiled for (for example by using `cpuid' 21472 on 386 to determine what feature bits and architecture family are 21473 used). 21474 21475 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 21476 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 21477 21478 On the 386, the following options are allowed: 21479 21480 `abm' 21481 `no-abm' 21482 Enable/disable the generation of the advanced bit 21483 instructions. 21484 21485 `aes' 21486 `no-aes' 21487 Enable/disable the generation of the AES instructions. 21488 21489 `mmx' 21490 `no-mmx' 21491 Enable/disable the generation of the MMX instructions. 21492 21493 `pclmul' 21494 `no-pclmul' 21495 Enable/disable the generation of the PCLMUL instructions. 21496 21497 `popcnt' 21498 `no-popcnt' 21499 Enable/disable the generation of the POPCNT instruction. 21500 21501 `sse' 21502 `no-sse' 21503 Enable/disable the generation of the SSE instructions. 21504 21505 `sse2' 21506 `no-sse2' 21507 Enable/disable the generation of the SSE2 instructions. 21508 21509 `sse3' 21510 `no-sse3' 21511 Enable/disable the generation of the SSE3 instructions. 21512 21513 `sse4' 21514 `no-sse4' 21515 Enable/disable the generation of the SSE4 instructions (both 21516 SSE4.1 and SSE4.2). 21517 21518 `sse4.1' 21519 `no-sse4.1' 21520 Enable/disable the generation of the sse4.1 instructions. 21521 21522 `sse4.2' 21523 `no-sse4.2' 21524 Enable/disable the generation of the sse4.2 instructions. 21525 21526 `sse4a' 21527 `no-sse4a' 21528 Enable/disable the generation of the SSE4A instructions. 21529 21530 `fma4' 21531 `no-fma4' 21532 Enable/disable the generation of the FMA4 instructions. 21533 21534 `xop' 21535 `no-xop' 21536 Enable/disable the generation of the XOP instructions. 21537 21538 `lwp' 21539 `no-lwp' 21540 Enable/disable the generation of the LWP instructions. 21541 21542 `ssse3' 21543 `no-ssse3' 21544 Enable/disable the generation of the SSSE3 instructions. 21545 21546 `cld' 21547 `no-cld' 21548 Enable/disable the generation of the CLD before string moves. 21549 21550 `fancy-math-387' 21551 `no-fancy-math-387' 21552 Enable/disable the generation of the `sin', `cos', and `sqrt' 21553 instructions on the 387 floating point unit. 21554 21555 `fused-madd' 21556 `no-fused-madd' 21557 Enable/disable the generation of the fused multiply/add 21558 instructions. 21559 21560 `ieee-fp' 21561 `no-ieee-fp' 21562 Enable/disable the generation of floating point that depends 21563 on IEEE arithmetic. 21564 21565 `inline-all-stringops' 21566 `no-inline-all-stringops' 21567 Enable/disable inlining of string operations. 21568 21569 `inline-stringops-dynamically' 21570 `no-inline-stringops-dynamically' 21571 Enable/disable the generation of the inline code to do small 21572 string operations and calling the library routines for large 21573 operations. 21574 21575 `align-stringops' 21576 `no-align-stringops' 21577 Do/do not align destination of inlined string operations. 21578 21579 `recip' 21580 `no-recip' 21581 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 21582 RSQRTPS instructions followed an additional Newton-Raphson 21583 step instead of doing a floating point division. 21584 21585 `arch=ARCH' 21586 Specify the architecture to generate code for in compiling 21587 the function. 21588 21589 `tune=TUNE' 21590 Specify the architecture to tune for in compiling the 21591 function. 21592 21593 `fpmath=FPMATH' 21594 Specify which floating point unit to use. The 21595 `target("fpmath=sse,387")' option must be specified as 21596 `target("fpmath=sse+387")' because the comma would separate 21597 different options. 21598 21599 On the PowerPC, the following options are allowed: 21600 21601 `altivec' 21602 `no-altivec' 21603 Generate code that uses (does not use) AltiVec instructions. 21604 In 32-bit code, you cannot enable Altivec instructions unless 21605 `-mabi=altivec' was used on the command line. 21606 21607 `cmpb' 21608 `no-cmpb' 21609 Generate code that uses (does not use) the compare bytes 21610 instruction implemented on the POWER6 processor and other 21611 processors that support the PowerPC V2.05 architecture. 21612 21613 `dlmzb' 21614 `no-dlmzb' 21615 Generate code that uses (does not use) the string-search 21616 `dlmzb' instruction on the IBM 405, 440, 464 and 476 21617 processors. This instruction is generated by default when 21618 targetting those processors. 21619 21620 `fprnd' 21621 `no-fprnd' 21622 Generate code that uses (does not use) the FP round to integer 21623 instructions implemented on the POWER5+ processor and other 21624 processors that support the PowerPC V2.03 architecture. 21625 21626 `hard-dfp' 21627 `no-hard-dfp' 21628 Generate code that uses (does not use) the decimal floating 21629 point instructions implemented on some POWER processors. 21630 21631 `isel' 21632 `no-isel' 21633 Generate code that uses (does not use) ISEL instruction. 21634 21635 `mfcrf' 21636 `no-mfcrf' 21637 Generate code that uses (does not use) the move from condition 21638 register field instruction implemented on the POWER4 21639 processor and other processors that support the PowerPC V2.01 21640 architecture. 21641 21642 `mfpgpr' 21643 `no-mfpgpr' 21644 Generate code that uses (does not use) the FP move to/from 21645 general purpose register instructions implemented on the 21646 POWER6X processor and other processors that support the 21647 extended PowerPC V2.05 architecture. 21648 21649 `mulhw' 21650 `no-mulhw' 21651 Generate code that uses (does not use) the half-word multiply 21652 and multiply-accumulate instructions on the IBM 405, 440, 464 21653 and 476 processors. These instructions are generated by 21654 default when targetting those processors. 21655 21656 `multiple' 21657 `no-multiple' 21658 Generate code that uses (does not use) the load multiple word 21659 instructions and the store multiple word instructions. 21660 21661 `update' 21662 `no-update' 21663 Generate code that uses (does not use) the load or store 21664 instructions that update the base register to the address of 21665 the calculated memory location. 21666 21667 `popcntb' 21668 `no-popcntb' 21669 Generate code that uses (does not use) the popcount and double 21670 precision FP reciprocal estimate instruction implemented on 21671 the POWER5 processor and other processors that support the 21672 PowerPC V2.02 architecture. 21673 21674 `popcntd' 21675 `no-popcntd' 21676 Generate code that uses (does not use) the popcount 21677 instruction implemented on the POWER7 processor and other 21678 processors that support the PowerPC V2.06 architecture. 21679 21680 `powerpc-gfxopt' 21681 `no-powerpc-gfxopt' 21682 Generate code that uses (does not use) the optional PowerPC 21683 architecture instructions in the Graphics group, including 21684 floating-point select. 21685 21686 `powerpc-gpopt' 21687 `no-powerpc-gpopt' 21688 Generate code that uses (does not use) the optional PowerPC 21689 architecture instructions in the General Purpose group, 21690 including floating-point square root. 21691 21692 `recip-precision' 21693 `no-recip-precision' 21694 Assume (do not assume) that the reciprocal estimate 21695 instructions provide higher precision estimates than is 21696 mandated by the powerpc ABI. 21697 21698 `string' 21699 `no-string' 21700 Generate code that uses (does not use) the load string 21701 instructions and the store string word instructions to save 21702 multiple registers and do small block moves. 21703 21704 `vsx' 21705 `no-vsx' 21706 Generate code that uses (does not use) vector/scalar (VSX) 21707 instructions, and also enable the use of built-in functions 21708 that allow more direct access to the VSX instruction set. In 21709 32-bit code, you cannot enable VSX or Altivec instructions 21710 unless `-mabi=altivec' was used on the command line. 21711 21712 `friz' 21713 `no-friz' 21714 Generate (do not generate) the `friz' instruction when the 21715 `-funsafe-math-optimizations' option is used to optimize 21716 rounding a floating point value to 64-bit integer and back to 21717 floating point. The `friz' instruction does not return the 21718 same value if the floating point number is too large to fit 21719 in an integer. 21720 21721 `avoid-indexed-addresses' 21722 `no-avoid-indexed-addresses' 21723 Generate code that tries to avoid (not avoid) the use of 21724 indexed load or store instructions. 21725 21726 `paired' 21727 `no-paired' 21728 Generate code that uses (does not use) the generation of 21729 PAIRED simd instructions. 21730 21731 `longcall' 21732 `no-longcall' 21733 Generate code that assumes (does not assume) that all calls 21734 are far away so that a longer more expensive calling sequence 21735 is required. 21736 21737 `cpu=CPU' 21738 Specify the architecture to generate code for when compiling 21739 the function. If you select the `"target("cpu=power7)"' 21740 attribute when generating 32-bit code, VSX and Altivec 21741 instructions are not generated unless you use the 21742 `-mabi=altivec' option on the command line. 21743 21744 `tune=TUNE' 21745 Specify the architecture to tune for when compiling the 21746 function. If you do not specify the `target("tune=TUNE")' 21747 attribute and you do specify the `target("cpu=CPU")' 21748 attribute, compilation will tune for the CPU architecture, 21749 and not the default tuning specified on the command line. 21750 21751 On the 386/x86_64 and PowerPC backends, you can use either multiple 21752 strings to specify multiple options, or you can separate the option 21753 with a comma (`,'). 21754 21755 On the 386/x86_64 and PowerPC backends, the inliner will not 21756 inline a function that has different target options than the 21757 caller, unless the callee has a subset of the target options of 21758 the caller. For example a function declared with `target("sse3")' 21759 can inline a function with `target("sse2")', since `-msse3' 21760 implies `-msse2'. 21761 21762 The `target' attribute is not implemented in GCC versions earlier 21763 than 4.4 for the i386/x86_64 and 4.6 for the PowerPC backends. It 21764 is not currently implemented for other backends. 21765 21766 `tiny_data' 21767 Use this attribute on the H8/300H and H8S to indicate that the 21768 specified variable should be placed into the tiny data section. 21769 The compiler will generate more efficient code for loads and stores 21770 on data in the tiny data section. Note the tiny data area is 21771 limited to slightly under 32kbytes of data. 21772 21773 `trap_exit' 21774 Use this attribute on the SH for an `interrupt_handler' to return 21775 using `trapa' instead of `rte'. This attribute expects an integer 21776 argument specifying the trap number to be used. 21777 21778 `unused' 21779 This attribute, attached to a function, means that the function is 21780 meant to be possibly unused. GCC will not produce a warning for 21781 this function. 21782 21783 `used' 21784 This attribute, attached to a function, means that code must be 21785 emitted for the function even if it appears that the function is 21786 not referenced. This is useful, for example, when the function is 21787 referenced only in inline assembly. 21788 21789 `version_id' 21790 This IA64 HP-UX attribute, attached to a global variable or 21791 function, renames a symbol to contain a version string, thus 21792 allowing for function level versioning. HP-UX system header files 21793 may use version level functioning for some system calls. 21794 21795 extern int foo () __attribute__((version_id ("20040821"))); 21796 21797 Calls to FOO will be mapped to calls to FOO{20040821}. 21798 21799 `visibility ("VISIBILITY_TYPE")' 21800 This attribute affects the linkage of the declaration to which it 21801 is attached. There are four supported VISIBILITY_TYPE values: 21802 default, hidden, protected or internal visibility. 21803 21804 void __attribute__ ((visibility ("protected"))) 21805 f () { /* Do something. */; } 21806 int i __attribute__ ((visibility ("hidden"))); 21807 21808 The possible values of VISIBILITY_TYPE correspond to the 21809 visibility settings in the ELF gABI. 21810 21811 "default" 21812 Default visibility is the normal case for the object file 21813 format. This value is available for the visibility attribute 21814 to override other options that may change the assumed 21815 visibility of entities. 21816 21817 On ELF, default visibility means that the declaration is 21818 visible to other modules and, in shared libraries, means that 21819 the declared entity may be overridden. 21820 21821 On Darwin, default visibility means that the declaration is 21822 visible to other modules. 21823 21824 Default visibility corresponds to "external linkage" in the 21825 language. 21826 21827 "hidden" 21828 Hidden visibility indicates that the entity declared will 21829 have a new form of linkage, which we'll call "hidden 21830 linkage". Two declarations of an object with hidden linkage 21831 refer to the same object if they are in the same shared 21832 object. 21833 21834 "internal" 21835 Internal visibility is like hidden visibility, but with 21836 additional processor specific semantics. Unless otherwise 21837 specified by the psABI, GCC defines internal visibility to 21838 mean that a function is _never_ called from another module. 21839 Compare this with hidden functions which, while they cannot 21840 be referenced directly by other modules, can be referenced 21841 indirectly via function pointers. By indicating that a 21842 function cannot be called from outside the module, GCC may 21843 for instance omit the load of a PIC register since it is known 21844 that the calling function loaded the correct value. 21845 21846 "protected" 21847 Protected visibility is like default visibility except that it 21848 indicates that references within the defining module will 21849 bind to the definition in that module. That is, the declared 21850 entity cannot be overridden by another module. 21851 21852 21853 All visibilities are supported on many, but not all, ELF targets 21854 (supported when the assembler supports the `.visibility' 21855 pseudo-op). Default visibility is supported everywhere. Hidden 21856 visibility is supported on Darwin targets. 21857 21858 The visibility attribute should be applied only to declarations 21859 which would otherwise have external linkage. The attribute should 21860 be applied consistently, so that the same entity should not be 21861 declared with different settings of the attribute. 21862 21863 In C++, the visibility attribute applies to types as well as 21864 functions and objects, because in C++ types have linkage. A class 21865 must not have greater visibility than its non-static data member 21866 types and bases, and class members default to the visibility of 21867 their class. Also, a declaration without explicit visibility is 21868 limited to the visibility of its type. 21869 21870 In C++, you can mark member functions and static member variables 21871 of a class with the visibility attribute. This is useful if you 21872 know a particular method or static member variable should only be 21873 used from one shared object; then you can mark it hidden while the 21874 rest of the class has default visibility. Care must be taken to 21875 avoid breaking the One Definition Rule; for example, it is usually 21876 not useful to mark an inline method as hidden without marking the 21877 whole class as hidden. 21878 21879 A C++ namespace declaration can also have the visibility attribute. 21880 This attribute applies only to the particular namespace body, not 21881 to other definitions of the same namespace; it is equivalent to 21882 using `#pragma GCC visibility' before and after the namespace 21883 definition (*note Visibility Pragmas::). 21884 21885 In C++, if a template argument has limited visibility, this 21886 restriction is implicitly propagated to the template instantiation. 21887 Otherwise, template instantiations and specializations default to 21888 the visibility of their template. 21889 21890 If both the template and enclosing class have explicit visibility, 21891 the visibility from the template is used. 21892 21893 `vliw' 21894 On MeP, the `vliw' attribute tells the compiler to emit 21895 instructions in VLIW mode instead of core mode. Note that this 21896 attribute is not allowed unless a VLIW coprocessor has been 21897 configured and enabled through command line options. 21898 21899 `warn_unused_result' 21900 The `warn_unused_result' attribute causes a warning to be emitted 21901 if a caller of the function with this attribute does not use its 21902 return value. This is useful for functions where not checking the 21903 result is either a security problem or always a bug, such as 21904 `realloc'. 21905 21906 int fn () __attribute__ ((warn_unused_result)); 21907 int foo () 21908 { 21909 if (fn () < 0) return -1; 21910 fn (); 21911 return 0; 21912 } 21913 21914 results in warning on line 5. 21915 21916 `weak' 21917 The `weak' attribute causes the declaration to be emitted as a weak 21918 symbol rather than a global. This is primarily useful in defining 21919 library functions which can be overridden in user code, though it 21920 can also be used with non-function declarations. Weak symbols are 21921 supported for ELF targets, and also for a.out targets when using 21922 the GNU assembler and linker. 21923 21924 `weakref' 21925 `weakref ("TARGET")' 21926 The `weakref' attribute marks a declaration as a weak reference. 21927 Without arguments, it should be accompanied by an `alias' attribute 21928 naming the target symbol. Optionally, the TARGET may be given as 21929 an argument to `weakref' itself. In either case, `weakref' 21930 implicitly marks the declaration as `weak'. Without a TARGET, 21931 given as an argument to `weakref' or to `alias', `weakref' is 21932 equivalent to `weak'. 21933 21934 static int x() __attribute__ ((weakref ("y"))); 21935 /* is equivalent to... */ 21936 static int x() __attribute__ ((weak, weakref, alias ("y"))); 21937 /* and to... */ 21938 static int x() __attribute__ ((weakref)); 21939 static int x() __attribute__ ((alias ("y"))); 21940 21941 A weak reference is an alias that does not by itself require a 21942 definition to be given for the target symbol. If the target 21943 symbol is only referenced through weak references, then it becomes 21944 a `weak' undefined symbol. If it is directly referenced, however, 21945 then such strong references prevail, and a definition will be 21946 required for the symbol, not necessarily in the same translation 21947 unit. 21948 21949 The effect is equivalent to moving all references to the alias to a 21950 separate translation unit, renaming the alias to the aliased 21951 symbol, declaring it as weak, compiling the two separate 21952 translation units and performing a reloadable link on them. 21953 21954 At present, a declaration to which `weakref' is attached can only 21955 be `static'. 21956 21957 21958 You can specify multiple attributes in a declaration by separating them 21959 by commas within the double parentheses or by immediately following an 21960 attribute declaration with another attribute declaration. 21961 21962 Some people object to the `__attribute__' feature, suggesting that ISO 21963 C's `#pragma' should be used instead. At the time `__attribute__' was 21964 designed, there were two reasons for not doing this. 21965 21966 1. It is impossible to generate `#pragma' commands from a macro. 21967 21968 2. There is no telling what the same `#pragma' might mean in another 21969 compiler. 21970 21971 These two reasons applied to almost any application that might have 21972 been proposed for `#pragma'. It was basically a mistake to use 21973 `#pragma' for _anything_. 21974 21975 The ISO C99 standard includes `_Pragma', which now allows pragmas to 21976 be generated from macros. In addition, a `#pragma GCC' namespace is 21977 now in use for GCC-specific pragmas. However, it has been found 21978 convenient to use `__attribute__' to achieve a natural attachment of 21979 attributes to their corresponding declarations, whereas `#pragma GCC' 21980 is of use for constructs that do not naturally form part of the 21981 grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other 21982 Directives. 21983 21984 21985 File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 21986 21987 6.31 Attribute Syntax 21988 ===================== 21989 21990 This section describes the syntax with which `__attribute__' may be 21991 used, and the constructs to which attribute specifiers bind, for the C 21992 language. Some details may vary for C++ and Objective-C. Because of 21993 infelicities in the grammar for attributes, some forms described here 21994 may not be successfully parsed in all cases. 21995 21996 There are some problems with the semantics of attributes in C++. For 21997 example, there are no manglings for attributes, although they may affect 21998 code generation, so problems may arise when attributed types are used in 21999 conjunction with templates or overloading. Similarly, `typeid' does 22000 not distinguish between types with different attributes. Support for 22001 attributes in C++ may be restricted in future to attributes on 22002 declarations only, but not on nested declarators. 22003 22004 *Note Function Attributes::, for details of the semantics of attributes 22005 applying to functions. *Note Variable Attributes::, for details of the 22006 semantics of attributes applying to variables. *Note Type Attributes::, 22007 for details of the semantics of attributes applying to structure, union 22008 and enumerated types. 22009 22010 An "attribute specifier" is of the form `__attribute__ 22011 ((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 22012 comma-separated sequence of "attributes", where each attribute is one 22013 of the following: 22014 22015 * Empty. Empty attributes are ignored. 22016 22017 * A word (which may be an identifier such as `unused', or a reserved 22018 word such as `const'). 22019 22020 * A word, followed by, in parentheses, parameters for the attribute. 22021 These parameters take one of the following forms: 22022 22023 * An identifier. For example, `mode' attributes use this form. 22024 22025 * An identifier followed by a comma and a non-empty 22026 comma-separated list of expressions. For example, `format' 22027 attributes use this form. 22028 22029 * A possibly empty comma-separated list of expressions. For 22030 example, `format_arg' attributes use this form with the list 22031 being a single integer constant expression, and `alias' 22032 attributes use this form with the list being a single string 22033 constant. 22034 22035 An "attribute specifier list" is a sequence of one or more attribute 22036 specifiers, not separated by any other tokens. 22037 22038 In GNU C, an attribute specifier list may appear after the colon 22039 following a label, other than a `case' or `default' label. The only 22040 attribute it makes sense to use after a label is `unused'. This 22041 feature is intended for code generated by programs which contains labels 22042 that may be unused but which is compiled with `-Wall'. It would not 22043 normally be appropriate to use in it human-written code, though it 22044 could be useful in cases where the code that jumps to the label is 22045 contained within an `#ifdef' conditional. GNU C++ only permits 22046 attributes on labels if the attribute specifier is immediately followed 22047 by a semicolon (i.e., the label applies to an empty statement). If the 22048 semicolon is missing, C++ label attributes are ambiguous, as it is 22049 permissible for a declaration, which could begin with an attribute 22050 list, to be labelled in C++. Declarations cannot be labelled in C90 or 22051 C99, so the ambiguity does not arise there. 22052 22053 An attribute specifier list may appear as part of a `struct', `union' 22054 or `enum' specifier. It may go either immediately after the `struct', 22055 `union' or `enum' keyword, or after the closing brace. The former 22056 syntax is preferred. Where attribute specifiers follow the closing 22057 brace, they are considered to relate to the structure, union or 22058 enumerated type defined, not to any enclosing declaration the type 22059 specifier appears in, and the type defined is not complete until after 22060 the attribute specifiers. 22061 22062 Otherwise, an attribute specifier appears as part of a declaration, 22063 counting declarations of unnamed parameters and type names, and relates 22064 to that declaration (which may be nested in another declaration, for 22065 example in the case of a parameter declaration), or to a particular 22066 declarator within a declaration. Where an attribute specifier is 22067 applied to a parameter declared as a function or an array, it should 22068 apply to the function or array rather than the pointer to which the 22069 parameter is implicitly converted, but this is not yet correctly 22070 implemented. 22071 22072 Any list of specifiers and qualifiers at the start of a declaration may 22073 contain attribute specifiers, whether or not such a list may in that 22074 context contain storage class specifiers. (Some attributes, however, 22075 are essentially in the nature of storage class specifiers, and only make 22076 sense where storage class specifiers may be used; for example, 22077 `section'.) There is one necessary limitation to this syntax: the 22078 first old-style parameter declaration in a function definition cannot 22079 begin with an attribute specifier, because such an attribute applies to 22080 the function instead by syntax described below (which, however, is not 22081 yet implemented in this case). In some other cases, attribute 22082 specifiers are permitted by this grammar but not yet supported by the 22083 compiler. All attribute specifiers in this place relate to the 22084 declaration as a whole. In the obsolescent usage where a type of `int' 22085 is implied by the absence of type specifiers, such a list of specifiers 22086 and qualifiers may be an attribute specifier list with no other 22087 specifiers or qualifiers. 22088 22089 At present, the first parameter in a function prototype must have some 22090 type specifier which is not an attribute specifier; this resolves an 22091 ambiguity in the interpretation of `void f(int (__attribute__((foo)) 22092 x))', but is subject to change. At present, if the parentheses of a 22093 function declarator contain only attributes then those attributes are 22094 ignored, rather than yielding an error or warning or implying a single 22095 parameter of type int, but this is subject to change. 22096 22097 An attribute specifier list may appear immediately before a declarator 22098 (other than the first) in a comma-separated list of declarators in a 22099 declaration of more than one identifier using a single list of 22100 specifiers and qualifiers. Such attribute specifiers apply only to the 22101 identifier before whose declarator they appear. For example, in 22102 22103 __attribute__((noreturn)) void d0 (void), 22104 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 22105 d2 (void) 22106 22107 the `noreturn' attribute applies to all the functions declared; the 22108 `format' attribute only applies to `d1'. 22109 22110 An attribute specifier list may appear immediately before the comma, 22111 `=' or semicolon terminating the declaration of an identifier other 22112 than a function definition. Such attribute specifiers apply to the 22113 declared object or function. Where an assembler name for an object or 22114 function is specified (*note Asm Labels::), the attribute must follow 22115 the `asm' specification. 22116 22117 An attribute specifier list may, in future, be permitted to appear 22118 after the declarator in a function definition (before any old-style 22119 parameter declarations or the function body). 22120 22121 Attribute specifiers may be mixed with type qualifiers appearing inside 22122 the `[]' of a parameter array declarator, in the C99 construct by which 22123 such qualifiers are applied to the pointer to which the array is 22124 implicitly converted. Such attribute specifiers apply to the pointer, 22125 not to the array, but at present this is not implemented and they are 22126 ignored. 22127 22128 An attribute specifier list may appear at the start of a nested 22129 declarator. At present, there are some limitations in this usage: the 22130 attributes correctly apply to the declarator, but for most individual 22131 attributes the semantics this implies are not implemented. When 22132 attribute specifiers follow the `*' of a pointer declarator, they may 22133 be mixed with any type qualifiers present. The following describes the 22134 formal semantics of this syntax. It will make the most sense if you 22135 are familiar with the formal specification of declarators in the ISO C 22136 standard. 22137 22138 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 22139 where `T' contains declaration specifiers that specify a type TYPE 22140 (such as `int') and `D1' is a declarator that contains an identifier 22141 IDENT. The type specified for IDENT for derived declarators whose type 22142 does not include an attribute specifier is as in the ISO C standard. 22143 22144 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 22145 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 22146 TYPE" for IDENT, then `T D1' specifies the type 22147 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 22148 22149 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 22150 D', and the declaration `T D' specifies the type 22151 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 22152 the type "DERIVED-DECLARATOR-TYPE-LIST 22153 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT. 22154 22155 For example, 22156 22157 void (__attribute__((noreturn)) ****f) (void); 22158 22159 specifies the type "pointer to pointer to pointer to pointer to 22160 non-returning function returning `void'". As another example, 22161 22162 char *__attribute__((aligned(8))) *f; 22163 22164 specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 22165 again that this does not work with most attributes; for example, the 22166 usage of `aligned' and `noreturn' attributes given above is not yet 22167 supported. 22168 22169 For compatibility with existing code written for compiler versions that 22170 did not implement attributes on nested declarators, some laxity is 22171 allowed in the placing of attributes. If an attribute that only applies 22172 to types is applied to a declaration, it will be treated as applying to 22173 the type of that declaration. If an attribute that only applies to 22174 declarations is applied to the type of a declaration, it will be treated 22175 as applying to that declaration; and, for compatibility with code 22176 placing the attributes immediately before the identifier declared, such 22177 an attribute applied to a function return type will be treated as 22178 applying to the function type, and such an attribute applied to an array 22179 element type will be treated as applying to the array type. If an 22180 attribute that only applies to function types is applied to a 22181 pointer-to-function type, it will be treated as applying to the pointer 22182 target type; if such an attribute is applied to a function return type 22183 that is not a pointer-to-function type, it will be treated as applying 22184 to the function type. 22185 22186 22187 File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 22188 22189 6.32 Prototypes and Old-Style Function Definitions 22190 ================================================== 22191 22192 GNU C extends ISO C to allow a function prototype to override a later 22193 old-style non-prototype definition. Consider the following example: 22194 22195 /* Use prototypes unless the compiler is old-fashioned. */ 22196 #ifdef __STDC__ 22197 #define P(x) x 22198 #else 22199 #define P(x) () 22200 #endif 22201 22202 /* Prototype function declaration. */ 22203 int isroot P((uid_t)); 22204 22205 /* Old-style function definition. */ 22206 int 22207 isroot (x) /* ??? lossage here ??? */ 22208 uid_t x; 22209 { 22210 return x == 0; 22211 } 22212 22213 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 22214 this example, because subword arguments in old-style non-prototype 22215 definitions are promoted. Therefore in this example the function 22216 definition's argument is really an `int', which does not match the 22217 prototype argument type of `short'. 22218 22219 This restriction of ISO C makes it hard to write code that is portable 22220 to traditional C compilers, because the programmer does not know 22221 whether the `uid_t' type is `short', `int', or `long'. Therefore, in 22222 cases like these GNU C allows a prototype to override a later old-style 22223 definition. More precisely, in GNU C, a function prototype argument 22224 type overrides the argument type specified by a later old-style 22225 definition if the former type is the same as the latter type before 22226 promotion. Thus in GNU C the above example is equivalent to the 22227 following: 22228 22229 int isroot (uid_t); 22230 22231 int 22232 isroot (uid_t x) 22233 { 22234 return x == 0; 22235 } 22236 22237 GNU C++ does not support old-style function definitions, so this 22238 extension is irrelevant. 22239 22240 22241 File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 22242 22243 6.33 C++ Style Comments 22244 ======================= 22245 22246 In GNU C, you may use C++ style comments, which start with `//' and 22247 continue until the end of the line. Many other C implementations allow 22248 such comments, and they are included in the 1999 C standard. However, 22249 C++ style comments are not recognized if you specify an `-std' option 22250 specifying a version of ISO C before C99, or `-ansi' (equivalent to 22251 `-std=c90'). 22252 22253 22254 File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 22255 22256 6.34 Dollar Signs in Identifier Names 22257 ===================================== 22258 22259 In GNU C, you may normally use dollar signs in identifier names. This 22260 is because many traditional C implementations allow such identifiers. 22261 However, dollar signs in identifiers are not supported on a few target 22262 machines, typically because the target assembler does not allow them. 22263 22264 22265 File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 22266 22267 6.35 The Character <ESC> in Constants 22268 ===================================== 22269 22270 You can use the sequence `\e' in a string or character constant to 22271 stand for the ASCII character <ESC>. 22272 22273 22274 File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 22275 22276 6.36 Specifying Attributes of Variables 22277 ======================================= 22278 22279 The keyword `__attribute__' allows you to specify special attributes of 22280 variables or structure fields. This keyword is followed by an 22281 attribute specification inside double parentheses. Some attributes are 22282 currently defined generically for variables. Other attributes are 22283 defined for variables on particular target systems. Other attributes 22284 are available for functions (*note Function Attributes::) and for types 22285 (*note Type Attributes::). Other front ends might define more 22286 attributes (*note Extensions to the C++ Language: C++ Extensions.). 22287 22288 You may also specify attributes with `__' preceding and following each 22289 keyword. This allows you to use them in header files without being 22290 concerned about a possible macro of the same name. For example, you 22291 may use `__aligned__' instead of `aligned'. 22292 22293 *Note Attribute Syntax::, for details of the exact syntax for using 22294 attributes. 22295 22296 `aligned (ALIGNMENT)' 22297 This attribute specifies a minimum alignment for the variable or 22298 structure field, measured in bytes. For example, the declaration: 22299 22300 int x __attribute__ ((aligned (16))) = 0; 22301 22302 causes the compiler to allocate the global variable `x' on a 22303 16-byte boundary. On a 68040, this could be used in conjunction 22304 with an `asm' expression to access the `move16' instruction which 22305 requires 16-byte aligned operands. 22306 22307 You can also specify the alignment of structure fields. For 22308 example, to create a double-word aligned `int' pair, you could 22309 write: 22310 22311 struct foo { int x[2] __attribute__ ((aligned (8))); }; 22312 22313 This is an alternative to creating a union with a `double' member 22314 that forces the union to be double-word aligned. 22315 22316 As in the preceding examples, you can explicitly specify the 22317 alignment (in bytes) that you wish the compiler to use for a given 22318 variable or structure field. Alternatively, you can leave out the 22319 alignment factor and just ask the compiler to align a variable or 22320 field to the default alignment for the target architecture you are 22321 compiling for. The default alignment is sufficient for all scalar 22322 types, but may not be enough for all vector types on a target 22323 which supports vector operations. The default alignment is fixed 22324 for a particular target ABI. 22325 22326 Gcc also provides a target specific macro `__BIGGEST_ALIGNMENT__', 22327 which is the largest alignment ever used for any data type on the 22328 target machine you are compiling for. For example, you could 22329 write: 22330 22331 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 22332 22333 The compiler automatically sets the alignment for the declared 22334 variable or field to `__BIGGEST_ALIGNMENT__'. Doing this can 22335 often make copy operations more efficient, because the compiler can 22336 use whatever instructions copy the biggest chunks of memory when 22337 performing copies to or from the variables or fields that you have 22338 aligned this way. Note that the value of `__BIGGEST_ALIGNMENT__' 22339 may change depending on command line options. 22340 22341 When used on a struct, or struct member, the `aligned' attribute 22342 can only increase the alignment; in order to decrease it, the 22343 `packed' attribute must be specified as well. When used as part 22344 of a typedef, the `aligned' attribute can both increase and 22345 decrease alignment, and specifying the `packed' attribute will 22346 generate a warning. 22347 22348 Note that the effectiveness of `aligned' attributes may be limited 22349 by inherent limitations in your linker. On many systems, the 22350 linker is only able to arrange for variables to be aligned up to a 22351 certain maximum alignment. (For some linkers, the maximum 22352 supported alignment may be very very small.) If your linker is 22353 only able to align variables up to a maximum of 8 byte alignment, 22354 then specifying `aligned(16)' in an `__attribute__' will still 22355 only provide you with 8 byte alignment. See your linker 22356 documentation for further information. 22357 22358 The `aligned' attribute can also be used for functions (*note 22359 Function Attributes::.) 22360 22361 `cleanup (CLEANUP_FUNCTION)' 22362 The `cleanup' attribute runs a function when the variable goes out 22363 of scope. This attribute can only be applied to auto function 22364 scope variables; it may not be applied to parameters or variables 22365 with static storage duration. The function must take one 22366 parameter, a pointer to a type compatible with the variable. The 22367 return value of the function (if any) is ignored. 22368 22369 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run 22370 during the stack unwinding that happens during the processing of 22371 the exception. Note that the `cleanup' attribute does not allow 22372 the exception to be caught, only to perform an action. It is 22373 undefined what happens if CLEANUP_FUNCTION does not return 22374 normally. 22375 22376 `common' 22377 `nocommon' 22378 The `common' attribute requests GCC to place a variable in 22379 "common" storage. The `nocommon' attribute requests the 22380 opposite--to allocate space for it directly. 22381 22382 These attributes override the default chosen by the `-fno-common' 22383 and `-fcommon' flags respectively. 22384 22385 `deprecated' 22386 `deprecated (MSG)' 22387 The `deprecated' attribute results in a warning if the variable is 22388 used anywhere in the source file. This is useful when identifying 22389 variables that are expected to be removed in a future version of a 22390 program. The warning also includes the location of the declaration 22391 of the deprecated variable, to enable users to easily find further 22392 information about why the variable is deprecated, or what they 22393 should do instead. Note that the warning only occurs for uses: 22394 22395 extern int old_var __attribute__ ((deprecated)); 22396 extern int old_var; 22397 int new_fn () { return old_var; } 22398 22399 results in a warning on line 3 but not line 2. The optional msg 22400 argument, which must be a string, will be printed in the warning if 22401 present. 22402 22403 The `deprecated' attribute can also be used for functions and 22404 types (*note Function Attributes::, *note Type Attributes::.) 22405 22406 `mode (MODE)' 22407 This attribute specifies the data type for the 22408 declaration--whichever type corresponds to the mode MODE. This in 22409 effect lets you request an integer or floating point type 22410 according to its width. 22411 22412 You may also specify a mode of `byte' or `__byte__' to indicate 22413 the mode corresponding to a one-byte integer, `word' or `__word__' 22414 for the mode of a one-word integer, and `pointer' or `__pointer__' 22415 for the mode used to represent pointers. 22416 22417 `packed' 22418 The `packed' attribute specifies that a variable or structure field 22419 should have the smallest possible alignment--one byte for a 22420 variable, and one bit for a field, unless you specify a larger 22421 value with the `aligned' attribute. 22422 22423 Here is a structure in which the field `x' is packed, so that it 22424 immediately follows `a': 22425 22426 struct foo 22427 { 22428 char a; 22429 int x[2] __attribute__ ((packed)); 22430 }; 22431 22432 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' 22433 attribute on bit-fields of type `char'. This has been fixed in 22434 GCC 4.4 but the change can lead to differences in the structure 22435 layout. See the documentation of `-Wpacked-bitfield-compat' for 22436 more information. 22437 22438 `section ("SECTION-NAME")' 22439 Normally, the compiler places the objects it generates in sections 22440 like `data' and `bss'. Sometimes, however, you need additional 22441 sections, or you need certain particular variables to appear in 22442 special sections, for example to map to special hardware. The 22443 `section' attribute specifies that a variable (or function) lives 22444 in a particular section. For example, this small program uses 22445 several specific section names: 22446 22447 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 22448 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 22449 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 22450 int init_data __attribute__ ((section ("INITDATA"))); 22451 22452 main() 22453 { 22454 /* Initialize stack pointer */ 22455 init_sp (stack + sizeof (stack)); 22456 22457 /* Initialize initialized data */ 22458 memcpy (&init_data, &data, &edata - &data); 22459 22460 /* Turn on the serial ports */ 22461 init_duart (&a); 22462 init_duart (&b); 22463 } 22464 22465 Use the `section' attribute with _global_ variables and not 22466 _local_ variables, as shown in the example. 22467 22468 You may use the `section' attribute with initialized or 22469 uninitialized global variables but the linker requires each object 22470 be defined once, with the exception that uninitialized variables 22471 tentatively go in the `common' (or `bss') section and can be 22472 multiply "defined". Using the `section' attribute will change 22473 what section the variable goes into and may cause the linker to 22474 issue an error if an uninitialized variable has multiple 22475 definitions. You can force a variable to be initialized with the 22476 `-fno-common' flag or the `nocommon' attribute. 22477 22478 Some file formats do not support arbitrary sections so the 22479 `section' attribute is not available on all platforms. If you 22480 need to map the entire contents of a module to a particular 22481 section, consider using the facilities of the linker instead. 22482 22483 `shared' 22484 On Microsoft Windows, in addition to putting variable definitions 22485 in a named section, the section can also be shared among all 22486 running copies of an executable or DLL. For example, this small 22487 program defines shared data by putting it in a named section 22488 `shared' and marking the section shareable: 22489 22490 int foo __attribute__((section ("shared"), shared)) = 0; 22491 22492 int 22493 main() 22494 { 22495 /* Read and write foo. All running 22496 copies see the same value. */ 22497 return 0; 22498 } 22499 22500 You may only use the `shared' attribute along with `section' 22501 attribute with a fully initialized global definition because of 22502 the way linkers work. See `section' attribute for more 22503 information. 22504 22505 The `shared' attribute is only available on Microsoft Windows. 22506 22507 `tls_model ("TLS_MODEL")' 22508 The `tls_model' attribute sets thread-local storage model (*note 22509 Thread-Local::) of a particular `__thread' variable, overriding 22510 `-ftls-model=' command-line switch on a per-variable basis. The 22511 TLS_MODEL argument should be one of `global-dynamic', 22512 `local-dynamic', `initial-exec' or `local-exec'. 22513 22514 Not all targets support this attribute. 22515 22516 `unused' 22517 This attribute, attached to a variable, means that the variable is 22518 meant to be possibly unused. GCC will not produce a warning for 22519 this variable. 22520 22521 `used' 22522 This attribute, attached to a variable, means that the variable 22523 must be emitted even if it appears that the variable is not 22524 referenced. 22525 22526 `vector_size (BYTES)' 22527 This attribute specifies the vector size for the variable, 22528 measured in bytes. For example, the declaration: 22529 22530 int foo __attribute__ ((vector_size (16))); 22531 22532 causes the compiler to set the mode for `foo', to be 16 bytes, 22533 divided into `int' sized units. Assuming a 32-bit int (a vector of 22534 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI. 22535 22536 This attribute is only applicable to integral and float scalars, 22537 although arrays, pointers, and function return values are allowed 22538 in conjunction with this construct. 22539 22540 Aggregates with this attribute are invalid, even if they are of 22541 the same size as a corresponding scalar. For example, the 22542 declaration: 22543 22544 struct S { int a; }; 22545 struct S __attribute__ ((vector_size (16))) foo; 22546 22547 is invalid even if the size of the structure is the same as the 22548 size of the `int'. 22549 22550 `selectany' 22551 The `selectany' attribute causes an initialized global variable to 22552 have link-once semantics. When multiple definitions of the 22553 variable are encountered by the linker, the first is selected and 22554 the remainder are discarded. Following usage by the Microsoft 22555 compiler, the linker is told _not_ to warn about size or content 22556 differences of the multiple definitions. 22557 22558 Although the primary usage of this attribute is for POD types, the 22559 attribute can also be applied to global C++ objects that are 22560 initialized by a constructor. In this case, the static 22561 initialization and destruction code for the object is emitted in 22562 each translation defining the object, but the calls to the 22563 constructor and destructor are protected by a link-once guard 22564 variable. 22565 22566 The `selectany' attribute is only available on Microsoft Windows 22567 targets. You can use `__declspec (selectany)' as a synonym for 22568 `__attribute__ ((selectany))' for compatibility with other 22569 compilers. 22570 22571 `weak' 22572 The `weak' attribute is described in *note Function Attributes::. 22573 22574 `dllimport' 22575 The `dllimport' attribute is described in *note Function 22576 Attributes::. 22577 22578 `dllexport' 22579 The `dllexport' attribute is described in *note Function 22580 Attributes::. 22581 22582 22583 6.36.1 AVR Variable Attributes 22584 ------------------------------ 22585 22586 `progmem' 22587 The `progmem' attribute is used on the AVR to place data in the 22588 program memory address space (flash). This is accomplished by 22589 putting respective variables into a section whose name starts with 22590 `.progmem'. 22591 22592 AVR is a Harvard architecture processor and data and reas only data 22593 normally resides in the data memory address space (RAM). 22594 22595 6.36.2 Blackfin Variable Attributes 22596 ----------------------------------- 22597 22598 Three attributes are currently defined for the Blackfin. 22599 22600 `l1_data' 22601 `l1_data_A' 22602 `l1_data_B' 22603 Use these attributes on the Blackfin to place the variable into L1 22604 Data SRAM. Variables with `l1_data' attribute will be put into 22605 the specific section named `.l1.data'. Those with `l1_data_A' 22606 attribute will be put into the specific section named 22607 `.l1.data.A'. Those with `l1_data_B' attribute will be put into 22608 the specific section named `.l1.data.B'. 22609 22610 `l2' 22611 Use this attribute on the Blackfin to place the variable into L2 22612 SRAM. Variables with `l2' attribute will be put into the specific 22613 section named `.l2.data'. 22614 22615 6.36.3 M32R/D Variable Attributes 22616 --------------------------------- 22617 22618 One attribute is currently defined for the M32R/D. 22619 22620 `model (MODEL-NAME)' 22621 Use this attribute on the M32R/D to set the addressability of an 22622 object. The identifier MODEL-NAME is one of `small', `medium', or 22623 `large', representing each of the code models. 22624 22625 Small model objects live in the lower 16MB of memory (so that their 22626 addresses can be loaded with the `ld24' instruction). 22627 22628 Medium and large model objects may live anywhere in the 32-bit 22629 address space (the compiler will generate `seth/add3' instructions 22630 to load their addresses). 22631 22632 6.36.4 MeP Variable Attributes 22633 ------------------------------ 22634 22635 The MeP target has a number of addressing modes and busses. The `near' 22636 space spans the standard memory space's first 16 megabytes (24 bits). 22637 The `far' space spans the entire 32-bit memory space. The `based' 22638 space is a 128 byte region in the memory space which is addressed 22639 relative to the `$tp' register. The `tiny' space is a 65536 byte 22640 region relative to the `$gp' register. In addition to these memory 22641 regions, the MeP target has a separate 16-bit control bus which is 22642 specified with `cb' attributes. 22643 22644 `based' 22645 Any variable with the `based' attribute will be assigned to the 22646 `.based' section, and will be accessed with relative to the `$tp' 22647 register. 22648 22649 `tiny' 22650 Likewise, the `tiny' attribute assigned variables to the `.tiny' 22651 section, relative to the `$gp' register. 22652 22653 `near' 22654 Variables with the `near' attribute are assumed to have addresses 22655 that fit in a 24-bit addressing mode. This is the default for 22656 large variables (`-mtiny=4' is the default) but this attribute can 22657 override `-mtiny=' for small variables, or override `-ml'. 22658 22659 `far' 22660 Variables with the `far' attribute are addressed using a full 22661 32-bit address. Since this covers the entire memory space, this 22662 allows modules to make no assumptions about where variables might 22663 be stored. 22664 22665 `io' 22666 `io (ADDR)' 22667 Variables with the `io' attribute are used to address 22668 memory-mapped peripherals. If an address is specified, the 22669 variable is assigned that address, else it is not assigned an 22670 address (it is assumed some other module will assign an address). 22671 Example: 22672 22673 int timer_count __attribute__((io(0x123))); 22674 22675 `cb' 22676 `cb (ADDR)' 22677 Variables with the `cb' attribute are used to access the control 22678 bus, using special instructions. `addr' indicates the control bus 22679 address. Example: 22680 22681 int cpu_clock __attribute__((cb(0x123))); 22682 22683 22684 6.36.5 i386 Variable Attributes 22685 ------------------------------- 22686 22687 Two attributes are currently defined for i386 configurations: 22688 `ms_struct' and `gcc_struct' 22689 22690 `ms_struct' 22691 `gcc_struct' 22692 If `packed' is used on a structure, or if bit-fields are used it 22693 may be that the Microsoft ABI packs them differently than GCC 22694 would normally pack them. Particularly when moving packed data 22695 between functions compiled with GCC and the native Microsoft 22696 compiler (either via function call or as data in a file), it may 22697 be necessary to access either format. 22698 22699 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 22700 Windows X86 compilers to match the native Microsoft compiler. 22701 22702 The Microsoft structure layout algorithm is fairly simple with the 22703 exception of the bitfield packing: 22704 22705 The padding and alignment of members of structures and whether a 22706 bit field can straddle a storage-unit boundary 22707 22708 1. Structure members are stored sequentially in the order in 22709 which they are declared: the first member has the lowest 22710 memory address and the last member the highest. 22711 22712 2. Every data object has an alignment-requirement. The 22713 alignment-requirement for all data except structures, unions, 22714 and arrays is either the size of the object or the current 22715 packing size (specified with either the aligned attribute or 22716 the pack pragma), whichever is less. For structures, unions, 22717 and arrays, the alignment-requirement is the largest 22718 alignment-requirement of its members. Every object is 22719 allocated an offset so that: 22720 22721 offset % alignment-requirement == 0 22722 22723 3. Adjacent bit fields are packed into the same 1-, 2-, or 22724 4-byte allocation unit if the integral types are the same 22725 size and if the next bit field fits into the current 22726 allocation unit without crossing the boundary imposed by the 22727 common alignment requirements of the bit fields. 22728 22729 Handling of zero-length bitfields: 22730 22731 MSVC interprets zero-length bitfields in the following ways: 22732 22733 1. If a zero-length bitfield is inserted between two bitfields 22734 that would normally be coalesced, the bitfields will not be 22735 coalesced. 22736 22737 For example: 22738 22739 struct 22740 { 22741 unsigned long bf_1 : 12; 22742 unsigned long : 0; 22743 unsigned long bf_2 : 12; 22744 } t1; 22745 22746 The size of `t1' would be 8 bytes with the zero-length 22747 bitfield. If the zero-length bitfield were removed, `t1''s 22748 size would be 4 bytes. 22749 22750 2. If a zero-length bitfield is inserted after a bitfield, 22751 `foo', and the alignment of the zero-length bitfield is 22752 greater than the member that follows it, `bar', `bar' will be 22753 aligned as the type of the zero-length bitfield. 22754 22755 For example: 22756 22757 struct 22758 { 22759 char foo : 4; 22760 short : 0; 22761 char bar; 22762 } t2; 22763 22764 struct 22765 { 22766 char foo : 4; 22767 short : 0; 22768 double bar; 22769 } t3; 22770 22771 For `t2', `bar' will be placed at offset 2, rather than 22772 offset 1. Accordingly, the size of `t2' will be 4. For 22773 `t3', the zero-length bitfield will not affect the alignment 22774 of `bar' or, as a result, the size of the structure. 22775 22776 Taking this into account, it is important to note the 22777 following: 22778 22779 1. If a zero-length bitfield follows a normal bitfield, the 22780 type of the zero-length bitfield may affect the 22781 alignment of the structure as whole. For example, `t2' 22782 has a size of 4 bytes, since the zero-length bitfield 22783 follows a normal bitfield, and is of type short. 22784 22785 2. Even if a zero-length bitfield is not followed by a 22786 normal bitfield, it may still affect the alignment of 22787 the structure: 22788 22789 struct 22790 { 22791 char foo : 6; 22792 long : 0; 22793 } t4; 22794 22795 Here, `t4' will take up 4 bytes. 22796 22797 3. Zero-length bitfields following non-bitfield members are 22798 ignored: 22799 22800 struct 22801 { 22802 char foo; 22803 long : 0; 22804 char bar; 22805 } t5; 22806 22807 Here, `t5' will take up 2 bytes. 22808 22809 6.36.6 PowerPC Variable Attributes 22810 ---------------------------------- 22811 22812 Three attributes currently are defined for PowerPC configurations: 22813 `altivec', `ms_struct' and `gcc_struct'. 22814 22815 For full documentation of the struct attributes please see the 22816 documentation in *note i386 Variable Attributes::. 22817 22818 For documentation of `altivec' attribute please see the documentation 22819 in *note PowerPC Type Attributes::. 22820 22821 6.36.7 SPU Variable Attributes 22822 ------------------------------ 22823 22824 The SPU supports the `spu_vector' attribute for variables. For 22825 documentation of this attribute please see the documentation in *note 22826 SPU Type Attributes::. 22827 22828 6.36.8 Xstormy16 Variable Attributes 22829 ------------------------------------ 22830 22831 One attribute is currently defined for xstormy16 configurations: 22832 `below100'. 22833 22834 `below100' 22835 If a variable has the `below100' attribute (`BELOW100' is allowed 22836 also), GCC will place the variable in the first 0x100 bytes of 22837 memory and use special opcodes to access it. Such variables will 22838 be placed in either the `.bss_below100' section or the 22839 `.data_below100' section. 22840 22841 22842 22843 File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 22844 22845 6.37 Specifying Attributes of Types 22846 =================================== 22847 22848 The keyword `__attribute__' allows you to specify special attributes of 22849 `struct' and `union' types when you define such types. This keyword is 22850 followed by an attribute specification inside double parentheses. 22851 Seven attributes are currently defined for types: `aligned', `packed', 22852 `transparent_union', `unused', `deprecated', `visibility', and 22853 `may_alias'. Other attributes are defined for functions (*note 22854 Function Attributes::) and for variables (*note Variable Attributes::). 22855 22856 You may also specify any one of these attributes with `__' preceding 22857 and following its keyword. This allows you to use these attributes in 22858 header files without being concerned about a possible macro of the same 22859 name. For example, you may use `__aligned__' instead of `aligned'. 22860 22861 You may specify type attributes in an enum, struct or union type 22862 declaration or definition, or for other types in a `typedef' 22863 declaration. 22864 22865 For an enum, struct or union type, you may specify attributes either 22866 between the enum, struct or union tag and the name of the type, or just 22867 past the closing curly brace of the _definition_. The former syntax is 22868 preferred. 22869 22870 *Note Attribute Syntax::, for details of the exact syntax for using 22871 attributes. 22872 22873 `aligned (ALIGNMENT)' 22874 This attribute specifies a minimum alignment (in bytes) for 22875 variables of the specified type. For example, the declarations: 22876 22877 struct S { short f[3]; } __attribute__ ((aligned (8))); 22878 typedef int more_aligned_int __attribute__ ((aligned (8))); 22879 22880 force the compiler to insure (as far as it can) that each variable 22881 whose type is `struct S' or `more_aligned_int' will be allocated 22882 and aligned _at least_ on a 8-byte boundary. On a SPARC, having 22883 all variables of type `struct S' aligned to 8-byte boundaries 22884 allows the compiler to use the `ldd' and `std' (doubleword load and 22885 store) instructions when copying one variable of type `struct S' to 22886 another, thus improving run-time efficiency. 22887 22888 Note that the alignment of any given `struct' or `union' type is 22889 required by the ISO C standard to be at least a perfect multiple of 22890 the lowest common multiple of the alignments of all of the members 22891 of the `struct' or `union' in question. This means that you _can_ 22892 effectively adjust the alignment of a `struct' or `union' type by 22893 attaching an `aligned' attribute to any one of the members of such 22894 a type, but the notation illustrated in the example above is a 22895 more obvious, intuitive, and readable way to request the compiler 22896 to adjust the alignment of an entire `struct' or `union' type. 22897 22898 As in the preceding example, you can explicitly specify the 22899 alignment (in bytes) that you wish the compiler to use for a given 22900 `struct' or `union' type. Alternatively, you can leave out the 22901 alignment factor and just ask the compiler to align a type to the 22902 maximum useful alignment for the target machine you are compiling 22903 for. For example, you could write: 22904 22905 struct S { short f[3]; } __attribute__ ((aligned)); 22906 22907 Whenever you leave out the alignment factor in an `aligned' 22908 attribute specification, the compiler automatically sets the 22909 alignment for the type to the largest alignment which is ever used 22910 for any data type on the target machine you are compiling for. 22911 Doing this can often make copy operations more efficient, because 22912 the compiler can use whatever instructions copy the biggest chunks 22913 of memory when performing copies to or from the variables which 22914 have types that you have aligned this way. 22915 22916 In the example above, if the size of each `short' is 2 bytes, then 22917 the size of the entire `struct S' type is 6 bytes. The smallest 22918 power of two which is greater than or equal to that is 8, so the 22919 compiler sets the alignment for the entire `struct S' type to 8 22920 bytes. 22921 22922 Note that although you can ask the compiler to select a 22923 time-efficient alignment for a given type and then declare only 22924 individual stand-alone objects of that type, the compiler's 22925 ability to select a time-efficient alignment is primarily useful 22926 only when you plan to create arrays of variables having the 22927 relevant (efficiently aligned) type. If you declare or use arrays 22928 of variables of an efficiently-aligned type, then it is likely 22929 that your program will also be doing pointer arithmetic (or 22930 subscripting, which amounts to the same thing) on pointers to the 22931 relevant type, and the code that the compiler generates for these 22932 pointer arithmetic operations will often be more efficient for 22933 efficiently-aligned types than for other types. 22934 22935 The `aligned' attribute can only increase the alignment; but you 22936 can decrease it by specifying `packed' as well. See below. 22937 22938 Note that the effectiveness of `aligned' attributes may be limited 22939 by inherent limitations in your linker. On many systems, the 22940 linker is only able to arrange for variables to be aligned up to a 22941 certain maximum alignment. (For some linkers, the maximum 22942 supported alignment may be very very small.) If your linker is 22943 only able to align variables up to a maximum of 8 byte alignment, 22944 then specifying `aligned(16)' in an `__attribute__' will still 22945 only provide you with 8 byte alignment. See your linker 22946 documentation for further information. 22947 22948 `packed' 22949 This attribute, attached to `struct' or `union' type definition, 22950 specifies that each member (other than zero-width bitfields) of 22951 the structure or union is placed to minimize the memory required. 22952 When attached to an `enum' definition, it indicates that the 22953 smallest integral type should be used. 22954 22955 Specifying this attribute for `struct' and `union' types is 22956 equivalent to specifying the `packed' attribute on each of the 22957 structure or union members. Specifying the `-fshort-enums' flag 22958 on the line is equivalent to specifying the `packed' attribute on 22959 all `enum' definitions. 22960 22961 In the following example `struct my_packed_struct''s members are 22962 packed closely together, but the internal layout of its `s' member 22963 is not packed--to do that, `struct my_unpacked_struct' would need 22964 to be packed too. 22965 22966 struct my_unpacked_struct 22967 { 22968 char c; 22969 int i; 22970 }; 22971 22972 struct __attribute__ ((__packed__)) my_packed_struct 22973 { 22974 char c; 22975 int i; 22976 struct my_unpacked_struct s; 22977 }; 22978 22979 You may only specify this attribute on the definition of an `enum', 22980 `struct' or `union', not on a `typedef' which does not also define 22981 the enumerated type, structure or union. 22982 22983 `transparent_union' 22984 This attribute, attached to a `union' type definition, indicates 22985 that any function parameter having that union type causes calls to 22986 that function to be treated in a special way. 22987 22988 First, the argument corresponding to a transparent union type can 22989 be of any type in the union; no cast is required. Also, if the 22990 union contains a pointer type, the corresponding argument can be a 22991 null pointer constant or a void pointer expression; and if the 22992 union contains a void pointer type, the corresponding argument can 22993 be any pointer expression. If the union member type is a pointer, 22994 qualifiers like `const' on the referenced type must be respected, 22995 just as with normal pointer conversions. 22996 22997 Second, the argument is passed to the function using the calling 22998 conventions of the first member of the transparent union, not the 22999 calling conventions of the union itself. All members of the union 23000 must have the same machine representation; this is necessary for 23001 this argument passing to work properly. 23002 23003 Transparent unions are designed for library functions that have 23004 multiple interfaces for compatibility reasons. For example, 23005 suppose the `wait' function must accept either a value of type 23006 `int *' to comply with Posix, or a value of type `union wait *' to 23007 comply with the 4.1BSD interface. If `wait''s parameter were 23008 `void *', `wait' would accept both kinds of arguments, but it 23009 would also accept any other pointer type and this would make 23010 argument type checking less useful. Instead, `<sys/wait.h>' might 23011 define the interface as follows: 23012 23013 typedef union __attribute__ ((__transparent_union__)) 23014 { 23015 int *__ip; 23016 union wait *__up; 23017 } wait_status_ptr_t; 23018 23019 pid_t wait (wait_status_ptr_t); 23020 23021 This interface allows either `int *' or `union wait *' arguments 23022 to be passed, using the `int *' calling convention. The program 23023 can call `wait' with arguments of either type: 23024 23025 int w1 () { int w; return wait (&w); } 23026 int w2 () { union wait w; return wait (&w); } 23027 23028 With this interface, `wait''s implementation might look like this: 23029 23030 pid_t wait (wait_status_ptr_t p) 23031 { 23032 return waitpid (-1, p.__ip, 0); 23033 } 23034 23035 `unused' 23036 When attached to a type (including a `union' or a `struct'), this 23037 attribute means that variables of that type are meant to appear 23038 possibly unused. GCC will not produce a warning for any variables 23039 of that type, even if the variable appears to do nothing. This is 23040 often the case with lock or thread classes, which are usually 23041 defined and then not referenced, but contain constructors and 23042 destructors that have nontrivial bookkeeping functions. 23043 23044 `deprecated' 23045 `deprecated (MSG)' 23046 The `deprecated' attribute results in a warning if the type is 23047 used anywhere in the source file. This is useful when identifying 23048 types that are expected to be removed in a future version of a 23049 program. If possible, the warning also includes the location of 23050 the declaration of the deprecated type, to enable users to easily 23051 find further information about why the type is deprecated, or what 23052 they should do instead. Note that the warnings only occur for 23053 uses and then only if the type is being applied to an identifier 23054 that itself is not being declared as deprecated. 23055 23056 typedef int T1 __attribute__ ((deprecated)); 23057 T1 x; 23058 typedef T1 T2; 23059 T2 y; 23060 typedef T1 T3 __attribute__ ((deprecated)); 23061 T3 z __attribute__ ((deprecated)); 23062 23063 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 23064 warning is issued for line 4 because T2 is not explicitly 23065 deprecated. Line 5 has no warning because T3 is explicitly 23066 deprecated. Similarly for line 6. The optional msg argument, 23067 which must be a string, will be printed in the warning if present. 23068 23069 The `deprecated' attribute can also be used for functions and 23070 variables (*note Function Attributes::, *note Variable 23071 Attributes::.) 23072 23073 `may_alias' 23074 Accesses through pointers to types with this attribute are not 23075 subject to type-based alias analysis, but are instead assumed to 23076 be able to alias any other type of objects. In the context of 23077 6.5/7 an lvalue expression dereferencing such a pointer is treated 23078 like having a character type. See `-fstrict-aliasing' for more 23079 information on aliasing issues. This extension exists to support 23080 some vector APIs, in which pointers to one vector type are 23081 permitted to alias pointers to a different vector type. 23082 23083 Note that an object of a type with this attribute does not have any 23084 special semantics. 23085 23086 Example of use: 23087 23088 typedef short __attribute__((__may_alias__)) short_a; 23089 23090 int 23091 main (void) 23092 { 23093 int a = 0x12345678; 23094 short_a *b = (short_a *) &a; 23095 23096 b[1] = 0; 23097 23098 if (a == 0x12345678) 23099 abort(); 23100 23101 exit(0); 23102 } 23103 23104 If you replaced `short_a' with `short' in the variable 23105 declaration, the above program would abort when compiled with 23106 `-fstrict-aliasing', which is on by default at `-O2' or above in 23107 recent GCC versions. 23108 23109 `visibility' 23110 In C++, attribute visibility (*note Function Attributes::) can 23111 also be applied to class, struct, union and enum types. Unlike 23112 other type attributes, the attribute must appear between the 23113 initial keyword and the name of the type; it cannot appear after 23114 the body of the type. 23115 23116 Note that the type visibility is applied to vague linkage entities 23117 associated with the class (vtable, typeinfo node, etc.). In 23118 particular, if a class is thrown as an exception in one shared 23119 object and caught in another, the class must have default 23120 visibility. Otherwise the two shared objects will be unable to 23121 use the same typeinfo node and exception handling will break. 23122 23123 23124 6.37.1 ARM Type Attributes 23125 -------------------------- 23126 23127 On those ARM targets that support `dllimport' (such as Symbian OS), you 23128 can use the `notshared' attribute to indicate that the virtual table 23129 and other similar data for a class should not be exported from a DLL. 23130 For example: 23131 23132 class __declspec(notshared) C { 23133 public: 23134 __declspec(dllimport) C(); 23135 virtual void f(); 23136 } 23137 23138 __declspec(dllexport) 23139 C::C() {} 23140 23141 In this code, `C::C' is exported from the current DLL, but the virtual 23142 table for `C' is not exported. (You can use `__attribute__' instead of 23143 `__declspec' if you prefer, but most Symbian OS code uses `__declspec'.) 23144 23145 6.37.2 MeP Type Attributes 23146 -------------------------- 23147 23148 Many of the MeP variable attributes may be applied to types as well. 23149 Specifically, the `based', `tiny', `near', and `far' attributes may be 23150 applied to either. The `io' and `cb' attributes may not be applied to 23151 types. 23152 23153 6.37.3 i386 Type Attributes 23154 --------------------------- 23155 23156 Two attributes are currently defined for i386 configurations: 23157 `ms_struct' and `gcc_struct'. 23158 23159 `ms_struct' 23160 `gcc_struct' 23161 If `packed' is used on a structure, or if bit-fields are used it 23162 may be that the Microsoft ABI packs them differently than GCC 23163 would normally pack them. Particularly when moving packed data 23164 between functions compiled with GCC and the native Microsoft 23165 compiler (either via function call or as data in a file), it may 23166 be necessary to access either format. 23167 23168 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 23169 Windows X86 compilers to match the native Microsoft compiler. 23170 23171 To specify multiple attributes, separate them by commas within the 23172 double parentheses: for example, `__attribute__ ((aligned (16), 23173 packed))'. 23174 23175 6.37.4 PowerPC Type Attributes 23176 ------------------------------ 23177 23178 Three attributes currently are defined for PowerPC configurations: 23179 `altivec', `ms_struct' and `gcc_struct'. 23180 23181 For full documentation of the `ms_struct' and `gcc_struct' attributes 23182 please see the documentation in *note i386 Type Attributes::. 23183 23184 The `altivec' attribute allows one to declare AltiVec vector data 23185 types supported by the AltiVec Programming Interface Manual. The 23186 attribute requires an argument to specify one of three vector types: 23187 `vector__', `pixel__' (always followed by unsigned short), and `bool__' 23188 (always followed by unsigned). 23189 23190 __attribute__((altivec(vector__))) 23191 __attribute__((altivec(pixel__))) unsigned short 23192 __attribute__((altivec(bool__))) unsigned 23193 23194 These attributes mainly are intended to support the `__vector', 23195 `__pixel', and `__bool' AltiVec keywords. 23196 23197 6.37.5 SPU Type Attributes 23198 -------------------------- 23199 23200 The SPU supports the `spu_vector' attribute for types. This attribute 23201 allows one to declare vector data types supported by the 23202 Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 23203 to support the `__vector' keyword. 23204 23205 23206 File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 23207 23208 6.38 Inquiring on Alignment of Types or Variables 23209 ================================================= 23210 23211 The keyword `__alignof__' allows you to inquire about how an object is 23212 aligned, or the minimum alignment usually required by a type. Its 23213 syntax is just like `sizeof'. 23214 23215 For example, if the target machine requires a `double' value to be 23216 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 23217 is true on many RISC machines. On more traditional machine designs, 23218 `__alignof__ (double)' is 4 or even 2. 23219 23220 Some machines never actually require alignment; they allow reference 23221 to any data type even at an odd address. For these machines, 23222 `__alignof__' reports the smallest alignment that GCC will give the 23223 data type, usually as mandated by the target ABI. 23224 23225 If the operand of `__alignof__' is an lvalue rather than a type, its 23226 value is the required alignment for its type, taking into account any 23227 minimum alignment specified with GCC's `__attribute__' extension (*note 23228 Variable Attributes::). For example, after this declaration: 23229 23230 struct foo { int x; char y; } foo1; 23231 23232 the value of `__alignof__ (foo1.y)' is 1, even though its actual 23233 alignment is probably 2 or 4, the same as `__alignof__ (int)'. 23234 23235 It is an error to ask for the alignment of an incomplete type. 23236 23237 23238 File: gcc.info, Node: Inline, Next: Volatiles, Prev: Alignment, Up: C Extensions 23239 23240 6.39 An Inline Function is As Fast As a Macro 23241 ============================================= 23242 23243 By declaring a function inline, you can direct GCC to make calls to 23244 that function faster. One way GCC can achieve this is to integrate 23245 that function's code into the code for its callers. This makes 23246 execution faster by eliminating the function-call overhead; in 23247 addition, if any of the actual argument values are constant, their 23248 known values may permit simplifications at compile time so that not all 23249 of the inline function's code needs to be included. The effect on code 23250 size is less predictable; object code may be larger or smaller with 23251 function inlining, depending on the particular case. You can also 23252 direct GCC to try to integrate all "simple enough" functions into their 23253 callers with the option `-finline-functions'. 23254 23255 GCC implements three different semantics of declaring a function 23256 inline. One is available with `-std=gnu89' or `-fgnu89-inline' or when 23257 `gnu_inline' attribute is present on all inline declarations, another 23258 when `-std=c99', `-std=c1x', `-std=gnu99' or `-std=gnu1x' (without 23259 `-fgnu89-inline'), and the third is used when compiling C++. 23260 23261 To declare a function inline, use the `inline' keyword in its 23262 declaration, like this: 23263 23264 static inline int 23265 inc (int *a) 23266 { 23267 return (*a)++; 23268 } 23269 23270 If you are writing a header file to be included in ISO C90 programs, 23271 write `__inline__' instead of `inline'. *Note Alternate Keywords::. 23272 23273 The three types of inlining behave similarly in two important cases: 23274 when the `inline' keyword is used on a `static' function, like the 23275 example above, and when a function is first declared without using the 23276 `inline' keyword and then is defined with `inline', like this: 23277 23278 extern int inc (int *a); 23279 inline int 23280 inc (int *a) 23281 { 23282 return (*a)++; 23283 } 23284 23285 In both of these common cases, the program behaves the same as if you 23286 had not used the `inline' keyword, except for its speed. 23287 23288 When a function is both inline and `static', if all calls to the 23289 function are integrated into the caller, and the function's address is 23290 never used, then the function's own assembler code is never referenced. 23291 In this case, GCC does not actually output assembler code for the 23292 function, unless you specify the option `-fkeep-inline-functions'. 23293 Some calls cannot be integrated for various reasons (in particular, 23294 calls that precede the function's definition cannot be integrated, and 23295 neither can recursive calls within the definition). If there is a 23296 nonintegrated call, then the function is compiled to assembler code as 23297 usual. The function must also be compiled as usual if the program 23298 refers to its address, because that can't be inlined. 23299 23300 Note that certain usages in a function definition can make it 23301 unsuitable for inline substitution. Among these usages are: use of 23302 varargs, use of alloca, use of variable sized data types (*note 23303 Variable Length::), use of computed goto (*note Labels as Values::), 23304 use of nonlocal goto, and nested functions (*note Nested Functions::). 23305 Using `-Winline' will warn when a function marked `inline' could not be 23306 substituted, and will give the reason for the failure. 23307 23308 As required by ISO C++, GCC considers member functions defined within 23309 the body of a class to be marked inline even if they are not explicitly 23310 declared with the `inline' keyword. You can override this with 23311 `-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 23312 Dialect Options. 23313 23314 GCC does not inline any functions when not optimizing unless you 23315 specify the `always_inline' attribute for the function, like this: 23316 23317 /* Prototype. */ 23318 inline void foo (const char) __attribute__((always_inline)); 23319 23320 The remainder of this section is specific to GNU C90 inlining. 23321 23322 When an inline function is not `static', then the compiler must assume 23323 that there may be calls from other source files; since a global symbol 23324 can be defined only once in any program, the function must not be 23325 defined in the other source files, so the calls therein cannot be 23326 integrated. Therefore, a non-`static' inline function is always 23327 compiled on its own in the usual fashion. 23328 23329 If you specify both `inline' and `extern' in the function definition, 23330 then the definition is used only for inlining. In no case is the 23331 function compiled on its own, not even if you refer to its address 23332 explicitly. Such an address becomes an external reference, as if you 23333 had only declared the function, and had not defined it. 23334 23335 This combination of `inline' and `extern' has almost the effect of a 23336 macro. The way to use it is to put a function definition in a header 23337 file with these keywords, and put another copy of the definition 23338 (lacking `inline' and `extern') in a library file. The definition in 23339 the header file will cause most calls to the function to be inlined. 23340 If any uses of the function remain, they will refer to the single copy 23341 in the library. 23342 23343 23344 File: gcc.info, Node: Volatiles, Next: Extended Asm, Prev: Inline, Up: C Extensions 23345 23346 6.40 When is a Volatile Object Accessed? 23347 ======================================== 23348 23349 C has the concept of volatile objects. These are normally accessed by 23350 pointers and used for accessing hardware or inter-thread communication. 23351 The standard encourages compilers to refrain from optimizations 23352 concerning accesses to volatile objects, but leaves it implementation 23353 defined as to what constitutes a volatile access. The minimum 23354 requirement is that at a sequence point all previous accesses to 23355 volatile objects have stabilized and no subsequent accesses have 23356 occurred. Thus an implementation is free to reorder and combine 23357 volatile accesses which occur between sequence points, but cannot do so 23358 for accesses across a sequence point. The use of volatile does not 23359 allow you to violate the restriction on updating objects multiple times 23360 between two sequence points. 23361 23362 Accesses to non-volatile objects are not ordered with respect to 23363 volatile accesses. You cannot use a volatile object as a memory 23364 barrier to order a sequence of writes to non-volatile memory. For 23365 instance: 23366 23367 int *ptr = SOMETHING; 23368 volatile int vobj; 23369 *ptr = SOMETHING; 23370 vobj = 1; 23371 23372 Unless *PTR and VOBJ can be aliased, it is not guaranteed that the 23373 write to *PTR will have occurred by the time the update of VOBJ has 23374 happened. If you need this guarantee, you must use a stronger memory 23375 barrier such as: 23376 23377 int *ptr = SOMETHING; 23378 volatile int vobj; 23379 *ptr = SOMETHING; 23380 asm volatile ("" : : : "memory"); 23381 vobj = 1; 23382 23383 A scalar volatile object is read when it is accessed in a void context: 23384 23385 volatile int *src = SOMEVALUE; 23386 *src; 23387 23388 Such expressions are rvalues, and GCC implements this as a read of the 23389 volatile object being pointed to. 23390 23391 Assignments are also expressions and have an rvalue. However when 23392 assigning to a scalar volatile, the volatile object is not reread, 23393 regardless of whether the assignment expression's rvalue is used or 23394 not. If the assignment's rvalue is used, the value is that assigned to 23395 the volatile object. For instance, there is no read of VOBJ in all the 23396 following cases: 23397 23398 int obj; 23399 volatile int vobj; 23400 vobj = SOMETHING; 23401 obj = vobj = SOMETHING; 23402 obj ? vobj = ONETHING : vobj = ANOTHERTHING; 23403 obj = (SOMETHING, vobj = ANOTHERTHING); 23404 23405 If you need to read the volatile object after an assignment has 23406 occurred, you must use a separate expression with an intervening 23407 sequence point. 23408 23409 As bitfields are not individually addressable, volatile bitfields may 23410 be implicitly read when written to, or when adjacent bitfields are 23411 accessed. Bitfield operations may be optimized such that adjacent 23412 bitfields are only partially accessed, if they straddle a storage unit 23413 boundary. For these reasons it is unwise to use volatile bitfields to 23414 access hardware. 23415 23416 23417 File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Volatiles, Up: C Extensions 23418 23419 6.41 Assembler Instructions with C Expression Operands 23420 ====================================================== 23421 23422 In an assembler instruction using `asm', you can specify the operands 23423 of the instruction using C expressions. This means you need not guess 23424 which registers or memory locations will contain the data you want to 23425 use. 23426 23427 You must specify an assembler instruction template much like what 23428 appears in a machine description, plus an operand constraint string for 23429 each operand. 23430 23431 For example, here is how to use the 68881's `fsinx' instruction: 23432 23433 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 23434 23435 Here `angle' is the C expression for the input operand while `result' 23436 is that of the output operand. Each has `"f"' as its operand 23437 constraint, saying that a floating point register is required. The `=' 23438 in `=f' indicates that the operand is an output; all output operands' 23439 constraints must use `='. The constraints use the same language used 23440 in the machine description (*note Constraints::). 23441 23442 Each operand is described by an operand-constraint string followed by 23443 the C expression in parentheses. A colon separates the assembler 23444 template from the first output operand and another separates the last 23445 output operand from the first input, if any. Commas separate the 23446 operands within each group. The total number of operands is currently 23447 limited to 30; this limitation may be lifted in some future version of 23448 GCC. 23449 23450 If there are no output operands but there are input operands, you must 23451 place two consecutive colons surrounding the place where the output 23452 operands would go. 23453 23454 As of GCC version 3.1, it is also possible to specify input and output 23455 operands using symbolic names which can be referenced within the 23456 assembler code. These names are specified inside square brackets 23457 preceding the constraint string, and can be referenced inside the 23458 assembler code using `%[NAME]' instead of a percentage sign followed by 23459 the operand number. Using named operands the above example could look 23460 like: 23461 23462 asm ("fsinx %[angle],%[output]" 23463 : [output] "=f" (result) 23464 : [angle] "f" (angle)); 23465 23466 Note that the symbolic operand names have no relation whatsoever to 23467 other C identifiers. You may use any name you like, even those of 23468 existing C symbols, but you must ensure that no two operands within the 23469 same assembler construct use the same symbolic name. 23470 23471 Output operand expressions must be lvalues; the compiler can check 23472 this. The input operands need not be lvalues. The compiler cannot 23473 check whether the operands have data types that are reasonable for the 23474 instruction being executed. It does not parse the assembler instruction 23475 template and does not know what it means or even whether it is valid 23476 assembler input. The extended `asm' feature is most often used for 23477 machine instructions the compiler itself does not know exist. If the 23478 output expression cannot be directly addressed (for example, it is a 23479 bit-field), your constraint must allow a register. In that case, GCC 23480 will use the register as the output of the `asm', and then store that 23481 register into the output. 23482 23483 The ordinary output operands must be write-only; GCC will assume that 23484 the values in these operands before the instruction are dead and need 23485 not be generated. Extended asm supports input-output or read-write 23486 operands. Use the constraint character `+' to indicate such an operand 23487 and list it with the output operands. You should only use read-write 23488 operands when the constraints for the operand (or the operand in which 23489 only some of the bits are to be changed) allow a register. 23490 23491 You may, as an alternative, logically split its function into two 23492 separate operands, one input operand and one write-only output operand. 23493 The connection between them is expressed by constraints which say they 23494 need to be in the same location when the instruction executes. You can 23495 use the same C expression for both operands, or different expressions. 23496 For example, here we write the (fictitious) `combine' instruction with 23497 `bar' as its read-only source operand and `foo' as its read-write 23498 destination: 23499 23500 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 23501 23502 The constraint `"0"' for operand 1 says that it must occupy the same 23503 location as operand 0. A number in constraint is allowed only in an 23504 input operand and it must refer to an output operand. 23505 23506 Only a number in the constraint can guarantee that one operand will be 23507 in the same place as another. The mere fact that `foo' is the value of 23508 both operands is not enough to guarantee that they will be in the same 23509 place in the generated assembler code. The following would not work 23510 reliably: 23511 23512 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 23513 23514 Various optimizations or reloading could cause operands 0 and 1 to be 23515 in different registers; GCC knows no reason not to do so. For example, 23516 the compiler might find a copy of the value of `foo' in one register and 23517 use it for operand 1, but generate the output operand 0 in a different 23518 register (copying it afterward to `foo''s own address). Of course, 23519 since the register for operand 1 is not even mentioned in the assembler 23520 code, the result will not work, but GCC can't tell that. 23521 23522 As of GCC version 3.1, one may write `[NAME]' instead of the operand 23523 number for a matching constraint. For example: 23524 23525 asm ("cmoveq %1,%2,%[result]" 23526 : [result] "=r"(result) 23527 : "r" (test), "r"(new), "[result]"(old)); 23528 23529 Sometimes you need to make an `asm' operand be a specific register, 23530 but there's no matching constraint letter for that register _by 23531 itself_. To force the operand into that register, use a local variable 23532 for the operand and specify the register in the variable declaration. 23533 *Note Explicit Reg Vars::. Then for the `asm' operand, use any 23534 register constraint letter that matches the register: 23535 23536 register int *p1 asm ("r0") = ...; 23537 register int *p2 asm ("r1") = ...; 23538 register int *result asm ("r0"); 23539 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 23540 23541 In the above example, beware that a register that is call-clobbered by 23542 the target ABI will be overwritten by any function call in the 23543 assignment, including library calls for arithmetic operators. Also a 23544 register may be clobbered when generating some operations, like 23545 variable shift, memory copy or memory move on x86. Assuming it is a 23546 call-clobbered register, this may happen to `r0' above by the 23547 assignment to `p2'. If you have to use such a register, use temporary 23548 variables for expressions between the register assignment and use: 23549 23550 int t1 = ...; 23551 register int *p1 asm ("r0") = ...; 23552 register int *p2 asm ("r1") = t1; 23553 register int *result asm ("r0"); 23554 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 23555 23556 Some instructions clobber specific hard registers. To describe this, 23557 write a third colon after the input operands, followed by the names of 23558 the clobbered hard registers (given as strings). Here is a realistic 23559 example for the VAX: 23560 23561 asm volatile ("movc3 %0,%1,%2" 23562 : /* no outputs */ 23563 : "g" (from), "g" (to), "g" (count) 23564 : "r0", "r1", "r2", "r3", "r4", "r5"); 23565 23566 You may not write a clobber description in a way that overlaps with an 23567 input or output operand. For example, you may not have an operand 23568 describing a register class with one member if you mention that register 23569 in the clobber list. Variables declared to live in specific registers 23570 (*note Explicit Reg Vars::), and used as asm input or output operands 23571 must have no part mentioned in the clobber description. There is no 23572 way for you to specify that an input operand is modified without also 23573 specifying it as an output operand. Note that if all the output 23574 operands you specify are for this purpose (and hence unused), you will 23575 then also need to specify `volatile' for the `asm' construct, as 23576 described below, to prevent GCC from deleting the `asm' statement as 23577 unused. 23578 23579 If you refer to a particular hardware register from the assembler code, 23580 you will probably have to list the register after the third colon to 23581 tell the compiler the register's value is modified. In some assemblers, 23582 the register names begin with `%'; to produce one `%' in the assembler 23583 code, you must write `%%' in the input. 23584 23585 If your assembler instruction can alter the condition code register, 23586 add `cc' to the list of clobbered registers. GCC on some machines 23587 represents the condition codes as a specific hardware register; `cc' 23588 serves to name this register. On other machines, the condition code is 23589 handled differently, and specifying `cc' has no effect. But it is 23590 valid no matter what the machine. 23591 23592 If your assembler instructions access memory in an unpredictable 23593 fashion, add `memory' to the list of clobbered registers. This will 23594 cause GCC to not keep memory values cached in registers across the 23595 assembler instruction and not optimize stores or loads to that memory. 23596 You will also want to add the `volatile' keyword if the memory affected 23597 is not listed in the inputs or outputs of the `asm', as the `memory' 23598 clobber does not count as a side-effect of the `asm'. If you know how 23599 large the accessed memory is, you can add it as input or output but if 23600 this is not known, you should add `memory'. As an example, if you 23601 access ten bytes of a string, you can use a memory input like: 23602 23603 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 23604 23605 Note that in the following example the memory input is necessary, 23606 otherwise GCC might optimize the store to `x' away: 23607 int foo () 23608 { 23609 int x = 42; 23610 int *y = &x; 23611 int result; 23612 asm ("magic stuff accessing an 'int' pointed to by '%1'" 23613 "=&d" (r) : "a" (y), "m" (*y)); 23614 return result; 23615 } 23616 23617 You can put multiple assembler instructions together in a single `asm' 23618 template, separated by the characters normally used in assembly code 23619 for the system. A combination that works in most places is a newline 23620 to break the line, plus a tab character to move to the instruction field 23621 (written as `\n\t'). Sometimes semicolons can be used, if the 23622 assembler allows semicolons as a line-breaking character. Note that 23623 some assembler dialects use semicolons to start a comment. The input 23624 operands are guaranteed not to use any of the clobbered registers, and 23625 neither will the output operands' addresses, so you can read and write 23626 the clobbered registers as many times as you like. Here is an example 23627 of multiple instructions in a template; it assumes the subroutine 23628 `_foo' accepts arguments in registers 9 and 10: 23629 23630 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 23631 : /* no outputs */ 23632 : "g" (from), "g" (to) 23633 : "r9", "r10"); 23634 23635 Unless an output operand has the `&' constraint modifier, GCC may 23636 allocate it in the same register as an unrelated input operand, on the 23637 assumption the inputs are consumed before the outputs are produced. 23638 This assumption may be false if the assembler code actually consists of 23639 more than one instruction. In such a case, use `&' for each output 23640 operand that may not overlap an input. *Note Modifiers::. 23641 23642 If you want to test the condition code produced by an assembler 23643 instruction, you must include a branch and a label in the `asm' 23644 construct, as follows: 23645 23646 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 23647 : "g" (result) 23648 : "g" (input)); 23649 23650 This assumes your assembler supports local labels, as the GNU assembler 23651 and most Unix assemblers do. 23652 23653 Speaking of labels, jumps from one `asm' to another are not supported. 23654 The compiler's optimizers do not know about these jumps, and therefore 23655 they cannot take account of them when deciding how to optimize. *Note 23656 Extended asm with goto::. 23657 23658 Usually the most convenient way to use these `asm' instructions is to 23659 encapsulate them in macros that look like functions. For example, 23660 23661 #define sin(x) \ 23662 ({ double __value, __arg = (x); \ 23663 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 23664 __value; }) 23665 23666 Here the variable `__arg' is used to make sure that the instruction 23667 operates on a proper `double' value, and to accept only those arguments 23668 `x' which can convert automatically to a `double'. 23669 23670 Another way to make sure the instruction operates on the correct data 23671 type is to use a cast in the `asm'. This is different from using a 23672 variable `__arg' in that it converts more different types. For 23673 example, if the desired type were `int', casting the argument to `int' 23674 would accept a pointer with no complaint, while assigning the argument 23675 to an `int' variable named `__arg' would warn about using a pointer 23676 unless the caller explicitly casts it. 23677 23678 If an `asm' has output operands, GCC assumes for optimization purposes 23679 the instruction has no side effects except to change the output 23680 operands. This does not mean instructions with a side effect cannot be 23681 used, but you must be careful, because the compiler may eliminate them 23682 if the output operands aren't used, or move them out of loops, or 23683 replace two with one if they constitute a common subexpression. Also, 23684 if your instruction does have a side effect on a variable that otherwise 23685 appears not to change, the old value of the variable may be reused later 23686 if it happens to be found in a register. 23687 23688 You can prevent an `asm' instruction from being deleted by writing the 23689 keyword `volatile' after the `asm'. For example: 23690 23691 #define get_and_set_priority(new) \ 23692 ({ int __old; \ 23693 asm volatile ("get_and_set_priority %0, %1" \ 23694 : "=g" (__old) : "g" (new)); \ 23695 __old; }) 23696 23697 The `volatile' keyword indicates that the instruction has important 23698 side-effects. GCC will not delete a volatile `asm' if it is reachable. 23699 (The instruction can still be deleted if GCC can prove that 23700 control-flow will never reach the location of the instruction.) Note 23701 that even a volatile `asm' instruction can be moved relative to other 23702 code, including across jump instructions. For example, on many targets 23703 there is a system register which can be set to control the rounding 23704 mode of floating point operations. You might try setting it with a 23705 volatile `asm', like this PowerPC example: 23706 23707 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 23708 sum = x + y; 23709 23710 This will not work reliably, as the compiler may move the addition back 23711 before the volatile `asm'. To make it work you need to add an 23712 artificial dependency to the `asm' referencing a variable in the code 23713 you don't want moved, for example: 23714 23715 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 23716 sum = x + y; 23717 23718 Similarly, you can't expect a sequence of volatile `asm' instructions 23719 to remain perfectly consecutive. If you want consecutive output, use a 23720 single `asm'. Also, GCC will perform some optimizations across a 23721 volatile `asm' instruction; GCC does not "forget everything" when it 23722 encounters a volatile `asm' instruction the way some other compilers do. 23723 23724 An `asm' instruction without any output operands will be treated 23725 identically to a volatile `asm' instruction. 23726 23727 It is a natural idea to look for a way to give access to the condition 23728 code left by the assembler instruction. However, when we attempted to 23729 implement this, we found no way to make it work reliably. The problem 23730 is that output operands might need reloading, which would result in 23731 additional following "store" instructions. On most machines, these 23732 instructions would alter the condition code before there was time to 23733 test it. This problem doesn't arise for ordinary "test" and "compare" 23734 instructions because they don't have any output operands. 23735 23736 For reasons similar to those described above, it is not possible to 23737 give an assembler instruction access to the condition code left by 23738 previous instructions. 23739 23740 As of GCC version 4.5, `asm goto' may be used to have the assembly 23741 jump to one or more C labels. In this form, a fifth section after the 23742 clobber list contains a list of all C labels to which the assembly may 23743 jump. Each label operand is implicitly self-named. The `asm' is also 23744 assumed to fall through to the next statement. 23745 23746 This form of `asm' is restricted to not have outputs. This is due to 23747 a internal restriction in the compiler that control transfer 23748 instructions cannot have outputs. This restriction on `asm goto' may 23749 be lifted in some future version of the compiler. In the mean time, 23750 `asm goto' may include a memory clobber, and so leave outputs in memory. 23751 23752 int frob(int x) 23753 { 23754 int y; 23755 asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5" 23756 : : "r"(x), "r"(&y) : "r5", "memory" : error); 23757 return y; 23758 error: 23759 return -1; 23760 } 23761 23762 In this (inefficient) example, the `frob' instruction sets the carry 23763 bit to indicate an error. The `jc' instruction detects this and 23764 branches to the `error' label. Finally, the output of the `frob' 23765 instruction (`%r5') is stored into the memory for variable `y', which 23766 is later read by the `return' statement. 23767 23768 void doit(void) 23769 { 23770 int i = 0; 23771 asm goto ("mfsr %%r1, 123; jmp %%r1;" 23772 ".pushsection doit_table;" 23773 ".long %l0, %l1, %l2, %l3;" 23774 ".popsection" 23775 : : : "r1" : label1, label2, label3, label4); 23776 __builtin_unreachable (); 23777 23778 label1: 23779 f1(); 23780 return; 23781 label2: 23782 f2(); 23783 return; 23784 label3: 23785 i = 1; 23786 label4: 23787 f3(i); 23788 } 23789 23790 In this (also inefficient) example, the `mfsr' instruction reads an 23791 address from some out-of-band machine register, and the following `jmp' 23792 instruction branches to that address. The address read by the `mfsr' 23793 instruction is assumed to have been previously set via some 23794 application-specific mechanism to be one of the four values stored in 23795 the `doit_table' section. Finally, the `asm' is followed by a call to 23796 `__builtin_unreachable' to indicate that the `asm' does not in fact 23797 fall through. 23798 23799 #define TRACE1(NUM) \ 23800 do { \ 23801 asm goto ("0: nop;" \ 23802 ".pushsection trace_table;" \ 23803 ".long 0b, %l0;" \ 23804 ".popsection" \ 23805 : : : : trace#NUM); \ 23806 if (0) { trace#NUM: trace(); } \ 23807 } while (0) 23808 #define TRACE TRACE1(__COUNTER__) 23809 23810 In this example (which in fact inspired the `asm goto' feature) we 23811 want on rare occasions to call the `trace' function; on other occasions 23812 we'd like to keep the overhead to the absolute minimum. The normal 23813 code path consists of a single `nop' instruction. However, we record 23814 the address of this `nop' together with the address of a label that 23815 calls the `trace' function. This allows the `nop' instruction to be 23816 patched at runtime to be an unconditional branch to the stored label. 23817 It is assumed that an optimizing compiler will move the labeled block 23818 out of line, to optimize the fall through path from the `asm'. 23819 23820 If you are writing a header file that should be includable in ISO C 23821 programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 23822 23823 6.41.1 Size of an `asm' 23824 ----------------------- 23825 23826 Some targets require that GCC track the size of each instruction used in 23827 order to generate correct code. Because the final length of an `asm' 23828 is only known by the assembler, GCC must make an estimate as to how big 23829 it will be. The estimate is formed by counting the number of 23830 statements in the pattern of the `asm' and multiplying that by the 23831 length of the longest instruction on that processor. Statements in the 23832 `asm' are identified by newline characters and whatever statement 23833 separator characters are supported by the assembler; on most processors 23834 this is the ``;'' character. 23835 23836 Normally, GCC's estimate is perfectly adequate to ensure that correct 23837 code is generated, but it is possible to confuse the compiler if you use 23838 pseudo instructions or assembler macros that expand into multiple real 23839 instructions or if you use assembler directives that expand to more 23840 space in the object file than would be needed for a single instruction. 23841 If this happens then the assembler will produce a diagnostic saying that 23842 a label is unreachable. 23843 23844 6.41.2 i386 floating point asm operands 23845 --------------------------------------- 23846 23847 There are several rules on the usage of stack-like regs in asm_operands 23848 insns. These rules apply only to the operands that are stack-like regs: 23849 23850 1. Given a set of input regs that die in an asm_operands, it is 23851 necessary to know which are implicitly popped by the asm, and 23852 which must be explicitly popped by gcc. 23853 23854 An input reg that is implicitly popped by the asm must be 23855 explicitly clobbered, unless it is constrained to match an output 23856 operand. 23857 23858 2. For any input reg that is implicitly popped by an asm, it is 23859 necessary to know how to adjust the stack to compensate for the 23860 pop. If any non-popped input is closer to the top of the 23861 reg-stack than the implicitly popped reg, it would not be possible 23862 to know what the stack looked like--it's not clear how the rest of 23863 the stack "slides up". 23864 23865 All implicitly popped input regs must be closer to the top of the 23866 reg-stack than any input that is not implicitly popped. 23867 23868 It is possible that if an input dies in an insn, reload might use 23869 the input reg for an output reload. Consider this example: 23870 23871 asm ("foo" : "=t" (a) : "f" (b)); 23872 23873 This asm says that input B is not popped by the asm, and that the 23874 asm pushes a result onto the reg-stack, i.e., the stack is one 23875 deeper after the asm than it was before. But, it is possible that 23876 reload will think that it can use the same reg for both the input 23877 and the output, if input B dies in this insn. 23878 23879 If any input operand uses the `f' constraint, all output reg 23880 constraints must use the `&' earlyclobber. 23881 23882 The asm above would be written as 23883 23884 asm ("foo" : "=&t" (a) : "f" (b)); 23885 23886 3. Some operands need to be in particular places on the stack. All 23887 output operands fall in this category--there is no other way to 23888 know which regs the outputs appear in unless the user indicates 23889 this in the constraints. 23890 23891 Output operands must specifically indicate which reg an output 23892 appears in after an asm. `=f' is not allowed: the operand 23893 constraints must select a class with a single reg. 23894 23895 4. Output operands may not be "inserted" between existing stack regs. 23896 Since no 387 opcode uses a read/write operand, all output operands 23897 are dead before the asm_operands, and are pushed by the 23898 asm_operands. It makes no sense to push anywhere but the top of 23899 the reg-stack. 23900 23901 Output operands must start at the top of the reg-stack: output 23902 operands may not "skip" a reg. 23903 23904 5. Some asm statements may need extra stack space for internal 23905 calculations. This can be guaranteed by clobbering stack registers 23906 unrelated to the inputs and outputs. 23907 23908 23909 Here are a couple of reasonable asms to want to write. This asm takes 23910 one input, which is internally popped, and produces two outputs. 23911 23912 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 23913 23914 This asm takes two inputs, which are popped by the `fyl2xp1' opcode, 23915 and replaces them with one output. The user must code the `st(1)' 23916 clobber for reg-stack.c to know that `fyl2xp1' pops both inputs. 23917 23918 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 23919 23920 23921 File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 23922 23923 6.42 Constraints for `asm' Operands 23924 =================================== 23925 23926 Here are specific details on what constraint letters you can use with 23927 `asm' operands. Constraints can say whether an operand may be in a 23928 register, and which kinds of register; whether the operand can be a 23929 memory reference, and which kinds of address; whether the operand may 23930 be an immediate constant, and which possible values it may have. 23931 Constraints can also require two operands to match. Side-effects 23932 aren't allowed in operands of inline `asm', unless `<' or `>' 23933 constraints are used, because there is no guarantee that the 23934 side-effects will happen exactly once in an instruction that can update 23935 the addressing register. 23936 23937 * Menu: 23938 23939 * Simple Constraints:: Basic use of constraints. 23940 * Multi-Alternative:: When an insn has two alternative constraint-patterns. 23941 * Modifiers:: More precise control over effects of constraints. 23942 * Machine Constraints:: Special constraints for some particular machines. 23943 23944 23945 File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 23946 23947 6.42.1 Simple Constraints 23948 ------------------------- 23949 23950 The simplest kind of constraint is a string full of letters, each of 23951 which describes one kind of operand that is permitted. Here are the 23952 letters that are allowed: 23953 23954 whitespace 23955 Whitespace characters are ignored and can be inserted at any 23956 position except the first. This enables each alternative for 23957 different operands to be visually aligned in the machine 23958 description even if they have different number of constraints and 23959 modifiers. 23960 23961 `m' 23962 A memory operand is allowed, with any kind of address that the 23963 machine supports in general. Note that the letter used for the 23964 general memory constraint can be re-defined by a back end using 23965 the `TARGET_MEM_CONSTRAINT' macro. 23966 23967 `o' 23968 A memory operand is allowed, but only if the address is 23969 "offsettable". This means that adding a small integer (actually, 23970 the width in bytes of the operand, as determined by its machine 23971 mode) may be added to the address and the result is also a valid 23972 memory address. 23973 23974 For example, an address which is constant is offsettable; so is an 23975 address that is the sum of a register and a constant (as long as a 23976 slightly larger constant is also within the range of 23977 address-offsets supported by the machine); but an autoincrement or 23978 autodecrement address is not offsettable. More complicated 23979 indirect/indexed addresses may or may not be offsettable depending 23980 on the other addressing modes that the machine supports. 23981 23982 Note that in an output operand which can be matched by another 23983 operand, the constraint letter `o' is valid only when accompanied 23984 by both `<' (if the target machine has predecrement addressing) 23985 and `>' (if the target machine has preincrement addressing). 23986 23987 `V' 23988 A memory operand that is not offsettable. In other words, 23989 anything that would fit the `m' constraint but not the `o' 23990 constraint. 23991 23992 `<' 23993 A memory operand with autodecrement addressing (either 23994 predecrement or postdecrement) is allowed. In inline `asm' this 23995 constraint is only allowed if the operand is used exactly once in 23996 an instruction that can handle the side-effects. Not using an 23997 operand with `<' in constraint string in the inline `asm' pattern 23998 at all or using it in multiple instructions isn't valid, because 23999 the side-effects wouldn't be performed or would be performed more 24000 than once. Furthermore, on some targets the operand with `<' in 24001 constraint string must be accompanied by special instruction 24002 suffixes like `%U0' instruction suffix on PowerPC or `%P0' on 24003 IA-64. 24004 24005 `>' 24006 A memory operand with autoincrement addressing (either 24007 preincrement or postincrement) is allowed. In inline `asm' the 24008 same restrictions as for `<' apply. 24009 24010 `r' 24011 A register operand is allowed provided that it is in a general 24012 register. 24013 24014 `i' 24015 An immediate integer operand (one with constant value) is allowed. 24016 This includes symbolic constants whose values will be known only at 24017 assembly time or later. 24018 24019 `n' 24020 An immediate integer operand with a known numeric value is allowed. 24021 Many systems cannot support assembly-time constants for operands 24022 less than a word wide. Constraints for these operands should use 24023 `n' rather than `i'. 24024 24025 `I', `J', `K', ... `P' 24026 Other letters in the range `I' through `P' may be defined in a 24027 machine-dependent fashion to permit immediate integer operands with 24028 explicit integer values in specified ranges. For example, on the 24029 68000, `I' is defined to stand for the range of values 1 to 8. 24030 This is the range permitted as a shift count in the shift 24031 instructions. 24032 24033 `E' 24034 An immediate floating operand (expression code `const_double') is 24035 allowed, but only if the target floating point format is the same 24036 as that of the host machine (on which the compiler is running). 24037 24038 `F' 24039 An immediate floating operand (expression code `const_double' or 24040 `const_vector') is allowed. 24041 24042 `G', `H' 24043 `G' and `H' may be defined in a machine-dependent fashion to 24044 permit immediate floating operands in particular ranges of values. 24045 24046 `s' 24047 An immediate integer operand whose value is not an explicit 24048 integer is allowed. 24049 24050 This might appear strange; if an insn allows a constant operand 24051 with a value not known at compile time, it certainly must allow 24052 any known value. So why use `s' instead of `i'? Sometimes it 24053 allows better code to be generated. 24054 24055 For example, on the 68000 in a fullword instruction it is possible 24056 to use an immediate operand; but if the immediate value is between 24057 -128 and 127, better code results from loading the value into a 24058 register and using the register. This is because the load into 24059 the register can be done with a `moveq' instruction. We arrange 24060 for this to happen by defining the letter `K' to mean "any integer 24061 outside the range -128 to 127", and then specifying `Ks' in the 24062 operand constraints. 24063 24064 `g' 24065 Any register, memory or immediate integer operand is allowed, 24066 except for registers that are not general registers. 24067 24068 `X' 24069 Any operand whatsoever is allowed. 24070 24071 `0', `1', `2', ... `9' 24072 An operand that matches the specified operand number is allowed. 24073 If a digit is used together with letters within the same 24074 alternative, the digit should come last. 24075 24076 This number is allowed to be more than a single digit. If multiple 24077 digits are encountered consecutively, they are interpreted as a 24078 single decimal integer. There is scant chance for ambiguity, 24079 since to-date it has never been desirable that `10' be interpreted 24080 as matching either operand 1 _or_ operand 0. Should this be 24081 desired, one can use multiple alternatives instead. 24082 24083 This is called a "matching constraint" and what it really means is 24084 that the assembler has only a single operand that fills two roles 24085 which `asm' distinguishes. For example, an add instruction uses 24086 two input operands and an output operand, but on most CISC 24087 machines an add instruction really has only two operands, one of 24088 them an input-output operand: 24089 24090 addl #35,r12 24091 24092 Matching constraints are used in these circumstances. More 24093 precisely, the two operands that match must include one input-only 24094 operand and one output-only operand. Moreover, the digit must be a 24095 smaller number than the number of the operand that uses it in the 24096 constraint. 24097 24098 `p' 24099 An operand that is a valid memory address is allowed. This is for 24100 "load address" and "push address" instructions. 24101 24102 `p' in the constraint must be accompanied by `address_operand' as 24103 the predicate in the `match_operand'. This predicate interprets 24104 the mode specified in the `match_operand' as the mode of the memory 24105 reference for which the address would be valid. 24106 24107 OTHER-LETTERS 24108 Other letters can be defined in machine-dependent fashion to stand 24109 for particular classes of registers or other arbitrary operand 24110 types. `d', `a' and `f' are defined on the 68000/68020 to stand 24111 for data, address and floating point registers. 24112 24113 24114 File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 24115 24116 6.42.2 Multiple Alternative Constraints 24117 --------------------------------------- 24118 24119 Sometimes a single instruction has multiple alternative sets of possible 24120 operands. For example, on the 68000, a logical-or instruction can 24121 combine register or an immediate value into memory, or it can combine 24122 any kind of operand into a register; but it cannot combine one memory 24123 location into another. 24124 24125 These constraints are represented as multiple alternatives. An 24126 alternative can be described by a series of letters for each operand. 24127 The overall constraint for an operand is made from the letters for this 24128 operand from the first alternative, a comma, the letters for this 24129 operand from the second alternative, a comma, and so on until the last 24130 alternative. 24131 24132 If all the operands fit any one alternative, the instruction is valid. 24133 Otherwise, for each alternative, the compiler counts how many 24134 instructions must be added to copy the operands so that that 24135 alternative applies. The alternative requiring the least copying is 24136 chosen. If two alternatives need the same amount of copying, the one 24137 that comes first is chosen. These choices can be altered with the `?' 24138 and `!' characters: 24139 24140 `?' 24141 Disparage slightly the alternative that the `?' appears in, as a 24142 choice when no alternative applies exactly. The compiler regards 24143 this alternative as one unit more costly for each `?' that appears 24144 in it. 24145 24146 `!' 24147 Disparage severely the alternative that the `!' appears in. This 24148 alternative can still be used if it fits without reloading, but if 24149 reloading is needed, some other alternative will be used. 24150 24151 24152 File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 24153 24154 6.42.3 Constraint Modifier Characters 24155 ------------------------------------- 24156 24157 Here are constraint modifier characters. 24158 24159 `=' 24160 Means that this operand is write-only for this instruction: the 24161 previous value is discarded and replaced by output data. 24162 24163 `+' 24164 Means that this operand is both read and written by the 24165 instruction. 24166 24167 When the compiler fixes up the operands to satisfy the constraints, 24168 it needs to know which operands are inputs to the instruction and 24169 which are outputs from it. `=' identifies an output; `+' 24170 identifies an operand that is both input and output; all other 24171 operands are assumed to be input only. 24172 24173 If you specify `=' or `+' in a constraint, you put it in the first 24174 character of the constraint string. 24175 24176 `&' 24177 Means (in a particular alternative) that this operand is an 24178 "earlyclobber" operand, which is modified before the instruction is 24179 finished using the input operands. Therefore, this operand may 24180 not lie in a register that is used as an input operand or as part 24181 of any memory address. 24182 24183 `&' applies only to the alternative in which it is written. In 24184 constraints with multiple alternatives, sometimes one alternative 24185 requires `&' while others do not. See, for example, the `movdf' 24186 insn of the 68000. 24187 24188 An input operand can be tied to an earlyclobber operand if its only 24189 use as an input occurs before the early result is written. Adding 24190 alternatives of this form often allows GCC to produce better code 24191 when only some of the inputs can be affected by the earlyclobber. 24192 See, for example, the `mulsi3' insn of the ARM. 24193 24194 `&' does not obviate the need to write `='. 24195 24196 `%' 24197 Declares the instruction to be commutative for this operand and the 24198 following operand. This means that the compiler may interchange 24199 the two operands if that is the cheapest way to make all operands 24200 fit the constraints. GCC can only handle one commutative pair in 24201 an asm; if you use more, the compiler may fail. Note that you 24202 need not use the modifier if the two alternatives are strictly 24203 identical; this would only waste time in the reload pass. The 24204 modifier is not operational after register allocation, so the 24205 result of `define_peephole2' and `define_split's performed after 24206 reload cannot rely on `%' to make the intended insn match. 24207 24208 `#' 24209 Says that all following characters, up to the next comma, are to be 24210 ignored as a constraint. They are significant only for choosing 24211 register preferences. 24212 24213 `*' 24214 Says that the following character should be ignored when choosing 24215 register preferences. `*' has no effect on the meaning of the 24216 constraint as a constraint, and no effect on reloading. 24217 24218 24219 24220 File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 24221 24222 6.42.4 Constraints for Particular Machines 24223 ------------------------------------------ 24224 24225 Whenever possible, you should use the general-purpose constraint letters 24226 in `asm' arguments, since they will convey meaning more readily to 24227 people reading your code. Failing that, use the constraint letters 24228 that usually have very similar meanings across architectures. The most 24229 commonly used constraints are `m' and `r' (for memory and 24230 general-purpose registers respectively; *note Simple Constraints::), and 24231 `I', usually the letter indicating the most common immediate-constant 24232 format. 24233 24234 Each architecture defines additional constraints. These constraints 24235 are used by the compiler itself for instruction generation, as well as 24236 for `asm' statements; therefore, some of the constraints are not 24237 particularly useful for `asm'. Here is a summary of some of the 24238 machine-dependent constraints available on some particular machines; it 24239 includes both constraints that are useful for `asm' and constraints 24240 that aren't. The compiler source file mentioned in the table heading 24241 for each architecture is the definitive reference for the meanings of 24242 that architecture's constraints. 24243 24244 _ARM family--`config/arm/arm.h'_ 24245 24246 `f' 24247 Floating-point register 24248 24249 `w' 24250 VFP floating-point register 24251 24252 `F' 24253 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 24254 4.0, 5.0 or 10.0 24255 24256 `G' 24257 Floating-point constant that would satisfy the constraint `F' 24258 if it were negated 24259 24260 `I' 24261 Integer that is valid as an immediate operand in a data 24262 processing instruction. That is, an integer in the range 0 24263 to 255 rotated by a multiple of 2 24264 24265 `J' 24266 Integer in the range -4095 to 4095 24267 24268 `K' 24269 Integer that satisfies constraint `I' when inverted (ones 24270 complement) 24271 24272 `L' 24273 Integer that satisfies constraint `I' when negated (twos 24274 complement) 24275 24276 `M' 24277 Integer in the range 0 to 32 24278 24279 `Q' 24280 A memory reference where the exact address is in a single 24281 register (``m'' is preferable for `asm' statements) 24282 24283 `R' 24284 An item in the constant pool 24285 24286 `S' 24287 A symbol in the text segment of the current file 24288 24289 `Uv' 24290 A memory reference suitable for VFP load/store insns 24291 (reg+constant offset) 24292 24293 `Uy' 24294 A memory reference suitable for iWMMXt load/store 24295 instructions. 24296 24297 `Uq' 24298 A memory reference suitable for the ARMv4 ldrsb instruction. 24299 24300 _AVR family--`config/avr/constraints.md'_ 24301 24302 `l' 24303 Registers from r0 to r15 24304 24305 `a' 24306 Registers from r16 to r23 24307 24308 `d' 24309 Registers from r16 to r31 24310 24311 `w' 24312 Registers from r24 to r31. These registers can be used in 24313 `adiw' command 24314 24315 `e' 24316 Pointer register (r26-r31) 24317 24318 `b' 24319 Base pointer register (r28-r31) 24320 24321 `q' 24322 Stack pointer register (SPH:SPL) 24323 24324 `t' 24325 Temporary register r0 24326 24327 `x' 24328 Register pair X (r27:r26) 24329 24330 `y' 24331 Register pair Y (r29:r28) 24332 24333 `z' 24334 Register pair Z (r31:r30) 24335 24336 `I' 24337 Constant greater than -1, less than 64 24338 24339 `J' 24340 Constant greater than -64, less than 1 24341 24342 `K' 24343 Constant integer 2 24344 24345 `L' 24346 Constant integer 0 24347 24348 `M' 24349 Constant that fits in 8 bits 24350 24351 `N' 24352 Constant integer -1 24353 24354 `O' 24355 Constant integer 8, 16, or 24 24356 24357 `P' 24358 Constant integer 1 24359 24360 `G' 24361 A floating point constant 0.0 24362 24363 `R' 24364 Integer constant in the range -6 ... 5. 24365 24366 `Q' 24367 A memory address based on Y or Z pointer with displacement. 24368 24369 _CRX Architecture--`config/crx/crx.h'_ 24370 24371 `b' 24372 Registers from r0 to r14 (registers without stack pointer) 24373 24374 `l' 24375 Register r16 (64-bit accumulator lo register) 24376 24377 `h' 24378 Register r17 (64-bit accumulator hi register) 24379 24380 `k' 24381 Register pair r16-r17. (64-bit accumulator lo-hi pair) 24382 24383 `I' 24384 Constant that fits in 3 bits 24385 24386 `J' 24387 Constant that fits in 4 bits 24388 24389 `K' 24390 Constant that fits in 5 bits 24391 24392 `L' 24393 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 24394 24395 `G' 24396 Floating point constant that is legal for store immediate 24397 24398 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 24399 24400 `a' 24401 General register 1 24402 24403 `f' 24404 Floating point register 24405 24406 `q' 24407 Shift amount register 24408 24409 `x' 24410 Floating point register (deprecated) 24411 24412 `y' 24413 Upper floating point register (32-bit), floating point 24414 register (64-bit) 24415 24416 `Z' 24417 Any register 24418 24419 `I' 24420 Signed 11-bit integer constant 24421 24422 `J' 24423 Signed 14-bit integer constant 24424 24425 `K' 24426 Integer constant that can be deposited with a `zdepi' 24427 instruction 24428 24429 `L' 24430 Signed 5-bit integer constant 24431 24432 `M' 24433 Integer constant 0 24434 24435 `N' 24436 Integer constant that can be loaded with a `ldil' instruction 24437 24438 `O' 24439 Integer constant whose value plus one is a power of 2 24440 24441 `P' 24442 Integer constant that can be used for `and' operations in 24443 `depi' and `extru' instructions 24444 24445 `S' 24446 Integer constant 31 24447 24448 `U' 24449 Integer constant 63 24450 24451 `G' 24452 Floating-point constant 0.0 24453 24454 `A' 24455 A `lo_sum' data-linkage-table memory operand 24456 24457 `Q' 24458 A memory operand that can be used as the destination operand 24459 of an integer store instruction 24460 24461 `R' 24462 A scaled or unscaled indexed memory operand 24463 24464 `T' 24465 A memory operand for floating-point loads and stores 24466 24467 `W' 24468 A register indirect memory operand 24469 24470 _picoChip family--`picochip.h'_ 24471 24472 `k' 24473 Stack register. 24474 24475 `f' 24476 Pointer register. A register which can be used to access 24477 memory without supplying an offset. Any other register can 24478 be used to access memory, but will need a constant offset. 24479 In the case of the offset being zero, it is more efficient to 24480 use a pointer register, since this reduces code size. 24481 24482 `t' 24483 A twin register. A register which may be paired with an 24484 adjacent register to create a 32-bit register. 24485 24486 `a' 24487 Any absolute memory address (e.g., symbolic constant, symbolic 24488 constant + offset). 24489 24490 `I' 24491 4-bit signed integer. 24492 24493 `J' 24494 4-bit unsigned integer. 24495 24496 `K' 24497 8-bit signed integer. 24498 24499 `M' 24500 Any constant whose absolute value is no greater than 4-bits. 24501 24502 `N' 24503 10-bit signed integer 24504 24505 `O' 24506 16-bit signed integer. 24507 24508 24509 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 24510 24511 `b' 24512 Address base register 24513 24514 `d' 24515 Floating point register (containing 64-bit value) 24516 24517 `f' 24518 Floating point register (containing 32-bit value) 24519 24520 `v' 24521 Altivec vector register 24522 24523 `wd' 24524 VSX vector register to hold vector double data 24525 24526 `wf' 24527 VSX vector register to hold vector float data 24528 24529 `ws' 24530 VSX vector register to hold scalar float data 24531 24532 `wa' 24533 Any VSX register 24534 24535 `h' 24536 `MQ', `CTR', or `LINK' register 24537 24538 `q' 24539 `MQ' register 24540 24541 `c' 24542 `CTR' register 24543 24544 `l' 24545 `LINK' register 24546 24547 `x' 24548 `CR' register (condition register) number 0 24549 24550 `y' 24551 `CR' register (condition register) 24552 24553 `z' 24554 `XER[CA]' carry bit (part of the XER register) 24555 24556 `I' 24557 Signed 16-bit constant 24558 24559 `J' 24560 Unsigned 16-bit constant shifted left 16 bits (use `L' 24561 instead for `SImode' constants) 24562 24563 `K' 24564 Unsigned 16-bit constant 24565 24566 `L' 24567 Signed 16-bit constant shifted left 16 bits 24568 24569 `M' 24570 Constant larger than 31 24571 24572 `N' 24573 Exact power of 2 24574 24575 `O' 24576 Zero 24577 24578 `P' 24579 Constant whose negation is a signed 16-bit constant 24580 24581 `G' 24582 Floating point constant that can be loaded into a register 24583 with one instruction per word 24584 24585 `H' 24586 Integer/Floating point constant that can be loaded into a 24587 register using three instructions 24588 24589 `m' 24590 Memory operand. Normally, `m' does not allow addresses that 24591 update the base register. If `<' or `>' constraint is also 24592 used, they are allowed and therefore on PowerPC targets in 24593 that case it is only safe to use `m<>' in an `asm' statement 24594 if that `asm' statement accesses the operand exactly once. 24595 The `asm' statement must also use `%U<OPNO>' as a placeholder 24596 for the "update" flag in the corresponding load or store 24597 instruction. For example: 24598 24599 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 24600 24601 is correct but: 24602 24603 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 24604 24605 is not. 24606 24607 `es' 24608 A "stable" memory operand; that is, one which does not 24609 include any automodification of the base register. This used 24610 to be useful when `m' allowed automodification of the base 24611 register, but as those are now only allowed when `<' or `>' 24612 is used, `es' is basically the same as `m' without `<' and 24613 `>'. 24614 24615 `Q' 24616 Memory operand that is an offset from a register (it is 24617 usually better to use `m' or `es' in `asm' statements) 24618 24619 `Z' 24620 Memory operand that is an indexed or indirect from a register 24621 (it is usually better to use `m' or `es' in `asm' statements) 24622 24623 `R' 24624 AIX TOC entry 24625 24626 `a' 24627 Address operand that is an indexed or indirect from a 24628 register (`p' is preferable for `asm' statements) 24629 24630 `S' 24631 Constant suitable as a 64-bit mask operand 24632 24633 `T' 24634 Constant suitable as a 32-bit mask operand 24635 24636 `U' 24637 System V Release 4 small data area reference 24638 24639 `t' 24640 AND masks that can be performed by two rldic{l, r} 24641 instructions 24642 24643 `W' 24644 Vector constant that does not require memory 24645 24646 `j' 24647 Vector constant that is all zeros. 24648 24649 24650 _Intel 386--`config/i386/constraints.md'_ 24651 24652 `R' 24653 Legacy register--the eight integer registers available on all 24654 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 24655 24656 `q' 24657 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 24658 `c', and `d'; in 64-bit mode, any integer register. 24659 24660 `Q' 24661 Any register accessible as `Rh': `a', `b', `c', and `d'. 24662 24663 `a' 24664 The `a' register. 24665 24666 `b' 24667 The `b' register. 24668 24669 `c' 24670 The `c' register. 24671 24672 `d' 24673 The `d' register. 24674 24675 `S' 24676 The `si' register. 24677 24678 `D' 24679 The `di' register. 24680 24681 `A' 24682 The `a' and `d' registers. This class is used for 24683 instructions that return double word results in the `ax:dx' 24684 register pair. Single word values will be allocated either 24685 in `ax' or `dx'. For example on i386 the following 24686 implements `rdtsc': 24687 24688 unsigned long long rdtsc (void) 24689 { 24690 unsigned long long tick; 24691 __asm__ __volatile__("rdtsc":"=A"(tick)); 24692 return tick; 24693 } 24694 24695 This is not correct on x86_64 as it would allocate tick in 24696 either `ax' or `dx'. You have to use the following variant 24697 instead: 24698 24699 unsigned long long rdtsc (void) 24700 { 24701 unsigned int tickl, tickh; 24702 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 24703 return ((unsigned long long)tickh << 32)|tickl; 24704 } 24705 24706 `f' 24707 Any 80387 floating-point (stack) register. 24708 24709 `t' 24710 Top of 80387 floating-point stack (`%st(0)'). 24711 24712 `u' 24713 Second from top of 80387 floating-point stack (`%st(1)'). 24714 24715 `y' 24716 Any MMX register. 24717 24718 `x' 24719 Any SSE register. 24720 24721 `Yz' 24722 First SSE register (`%xmm0'). 24723 24724 `I' 24725 Integer constant in the range 0 ... 31, for 32-bit shifts. 24726 24727 `J' 24728 Integer constant in the range 0 ... 63, for 64-bit shifts. 24729 24730 `K' 24731 Signed 8-bit integer constant. 24732 24733 `L' 24734 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 24735 24736 `M' 24737 0, 1, 2, or 3 (shifts for the `lea' instruction). 24738 24739 `N' 24740 Unsigned 8-bit integer constant (for `in' and `out' 24741 instructions). 24742 24743 `G' 24744 Standard 80387 floating point constant. 24745 24746 `C' 24747 Standard SSE floating point constant. 24748 24749 `e' 24750 32-bit signed integer constant, or a symbolic reference known 24751 to fit that range (for immediate operands in sign-extending 24752 x86-64 instructions). 24753 24754 `Z' 24755 32-bit unsigned integer constant, or a symbolic reference 24756 known to fit that range (for immediate operands in 24757 zero-extending x86-64 instructions). 24758 24759 24760 _Intel IA-64--`config/ia64/ia64.h'_ 24761 24762 `a' 24763 General register `r0' to `r3' for `addl' instruction 24764 24765 `b' 24766 Branch register 24767 24768 `c' 24769 Predicate register (`c' as in "conditional") 24770 24771 `d' 24772 Application register residing in M-unit 24773 24774 `e' 24775 Application register residing in I-unit 24776 24777 `f' 24778 Floating-point register 24779 24780 `m' 24781 Memory operand. If used together with `<' or `>', the 24782 operand can have postincrement and postdecrement which 24783 require printing with `%Pn' on IA-64. 24784 24785 `G' 24786 Floating-point constant 0.0 or 1.0 24787 24788 `I' 24789 14-bit signed integer constant 24790 24791 `J' 24792 22-bit signed integer constant 24793 24794 `K' 24795 8-bit signed integer constant for logical instructions 24796 24797 `L' 24798 8-bit adjusted signed integer constant for compare pseudo-ops 24799 24800 `M' 24801 6-bit unsigned integer constant for shift counts 24802 24803 `N' 24804 9-bit signed integer constant for load and store 24805 postincrements 24806 24807 `O' 24808 The constant zero 24809 24810 `P' 24811 0 or -1 for `dep' instruction 24812 24813 `Q' 24814 Non-volatile memory for floating-point loads and stores 24815 24816 `R' 24817 Integer constant in the range 1 to 4 for `shladd' instruction 24818 24819 `S' 24820 Memory operand except postincrement and postdecrement. This 24821 is now roughly the same as `m' when not used together with `<' 24822 or `>'. 24823 24824 _FRV--`config/frv/frv.h'_ 24825 24826 `a' 24827 Register in the class `ACC_REGS' (`acc0' to `acc7'). 24828 24829 `b' 24830 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 24831 24832 `c' 24833 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 24834 to `icc3'). 24835 24836 `d' 24837 Register in the class `GPR_REGS' (`gr0' to `gr63'). 24838 24839 `e' 24840 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 24841 registers are excluded not in the class but through the use 24842 of a machine mode larger than 4 bytes. 24843 24844 `f' 24845 Register in the class `FPR_REGS' (`fr0' to `fr63'). 24846 24847 `h' 24848 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 24849 registers are excluded not in the class but through the use 24850 of a machine mode larger than 4 bytes. 24851 24852 `l' 24853 Register in the class `LR_REG' (the `lr' register). 24854 24855 `q' 24856 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 24857 Register numbers not divisible by 4 are excluded not in the 24858 class but through the use of a machine mode larger than 8 24859 bytes. 24860 24861 `t' 24862 Register in the class `ICC_REGS' (`icc0' to `icc3'). 24863 24864 `u' 24865 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 24866 24867 `v' 24868 Register in the class `ICR_REGS' (`cc4' to `cc7'). 24869 24870 `w' 24871 Register in the class `FCR_REGS' (`cc0' to `cc3'). 24872 24873 `x' 24874 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 24875 Register numbers not divisible by 4 are excluded not in the 24876 class but through the use of a machine mode larger than 8 24877 bytes. 24878 24879 `z' 24880 Register in the class `SPR_REGS' (`lcr' and `lr'). 24881 24882 `A' 24883 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 24884 24885 `B' 24886 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 24887 24888 `C' 24889 Register in the class `CR_REGS' (`cc0' to `cc7'). 24890 24891 `G' 24892 Floating point constant zero 24893 24894 `I' 24895 6-bit signed integer constant 24896 24897 `J' 24898 10-bit signed integer constant 24899 24900 `L' 24901 16-bit signed integer constant 24902 24903 `M' 24904 16-bit unsigned integer constant 24905 24906 `N' 24907 12-bit signed integer constant that is negative--i.e. in the 24908 range of -2048 to -1 24909 24910 `O' 24911 Constant zero 24912 24913 `P' 24914 12-bit signed integer constant that is greater than 24915 zero--i.e. in the range of 1 to 2047. 24916 24917 24918 _Blackfin family--`config/bfin/constraints.md'_ 24919 24920 `a' 24921 P register 24922 24923 `d' 24924 D register 24925 24926 `z' 24927 A call clobbered P register. 24928 24929 `qN' 24930 A single register. If N is in the range 0 to 7, the 24931 corresponding D register. If it is `A', then the register P0. 24932 24933 `D' 24934 Even-numbered D register 24935 24936 `W' 24937 Odd-numbered D register 24938 24939 `e' 24940 Accumulator register. 24941 24942 `A' 24943 Even-numbered accumulator register. 24944 24945 `B' 24946 Odd-numbered accumulator register. 24947 24948 `b' 24949 I register 24950 24951 `v' 24952 B register 24953 24954 `f' 24955 M register 24956 24957 `c' 24958 Registers used for circular buffering, i.e. I, B, or L 24959 registers. 24960 24961 `C' 24962 The CC register. 24963 24964 `t' 24965 LT0 or LT1. 24966 24967 `k' 24968 LC0 or LC1. 24969 24970 `u' 24971 LB0 or LB1. 24972 24973 `x' 24974 Any D, P, B, M, I or L register. 24975 24976 `y' 24977 Additional registers typically used only in prologues and 24978 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 24979 USP. 24980 24981 `w' 24982 Any register except accumulators or CC. 24983 24984 `Ksh' 24985 Signed 16 bit integer (in the range -32768 to 32767) 24986 24987 `Kuh' 24988 Unsigned 16 bit integer (in the range 0 to 65535) 24989 24990 `Ks7' 24991 Signed 7 bit integer (in the range -64 to 63) 24992 24993 `Ku7' 24994 Unsigned 7 bit integer (in the range 0 to 127) 24995 24996 `Ku5' 24997 Unsigned 5 bit integer (in the range 0 to 31) 24998 24999 `Ks4' 25000 Signed 4 bit integer (in the range -8 to 7) 25001 25002 `Ks3' 25003 Signed 3 bit integer (in the range -3 to 4) 25004 25005 `Ku3' 25006 Unsigned 3 bit integer (in the range 0 to 7) 25007 25008 `PN' 25009 Constant N, where N is a single-digit constant in the range 0 25010 to 4. 25011 25012 `PA' 25013 An integer equal to one of the MACFLAG_XXX constants that is 25014 suitable for use with either accumulator. 25015 25016 `PB' 25017 An integer equal to one of the MACFLAG_XXX constants that is 25018 suitable for use only with accumulator A1. 25019 25020 `M1' 25021 Constant 255. 25022 25023 `M2' 25024 Constant 65535. 25025 25026 `J' 25027 An integer constant with exactly a single bit set. 25028 25029 `L' 25030 An integer constant with all bits set except exactly one. 25031 25032 `H' 25033 25034 `Q' 25035 Any SYMBOL_REF. 25036 25037 _M32C--`config/m32c/m32c.c'_ 25038 25039 `Rsp' 25040 `Rfb' 25041 `Rsb' 25042 `$sp', `$fb', `$sb'. 25043 25044 `Rcr' 25045 Any control register, when they're 16 bits wide (nothing if 25046 control registers are 24 bits wide) 25047 25048 `Rcl' 25049 Any control register, when they're 24 bits wide. 25050 25051 `R0w' 25052 `R1w' 25053 `R2w' 25054 `R3w' 25055 $r0, $r1, $r2, $r3. 25056 25057 `R02' 25058 $r0 or $r2, or $r2r0 for 32 bit values. 25059 25060 `R13' 25061 $r1 or $r3, or $r3r1 for 32 bit values. 25062 25063 `Rdi' 25064 A register that can hold a 64 bit value. 25065 25066 `Rhl' 25067 $r0 or $r1 (registers with addressable high/low bytes) 25068 25069 `R23' 25070 $r2 or $r3 25071 25072 `Raa' 25073 Address registers 25074 25075 `Raw' 25076 Address registers when they're 16 bits wide. 25077 25078 `Ral' 25079 Address registers when they're 24 bits wide. 25080 25081 `Rqi' 25082 Registers that can hold QI values. 25083 25084 `Rad' 25085 Registers that can be used with displacements ($a0, $a1, $sb). 25086 25087 `Rsi' 25088 Registers that can hold 32 bit values. 25089 25090 `Rhi' 25091 Registers that can hold 16 bit values. 25092 25093 `Rhc' 25094 Registers chat can hold 16 bit values, including all control 25095 registers. 25096 25097 `Rra' 25098 $r0 through R1, plus $a0 and $a1. 25099 25100 `Rfl' 25101 The flags register. 25102 25103 `Rmm' 25104 The memory-based pseudo-registers $mem0 through $mem15. 25105 25106 `Rpi' 25107 Registers that can hold pointers (16 bit registers for r8c, 25108 m16c; 24 bit registers for m32cm, m32c). 25109 25110 `Rpa' 25111 Matches multiple registers in a PARALLEL to form a larger 25112 register. Used to match function return values. 25113 25114 `Is3' 25115 -8 ... 7 25116 25117 `IS1' 25118 -128 ... 127 25119 25120 `IS2' 25121 -32768 ... 32767 25122 25123 `IU2' 25124 0 ... 65535 25125 25126 `In4' 25127 -8 ... -1 or 1 ... 8 25128 25129 `In5' 25130 -16 ... -1 or 1 ... 16 25131 25132 `In6' 25133 -32 ... -1 or 1 ... 32 25134 25135 `IM2' 25136 -65536 ... -1 25137 25138 `Ilb' 25139 An 8 bit value with exactly one bit set. 25140 25141 `Ilw' 25142 A 16 bit value with exactly one bit set. 25143 25144 `Sd' 25145 The common src/dest memory addressing modes. 25146 25147 `Sa' 25148 Memory addressed using $a0 or $a1. 25149 25150 `Si' 25151 Memory addressed with immediate addresses. 25152 25153 `Ss' 25154 Memory addressed using the stack pointer ($sp). 25155 25156 `Sf' 25157 Memory addressed using the frame base register ($fb). 25158 25159 `Ss' 25160 Memory addressed using the small base register ($sb). 25161 25162 `S1' 25163 $r1h 25164 25165 _MeP--`config/mep/constraints.md'_ 25166 25167 `a' 25168 The $sp register. 25169 25170 `b' 25171 The $tp register. 25172 25173 `c' 25174 Any control register. 25175 25176 `d' 25177 Either the $hi or the $lo register. 25178 25179 `em' 25180 Coprocessor registers that can be directly loaded ($c0-$c15). 25181 25182 `ex' 25183 Coprocessor registers that can be moved to each other. 25184 25185 `er' 25186 Coprocessor registers that can be moved to core registers. 25187 25188 `h' 25189 The $hi register. 25190 25191 `j' 25192 The $rpc register. 25193 25194 `l' 25195 The $lo register. 25196 25197 `t' 25198 Registers which can be used in $tp-relative addressing. 25199 25200 `v' 25201 The $gp register. 25202 25203 `x' 25204 The coprocessor registers. 25205 25206 `y' 25207 The coprocessor control registers. 25208 25209 `z' 25210 The $0 register. 25211 25212 `A' 25213 User-defined register set A. 25214 25215 `B' 25216 User-defined register set B. 25217 25218 `C' 25219 User-defined register set C. 25220 25221 `D' 25222 User-defined register set D. 25223 25224 `I' 25225 Offsets for $gp-rel addressing. 25226 25227 `J' 25228 Constants that can be used directly with boolean insns. 25229 25230 `K' 25231 Constants that can be moved directly to registers. 25232 25233 `L' 25234 Small constants that can be added to registers. 25235 25236 `M' 25237 Long shift counts. 25238 25239 `N' 25240 Small constants that can be compared to registers. 25241 25242 `O' 25243 Constants that can be loaded into the top half of registers. 25244 25245 `S' 25246 Signed 8-bit immediates. 25247 25248 `T' 25249 Symbols encoded for $tp-rel or $gp-rel addressing. 25250 25251 `U' 25252 Non-constant addresses for loading/saving coprocessor 25253 registers. 25254 25255 `W' 25256 The top half of a symbol's value. 25257 25258 `Y' 25259 A register indirect address without offset. 25260 25261 `Z' 25262 Symbolic references to the control bus. 25263 25264 25265 _MicroBlaze--`config/microblaze/constraints.md'_ 25266 25267 `d' 25268 A general register (`r0' to `r31'). 25269 25270 `z' 25271 A status register (`rmsr', `$fcc1' to `$fcc7'). 25272 25273 25274 _MIPS--`config/mips/constraints.md'_ 25275 25276 `d' 25277 An address register. This is equivalent to `r' unless 25278 generating MIPS16 code. 25279 25280 `f' 25281 A floating-point register (if available). 25282 25283 `h' 25284 Formerly the `hi' register. This constraint is no longer 25285 supported. 25286 25287 `l' 25288 The `lo' register. Use this register to store values that are 25289 no bigger than a word. 25290 25291 `x' 25292 The concatenated `hi' and `lo' registers. Use this register 25293 to store doubleword values. 25294 25295 `c' 25296 A register suitable for use in an indirect jump. This will 25297 always be `$25' for `-mabicalls'. 25298 25299 `v' 25300 Register `$3'. Do not use this constraint in new code; it is 25301 retained only for compatibility with glibc. 25302 25303 `y' 25304 Equivalent to `r'; retained for backwards compatibility. 25305 25306 `z' 25307 A floating-point condition code register. 25308 25309 `I' 25310 A signed 16-bit constant (for arithmetic instructions). 25311 25312 `J' 25313 Integer zero. 25314 25315 `K' 25316 An unsigned 16-bit constant (for logic instructions). 25317 25318 `L' 25319 A signed 32-bit constant in which the lower 16 bits are zero. 25320 Such constants can be loaded using `lui'. 25321 25322 `M' 25323 A constant that cannot be loaded using `lui', `addiu' or 25324 `ori'. 25325 25326 `N' 25327 A constant in the range -65535 to -1 (inclusive). 25328 25329 `O' 25330 A signed 15-bit constant. 25331 25332 `P' 25333 A constant in the range 1 to 65535 (inclusive). 25334 25335 `G' 25336 Floating-point zero. 25337 25338 `R' 25339 An address that can be used in a non-macro load or store. 25340 25341 _Motorola 680x0--`config/m68k/constraints.md'_ 25342 25343 `a' 25344 Address register 25345 25346 `d' 25347 Data register 25348 25349 `f' 25350 68881 floating-point register, if available 25351 25352 `I' 25353 Integer in the range 1 to 8 25354 25355 `J' 25356 16-bit signed number 25357 25358 `K' 25359 Signed number whose magnitude is greater than 0x80 25360 25361 `L' 25362 Integer in the range -8 to -1 25363 25364 `M' 25365 Signed number whose magnitude is greater than 0x100 25366 25367 `N' 25368 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 25369 25370 `O' 25371 16 (for rotate using swap) 25372 25373 `P' 25374 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 25375 25376 `R' 25377 Numbers that mov3q can handle 25378 25379 `G' 25380 Floating point constant that is not a 68881 constant 25381 25382 `S' 25383 Operands that satisfy 'm' when -mpcrel is in effect 25384 25385 `T' 25386 Operands that satisfy 's' when -mpcrel is not in effect 25387 25388 `Q' 25389 Address register indirect addressing mode 25390 25391 `U' 25392 Register offset addressing 25393 25394 `W' 25395 const_call_operand 25396 25397 `Cs' 25398 symbol_ref or const 25399 25400 `Ci' 25401 const_int 25402 25403 `C0' 25404 const_int 0 25405 25406 `Cj' 25407 Range of signed numbers that don't fit in 16 bits 25408 25409 `Cmvq' 25410 Integers valid for mvq 25411 25412 `Capsw' 25413 Integers valid for a moveq followed by a swap 25414 25415 `Cmvz' 25416 Integers valid for mvz 25417 25418 `Cmvs' 25419 Integers valid for mvs 25420 25421 `Ap' 25422 push_operand 25423 25424 `Ac' 25425 Non-register operands allowed in clr 25426 25427 25428 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 25429 25430 `a' 25431 Register `a' 25432 25433 `b' 25434 Register `b' 25435 25436 `d' 25437 Register `d' 25438 25439 `q' 25440 An 8-bit register 25441 25442 `t' 25443 Temporary soft register _.tmp 25444 25445 `u' 25446 A soft register _.d1 to _.d31 25447 25448 `w' 25449 Stack pointer register 25450 25451 `x' 25452 Register `x' 25453 25454 `y' 25455 Register `y' 25456 25457 `z' 25458 Pseudo register `z' (replaced by `x' or `y' at the end) 25459 25460 `A' 25461 An address register: x, y or z 25462 25463 `B' 25464 An address register: x or y 25465 25466 `D' 25467 Register pair (x:d) to form a 32-bit value 25468 25469 `L' 25470 Constants in the range -65536 to 65535 25471 25472 `M' 25473 Constants whose 16-bit low part is zero 25474 25475 `N' 25476 Constant integer 1 or -1 25477 25478 `O' 25479 Constant integer 16 25480 25481 `P' 25482 Constants in the range -8 to 2 25483 25484 25485 _Moxie--`config/moxie/constraints.md'_ 25486 25487 `A' 25488 An absolute address 25489 25490 `B' 25491 An offset address 25492 25493 `W' 25494 A register indirect memory operand 25495 25496 `I' 25497 A constant in the range of 0 to 255. 25498 25499 `N' 25500 A constant in the range of 0 to -255. 25501 25502 25503 _PDP-11--`config/pdp11/constraints.md'_ 25504 25505 `a' 25506 Floating point registers AC0 through AC3. These can be 25507 loaded from/to memory with a single instruction. 25508 25509 `d' 25510 Odd numbered general registers (R1, R3, R5). These are used 25511 for 16-bit multiply operations. 25512 25513 `f' 25514 Any of the floating point registers (AC0 through AC5). 25515 25516 `G' 25517 Floating point constant 0. 25518 25519 `I' 25520 An integer constant that fits in 16 bits. 25521 25522 `J' 25523 An integer constant whose low order 16 bits are zero. 25524 25525 `K' 25526 An integer constant that does not meet the constraints for 25527 codes `I' or `J'. 25528 25529 `L' 25530 The integer constant 1. 25531 25532 `M' 25533 The integer constant -1. 25534 25535 `N' 25536 The integer constant 0. 25537 25538 `O' 25539 Integer constants -4 through -1 and 1 through 4; shifts by 25540 these amounts are handled as multiple single-bit shifts 25541 rather than a single variable-length shift. 25542 25543 `Q' 25544 A memory reference which requires an additional word (address 25545 or offset) after the opcode. 25546 25547 `R' 25548 A memory reference that is encoded within the opcode. 25549 25550 25551 _RX--`config/rx/constraints.md'_ 25552 25553 `Q' 25554 An address which does not involve register indirect 25555 addressing or pre/post increment/decrement addressing. 25556 25557 `Symbol' 25558 A symbol reference. 25559 25560 `Int08' 25561 A constant in the range -256 to 255, inclusive. 25562 25563 `Sint08' 25564 A constant in the range -128 to 127, inclusive. 25565 25566 `Sint16' 25567 A constant in the range -32768 to 32767, inclusive. 25568 25569 `Sint24' 25570 A constant in the range -8388608 to 8388607, inclusive. 25571 25572 `Uint04' 25573 A constant in the range 0 to 15, inclusive. 25574 25575 25576 _SPARC--`config/sparc/sparc.h'_ 25577 25578 `f' 25579 Floating-point register on the SPARC-V8 architecture and 25580 lower floating-point register on the SPARC-V9 architecture. 25581 25582 `e' 25583 Floating-point register. It is equivalent to `f' on the 25584 SPARC-V8 architecture and contains both lower and upper 25585 floating-point registers on the SPARC-V9 architecture. 25586 25587 `c' 25588 Floating-point condition code register. 25589 25590 `d' 25591 Lower floating-point register. It is only valid on the 25592 SPARC-V9 architecture when the Visual Instruction Set is 25593 available. 25594 25595 `b' 25596 Floating-point register. It is only valid on the SPARC-V9 25597 architecture when the Visual Instruction Set is available. 25598 25599 `h' 25600 64-bit global or out register for the SPARC-V8+ architecture. 25601 25602 `D' 25603 A vector constant 25604 25605 `I' 25606 Signed 13-bit constant 25607 25608 `J' 25609 Zero 25610 25611 `K' 25612 32-bit constant with the low 12 bits clear (a constant that 25613 can be loaded with the `sethi' instruction) 25614 25615 `L' 25616 A constant in the range supported by `movcc' instructions 25617 25618 `M' 25619 A constant in the range supported by `movrcc' instructions 25620 25621 `N' 25622 Same as `K', except that it verifies that bits that are not 25623 in the lower 32-bit range are all zero. Must be used instead 25624 of `K' for modes wider than `SImode' 25625 25626 `O' 25627 The constant 4096 25628 25629 `G' 25630 Floating-point zero 25631 25632 `H' 25633 Signed 13-bit constant, sign-extended to 32 or 64 bits 25634 25635 `Q' 25636 Floating-point constant whose integral representation can be 25637 moved into an integer register using a single sethi 25638 instruction 25639 25640 `R' 25641 Floating-point constant whose integral representation can be 25642 moved into an integer register using a single mov instruction 25643 25644 `S' 25645 Floating-point constant whose integral representation can be 25646 moved into an integer register using a high/lo_sum 25647 instruction sequence 25648 25649 `T' 25650 Memory address aligned to an 8-byte boundary 25651 25652 `U' 25653 Even register 25654 25655 `W' 25656 Memory address for `e' constraint registers 25657 25658 `Y' 25659 Vector zero 25660 25661 25662 _SPU--`config/spu/spu.h'_ 25663 25664 `a' 25665 An immediate which can be loaded with the il/ila/ilh/ilhu 25666 instructions. const_int is treated as a 64 bit value. 25667 25668 `c' 25669 An immediate for and/xor/or instructions. const_int is 25670 treated as a 64 bit value. 25671 25672 `d' 25673 An immediate for the `iohl' instruction. const_int is 25674 treated as a 64 bit value. 25675 25676 `f' 25677 An immediate which can be loaded with `fsmbi'. 25678 25679 `A' 25680 An immediate which can be loaded with the il/ila/ilh/ilhu 25681 instructions. const_int is treated as a 32 bit value. 25682 25683 `B' 25684 An immediate for most arithmetic instructions. const_int is 25685 treated as a 32 bit value. 25686 25687 `C' 25688 An immediate for and/xor/or instructions. const_int is 25689 treated as a 32 bit value. 25690 25691 `D' 25692 An immediate for the `iohl' instruction. const_int is 25693 treated as a 32 bit value. 25694 25695 `I' 25696 A constant in the range [-64, 63] for shift/rotate 25697 instructions. 25698 25699 `J' 25700 An unsigned 7-bit constant for conversion/nop/channel 25701 instructions. 25702 25703 `K' 25704 A signed 10-bit constant for most arithmetic instructions. 25705 25706 `M' 25707 A signed 16 bit immediate for `stop'. 25708 25709 `N' 25710 An unsigned 16-bit constant for `iohl' and `fsmbi'. 25711 25712 `O' 25713 An unsigned 7-bit constant whose 3 least significant bits are 25714 0. 25715 25716 `P' 25717 An unsigned 3-bit constant for 16-byte rotates and shifts 25718 25719 `R' 25720 Call operand, reg, for indirect calls 25721 25722 `S' 25723 Call operand, symbol, for relative calls. 25724 25725 `T' 25726 Call operand, const_int, for absolute calls. 25727 25728 `U' 25729 An immediate which can be loaded with the il/ila/ilh/ilhu 25730 instructions. const_int is sign extended to 128 bit. 25731 25732 `W' 25733 An immediate for shift and rotate instructions. const_int is 25734 treated as a 32 bit value. 25735 25736 `Y' 25737 An immediate for and/xor/or instructions. const_int is sign 25738 extended as a 128 bit. 25739 25740 `Z' 25741 An immediate for the `iohl' instruction. const_int is sign 25742 extended to 128 bit. 25743 25744 25745 _S/390 and zSeries--`config/s390/s390.h'_ 25746 25747 `a' 25748 Address register (general purpose register except r0) 25749 25750 `c' 25751 Condition code register 25752 25753 `d' 25754 Data register (arbitrary general purpose register) 25755 25756 `f' 25757 Floating-point register 25758 25759 `I' 25760 Unsigned 8-bit constant (0-255) 25761 25762 `J' 25763 Unsigned 12-bit constant (0-4095) 25764 25765 `K' 25766 Signed 16-bit constant (-32768-32767) 25767 25768 `L' 25769 Value appropriate as displacement. 25770 `(0..4095)' 25771 for short displacement 25772 25773 `(-524288..524287)' 25774 for long displacement 25775 25776 `M' 25777 Constant integer with a value of 0x7fffffff. 25778 25779 `N' 25780 Multiple letter constraint followed by 4 parameter letters. 25781 `0..9:' 25782 number of the part counting from most to least 25783 significant 25784 25785 `H,Q:' 25786 mode of the part 25787 25788 `D,S,H:' 25789 mode of the containing operand 25790 25791 `0,F:' 25792 value of the other parts (F--all bits set) 25793 The constraint matches if the specified part of a constant 25794 has a value different from its other parts. 25795 25796 `Q' 25797 Memory reference without index register and with short 25798 displacement. 25799 25800 `R' 25801 Memory reference with index register and short displacement. 25802 25803 `S' 25804 Memory reference without index register but with long 25805 displacement. 25806 25807 `T' 25808 Memory reference with index register and long displacement. 25809 25810 `U' 25811 Pointer with short displacement. 25812 25813 `W' 25814 Pointer with long displacement. 25815 25816 `Y' 25817 Shift count operand. 25818 25819 25820 _Score family--`config/score/score.h'_ 25821 25822 `d' 25823 Registers from r0 to r32. 25824 25825 `e' 25826 Registers from r0 to r16. 25827 25828 `t' 25829 r8--r11 or r22--r27 registers. 25830 25831 `h' 25832 hi register. 25833 25834 `l' 25835 lo register. 25836 25837 `x' 25838 hi + lo register. 25839 25840 `q' 25841 cnt register. 25842 25843 `y' 25844 lcb register. 25845 25846 `z' 25847 scb register. 25848 25849 `a' 25850 cnt + lcb + scb register. 25851 25852 `c' 25853 cr0--cr15 register. 25854 25855 `b' 25856 cp1 registers. 25857 25858 `f' 25859 cp2 registers. 25860 25861 `i' 25862 cp3 registers. 25863 25864 `j' 25865 cp1 + cp2 + cp3 registers. 25866 25867 `I' 25868 High 16-bit constant (32-bit constant with 16 LSBs zero). 25869 25870 `J' 25871 Unsigned 5 bit integer (in the range 0 to 31). 25872 25873 `K' 25874 Unsigned 16 bit integer (in the range 0 to 65535). 25875 25876 `L' 25877 Signed 16 bit integer (in the range -32768 to 32767). 25878 25879 `M' 25880 Unsigned 14 bit integer (in the range 0 to 16383). 25881 25882 `N' 25883 Signed 14 bit integer (in the range -8192 to 8191). 25884 25885 `Z' 25886 Any SYMBOL_REF. 25887 25888 _Xstormy16--`config/stormy16/stormy16.h'_ 25889 25890 `a' 25891 Register r0. 25892 25893 `b' 25894 Register r1. 25895 25896 `c' 25897 Register r2. 25898 25899 `d' 25900 Register r8. 25901 25902 `e' 25903 Registers r0 through r7. 25904 25905 `t' 25906 Registers r0 and r1. 25907 25908 `y' 25909 The carry register. 25910 25911 `z' 25912 Registers r8 and r9. 25913 25914 `I' 25915 A constant between 0 and 3 inclusive. 25916 25917 `J' 25918 A constant that has exactly one bit set. 25919 25920 `K' 25921 A constant that has exactly one bit clear. 25922 25923 `L' 25924 A constant between 0 and 255 inclusive. 25925 25926 `M' 25927 A constant between -255 and 0 inclusive. 25928 25929 `N' 25930 A constant between -3 and 0 inclusive. 25931 25932 `O' 25933 A constant between 1 and 4 inclusive. 25934 25935 `P' 25936 A constant between -4 and -1 inclusive. 25937 25938 `Q' 25939 A memory reference that is a stack push. 25940 25941 `R' 25942 A memory reference that is a stack pop. 25943 25944 `S' 25945 A memory reference that refers to a constant address of known 25946 value. 25947 25948 `T' 25949 The register indicated by Rx (not implemented yet). 25950 25951 `U' 25952 A constant that is not between 2 and 15 inclusive. 25953 25954 `Z' 25955 The constant 0. 25956 25957 25958 _Xtensa--`config/xtensa/constraints.md'_ 25959 25960 `a' 25961 General-purpose 32-bit register 25962 25963 `b' 25964 One-bit boolean register 25965 25966 `A' 25967 MAC16 40-bit accumulator register 25968 25969 `I' 25970 Signed 12-bit integer constant, for use in MOVI instructions 25971 25972 `J' 25973 Signed 8-bit integer constant, for use in ADDI instructions 25974 25975 `K' 25976 Integer constant valid for BccI instructions 25977 25978 `L' 25979 Unsigned constant valid for BccUI instructions 25980 25981 25982 25983 25984 File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 25985 25986 6.43 Controlling Names Used in Assembler Code 25987 ============================================= 25988 25989 You can specify the name to be used in the assembler code for a C 25990 function or variable by writing the `asm' (or `__asm__') keyword after 25991 the declarator as follows: 25992 25993 int foo asm ("myfoo") = 2; 25994 25995 This specifies that the name to be used for the variable `foo' in the 25996 assembler code should be `myfoo' rather than the usual `_foo'. 25997 25998 On systems where an underscore is normally prepended to the name of a C 25999 function or variable, this feature allows you to define names for the 26000 linker that do not start with an underscore. 26001 26002 It does not make sense to use this feature with a non-static local 26003 variable since such variables do not have assembler names. If you are 26004 trying to put the variable in a particular register, see *note Explicit 26005 Reg Vars::. GCC presently accepts such code with a warning, but will 26006 probably be changed to issue an error, rather than a warning, in the 26007 future. 26008 26009 You cannot use `asm' in this way in a function _definition_; but you 26010 can get the same effect by writing a declaration for the function 26011 before its definition and putting `asm' there, like this: 26012 26013 extern func () asm ("FUNC"); 26014 26015 func (x, y) 26016 int x, y; 26017 /* ... */ 26018 26019 It is up to you to make sure that the assembler names you choose do not 26020 conflict with any other assembler symbols. Also, you must not use a 26021 register name; that would produce completely invalid assembler code. 26022 GCC does not as yet have the ability to store static variables in 26023 registers. Perhaps that will be added. 26024 26025 26026 File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 26027 26028 6.44 Variables in Specified Registers 26029 ===================================== 26030 26031 GNU C allows you to put a few global variables into specified hardware 26032 registers. You can also specify the register in which an ordinary 26033 register variable should be allocated. 26034 26035 * Global register variables reserve registers throughout the program. 26036 This may be useful in programs such as programming language 26037 interpreters which have a couple of global variables that are 26038 accessed very often. 26039 26040 * Local register variables in specific registers do not reserve the 26041 registers, except at the point where they are used as input or 26042 output operands in an `asm' statement and the `asm' statement 26043 itself is not deleted. The compiler's data flow analysis is 26044 capable of determining where the specified registers contain live 26045 values, and where they are available for other uses. Stores into 26046 local register variables may be deleted when they appear to be 26047 dead according to dataflow analysis. References to local register 26048 variables may be deleted or moved or simplified. 26049 26050 These local variables are sometimes convenient for use with the 26051 extended `asm' feature (*note Extended Asm::), if you want to 26052 write one output of the assembler instruction directly into a 26053 particular register. (This will work provided the register you 26054 specify fits the constraints specified for that operand in the 26055 `asm'.) 26056 26057 * Menu: 26058 26059 * Global Reg Vars:: 26060 * Local Reg Vars:: 26061 26062 26063 File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 26064 26065 6.44.1 Defining Global Register Variables 26066 ----------------------------------------- 26067 26068 You can define a global register variable in GNU C like this: 26069 26070 register int *foo asm ("a5"); 26071 26072 Here `a5' is the name of the register which should be used. Choose a 26073 register which is normally saved and restored by function calls on your 26074 machine, so that library routines will not clobber it. 26075 26076 Naturally the register name is cpu-dependent, so you would need to 26077 conditionalize your program according to cpu type. The register `a5' 26078 would be a good choice on a 68000 for a variable of pointer type. On 26079 machines with register windows, be sure to choose a "global" register 26080 that is not affected magically by the function call mechanism. 26081 26082 In addition, operating systems on one type of cpu may differ in how 26083 they name the registers; then you would need additional conditionals. 26084 For example, some 68000 operating systems call this register `%a5'. 26085 26086 Eventually there may be a way of asking the compiler to choose a 26087 register automatically, but first we need to figure out how it should 26088 choose and how to enable you to guide the choice. No solution is 26089 evident. 26090 26091 Defining a global register variable in a certain register reserves that 26092 register entirely for this use, at least within the current compilation. 26093 The register will not be allocated for any other purpose in the 26094 functions in the current compilation. The register will not be saved 26095 and restored by these functions. Stores into this register are never 26096 deleted even if they would appear to be dead, but references may be 26097 deleted or moved or simplified. 26098 26099 It is not safe to access the global register variables from signal 26100 handlers, or from more than one thread of control, because the system 26101 library routines may temporarily use the register for other things 26102 (unless you recompile them specially for the task at hand). 26103 26104 It is not safe for one function that uses a global register variable to 26105 call another such function `foo' by way of a third function `lose' that 26106 was compiled without knowledge of this variable (i.e. in a different 26107 source file in which the variable wasn't declared). This is because 26108 `lose' might save the register and put some other value there. For 26109 example, you can't expect a global register variable to be available in 26110 the comparison-function that you pass to `qsort', since `qsort' might 26111 have put something else in that register. (If you are prepared to 26112 recompile `qsort' with the same global register variable, you can solve 26113 this problem.) 26114 26115 If you want to recompile `qsort' or other source files which do not 26116 actually use your global register variable, so that they will not use 26117 that register for any other purpose, then it suffices to specify the 26118 compiler option `-ffixed-REG'. You need not actually add a global 26119 register declaration to their source code. 26120 26121 A function which can alter the value of a global register variable 26122 cannot safely be called from a function compiled without this variable, 26123 because it could clobber the value the caller expects to find there on 26124 return. Therefore, the function which is the entry point into the part 26125 of the program that uses the global register variable must explicitly 26126 save and restore the value which belongs to its caller. 26127 26128 On most machines, `longjmp' will restore to each global register 26129 variable the value it had at the time of the `setjmp'. On some 26130 machines, however, `longjmp' will not change the value of global 26131 register variables. To be portable, the function that called `setjmp' 26132 should make other arrangements to save the values of the global register 26133 variables, and to restore them in a `longjmp'. This way, the same 26134 thing will happen regardless of what `longjmp' does. 26135 26136 All global register variable declarations must precede all function 26137 definitions. If such a declaration could appear after function 26138 definitions, the declaration would be too late to prevent the register 26139 from being used for other purposes in the preceding functions. 26140 26141 Global register variables may not have initial values, because an 26142 executable file has no means to supply initial contents for a register. 26143 26144 On the SPARC, there are reports that g3 ... g7 are suitable registers, 26145 but certain library functions, such as `getwd', as well as the 26146 subroutines for division and remainder, modify g3 and g4. g1 and g2 26147 are local temporaries. 26148 26149 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 26150 course, it will not do to use more than a few of those. 26151 26152 26153 File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 26154 26155 6.44.2 Specifying Registers for Local Variables 26156 ----------------------------------------------- 26157 26158 You can define a local register variable with a specified register like 26159 this: 26160 26161 register int *foo asm ("a5"); 26162 26163 Here `a5' is the name of the register which should be used. Note that 26164 this is the same syntax used for defining global register variables, 26165 but for a local variable it would appear within a function. 26166 26167 Naturally the register name is cpu-dependent, but this is not a 26168 problem, since specific registers are most often useful with explicit 26169 assembler instructions (*note Extended Asm::). Both of these things 26170 generally require that you conditionalize your program according to cpu 26171 type. 26172 26173 In addition, operating systems on one type of cpu may differ in how 26174 they name the registers; then you would need additional conditionals. 26175 For example, some 68000 operating systems call this register `%a5'. 26176 26177 Defining such a register variable does not reserve the register; it 26178 remains available for other uses in places where flow control determines 26179 the variable's value is not live. 26180 26181 This option does not guarantee that GCC will generate code that has 26182 this variable in the register you specify at all times. You may not 26183 code an explicit reference to this register in the _assembler 26184 instruction template_ part of an `asm' statement and assume it will 26185 always refer to this variable. However, using the variable as an `asm' 26186 _operand_ guarantees that the specified register is used for the 26187 operand. 26188 26189 Stores into local register variables may be deleted when they appear 26190 to be dead according to dataflow analysis. References to local 26191 register variables may be deleted or moved or simplified. 26192 26193 As for global register variables, it's recommended that you choose a 26194 register which is normally saved and restored by function calls on your 26195 machine, so that library routines will not clobber it. A common 26196 pitfall is to initialize multiple call-clobbered registers with 26197 arbitrary expressions, where a function call or library call for an 26198 arithmetic operator will overwrite a register value from a previous 26199 assignment, for example `r0' below: 26200 register int *p1 asm ("r0") = ...; 26201 register int *p2 asm ("r1") = ...; 26202 In those cases, a solution is to use a temporary variable for each 26203 arbitrary expression. *Note Example of asm with clobbered asm reg::. 26204 26205 26206 File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 26207 26208 6.45 Alternate Keywords 26209 ======================= 26210 26211 `-ansi' and the various `-std' options disable certain keywords. This 26212 causes trouble when you want to use GNU C extensions, or a 26213 general-purpose header file that should be usable by all programs, 26214 including ISO C programs. The keywords `asm', `typeof' and `inline' 26215 are not available in programs compiled with `-ansi' or `-std' (although 26216 `inline' can be used in a program compiled with `-std=c99' or 26217 `-std=c1x'). The ISO C99 keyword `restrict' is only available when 26218 `-std=gnu99' (which will eventually be the default) or `-std=c99' (or 26219 the equivalent `-std=iso9899:1999'), or an option for a later standard 26220 version, is used. 26221 26222 The way to solve these problems is to put `__' at the beginning and 26223 end of each problematical keyword. For example, use `__asm__' instead 26224 of `asm', and `__inline__' instead of `inline'. 26225 26226 Other C compilers won't accept these alternative keywords; if you want 26227 to compile with another compiler, you can define the alternate keywords 26228 as macros to replace them with the customary keywords. It looks like 26229 this: 26230 26231 #ifndef __GNUC__ 26232 #define __asm__ asm 26233 #endif 26234 26235 `-pedantic' and other options cause warnings for many GNU C extensions. 26236 You can prevent such warnings within one expression by writing 26237 `__extension__' before the expression. `__extension__' has no effect 26238 aside from this. 26239 26240 26241 File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 26242 26243 6.46 Incomplete `enum' Types 26244 ============================ 26245 26246 You can define an `enum' tag without specifying its possible values. 26247 This results in an incomplete type, much like what you get if you write 26248 `struct foo' without describing the elements. A later declaration 26249 which does specify the possible values completes the type. 26250 26251 You can't allocate variables or storage using the type while it is 26252 incomplete. However, you can work with pointers to that type. 26253 26254 This extension may not be very useful, but it makes the handling of 26255 `enum' more consistent with the way `struct' and `union' are handled. 26256 26257 This extension is not supported by GNU C++. 26258 26259 26260 File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 26261 26262 6.47 Function Names as Strings 26263 ============================== 26264 26265 GCC provides three magic variables which hold the name of the current 26266 function, as a string. The first of these is `__func__', which is part 26267 of the C99 standard: 26268 26269 The identifier `__func__' is implicitly declared by the translator as 26270 if, immediately following the opening brace of each function 26271 definition, the declaration 26272 26273 static const char __func__[] = "function-name"; 26274 26275 appeared, where function-name is the name of the lexically-enclosing 26276 function. This name is the unadorned name of the function. 26277 26278 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 26279 recognize only this name. However, it is not standardized. For 26280 maximum portability, we recommend you use `__func__', but provide a 26281 fallback definition with the preprocessor: 26282 26283 #if __STDC_VERSION__ < 199901L 26284 # if __GNUC__ >= 2 26285 # define __func__ __FUNCTION__ 26286 # else 26287 # define __func__ "<unknown>" 26288 # endif 26289 #endif 26290 26291 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 26292 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 26293 the function as well as its bare name. For example, this program: 26294 26295 extern "C" { 26296 extern int printf (char *, ...); 26297 } 26298 26299 class a { 26300 public: 26301 void sub (int i) 26302 { 26303 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 26304 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 26305 } 26306 }; 26307 26308 int 26309 main (void) 26310 { 26311 a ax; 26312 ax.sub (0); 26313 return 0; 26314 } 26315 26316 gives this output: 26317 26318 __FUNCTION__ = sub 26319 __PRETTY_FUNCTION__ = void a::sub(int) 26320 26321 These identifiers are not preprocessor macros. In GCC 3.3 and 26322 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 26323 treated as string literals; they could be used to initialize `char' 26324 arrays, and they could be concatenated with other string literals. GCC 26325 3.4 and later treat them as variables, like `__func__'. In C++, 26326 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 26327 26328 26329 File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 26330 26331 6.48 Getting the Return or Frame Address of a Function 26332 ====================================================== 26333 26334 These functions may be used to get information about the callers of a 26335 function. 26336 26337 -- Built-in Function: void * __builtin_return_address (unsigned int 26338 LEVEL) 26339 This function returns the return address of the current function, 26340 or of one of its callers. The LEVEL argument is number of frames 26341 to scan up the call stack. A value of `0' yields the return 26342 address of the current function, a value of `1' yields the return 26343 address of the caller of the current function, and so forth. When 26344 inlining the expected behavior is that the function will return 26345 the address of the function that will be returned to. To work 26346 around this behavior use the `noinline' function attribute. 26347 26348 The LEVEL argument must be a constant integer. 26349 26350 On some machines it may be impossible to determine the return 26351 address of any function other than the current one; in such cases, 26352 or when the top of the stack has been reached, this function will 26353 return `0' or a random value. In addition, 26354 `__builtin_frame_address' may be used to determine if the top of 26355 the stack has been reached. 26356 26357 Additional post-processing of the returned value may be needed, see 26358 `__builtin_extract_return_address'. 26359 26360 This function should only be used with a nonzero argument for 26361 debugging purposes. 26362 26363 -- Built-in Function: void * __builtin_extract_return_address (void 26364 *ADDR) 26365 The address as returned by `__builtin_return_address' may have to 26366 be fed through this function to get the actual encoded address. 26367 For example, on the 31-bit S/390 platform the highest bit has to 26368 be masked out, or on SPARC platforms an offset has to be added for 26369 the true next instruction to be executed. 26370 26371 If no fixup is needed, this function simply passes through ADDR. 26372 26373 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR) 26374 This function does the reverse of 26375 `__builtin_extract_return_address'. 26376 26377 -- Built-in Function: void * __builtin_frame_address (unsigned int 26378 LEVEL) 26379 This function is similar to `__builtin_return_address', but it 26380 returns the address of the function frame rather than the return 26381 address of the function. Calling `__builtin_frame_address' with a 26382 value of `0' yields the frame address of the current function, a 26383 value of `1' yields the frame address of the caller of the current 26384 function, and so forth. 26385 26386 The frame is the area on the stack which holds local variables and 26387 saved registers. The frame address is normally the address of the 26388 first word pushed on to the stack by the function. However, the 26389 exact definition depends upon the processor and the calling 26390 convention. If the processor has a dedicated frame pointer 26391 register, and the function has a frame, then 26392 `__builtin_frame_address' will return the value of the frame 26393 pointer register. 26394 26395 On some machines it may be impossible to determine the frame 26396 address of any function other than the current one; in such cases, 26397 or when the top of the stack has been reached, this function will 26398 return `0' if the first frame pointer is properly initialized by 26399 the startup code. 26400 26401 This function should only be used with a nonzero argument for 26402 debugging purposes. 26403 26404 26405 File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 26406 26407 6.49 Using vector instructions through built-in functions 26408 ========================================================= 26409 26410 On some targets, the instruction set contains SIMD vector instructions 26411 that operate on multiple values contained in one large register at the 26412 same time. For example, on the i386 the MMX, 3DNow! and SSE extensions 26413 can be used this way. 26414 26415 The first step in using these extensions is to provide the necessary 26416 data types. This should be done using an appropriate `typedef': 26417 26418 typedef int v4si __attribute__ ((vector_size (16))); 26419 26420 The `int' type specifies the base type, while the attribute specifies 26421 the vector size for the variable, measured in bytes. For example, the 26422 declaration above causes the compiler to set the mode for the `v4si' 26423 type to be 16 bytes wide and divided into `int' sized units. For a 26424 32-bit `int' this means a vector of 4 units of 4 bytes, and the 26425 corresponding mode of `foo' will be V4SI. 26426 26427 The `vector_size' attribute is only applicable to integral and float 26428 scalars, although arrays, pointers, and function return values are 26429 allowed in conjunction with this construct. 26430 26431 All the basic integer types can be used as base types, both as signed 26432 and as unsigned: `char', `short', `int', `long', `long long'. In 26433 addition, `float' and `double' can be used to build floating-point 26434 vector types. 26435 26436 Specifying a combination that is not valid for the current architecture 26437 will cause GCC to synthesize the instructions using a narrower mode. 26438 For example, if you specify a variable of type `V4SI' and your 26439 architecture does not allow for this specific SIMD type, GCC will 26440 produce code that uses 4 `SIs'. 26441 26442 The types defined in this manner can be used with a subset of normal C 26443 operations. Currently, GCC will allow using the following operators on 26444 these types: `+, -, *, /, unary minus, ^, |, &, ~, %'. 26445 26446 The operations behave like C++ `valarrays'. Addition is defined as 26447 the addition of the corresponding elements of the operands. For 26448 example, in the code below, each of the 4 elements in A will be added 26449 to the corresponding 4 elements in B and the resulting vector will be 26450 stored in C. 26451 26452 typedef int v4si __attribute__ ((vector_size (16))); 26453 26454 v4si a, b, c; 26455 26456 c = a + b; 26457 26458 Subtraction, multiplication, division, and the logical operations 26459 operate in a similar manner. Likewise, the result of using the unary 26460 minus or complement operators on a vector type is a vector whose 26461 elements are the negative or complemented values of the corresponding 26462 elements in the operand. 26463 26464 In C it is possible to use shifting operators `<<', `>>' on 26465 integer-type vectors. The operation is defined as following: `{a0, a1, 26466 ..., an} >> {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. 26467 Vector operands must have the same number of elements. Additionally 26468 second operands can be a scalar integer in which case the scalar is 26469 converted to the type used by the vector operand (with possible 26470 truncation) and each element of this new vector is the scalar's value. 26471 Consider the following code. 26472 26473 typedef int v4si __attribute__ ((vector_size (16))); 26474 26475 v4si a, b; 26476 26477 b = a >> 1; /* b = a >> {1,1,1,1}; */ 26478 26479 In C vectors can be subscripted as if the vector were an array with 26480 the same number of elements and base type. Out of bound accesses 26481 invoke undefined behavior at runtime. Warnings for out of bound 26482 accesses for vector subscription can be enabled with `-Warray-bounds'. 26483 26484 You can declare variables and use them in function calls and returns, 26485 as well as in assignments and some casts. You can specify a vector 26486 type as a return type for a function. Vector types can also be used as 26487 function arguments. It is possible to cast from one vector type to 26488 another, provided they are of the same size (in fact, you can also cast 26489 vectors to and from other datatypes of the same size). 26490 26491 You cannot operate between vectors of different lengths or different 26492 signedness without a cast. 26493 26494 A port that supports hardware vector operations, usually provides a set 26495 of built-in functions that can be used to operate on vectors. For 26496 example, a function to add two vectors and multiply the result by a 26497 third could look like this: 26498 26499 v4si f (v4si a, v4si b, v4si c) 26500 { 26501 v4si tmp = __builtin_addv4si (a, b); 26502 return __builtin_mulv4si (tmp, c); 26503 } 26504 26505 26506 File: gcc.info, Node: Offsetof, Next: Atomic Builtins, Prev: Vector Extensions, Up: C Extensions 26507 26508 6.50 Offsetof 26509 ============= 26510 26511 GCC implements for both C and C++ a syntactic extension to implement 26512 the `offsetof' macro. 26513 26514 primary: 26515 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 26516 26517 offsetof_member_designator: 26518 `identifier' 26519 | offsetof_member_designator "." `identifier' 26520 | offsetof_member_designator "[" `expr' "]" 26521 26522 This extension is sufficient such that 26523 26524 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 26525 26526 is a suitable definition of the `offsetof' macro. In C++, TYPE may be 26527 dependent. In either case, MEMBER may consist of a single identifier, 26528 or a sequence of member accesses and array references. 26529 26530 26531 File: gcc.info, Node: Atomic Builtins, Next: Object Size Checking, Prev: Offsetof, Up: C Extensions 26532 26533 6.51 Built-in functions for atomic memory access 26534 ================================================ 26535 26536 The following builtins are intended to be compatible with those 26537 described in the `Intel Itanium Processor-specific Application Binary 26538 Interface', section 7.4. As such, they depart from the normal GCC 26539 practice of using the "__builtin_" prefix, and further that they are 26540 overloaded such that they work on multiple types. 26541 26542 The definition given in the Intel documentation allows only for the 26543 use of the types `int', `long', `long long' as well as their unsigned 26544 counterparts. GCC will allow any integral scalar or pointer type that 26545 is 1, 2, 4 or 8 bytes in length. 26546 26547 Not all operations are supported by all target processors. If a 26548 particular operation cannot be implemented on the target processor, a 26549 warning will be generated and a call an external function will be 26550 generated. The external function will carry the same name as the 26551 builtin, with an additional suffix `_N' where N is the size of the data 26552 type. 26553 26554 In most cases, these builtins are considered a "full barrier". That 26555 is, no memory operand will be moved across the operation, either 26556 forward or backward. Further, instructions will be issued as necessary 26557 to prevent the processor from speculating loads across the operation 26558 and from queuing stores after the operation. 26559 26560 All of the routines are described in the Intel documentation to take 26561 "an optional list of variables protected by the memory barrier". It's 26562 not clear what is meant by that; it could mean that _only_ the 26563 following variables are protected, or it could mean that these variables 26564 should in addition be protected. At present GCC ignores this list and 26565 protects all variables which are globally accessible. If in the future 26566 we make some use of this list, an empty list will continue to mean all 26567 globally accessible variables. 26568 26569 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 26570 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 26571 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 26572 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 26573 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 26574 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 26575 These builtins perform the operation suggested by the name, and 26576 returns the value that had previously been in memory. That is, 26577 26578 { tmp = *ptr; *ptr OP= value; return tmp; } 26579 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 26580 26581 _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' 26582 builtin as `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & 26583 value'. 26584 26585 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 26586 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 26587 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 26588 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 26589 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 26590 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 26591 These builtins perform the operation suggested by the name, and 26592 return the new value. That is, 26593 26594 { *ptr OP= value; return *ptr; } 26595 { *ptr = ~(*ptr & value); return *ptr; } // nand 26596 26597 _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' 26598 builtin as `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & 26599 value'. 26600 26601 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 26602 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 26603 These builtins perform an atomic compare and swap. That is, if 26604 the current value of `*PTR' is OLDVAL, then write NEWVAL into 26605 `*PTR'. 26606 26607 The "bool" version returns true if the comparison is successful and 26608 NEWVAL was written. The "val" version returns the contents of 26609 `*PTR' before the operation. 26610 26611 `__sync_synchronize (...)' 26612 This builtin issues a full memory barrier. 26613 26614 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 26615 This builtin, as described by Intel, is not a traditional 26616 test-and-set operation, but rather an atomic exchange operation. 26617 It writes VALUE into `*PTR', and returns the previous contents of 26618 `*PTR'. 26619 26620 Many targets have only minimal support for such locks, and do not 26621 support a full exchange operation. In this case, a target may 26622 support reduced functionality here by which the _only_ valid value 26623 to store is the immediate constant 1. The exact value actually 26624 stored in `*PTR' is implementation defined. 26625 26626 This builtin is not a full barrier, but rather an "acquire 26627 barrier". This means that references after the builtin cannot 26628 move to (or be speculated to) before the builtin, but previous 26629 memory stores may not be globally visible yet, and previous memory 26630 loads may not yet be satisfied. 26631 26632 `void __sync_lock_release (TYPE *ptr, ...)' 26633 This builtin releases the lock acquired by 26634 `__sync_lock_test_and_set'. Normally this means writing the 26635 constant 0 to `*PTR'. 26636 26637 This builtin is not a full barrier, but rather a "release barrier". 26638 This means that all previous memory stores are globally visible, 26639 and all previous memory loads have been satisfied, but following 26640 memory reads are not prevented from being speculated to before the 26641 barrier. 26642 26643 26644 File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: Atomic Builtins, Up: C Extensions 26645 26646 6.52 Object Size Checking Builtins 26647 ================================== 26648 26649 GCC implements a limited buffer overflow protection mechanism that can 26650 prevent some buffer overflow attacks. 26651 26652 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 26653 TYPE) 26654 is a built-in construct that returns a constant number of bytes 26655 from PTR to the end of the object PTR pointer points to (if known 26656 at compile time). `__builtin_object_size' never evaluates its 26657 arguments for side-effects. If there are any side-effects in 26658 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 26659 for TYPE 2 or 3. If there are multiple objects PTR can point to 26660 and all of them are known at compile time, the returned number is 26661 the maximum of remaining byte counts in those objects if TYPE & 2 26662 is 0 and minimum if nonzero. If it is not possible to determine 26663 which objects PTR points to at compile time, 26664 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 26665 1 and `(size_t) 0' for TYPE 2 or 3. 26666 26667 TYPE is an integer constant from 0 to 3. If the least significant 26668 bit is clear, objects are whole variables, if it is set, a closest 26669 surrounding subobject is considered the object a pointer points to. 26670 The second bit determines if maximum or minimum of remaining bytes 26671 is computed. 26672 26673 struct V { char buf1[10]; int b; char buf2[10]; } var; 26674 char *p = &var.buf1[1], *q = &var.b; 26675 26676 /* Here the object p points to is var. */ 26677 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 26678 /* The subobject p points to is var.buf1. */ 26679 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 26680 /* The object q points to is var. */ 26681 assert (__builtin_object_size (q, 0) 26682 == (char *) (&var + 1) - (char *) &var.b); 26683 /* The subobject q points to is var.b. */ 26684 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 26685 26686 There are built-in functions added for many common string operation 26687 functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is 26688 provided. This built-in has an additional last argument, which is the 26689 number of bytes remaining in object the DEST argument points to or 26690 `(size_t) -1' if the size is not known. 26691 26692 The built-in functions are optimized into the normal string functions 26693 like `memcpy' if the last argument is `(size_t) -1' or if it is known 26694 at compile time that the destination object will not be overflown. If 26695 the compiler can determine at compile time the object will be always 26696 overflown, it issues a warning. 26697 26698 The intended use can be e.g. 26699 26700 #undef memcpy 26701 #define bos0(dest) __builtin_object_size (dest, 0) 26702 #define memcpy(dest, src, n) \ 26703 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 26704 26705 char *volatile p; 26706 char buf[10]; 26707 /* It is unknown what object p points to, so this is optimized 26708 into plain memcpy - no checking is possible. */ 26709 memcpy (p, "abcde", n); 26710 /* Destination is known and length too. It is known at compile 26711 time there will be no overflow. */ 26712 memcpy (&buf[5], "abcde", 5); 26713 /* Destination is known, but the length is not known at compile time. 26714 This will result in __memcpy_chk call that can check for overflow 26715 at runtime. */ 26716 memcpy (&buf[5], "abcde", n); 26717 /* Destination is known and it is known at compile time there will 26718 be overflow. There will be a warning and __memcpy_chk call that 26719 will abort the program at runtime. */ 26720 memcpy (&buf[6], "abcde", 5); 26721 26722 Such built-in functions are provided for `memcpy', `mempcpy', 26723 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 26724 `strncat'. 26725 26726 There are also checking built-in functions for formatted output 26727 functions. 26728 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 26729 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 26730 const char *fmt, ...); 26731 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 26732 va_list ap); 26733 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 26734 const char *fmt, va_list ap); 26735 26736 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 26737 functions and can contain implementation specific flags on what 26738 additional security measures the checking function might take, such as 26739 handling `%n' differently. 26740 26741 The OS argument is the object size S points to, like in the other 26742 built-in functions. There is a small difference in the behavior 26743 though, if OS is `(size_t) -1', the built-in functions are optimized 26744 into the non-checking functions only if FLAG is 0, otherwise the 26745 checking function is called with OS argument set to `(size_t) -1'. 26746 26747 In addition to this, there are checking built-in functions 26748 `__builtin___printf_chk', `__builtin___vprintf_chk', 26749 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 26750 just one additional argument, FLAG, right before format string FMT. If 26751 the compiler is able to optimize them to `fputc' etc. functions, it 26752 will, otherwise the checking function should be called and the FLAG 26753 argument passed to it. 26754 26755 26756 File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 26757 26758 6.53 Other built-in functions provided by GCC 26759 ============================================= 26760 26761 GCC provides a large number of built-in functions other than the ones 26762 mentioned above. Some of these are for internal use in the processing 26763 of exceptions or variable-length argument lists and will not be 26764 documented here because they may change from time to time; we do not 26765 recommend general use of these functions. 26766 26767 The remaining functions are provided for optimization purposes. 26768 26769 GCC includes built-in versions of many of the functions in the standard 26770 C library. The versions prefixed with `__builtin_' will always be 26771 treated as having the same meaning as the C library function even if you 26772 specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 26773 these functions are only optimized in certain cases; if they are not 26774 optimized in a particular case, a call to the library function will be 26775 emitted. 26776 26777 Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or 26778 `-std=c1x'), the functions `_exit', `alloca', `bcmp', `bzero', 26779 `dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l', 26780 `exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked', 26781 `gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r', 26782 `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', 26783 `jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', 26784 `pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf', 26785 `scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32', 26786 `signbitd64', `signbitd128', `significandf', `significandl', 26787 `significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', 26788 `strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii', 26789 `y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be 26790 handled as built-in functions. All these functions have corresponding 26791 versions prefixed with `__builtin_', which may be used even in strict 26792 C90 mode. 26793 26794 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 26795 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 26796 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 26797 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 26798 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 26799 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 26800 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 26801 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 26802 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 26803 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 26804 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 26805 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 26806 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 26807 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 26808 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 26809 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 26810 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 26811 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 26812 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 26813 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 26814 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 26815 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 26816 `remainderf', `remainderl', `remainder', `remquof', `remquol', 26817 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 26818 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 26819 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 26820 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 26821 functions except in strict ISO C90 mode (`-ansi' or `-std=c90'). 26822 26823 There are also built-in versions of the ISO C99 functions `acosf', 26824 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 26825 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 26826 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 26827 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 26828 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 26829 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 26830 recognized in any mode since ISO C90 reserves these names for the 26831 purpose to which ISO C99 puts them. All these functions have 26832 corresponding versions prefixed with `__builtin_'. 26833 26834 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 26835 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 26836 `iswxdigit', `towlower' and `towupper' are handled as built-in functions 26837 except in strict ISO C90 mode (`-ansi' or `-std=c90'). 26838 26839 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 26840 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 26841 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 26842 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 26843 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 26844 `log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow', 26845 `printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf', 26846 `sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', 26847 `strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk', 26848 `strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and 26849 `vsprintf' are all recognized as built-in functions unless 26850 `-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified 26851 for an individual function). All of these functions have corresponding 26852 versions prefixed with `__builtin_'. 26853 26854 GCC provides built-in versions of the ISO C99 floating point comparison 26855 macros that avoid raising exceptions for unordered operands. They have 26856 the same names as the standard macros ( `isgreater', `isgreaterequal', 26857 `isless', `islessequal', `islessgreater', and `isunordered') , with 26858 `__builtin_' prefixed. We intend for a library implementor to be able 26859 to simply `#define' each standard macro to its built-in equivalent. In 26860 the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign' 26861 and `isnormal' built-ins used with `__builtin_' prefixed. The `isinf' 26862 and `isnan' builtins appear both with and without the `__builtin_' 26863 prefix. 26864 26865 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 26866 You can use the built-in function `__builtin_types_compatible_p' to 26867 determine whether two types are the same. 26868 26869 This built-in function returns 1 if the unqualified versions of the 26870 types TYPE1 and TYPE2 (which are types, not expressions) are 26871 compatible, 0 otherwise. The result of this built-in function can 26872 be used in integer constant expressions. 26873 26874 This built-in function ignores top level qualifiers (e.g., `const', 26875 `volatile'). For example, `int' is equivalent to `const int'. 26876 26877 The type `int[]' and `int[5]' are compatible. On the other hand, 26878 `int' and `char *' are not compatible, even if the size of their 26879 types, on the particular architecture are the same. Also, the 26880 amount of pointer indirection is taken into account when 26881 determining similarity. Consequently, `short *' is not similar to 26882 `short **'. Furthermore, two types that are typedefed are 26883 considered compatible if their underlying types are compatible. 26884 26885 An `enum' type is not considered to be compatible with another 26886 `enum' type even if both are compatible with the same integer 26887 type; this is what the C standard specifies. For example, `enum 26888 {foo, bar}' is not similar to `enum {hot, dog}'. 26889 26890 You would typically use this function in code whose execution 26891 varies depending on the arguments' types. For example: 26892 26893 #define foo(x) \ 26894 ({ \ 26895 typeof (x) tmp = (x); \ 26896 if (__builtin_types_compatible_p (typeof (x), long double)) \ 26897 tmp = foo_long_double (tmp); \ 26898 else if (__builtin_types_compatible_p (typeof (x), double)) \ 26899 tmp = foo_double (tmp); \ 26900 else if (__builtin_types_compatible_p (typeof (x), float)) \ 26901 tmp = foo_float (tmp); \ 26902 else \ 26903 abort (); \ 26904 tmp; \ 26905 }) 26906 26907 _Note:_ This construct is only available for C. 26908 26909 26910 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 26911 EXP2) 26912 You can use the built-in function `__builtin_choose_expr' to 26913 evaluate code depending on the value of a constant expression. 26914 This built-in function returns EXP1 if CONST_EXP, which is an 26915 integer constant expression, is nonzero. Otherwise it returns 26916 EXP2. 26917 26918 This built-in function is analogous to the `? :' operator in C, 26919 except that the expression returned has its type unaltered by 26920 promotion rules. Also, the built-in function does not evaluate 26921 the expression that was not chosen. For example, if CONST_EXP 26922 evaluates to true, EXP2 is not evaluated even if it has 26923 side-effects. 26924 26925 This built-in function can return an lvalue if the chosen argument 26926 is an lvalue. 26927 26928 If EXP1 is returned, the return type is the same as EXP1's type. 26929 Similarly, if EXP2 is returned, its return type is the same as 26930 EXP2. 26931 26932 Example: 26933 26934 #define foo(x) \ 26935 __builtin_choose_expr ( \ 26936 __builtin_types_compatible_p (typeof (x), double), \ 26937 foo_double (x), \ 26938 __builtin_choose_expr ( \ 26939 __builtin_types_compatible_p (typeof (x), float), \ 26940 foo_float (x), \ 26941 /* The void expression results in a compile-time error \ 26942 when assigning the result to something. */ \ 26943 (void)0)) 26944 26945 _Note:_ This construct is only available for C. Furthermore, the 26946 unused expression (EXP1 or EXP2 depending on the value of 26947 CONST_EXP) may still generate syntax errors. This may change in 26948 future revisions. 26949 26950 26951 -- Built-in Function: int __builtin_constant_p (EXP) 26952 You can use the built-in function `__builtin_constant_p' to 26953 determine if a value is known to be constant at compile-time and 26954 hence that GCC can perform constant-folding on expressions 26955 involving that value. The argument of the function is the value 26956 to test. The function returns the integer 1 if the argument is 26957 known to be a compile-time constant and 0 if it is not known to be 26958 a compile-time constant. A return of 0 does not indicate that the 26959 value is _not_ a constant, but merely that GCC cannot prove it is 26960 a constant with the specified value of the `-O' option. 26961 26962 You would typically use this function in an embedded application 26963 where memory was a critical resource. If you have some complex 26964 calculation, you may want it to be folded if it involves 26965 constants, but need to call a function if it does not. For 26966 example: 26967 26968 #define Scale_Value(X) \ 26969 (__builtin_constant_p (X) \ 26970 ? ((X) * SCALE + OFFSET) : Scale (X)) 26971 26972 You may use this built-in function in either a macro or an inline 26973 function. However, if you use it in an inlined function and pass 26974 an argument of the function as the argument to the built-in, GCC 26975 will never return 1 when you call the inline function with a 26976 string constant or compound literal (*note Compound Literals::) 26977 and will not return 1 when you pass a constant numeric value to 26978 the inline function unless you specify the `-O' option. 26979 26980 You may also use `__builtin_constant_p' in initializers for static 26981 data. For instance, you can write 26982 26983 static const int table[] = { 26984 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 26985 /* ... */ 26986 }; 26987 26988 This is an acceptable initializer even if EXPRESSION is not a 26989 constant expression, including the case where 26990 `__builtin_constant_p' returns 1 because EXPRESSION can be folded 26991 to a constant but EXPRESSION contains operands that would not 26992 otherwise be permitted in a static initializer (for example, `0 && 26993 foo ()'). GCC must be more conservative about evaluating the 26994 built-in in this case, because it has no opportunity to perform 26995 optimization. 26996 26997 Previous versions of GCC did not accept this built-in in data 26998 initializers. The earliest version where it is completely safe is 26999 3.0.1. 27000 27001 -- Built-in Function: long __builtin_expect (long EXP, long C) 27002 You may use `__builtin_expect' to provide the compiler with branch 27003 prediction information. In general, you should prefer to use 27004 actual profile feedback for this (`-fprofile-arcs'), as 27005 programmers are notoriously bad at predicting how their programs 27006 actually perform. However, there are applications in which this 27007 data is hard to collect. 27008 27009 The return value is the value of EXP, which should be an integral 27010 expression. The semantics of the built-in are that it is expected 27011 that EXP == C. For example: 27012 27013 if (__builtin_expect (x, 0)) 27014 foo (); 27015 27016 would indicate that we do not expect to call `foo', since we 27017 expect `x' to be zero. Since you are limited to integral 27018 expressions for EXP, you should use constructions such as 27019 27020 if (__builtin_expect (ptr != NULL, 1)) 27021 error (); 27022 27023 when testing pointer or floating-point values. 27024 27025 -- Built-in Function: void __builtin_trap (void) 27026 This function causes the program to exit abnormally. GCC 27027 implements this function by using a target-dependent mechanism 27028 (such as intentionally executing an illegal instruction) or by 27029 calling `abort'. The mechanism used may vary from release to 27030 release so you should not rely on any particular implementation. 27031 27032 -- Built-in Function: void __builtin_unreachable (void) 27033 If control flow reaches the point of the `__builtin_unreachable', 27034 the program is undefined. It is useful in situations where the 27035 compiler cannot deduce the unreachability of the code. 27036 27037 One such case is immediately following an `asm' statement that 27038 will either never terminate, or one that transfers control 27039 elsewhere and never returns. In this example, without the 27040 `__builtin_unreachable', GCC would issue a warning that control 27041 reaches the end of a non-void function. It would also generate 27042 code to return after the `asm'. 27043 27044 int f (int c, int v) 27045 { 27046 if (c) 27047 { 27048 return v; 27049 } 27050 else 27051 { 27052 asm("jmp error_handler"); 27053 __builtin_unreachable (); 27054 } 27055 } 27056 27057 Because the `asm' statement unconditionally transfers control out 27058 of the function, control will never reach the end of the function 27059 body. The `__builtin_unreachable' is in fact unreachable and 27060 communicates this fact to the compiler. 27061 27062 Another use for `__builtin_unreachable' is following a call a 27063 function that never returns but that is not declared 27064 `__attribute__((noreturn))', as in this example: 27065 27066 void function_that_never_returns (void); 27067 27068 int g (int c) 27069 { 27070 if (c) 27071 { 27072 return 1; 27073 } 27074 else 27075 { 27076 function_that_never_returns (); 27077 __builtin_unreachable (); 27078 } 27079 } 27080 27081 27082 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 27083 *END) 27084 This function is used to flush the processor's instruction cache 27085 for the region of memory between BEGIN inclusive and END 27086 exclusive. Some targets require that the instruction cache be 27087 flushed, after modifying memory containing code, in order to obtain 27088 deterministic behavior. 27089 27090 If the target does not require instruction cache flushes, 27091 `__builtin___clear_cache' has no effect. Otherwise either 27092 instructions are emitted in-line to clear the instruction cache or 27093 a call to the `__clear_cache' function in libgcc is made. 27094 27095 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 27096 This function is used to minimize cache-miss latency by moving 27097 data into a cache before it is accessed. You can insert calls to 27098 `__builtin_prefetch' into code for which you know addresses of 27099 data in memory that is likely to be accessed soon. If the target 27100 supports them, data prefetch instructions will be generated. If 27101 the prefetch is done early enough before the access then the data 27102 will be in the cache by the time it is accessed. 27103 27104 The value of ADDR is the address of the memory to prefetch. There 27105 are two optional arguments, RW and LOCALITY. The value of RW is a 27106 compile-time constant one or zero; one means that the prefetch is 27107 preparing for a write to the memory address and zero, the default, 27108 means that the prefetch is preparing for a read. The value 27109 LOCALITY must be a compile-time constant integer between zero and 27110 three. A value of zero means that the data has no temporal 27111 locality, so it need not be left in the cache after the access. A 27112 value of three means that the data has a high degree of temporal 27113 locality and should be left in all levels of cache possible. 27114 Values of one and two mean, respectively, a low or moderate degree 27115 of temporal locality. The default is three. 27116 27117 for (i = 0; i < n; i++) 27118 { 27119 a[i] = a[i] + b[i]; 27120 __builtin_prefetch (&a[i+j], 1, 1); 27121 __builtin_prefetch (&b[i+j], 0, 1); 27122 /* ... */ 27123 } 27124 27125 Data prefetch does not generate faults if ADDR is invalid, but the 27126 address expression itself must be valid. For example, a prefetch 27127 of `p->next' will not fault if `p->next' is not a valid address, 27128 but evaluation will fault if `p' is not a valid address. 27129 27130 If the target does not support data prefetch, the address 27131 expression is evaluated if it includes side effects but no other 27132 code is generated and GCC does not issue a warning. 27133 27134 -- Built-in Function: double __builtin_huge_val (void) 27135 Returns a positive infinity, if supported by the floating-point 27136 format, else `DBL_MAX'. This function is suitable for 27137 implementing the ISO C macro `HUGE_VAL'. 27138 27139 -- Built-in Function: float __builtin_huge_valf (void) 27140 Similar to `__builtin_huge_val', except the return type is `float'. 27141 27142 -- Built-in Function: long double __builtin_huge_vall (void) 27143 Similar to `__builtin_huge_val', except the return type is `long 27144 double'. 27145 27146 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 27147 int, ...) 27148 This built-in implements the C99 fpclassify functionality. The 27149 first five int arguments should be the target library's notion of 27150 the possible FP classes and are used for return values. They must 27151 be constant values and they must appear in this order: `FP_NAN', 27152 `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'. The 27153 ellipsis is for exactly one floating point value to classify. GCC 27154 treats the last argument as type-generic, which means it does not 27155 do default promotion from float to double. 27156 27157 -- Built-in Function: double __builtin_inf (void) 27158 Similar to `__builtin_huge_val', except a warning is generated if 27159 the target floating-point format does not support infinities. 27160 27161 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 27162 Similar to `__builtin_inf', except the return type is `_Decimal32'. 27163 27164 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 27165 Similar to `__builtin_inf', except the return type is `_Decimal64'. 27166 27167 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 27168 Similar to `__builtin_inf', except the return type is 27169 `_Decimal128'. 27170 27171 -- Built-in Function: float __builtin_inff (void) 27172 Similar to `__builtin_inf', except the return type is `float'. 27173 This function is suitable for implementing the ISO C99 macro 27174 `INFINITY'. 27175 27176 -- Built-in Function: long double __builtin_infl (void) 27177 Similar to `__builtin_inf', except the return type is `long 27178 double'. 27179 27180 -- Built-in Function: int __builtin_isinf_sign (...) 27181 Similar to `isinf', except the return value will be negative for 27182 an argument of `-Inf'. Note while the parameter list is an 27183 ellipsis, this function only accepts exactly one floating point 27184 argument. GCC treats this parameter as type-generic, which means 27185 it does not do default promotion from float to double. 27186 27187 -- Built-in Function: double __builtin_nan (const char *str) 27188 This is an implementation of the ISO C99 function `nan'. 27189 27190 Since ISO C99 defines this function in terms of `strtod', which we 27191 do not implement, a description of the parsing is in order. The 27192 string is parsed as by `strtol'; that is, the base is recognized by 27193 leading `0' or `0x' prefixes. The number parsed is placed in the 27194 significand such that the least significant bit of the number is 27195 at the least significant bit of the significand. The number is 27196 truncated to fit the significand field provided. The significand 27197 is forced to be a quiet NaN. 27198 27199 This function, if given a string literal all of which would have 27200 been consumed by strtol, is evaluated early enough that it is 27201 considered a compile-time constant. 27202 27203 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 27204 Similar to `__builtin_nan', except the return type is `_Decimal32'. 27205 27206 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 27207 Similar to `__builtin_nan', except the return type is `_Decimal64'. 27208 27209 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 27210 Similar to `__builtin_nan', except the return type is 27211 `_Decimal128'. 27212 27213 -- Built-in Function: float __builtin_nanf (const char *str) 27214 Similar to `__builtin_nan', except the return type is `float'. 27215 27216 -- Built-in Function: long double __builtin_nanl (const char *str) 27217 Similar to `__builtin_nan', except the return type is `long 27218 double'. 27219 27220 -- Built-in Function: double __builtin_nans (const char *str) 27221 Similar to `__builtin_nan', except the significand is forced to be 27222 a signaling NaN. The `nans' function is proposed by WG14 N965. 27223 27224 -- Built-in Function: float __builtin_nansf (const char *str) 27225 Similar to `__builtin_nans', except the return type is `float'. 27226 27227 -- Built-in Function: long double __builtin_nansl (const char *str) 27228 Similar to `__builtin_nans', except the return type is `long 27229 double'. 27230 27231 -- Built-in Function: int __builtin_ffs (unsigned int x) 27232 Returns one plus the index of the least significant 1-bit of X, or 27233 if X is zero, returns zero. 27234 27235 -- Built-in Function: int __builtin_clz (unsigned int x) 27236 Returns the number of leading 0-bits in X, starting at the most 27237 significant bit position. If X is 0, the result is undefined. 27238 27239 -- Built-in Function: int __builtin_ctz (unsigned int x) 27240 Returns the number of trailing 0-bits in X, starting at the least 27241 significant bit position. If X is 0, the result is undefined. 27242 27243 -- Built-in Function: int __builtin_popcount (unsigned int x) 27244 Returns the number of 1-bits in X. 27245 27246 -- Built-in Function: int __builtin_parity (unsigned int x) 27247 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 27248 27249 -- Built-in Function: int __builtin_ffsl (unsigned long) 27250 Similar to `__builtin_ffs', except the argument type is `unsigned 27251 long'. 27252 27253 -- Built-in Function: int __builtin_clzl (unsigned long) 27254 Similar to `__builtin_clz', except the argument type is `unsigned 27255 long'. 27256 27257 -- Built-in Function: int __builtin_ctzl (unsigned long) 27258 Similar to `__builtin_ctz', except the argument type is `unsigned 27259 long'. 27260 27261 -- Built-in Function: int __builtin_popcountl (unsigned long) 27262 Similar to `__builtin_popcount', except the argument type is 27263 `unsigned long'. 27264 27265 -- Built-in Function: int __builtin_parityl (unsigned long) 27266 Similar to `__builtin_parity', except the argument type is 27267 `unsigned long'. 27268 27269 -- Built-in Function: int __builtin_ffsll (unsigned long long) 27270 Similar to `__builtin_ffs', except the argument type is `unsigned 27271 long long'. 27272 27273 -- Built-in Function: int __builtin_clzll (unsigned long long) 27274 Similar to `__builtin_clz', except the argument type is `unsigned 27275 long long'. 27276 27277 -- Built-in Function: int __builtin_ctzll (unsigned long long) 27278 Similar to `__builtin_ctz', except the argument type is `unsigned 27279 long long'. 27280 27281 -- Built-in Function: int __builtin_popcountll (unsigned long long) 27282 Similar to `__builtin_popcount', except the argument type is 27283 `unsigned long long'. 27284 27285 -- Built-in Function: int __builtin_parityll (unsigned long long) 27286 Similar to `__builtin_parity', except the argument type is 27287 `unsigned long long'. 27288 27289 -- Built-in Function: double __builtin_powi (double, int) 27290 Returns the first argument raised to the power of the second. 27291 Unlike the `pow' function no guarantees about precision and 27292 rounding are made. 27293 27294 -- Built-in Function: float __builtin_powif (float, int) 27295 Similar to `__builtin_powi', except the argument and return types 27296 are `float'. 27297 27298 -- Built-in Function: long double __builtin_powil (long double, int) 27299 Similar to `__builtin_powi', except the argument and return types 27300 are `long double'. 27301 27302 -- Built-in Function: int32_t __builtin_bswap32 (int32_t x) 27303 Returns X with the order of the bytes reversed; for example, 27304 `0xaabbccdd' becomes `0xddccbbaa'. Byte here always means exactly 27305 8 bits. 27306 27307 -- Built-in Function: int64_t __builtin_bswap64 (int64_t x) 27308 Similar to `__builtin_bswap32', except the argument and return 27309 types are 64-bit. 27310 27311 27312 File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 27313 27314 6.54 Built-in Functions Specific to Particular Target Machines 27315 ============================================================== 27316 27317 On some target machines, GCC supports many built-in functions specific 27318 to those machines. Generally these generate calls to specific machine 27319 instructions, but allow the compiler to schedule those calls. 27320 27321 * Menu: 27322 27323 * Alpha Built-in Functions:: 27324 * ARM iWMMXt Built-in Functions:: 27325 * ARM NEON Intrinsics:: 27326 * Blackfin Built-in Functions:: 27327 * FR-V Built-in Functions:: 27328 * X86 Built-in Functions:: 27329 * MIPS DSP Built-in Functions:: 27330 * MIPS Paired-Single Support:: 27331 * MIPS Loongson Built-in Functions:: 27332 * Other MIPS Built-in Functions:: 27333 * picoChip Built-in Functions:: 27334 * PowerPC AltiVec/VSX Built-in Functions:: 27335 * RX Built-in Functions:: 27336 * SPARC VIS Built-in Functions:: 27337 * SPU Built-in Functions:: 27338 27339 27340 File: gcc.info, Node: Alpha Built-in Functions, Next: ARM iWMMXt Built-in Functions, Up: Target Builtins 27341 27342 6.54.1 Alpha Built-in Functions 27343 ------------------------------- 27344 27345 These built-in functions are available for the Alpha family of 27346 processors, depending on the command-line switches used. 27347 27348 The following built-in functions are always available. They all 27349 generate the machine instruction that is part of the name. 27350 27351 long __builtin_alpha_implver (void) 27352 long __builtin_alpha_rpcc (void) 27353 long __builtin_alpha_amask (long) 27354 long __builtin_alpha_cmpbge (long, long) 27355 long __builtin_alpha_extbl (long, long) 27356 long __builtin_alpha_extwl (long, long) 27357 long __builtin_alpha_extll (long, long) 27358 long __builtin_alpha_extql (long, long) 27359 long __builtin_alpha_extwh (long, long) 27360 long __builtin_alpha_extlh (long, long) 27361 long __builtin_alpha_extqh (long, long) 27362 long __builtin_alpha_insbl (long, long) 27363 long __builtin_alpha_inswl (long, long) 27364 long __builtin_alpha_insll (long, long) 27365 long __builtin_alpha_insql (long, long) 27366 long __builtin_alpha_inswh (long, long) 27367 long __builtin_alpha_inslh (long, long) 27368 long __builtin_alpha_insqh (long, long) 27369 long __builtin_alpha_mskbl (long, long) 27370 long __builtin_alpha_mskwl (long, long) 27371 long __builtin_alpha_mskll (long, long) 27372 long __builtin_alpha_mskql (long, long) 27373 long __builtin_alpha_mskwh (long, long) 27374 long __builtin_alpha_msklh (long, long) 27375 long __builtin_alpha_mskqh (long, long) 27376 long __builtin_alpha_umulh (long, long) 27377 long __builtin_alpha_zap (long, long) 27378 long __builtin_alpha_zapnot (long, long) 27379 27380 The following built-in functions are always with `-mmax' or 27381 `-mcpu=CPU' where CPU is `pca56' or later. They all generate the 27382 machine instruction that is part of the name. 27383 27384 long __builtin_alpha_pklb (long) 27385 long __builtin_alpha_pkwb (long) 27386 long __builtin_alpha_unpkbl (long) 27387 long __builtin_alpha_unpkbw (long) 27388 long __builtin_alpha_minub8 (long, long) 27389 long __builtin_alpha_minsb8 (long, long) 27390 long __builtin_alpha_minuw4 (long, long) 27391 long __builtin_alpha_minsw4 (long, long) 27392 long __builtin_alpha_maxub8 (long, long) 27393 long __builtin_alpha_maxsb8 (long, long) 27394 long __builtin_alpha_maxuw4 (long, long) 27395 long __builtin_alpha_maxsw4 (long, long) 27396 long __builtin_alpha_perr (long, long) 27397 27398 The following built-in functions are always with `-mcix' or 27399 `-mcpu=CPU' where CPU is `ev67' or later. They all generate the 27400 machine instruction that is part of the name. 27401 27402 long __builtin_alpha_cttz (long) 27403 long __builtin_alpha_ctlz (long) 27404 long __builtin_alpha_ctpop (long) 27405 27406 The following builtins are available on systems that use the OSF/1 27407 PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but 27408 when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'. 27409 27410 void *__builtin_thread_pointer (void) 27411 void __builtin_set_thread_pointer (void *) 27412 27413 27414 File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: Alpha Built-in Functions, Up: Target Builtins 27415 27416 6.54.2 ARM iWMMXt Built-in Functions 27417 ------------------------------------ 27418 27419 These built-in functions are available for the ARM family of processors 27420 when the `-mcpu=iwmmxt' switch is used: 27421 27422 typedef int v2si __attribute__ ((vector_size (8))); 27423 typedef short v4hi __attribute__ ((vector_size (8))); 27424 typedef char v8qi __attribute__ ((vector_size (8))); 27425 27426 int __builtin_arm_getwcx (int) 27427 void __builtin_arm_setwcx (int, int) 27428 int __builtin_arm_textrmsb (v8qi, int) 27429 int __builtin_arm_textrmsh (v4hi, int) 27430 int __builtin_arm_textrmsw (v2si, int) 27431 int __builtin_arm_textrmub (v8qi, int) 27432 int __builtin_arm_textrmuh (v4hi, int) 27433 int __builtin_arm_textrmuw (v2si, int) 27434 v8qi __builtin_arm_tinsrb (v8qi, int) 27435 v4hi __builtin_arm_tinsrh (v4hi, int) 27436 v2si __builtin_arm_tinsrw (v2si, int) 27437 long long __builtin_arm_tmia (long long, int, int) 27438 long long __builtin_arm_tmiabb (long long, int, int) 27439 long long __builtin_arm_tmiabt (long long, int, int) 27440 long long __builtin_arm_tmiaph (long long, int, int) 27441 long long __builtin_arm_tmiatb (long long, int, int) 27442 long long __builtin_arm_tmiatt (long long, int, int) 27443 int __builtin_arm_tmovmskb (v8qi) 27444 int __builtin_arm_tmovmskh (v4hi) 27445 int __builtin_arm_tmovmskw (v2si) 27446 long long __builtin_arm_waccb (v8qi) 27447 long long __builtin_arm_wacch (v4hi) 27448 long long __builtin_arm_waccw (v2si) 27449 v8qi __builtin_arm_waddb (v8qi, v8qi) 27450 v8qi __builtin_arm_waddbss (v8qi, v8qi) 27451 v8qi __builtin_arm_waddbus (v8qi, v8qi) 27452 v4hi __builtin_arm_waddh (v4hi, v4hi) 27453 v4hi __builtin_arm_waddhss (v4hi, v4hi) 27454 v4hi __builtin_arm_waddhus (v4hi, v4hi) 27455 v2si __builtin_arm_waddw (v2si, v2si) 27456 v2si __builtin_arm_waddwss (v2si, v2si) 27457 v2si __builtin_arm_waddwus (v2si, v2si) 27458 v8qi __builtin_arm_walign (v8qi, v8qi, int) 27459 long long __builtin_arm_wand(long long, long long) 27460 long long __builtin_arm_wandn (long long, long long) 27461 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 27462 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 27463 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 27464 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 27465 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 27466 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 27467 v2si __builtin_arm_wcmpeqw (v2si, v2si) 27468 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 27469 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 27470 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 27471 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 27472 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 27473 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 27474 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 27475 long long __builtin_arm_wmacsz (v4hi, v4hi) 27476 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 27477 long long __builtin_arm_wmacuz (v4hi, v4hi) 27478 v4hi __builtin_arm_wmadds (v4hi, v4hi) 27479 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 27480 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 27481 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 27482 v2si __builtin_arm_wmaxsw (v2si, v2si) 27483 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 27484 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 27485 v2si __builtin_arm_wmaxuw (v2si, v2si) 27486 v8qi __builtin_arm_wminsb (v8qi, v8qi) 27487 v4hi __builtin_arm_wminsh (v4hi, v4hi) 27488 v2si __builtin_arm_wminsw (v2si, v2si) 27489 v8qi __builtin_arm_wminub (v8qi, v8qi) 27490 v4hi __builtin_arm_wminuh (v4hi, v4hi) 27491 v2si __builtin_arm_wminuw (v2si, v2si) 27492 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 27493 v4hi __builtin_arm_wmulul (v4hi, v4hi) 27494 v4hi __builtin_arm_wmulum (v4hi, v4hi) 27495 long long __builtin_arm_wor (long long, long long) 27496 v2si __builtin_arm_wpackdss (long long, long long) 27497 v2si __builtin_arm_wpackdus (long long, long long) 27498 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 27499 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 27500 v4hi __builtin_arm_wpackwss (v2si, v2si) 27501 v4hi __builtin_arm_wpackwus (v2si, v2si) 27502 long long __builtin_arm_wrord (long long, long long) 27503 long long __builtin_arm_wrordi (long long, int) 27504 v4hi __builtin_arm_wrorh (v4hi, long long) 27505 v4hi __builtin_arm_wrorhi (v4hi, int) 27506 v2si __builtin_arm_wrorw (v2si, long long) 27507 v2si __builtin_arm_wrorwi (v2si, int) 27508 v2si __builtin_arm_wsadb (v8qi, v8qi) 27509 v2si __builtin_arm_wsadbz (v8qi, v8qi) 27510 v2si __builtin_arm_wsadh (v4hi, v4hi) 27511 v2si __builtin_arm_wsadhz (v4hi, v4hi) 27512 v4hi __builtin_arm_wshufh (v4hi, int) 27513 long long __builtin_arm_wslld (long long, long long) 27514 long long __builtin_arm_wslldi (long long, int) 27515 v4hi __builtin_arm_wsllh (v4hi, long long) 27516 v4hi __builtin_arm_wsllhi (v4hi, int) 27517 v2si __builtin_arm_wsllw (v2si, long long) 27518 v2si __builtin_arm_wsllwi (v2si, int) 27519 long long __builtin_arm_wsrad (long long, long long) 27520 long long __builtin_arm_wsradi (long long, int) 27521 v4hi __builtin_arm_wsrah (v4hi, long long) 27522 v4hi __builtin_arm_wsrahi (v4hi, int) 27523 v2si __builtin_arm_wsraw (v2si, long long) 27524 v2si __builtin_arm_wsrawi (v2si, int) 27525 long long __builtin_arm_wsrld (long long, long long) 27526 long long __builtin_arm_wsrldi (long long, int) 27527 v4hi __builtin_arm_wsrlh (v4hi, long long) 27528 v4hi __builtin_arm_wsrlhi (v4hi, int) 27529 v2si __builtin_arm_wsrlw (v2si, long long) 27530 v2si __builtin_arm_wsrlwi (v2si, int) 27531 v8qi __builtin_arm_wsubb (v8qi, v8qi) 27532 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 27533 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 27534 v4hi __builtin_arm_wsubh (v4hi, v4hi) 27535 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 27536 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 27537 v2si __builtin_arm_wsubw (v2si, v2si) 27538 v2si __builtin_arm_wsubwss (v2si, v2si) 27539 v2si __builtin_arm_wsubwus (v2si, v2si) 27540 v4hi __builtin_arm_wunpckehsb (v8qi) 27541 v2si __builtin_arm_wunpckehsh (v4hi) 27542 long long __builtin_arm_wunpckehsw (v2si) 27543 v4hi __builtin_arm_wunpckehub (v8qi) 27544 v2si __builtin_arm_wunpckehuh (v4hi) 27545 long long __builtin_arm_wunpckehuw (v2si) 27546 v4hi __builtin_arm_wunpckelsb (v8qi) 27547 v2si __builtin_arm_wunpckelsh (v4hi) 27548 long long __builtin_arm_wunpckelsw (v2si) 27549 v4hi __builtin_arm_wunpckelub (v8qi) 27550 v2si __builtin_arm_wunpckeluh (v4hi) 27551 long long __builtin_arm_wunpckeluw (v2si) 27552 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 27553 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 27554 v2si __builtin_arm_wunpckihw (v2si, v2si) 27555 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 27556 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 27557 v2si __builtin_arm_wunpckilw (v2si, v2si) 27558 long long __builtin_arm_wxor (long long, long long) 27559 long long __builtin_arm_wzero () 27560 27561 27562 File: gcc.info, Node: ARM NEON Intrinsics, Next: Blackfin Built-in Functions, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 27563 27564 6.54.3 ARM NEON Intrinsics 27565 -------------------------- 27566 27567 These built-in intrinsics for the ARM Advanced SIMD extension are 27568 available when the `-mfpu=neon' switch is used: 27569 27570 6.54.3.1 Addition 27571 ................. 27572 27573 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) 27574 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 27575 27576 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) 27577 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 27578 27579 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) 27580 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 27581 27582 * int32x2_t vadd_s32 (int32x2_t, int32x2_t) 27583 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 27584 27585 * int16x4_t vadd_s16 (int16x4_t, int16x4_t) 27586 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 27587 27588 * int8x8_t vadd_s8 (int8x8_t, int8x8_t) 27589 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 27590 27591 * float32x2_t vadd_f32 (float32x2_t, float32x2_t) 27592 _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0' 27593 27594 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) 27595 27596 * int64x1_t vadd_s64 (int64x1_t, int64x1_t) 27597 27598 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) 27599 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 27600 27601 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) 27602 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 27603 27604 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) 27605 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 27606 27607 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) 27608 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 27609 27610 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) 27611 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 27612 27613 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) 27614 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 27615 27616 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) 27617 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 27618 27619 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) 27620 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 27621 27622 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) 27623 _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0' 27624 27625 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) 27626 _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0' 27627 27628 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) 27629 _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0' 27630 27631 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) 27632 _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0' 27633 27634 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) 27635 _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0' 27636 27637 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) 27638 _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0' 27639 27640 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) 27641 _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0' 27642 27643 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) 27644 _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0' 27645 27646 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) 27647 _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0' 27648 27649 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) 27650 _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0' 27651 27652 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) 27653 _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0' 27654 27655 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) 27656 _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0' 27657 27658 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) 27659 _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0' 27660 27661 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) 27662 _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0' 27663 27664 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) 27665 _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0' 27666 27667 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) 27668 _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0' 27669 27670 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) 27671 _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0' 27672 27673 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) 27674 _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0' 27675 27676 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) 27677 _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0' 27678 27679 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) 27680 _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0' 27681 27682 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) 27683 _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0' 27684 27685 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) 27686 _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0' 27687 27688 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) 27689 _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0' 27690 27691 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) 27692 _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0' 27693 27694 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) 27695 _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0' 27696 27697 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) 27698 _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0' 27699 27700 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) 27701 _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0' 27702 27703 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) 27704 _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0' 27705 27706 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) 27707 _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0' 27708 27709 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) 27710 _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0' 27711 27712 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) 27713 _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0' 27714 27715 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) 27716 _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0' 27717 27718 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) 27719 _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0' 27720 27721 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) 27722 _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0' 27723 27724 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) 27725 _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0' 27726 27727 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) 27728 _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0' 27729 27730 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) 27731 _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0' 27732 27733 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) 27734 _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0' 27735 27736 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) 27737 _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0' 27738 27739 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) 27740 _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0' 27741 27742 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) 27743 _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0' 27744 27745 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) 27746 _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0' 27747 27748 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) 27749 _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0' 27750 27751 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) 27752 _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0' 27753 27754 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) 27755 _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0' 27756 27757 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) 27758 _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0' 27759 27760 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) 27761 _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0' 27762 27763 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) 27764 _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0' 27765 27766 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) 27767 _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0' 27768 27769 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) 27770 _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0' 27771 27772 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) 27773 _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0' 27774 27775 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) 27776 _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0' 27777 27778 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) 27779 _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0' 27780 27781 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) 27782 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 27783 27784 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) 27785 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 27786 27787 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) 27788 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 27789 27790 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) 27791 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 27792 27793 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) 27794 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 27795 27796 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) 27797 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 27798 27799 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) 27800 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 27801 27802 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) 27803 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 27804 27805 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) 27806 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 27807 27808 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) 27809 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 27810 27811 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) 27812 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 27813 27814 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) 27815 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 27816 27817 6.54.3.2 Multiplication 27818 ....................... 27819 27820 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) 27821 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 27822 27823 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) 27824 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 27825 27826 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) 27827 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 27828 27829 * int32x2_t vmul_s32 (int32x2_t, int32x2_t) 27830 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 27831 27832 * int16x4_t vmul_s16 (int16x4_t, int16x4_t) 27833 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 27834 27835 * int8x8_t vmul_s8 (int8x8_t, int8x8_t) 27836 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 27837 27838 * float32x2_t vmul_f32 (float32x2_t, float32x2_t) 27839 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0' 27840 27841 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) 27842 _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0' 27843 27844 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) 27845 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 27846 27847 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) 27848 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 27849 27850 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) 27851 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 27852 27853 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) 27854 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 27855 27856 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) 27857 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 27858 27859 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) 27860 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 27861 27862 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) 27863 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0' 27864 27865 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) 27866 _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0' 27867 27868 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) 27869 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0' 27870 27871 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) 27872 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0' 27873 27874 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) 27875 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0' 27876 27877 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) 27878 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0' 27879 27880 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) 27881 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0' 27882 27883 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) 27884 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0' 27885 27886 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) 27887 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0' 27888 27889 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) 27890 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0' 27891 27892 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) 27893 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0' 27894 27895 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) 27896 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0' 27897 27898 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) 27899 _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0' 27900 27901 * int64x2_t vmull_s32 (int32x2_t, int32x2_t) 27902 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0' 27903 27904 * int32x4_t vmull_s16 (int16x4_t, int16x4_t) 27905 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0' 27906 27907 * int16x8_t vmull_s8 (int8x8_t, int8x8_t) 27908 _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0' 27909 27910 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) 27911 _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0' 27912 27913 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) 27914 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0' 27915 27916 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) 27917 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0' 27918 27919 6.54.3.3 Multiply-accumulate 27920 ............................ 27921 27922 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 27923 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 27924 27925 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 27926 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 27927 27928 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 27929 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 27930 27931 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) 27932 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 27933 27934 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) 27935 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 27936 27937 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) 27938 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 27939 27940 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) 27941 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0' 27942 27943 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 27944 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 27945 27946 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 27947 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 27948 27949 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 27950 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 27951 27952 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) 27953 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 27954 27955 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) 27956 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 27957 27958 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) 27959 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 27960 27961 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) 27962 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0' 27963 27964 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 27965 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0' 27966 27967 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 27968 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0' 27969 27970 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 27971 _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0' 27972 27973 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 27974 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0' 27975 27976 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 27977 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0' 27978 27979 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) 27980 _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0' 27981 27982 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 27983 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0' 27984 27985 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 27986 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0' 27987 27988 6.54.3.4 Multiply-subtract 27989 .......................... 27990 27991 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 27992 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 27993 27994 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 27995 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 27996 27997 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 27998 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 27999 28000 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) 28001 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 28002 28003 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) 28004 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 28005 28006 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) 28007 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 28008 28009 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) 28010 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0' 28011 28012 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 28013 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 28014 28015 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 28016 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 28017 28018 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 28019 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 28020 28021 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) 28022 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 28023 28024 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) 28025 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 28026 28027 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) 28028 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 28029 28030 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) 28031 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0' 28032 28033 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 28034 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0' 28035 28036 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 28037 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0' 28038 28039 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 28040 _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0' 28041 28042 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 28043 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0' 28044 28045 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 28046 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0' 28047 28048 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) 28049 _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0' 28050 28051 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 28052 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0' 28053 28054 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 28055 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0' 28056 28057 6.54.3.5 Subtraction 28058 .................... 28059 28060 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) 28061 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 28062 28063 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) 28064 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 28065 28066 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) 28067 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 28068 28069 * int32x2_t vsub_s32 (int32x2_t, int32x2_t) 28070 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 28071 28072 * int16x4_t vsub_s16 (int16x4_t, int16x4_t) 28073 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 28074 28075 * int8x8_t vsub_s8 (int8x8_t, int8x8_t) 28076 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 28077 28078 * float32x2_t vsub_f32 (float32x2_t, float32x2_t) 28079 _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0' 28080 28081 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) 28082 28083 * int64x1_t vsub_s64 (int64x1_t, int64x1_t) 28084 28085 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) 28086 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 28087 28088 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) 28089 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 28090 28091 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) 28092 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 28093 28094 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) 28095 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 28096 28097 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) 28098 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 28099 28100 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) 28101 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 28102 28103 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) 28104 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 28105 28106 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) 28107 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 28108 28109 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) 28110 _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0' 28111 28112 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) 28113 _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0' 28114 28115 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) 28116 _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0' 28117 28118 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) 28119 _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0' 28120 28121 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) 28122 _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0' 28123 28124 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) 28125 _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0' 28126 28127 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) 28128 _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0' 28129 28130 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) 28131 _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0' 28132 28133 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) 28134 _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0' 28135 28136 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) 28137 _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0' 28138 28139 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) 28140 _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0' 28141 28142 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) 28143 _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0' 28144 28145 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) 28146 _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0' 28147 28148 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) 28149 _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0' 28150 28151 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) 28152 _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0' 28153 28154 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) 28155 _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0' 28156 28157 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) 28158 _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0' 28159 28160 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) 28161 _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0' 28162 28163 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) 28164 _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0' 28165 28166 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) 28167 _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0' 28168 28169 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) 28170 _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0' 28171 28172 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) 28173 _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0' 28174 28175 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) 28176 _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0' 28177 28178 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) 28179 _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0' 28180 28181 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) 28182 _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0' 28183 28184 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) 28185 _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0' 28186 28187 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) 28188 _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0' 28189 28190 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) 28191 _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0' 28192 28193 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) 28194 _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0' 28195 28196 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) 28197 _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0' 28198 28199 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) 28200 _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0' 28201 28202 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) 28203 _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0' 28204 28205 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) 28206 _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0' 28207 28208 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) 28209 _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0' 28210 28211 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) 28212 _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0' 28213 28214 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) 28215 _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0' 28216 28217 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) 28218 _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0' 28219 28220 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) 28221 _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0' 28222 28223 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) 28224 _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0' 28225 28226 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) 28227 _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0' 28228 28229 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) 28230 _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0' 28231 28232 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) 28233 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 28234 28235 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) 28236 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 28237 28238 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) 28239 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 28240 28241 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) 28242 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 28243 28244 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) 28245 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 28246 28247 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) 28248 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 28249 28250 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) 28251 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 28252 28253 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) 28254 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 28255 28256 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) 28257 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 28258 28259 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) 28260 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 28261 28262 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) 28263 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 28264 28265 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) 28266 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 28267 28268 6.54.3.6 Comparison (equal-to) 28269 .............................. 28270 28271 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) 28272 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 28273 28274 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) 28275 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 28276 28277 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) 28278 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 28279 28280 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) 28281 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 28282 28283 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) 28284 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 28285 28286 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) 28287 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 28288 28289 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) 28290 _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0' 28291 28292 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) 28293 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 28294 28295 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) 28296 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 28297 28298 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) 28299 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 28300 28301 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) 28302 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 28303 28304 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) 28305 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 28306 28307 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) 28308 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 28309 28310 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) 28311 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 28312 28313 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) 28314 _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0' 28315 28316 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) 28317 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 28318 28319 6.54.3.7 Comparison (greater-than-or-equal-to) 28320 .............................................. 28321 28322 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) 28323 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 28324 28325 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) 28326 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 28327 28328 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) 28329 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 28330 28331 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) 28332 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 28333 28334 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) 28335 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 28336 28337 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) 28338 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 28339 28340 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) 28341 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 28342 28343 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) 28344 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 28345 28346 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) 28347 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 28348 28349 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) 28350 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 28351 28352 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) 28353 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 28354 28355 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) 28356 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 28357 28358 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) 28359 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 28360 28361 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) 28362 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 28363 28364 6.54.3.8 Comparison (less-than-or-equal-to) 28365 ........................................... 28366 28367 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) 28368 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 28369 28370 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) 28371 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 28372 28373 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) 28374 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 28375 28376 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) 28377 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 28378 28379 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) 28380 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 28381 28382 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) 28383 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 28384 28385 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) 28386 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 28387 28388 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) 28389 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 28390 28391 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) 28392 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 28393 28394 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) 28395 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 28396 28397 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) 28398 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 28399 28400 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) 28401 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 28402 28403 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) 28404 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 28405 28406 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) 28407 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 28408 28409 6.54.3.9 Comparison (greater-than) 28410 .................................. 28411 28412 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) 28413 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 28414 28415 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) 28416 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 28417 28418 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) 28419 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 28420 28421 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) 28422 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 28423 28424 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) 28425 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 28426 28427 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) 28428 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 28429 28430 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) 28431 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 28432 28433 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) 28434 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 28435 28436 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) 28437 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 28438 28439 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) 28440 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 28441 28442 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) 28443 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 28444 28445 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) 28446 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 28447 28448 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) 28449 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 28450 28451 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) 28452 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 28453 28454 6.54.3.10 Comparison (less-than) 28455 ................................ 28456 28457 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) 28458 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 28459 28460 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) 28461 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 28462 28463 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) 28464 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 28465 28466 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) 28467 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 28468 28469 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) 28470 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 28471 28472 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) 28473 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 28474 28475 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) 28476 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 28477 28478 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) 28479 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 28480 28481 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) 28482 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 28483 28484 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) 28485 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 28486 28487 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) 28488 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 28489 28490 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) 28491 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 28492 28493 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) 28494 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 28495 28496 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) 28497 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 28498 28499 6.54.3.11 Comparison (absolute greater-than-or-equal-to) 28500 ........................................................ 28501 28502 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) 28503 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 28504 28505 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) 28506 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 28507 28508 6.54.3.12 Comparison (absolute less-than-or-equal-to) 28509 ..................................................... 28510 28511 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) 28512 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 28513 28514 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) 28515 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 28516 28517 6.54.3.13 Comparison (absolute greater-than) 28518 ............................................ 28519 28520 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) 28521 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 28522 28523 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) 28524 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 28525 28526 6.54.3.14 Comparison (absolute less-than) 28527 ......................................... 28528 28529 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) 28530 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 28531 28532 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) 28533 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 28534 28535 6.54.3.15 Test bits 28536 ................... 28537 28538 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) 28539 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 28540 28541 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) 28542 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 28543 28544 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) 28545 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 28546 28547 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) 28548 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 28549 28550 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) 28551 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 28552 28553 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) 28554 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 28555 28556 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) 28557 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 28558 28559 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) 28560 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 28561 28562 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) 28563 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 28564 28565 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) 28566 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 28567 28568 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) 28569 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 28570 28571 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) 28572 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 28573 28574 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) 28575 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 28576 28577 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) 28578 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 28579 28580 6.54.3.16 Absolute difference 28581 ............................. 28582 28583 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) 28584 _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0' 28585 28586 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) 28587 _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0' 28588 28589 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) 28590 _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0' 28591 28592 * int32x2_t vabd_s32 (int32x2_t, int32x2_t) 28593 _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0' 28594 28595 * int16x4_t vabd_s16 (int16x4_t, int16x4_t) 28596 _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0' 28597 28598 * int8x8_t vabd_s8 (int8x8_t, int8x8_t) 28599 _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0' 28600 28601 * float32x2_t vabd_f32 (float32x2_t, float32x2_t) 28602 _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0' 28603 28604 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) 28605 _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0' 28606 28607 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) 28608 _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0' 28609 28610 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) 28611 _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0' 28612 28613 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) 28614 _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0' 28615 28616 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) 28617 _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0' 28618 28619 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) 28620 _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0' 28621 28622 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) 28623 _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0' 28624 28625 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) 28626 _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0' 28627 28628 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) 28629 _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0' 28630 28631 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) 28632 _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0' 28633 28634 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) 28635 _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0' 28636 28637 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) 28638 _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0' 28639 28640 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) 28641 _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0' 28642 28643 6.54.3.17 Absolute difference and accumulate 28644 ............................................ 28645 28646 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 28647 _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0' 28648 28649 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 28650 _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0' 28651 28652 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 28653 _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0' 28654 28655 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) 28656 _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0' 28657 28658 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) 28659 _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0' 28660 28661 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) 28662 _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0' 28663 28664 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 28665 _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0' 28666 28667 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 28668 _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0' 28669 28670 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 28671 _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0' 28672 28673 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) 28674 _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0' 28675 28676 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) 28677 _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0' 28678 28679 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) 28680 _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0' 28681 28682 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 28683 _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0' 28684 28685 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 28686 _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0' 28687 28688 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 28689 _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0' 28690 28691 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) 28692 _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0' 28693 28694 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) 28695 _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0' 28696 28697 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) 28698 _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0' 28699 28700 6.54.3.18 Maximum 28701 ................. 28702 28703 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) 28704 _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0' 28705 28706 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) 28707 _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0' 28708 28709 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) 28710 _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0' 28711 28712 * int32x2_t vmax_s32 (int32x2_t, int32x2_t) 28713 _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0' 28714 28715 * int16x4_t vmax_s16 (int16x4_t, int16x4_t) 28716 _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0' 28717 28718 * int8x8_t vmax_s8 (int8x8_t, int8x8_t) 28719 _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0' 28720 28721 * float32x2_t vmax_f32 (float32x2_t, float32x2_t) 28722 _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0' 28723 28724 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) 28725 _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0' 28726 28727 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) 28728 _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0' 28729 28730 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) 28731 _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0' 28732 28733 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) 28734 _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0' 28735 28736 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) 28737 _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0' 28738 28739 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) 28740 _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0' 28741 28742 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) 28743 _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0' 28744 28745 6.54.3.19 Minimum 28746 ................. 28747 28748 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) 28749 _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0' 28750 28751 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) 28752 _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0' 28753 28754 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) 28755 _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0' 28756 28757 * int32x2_t vmin_s32 (int32x2_t, int32x2_t) 28758 _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0' 28759 28760 * int16x4_t vmin_s16 (int16x4_t, int16x4_t) 28761 _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0' 28762 28763 * int8x8_t vmin_s8 (int8x8_t, int8x8_t) 28764 _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0' 28765 28766 * float32x2_t vmin_f32 (float32x2_t, float32x2_t) 28767 _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0' 28768 28769 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) 28770 _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0' 28771 28772 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) 28773 _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0' 28774 28775 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) 28776 _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0' 28777 28778 * int32x4_t vminq_s32 (int32x4_t, int32x4_t) 28779 _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0' 28780 28781 * int16x8_t vminq_s16 (int16x8_t, int16x8_t) 28782 _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0' 28783 28784 * int8x16_t vminq_s8 (int8x16_t, int8x16_t) 28785 _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0' 28786 28787 * float32x4_t vminq_f32 (float32x4_t, float32x4_t) 28788 _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0' 28789 28790 6.54.3.20 Pairwise add 28791 ...................... 28792 28793 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) 28794 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 28795 28796 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) 28797 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 28798 28799 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) 28800 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 28801 28802 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) 28803 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 28804 28805 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) 28806 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 28807 28808 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) 28809 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 28810 28811 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) 28812 _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0' 28813 28814 * uint64x1_t vpaddl_u32 (uint32x2_t) 28815 _Form of expected instruction(s):_ `vpaddl.u32 D0, D0' 28816 28817 * uint32x2_t vpaddl_u16 (uint16x4_t) 28818 _Form of expected instruction(s):_ `vpaddl.u16 D0, D0' 28819 28820 * uint16x4_t vpaddl_u8 (uint8x8_t) 28821 _Form of expected instruction(s):_ `vpaddl.u8 D0, D0' 28822 28823 * int64x1_t vpaddl_s32 (int32x2_t) 28824 _Form of expected instruction(s):_ `vpaddl.s32 D0, D0' 28825 28826 * int32x2_t vpaddl_s16 (int16x4_t) 28827 _Form of expected instruction(s):_ `vpaddl.s16 D0, D0' 28828 28829 * int16x4_t vpaddl_s8 (int8x8_t) 28830 _Form of expected instruction(s):_ `vpaddl.s8 D0, D0' 28831 28832 * uint64x2_t vpaddlq_u32 (uint32x4_t) 28833 _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0' 28834 28835 * uint32x4_t vpaddlq_u16 (uint16x8_t) 28836 _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0' 28837 28838 * uint16x8_t vpaddlq_u8 (uint8x16_t) 28839 _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0' 28840 28841 * int64x2_t vpaddlq_s32 (int32x4_t) 28842 _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0' 28843 28844 * int32x4_t vpaddlq_s16 (int16x8_t) 28845 _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0' 28846 28847 * int16x8_t vpaddlq_s8 (int8x16_t) 28848 _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0' 28849 28850 6.54.3.21 Pairwise add, single_opcode widen and accumulate 28851 .......................................................... 28852 28853 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) 28854 _Form of expected instruction(s):_ `vpadal.u32 D0, D0' 28855 28856 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) 28857 _Form of expected instruction(s):_ `vpadal.u16 D0, D0' 28858 28859 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) 28860 _Form of expected instruction(s):_ `vpadal.u8 D0, D0' 28861 28862 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) 28863 _Form of expected instruction(s):_ `vpadal.s32 D0, D0' 28864 28865 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) 28866 _Form of expected instruction(s):_ `vpadal.s16 D0, D0' 28867 28868 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) 28869 _Form of expected instruction(s):_ `vpadal.s8 D0, D0' 28870 28871 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) 28872 _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0' 28873 28874 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) 28875 _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0' 28876 28877 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) 28878 _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0' 28879 28880 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) 28881 _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0' 28882 28883 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) 28884 _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0' 28885 28886 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) 28887 _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0' 28888 28889 6.54.3.22 Folding maximum 28890 ......................... 28891 28892 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) 28893 _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0' 28894 28895 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) 28896 _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0' 28897 28898 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) 28899 _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0' 28900 28901 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) 28902 _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0' 28903 28904 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) 28905 _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0' 28906 28907 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) 28908 _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0' 28909 28910 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) 28911 _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0' 28912 28913 6.54.3.23 Folding minimum 28914 ......................... 28915 28916 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) 28917 _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0' 28918 28919 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) 28920 _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0' 28921 28922 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) 28923 _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0' 28924 28925 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) 28926 _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0' 28927 28928 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) 28929 _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0' 28930 28931 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) 28932 _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0' 28933 28934 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) 28935 _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0' 28936 28937 6.54.3.24 Reciprocal step 28938 ......................... 28939 28940 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) 28941 _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0' 28942 28943 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) 28944 _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0' 28945 28946 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) 28947 _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0' 28948 28949 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) 28950 _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0' 28951 28952 6.54.3.25 Vector shift left 28953 ........................... 28954 28955 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) 28956 _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0' 28957 28958 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) 28959 _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0' 28960 28961 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) 28962 _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0' 28963 28964 * int32x2_t vshl_s32 (int32x2_t, int32x2_t) 28965 _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0' 28966 28967 * int16x4_t vshl_s16 (int16x4_t, int16x4_t) 28968 _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0' 28969 28970 * int8x8_t vshl_s8 (int8x8_t, int8x8_t) 28971 _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0' 28972 28973 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) 28974 _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0' 28975 28976 * int64x1_t vshl_s64 (int64x1_t, int64x1_t) 28977 _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0' 28978 28979 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) 28980 _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0' 28981 28982 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) 28983 _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0' 28984 28985 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) 28986 _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0' 28987 28988 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) 28989 _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0' 28990 28991 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) 28992 _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0' 28993 28994 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) 28995 _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0' 28996 28997 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) 28998 _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0' 28999 29000 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) 29001 _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0' 29002 29003 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) 29004 _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0' 29005 29006 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) 29007 _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0' 29008 29009 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) 29010 _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0' 29011 29012 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) 29013 _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0' 29014 29015 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) 29016 _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0' 29017 29018 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) 29019 _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0' 29020 29021 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) 29022 _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0' 29023 29024 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) 29025 _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0' 29026 29027 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) 29028 _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0' 29029 29030 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) 29031 _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0' 29032 29033 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) 29034 _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0' 29035 29036 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) 29037 _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0' 29038 29039 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) 29040 _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0' 29041 29042 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) 29043 _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0' 29044 29045 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) 29046 _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0' 29047 29048 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) 29049 _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0' 29050 29051 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) 29052 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0' 29053 29054 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) 29055 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0' 29056 29057 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) 29058 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0' 29059 29060 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) 29061 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0' 29062 29063 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) 29064 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0' 29065 29066 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) 29067 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0' 29068 29069 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) 29070 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0' 29071 29072 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) 29073 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0' 29074 29075 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) 29076 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0' 29077 29078 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) 29079 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0' 29080 29081 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) 29082 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0' 29083 29084 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) 29085 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0' 29086 29087 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) 29088 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0' 29089 29090 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) 29091 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0' 29092 29093 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) 29094 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0' 29095 29096 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) 29097 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0' 29098 29099 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) 29100 _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0' 29101 29102 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) 29103 _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0' 29104 29105 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) 29106 _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0' 29107 29108 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) 29109 _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0' 29110 29111 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) 29112 _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0' 29113 29114 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) 29115 _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0' 29116 29117 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) 29118 _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0' 29119 29120 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) 29121 _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0' 29122 29123 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) 29124 _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0' 29125 29126 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) 29127 _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0' 29128 29129 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) 29130 _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0' 29131 29132 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) 29133 _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0' 29134 29135 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) 29136 _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0' 29137 29138 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) 29139 _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0' 29140 29141 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) 29142 _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0' 29143 29144 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) 29145 _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0' 29146 29147 6.54.3.26 Vector shift left by constant 29148 ....................................... 29149 29150 * uint32x2_t vshl_n_u32 (uint32x2_t, const int) 29151 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 29152 29153 * uint16x4_t vshl_n_u16 (uint16x4_t, const int) 29154 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 29155 29156 * uint8x8_t vshl_n_u8 (uint8x8_t, const int) 29157 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 29158 29159 * int32x2_t vshl_n_s32 (int32x2_t, const int) 29160 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 29161 29162 * int16x4_t vshl_n_s16 (int16x4_t, const int) 29163 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 29164 29165 * int8x8_t vshl_n_s8 (int8x8_t, const int) 29166 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 29167 29168 * uint64x1_t vshl_n_u64 (uint64x1_t, const int) 29169 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 29170 29171 * int64x1_t vshl_n_s64 (int64x1_t, const int) 29172 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 29173 29174 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) 29175 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 29176 29177 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) 29178 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 29179 29180 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) 29181 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 29182 29183 * int32x4_t vshlq_n_s32 (int32x4_t, const int) 29184 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 29185 29186 * int16x8_t vshlq_n_s16 (int16x8_t, const int) 29187 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 29188 29189 * int8x16_t vshlq_n_s8 (int8x16_t, const int) 29190 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 29191 29192 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) 29193 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 29194 29195 * int64x2_t vshlq_n_s64 (int64x2_t, const int) 29196 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 29197 29198 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) 29199 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0' 29200 29201 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) 29202 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0' 29203 29204 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) 29205 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0' 29206 29207 * int32x2_t vqshl_n_s32 (int32x2_t, const int) 29208 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0' 29209 29210 * int16x4_t vqshl_n_s16 (int16x4_t, const int) 29211 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0' 29212 29213 * int8x8_t vqshl_n_s8 (int8x8_t, const int) 29214 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0' 29215 29216 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) 29217 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0' 29218 29219 * int64x1_t vqshl_n_s64 (int64x1_t, const int) 29220 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0' 29221 29222 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) 29223 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0' 29224 29225 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) 29226 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0' 29227 29228 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) 29229 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0' 29230 29231 * int32x4_t vqshlq_n_s32 (int32x4_t, const int) 29232 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0' 29233 29234 * int16x8_t vqshlq_n_s16 (int16x8_t, const int) 29235 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0' 29236 29237 * int8x16_t vqshlq_n_s8 (int8x16_t, const int) 29238 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0' 29239 29240 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) 29241 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0' 29242 29243 * int64x2_t vqshlq_n_s64 (int64x2_t, const int) 29244 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0' 29245 29246 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) 29247 _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0' 29248 29249 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) 29250 _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0' 29251 29252 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) 29253 _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0' 29254 29255 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) 29256 _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0' 29257 29258 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) 29259 _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0' 29260 29261 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) 29262 _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0' 29263 29264 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) 29265 _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0' 29266 29267 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) 29268 _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0' 29269 29270 * uint64x2_t vshll_n_u32 (uint32x2_t, const int) 29271 _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0' 29272 29273 * uint32x4_t vshll_n_u16 (uint16x4_t, const int) 29274 _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0' 29275 29276 * uint16x8_t vshll_n_u8 (uint8x8_t, const int) 29277 _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0' 29278 29279 * int64x2_t vshll_n_s32 (int32x2_t, const int) 29280 _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0' 29281 29282 * int32x4_t vshll_n_s16 (int16x4_t, const int) 29283 _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0' 29284 29285 * int16x8_t vshll_n_s8 (int8x8_t, const int) 29286 _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0' 29287 29288 6.54.3.27 Vector shift right by constant 29289 ........................................ 29290 29291 * uint32x2_t vshr_n_u32 (uint32x2_t, const int) 29292 _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0' 29293 29294 * uint16x4_t vshr_n_u16 (uint16x4_t, const int) 29295 _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0' 29296 29297 * uint8x8_t vshr_n_u8 (uint8x8_t, const int) 29298 _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0' 29299 29300 * int32x2_t vshr_n_s32 (int32x2_t, const int) 29301 _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0' 29302 29303 * int16x4_t vshr_n_s16 (int16x4_t, const int) 29304 _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0' 29305 29306 * int8x8_t vshr_n_s8 (int8x8_t, const int) 29307 _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0' 29308 29309 * uint64x1_t vshr_n_u64 (uint64x1_t, const int) 29310 _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0' 29311 29312 * int64x1_t vshr_n_s64 (int64x1_t, const int) 29313 _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0' 29314 29315 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) 29316 _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0' 29317 29318 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) 29319 _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0' 29320 29321 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) 29322 _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0' 29323 29324 * int32x4_t vshrq_n_s32 (int32x4_t, const int) 29325 _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0' 29326 29327 * int16x8_t vshrq_n_s16 (int16x8_t, const int) 29328 _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0' 29329 29330 * int8x16_t vshrq_n_s8 (int8x16_t, const int) 29331 _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0' 29332 29333 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) 29334 _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0' 29335 29336 * int64x2_t vshrq_n_s64 (int64x2_t, const int) 29337 _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0' 29338 29339 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) 29340 _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0' 29341 29342 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) 29343 _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0' 29344 29345 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) 29346 _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0' 29347 29348 * int32x2_t vrshr_n_s32 (int32x2_t, const int) 29349 _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0' 29350 29351 * int16x4_t vrshr_n_s16 (int16x4_t, const int) 29352 _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0' 29353 29354 * int8x8_t vrshr_n_s8 (int8x8_t, const int) 29355 _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0' 29356 29357 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) 29358 _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0' 29359 29360 * int64x1_t vrshr_n_s64 (int64x1_t, const int) 29361 _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0' 29362 29363 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) 29364 _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0' 29365 29366 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) 29367 _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0' 29368 29369 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) 29370 _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0' 29371 29372 * int32x4_t vrshrq_n_s32 (int32x4_t, const int) 29373 _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0' 29374 29375 * int16x8_t vrshrq_n_s16 (int16x8_t, const int) 29376 _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0' 29377 29378 * int8x16_t vrshrq_n_s8 (int8x16_t, const int) 29379 _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0' 29380 29381 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) 29382 _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0' 29383 29384 * int64x2_t vrshrq_n_s64 (int64x2_t, const int) 29385 _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0' 29386 29387 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) 29388 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 29389 29390 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) 29391 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 29392 29393 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) 29394 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 29395 29396 * int32x2_t vshrn_n_s64 (int64x2_t, const int) 29397 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 29398 29399 * int16x4_t vshrn_n_s32 (int32x4_t, const int) 29400 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 29401 29402 * int8x8_t vshrn_n_s16 (int16x8_t, const int) 29403 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 29404 29405 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) 29406 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 29407 29408 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) 29409 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 29410 29411 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) 29412 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 29413 29414 * int32x2_t vrshrn_n_s64 (int64x2_t, const int) 29415 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 29416 29417 * int16x4_t vrshrn_n_s32 (int32x4_t, const int) 29418 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 29419 29420 * int8x8_t vrshrn_n_s16 (int16x8_t, const int) 29421 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 29422 29423 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) 29424 _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0' 29425 29426 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) 29427 _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0' 29428 29429 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) 29430 _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0' 29431 29432 * int32x2_t vqshrn_n_s64 (int64x2_t, const int) 29433 _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0' 29434 29435 * int16x4_t vqshrn_n_s32 (int32x4_t, const int) 29436 _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0' 29437 29438 * int8x8_t vqshrn_n_s16 (int16x8_t, const int) 29439 _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0' 29440 29441 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) 29442 _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0' 29443 29444 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) 29445 _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0' 29446 29447 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) 29448 _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0' 29449 29450 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) 29451 _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0' 29452 29453 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) 29454 _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0' 29455 29456 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) 29457 _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0' 29458 29459 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) 29460 _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0' 29461 29462 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) 29463 _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0' 29464 29465 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) 29466 _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0' 29467 29468 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) 29469 _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0' 29470 29471 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) 29472 _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0' 29473 29474 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) 29475 _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0' 29476 29477 6.54.3.28 Vector shift right by constant and accumulate 29478 ....................................................... 29479 29480 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) 29481 _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0' 29482 29483 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) 29484 _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0' 29485 29486 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) 29487 _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0' 29488 29489 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) 29490 _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0' 29491 29492 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) 29493 _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0' 29494 29495 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) 29496 _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0' 29497 29498 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) 29499 _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0' 29500 29501 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) 29502 _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0' 29503 29504 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 29505 _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0' 29506 29507 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 29508 _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0' 29509 29510 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 29511 _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0' 29512 29513 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) 29514 _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0' 29515 29516 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) 29517 _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0' 29518 29519 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) 29520 _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0' 29521 29522 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 29523 _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0' 29524 29525 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) 29526 _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0' 29527 29528 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) 29529 _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0' 29530 29531 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) 29532 _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0' 29533 29534 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) 29535 _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0' 29536 29537 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) 29538 _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0' 29539 29540 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) 29541 _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0' 29542 29543 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) 29544 _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0' 29545 29546 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) 29547 _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0' 29548 29549 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) 29550 _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0' 29551 29552 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 29553 _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0' 29554 29555 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 29556 _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0' 29557 29558 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 29559 _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0' 29560 29561 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) 29562 _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0' 29563 29564 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) 29565 _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0' 29566 29567 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) 29568 _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0' 29569 29570 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 29571 _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0' 29572 29573 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) 29574 _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0' 29575 29576 6.54.3.29 Vector shift right and insert 29577 ....................................... 29578 29579 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) 29580 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 29581 29582 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) 29583 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 29584 29585 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) 29586 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 29587 29588 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) 29589 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 29590 29591 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) 29592 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 29593 29594 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) 29595 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 29596 29597 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) 29598 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 29599 29600 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) 29601 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 29602 29603 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) 29604 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 29605 29606 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) 29607 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 29608 29609 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) 29610 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 29611 29612 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) 29613 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 29614 29615 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) 29616 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 29617 29618 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) 29619 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 29620 29621 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) 29622 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 29623 29624 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) 29625 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 29626 29627 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) 29628 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 29629 29630 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) 29631 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 29632 29633 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) 29634 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 29635 29636 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) 29637 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 29638 29639 6.54.3.30 Vector shift left and insert 29640 ...................................... 29641 29642 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) 29643 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 29644 29645 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) 29646 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 29647 29648 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) 29649 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 29650 29651 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) 29652 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 29653 29654 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) 29655 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 29656 29657 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) 29658 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 29659 29660 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) 29661 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 29662 29663 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) 29664 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 29665 29666 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) 29667 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 29668 29669 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) 29670 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 29671 29672 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) 29673 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 29674 29675 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) 29676 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 29677 29678 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) 29679 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 29680 29681 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) 29682 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 29683 29684 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) 29685 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 29686 29687 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) 29688 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 29689 29690 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) 29691 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 29692 29693 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) 29694 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 29695 29696 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) 29697 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 29698 29699 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) 29700 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 29701 29702 6.54.3.31 Absolute value 29703 ........................ 29704 29705 * float32x2_t vabs_f32 (float32x2_t) 29706 _Form of expected instruction(s):_ `vabs.f32 D0, D0' 29707 29708 * int32x2_t vabs_s32 (int32x2_t) 29709 _Form of expected instruction(s):_ `vabs.s32 D0, D0' 29710 29711 * int16x4_t vabs_s16 (int16x4_t) 29712 _Form of expected instruction(s):_ `vabs.s16 D0, D0' 29713 29714 * int8x8_t vabs_s8 (int8x8_t) 29715 _Form of expected instruction(s):_ `vabs.s8 D0, D0' 29716 29717 * float32x4_t vabsq_f32 (float32x4_t) 29718 _Form of expected instruction(s):_ `vabs.f32 Q0, Q0' 29719 29720 * int32x4_t vabsq_s32 (int32x4_t) 29721 _Form of expected instruction(s):_ `vabs.s32 Q0, Q0' 29722 29723 * int16x8_t vabsq_s16 (int16x8_t) 29724 _Form of expected instruction(s):_ `vabs.s16 Q0, Q0' 29725 29726 * int8x16_t vabsq_s8 (int8x16_t) 29727 _Form of expected instruction(s):_ `vabs.s8 Q0, Q0' 29728 29729 * int32x2_t vqabs_s32 (int32x2_t) 29730 _Form of expected instruction(s):_ `vqabs.s32 D0, D0' 29731 29732 * int16x4_t vqabs_s16 (int16x4_t) 29733 _Form of expected instruction(s):_ `vqabs.s16 D0, D0' 29734 29735 * int8x8_t vqabs_s8 (int8x8_t) 29736 _Form of expected instruction(s):_ `vqabs.s8 D0, D0' 29737 29738 * int32x4_t vqabsq_s32 (int32x4_t) 29739 _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0' 29740 29741 * int16x8_t vqabsq_s16 (int16x8_t) 29742 _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0' 29743 29744 * int8x16_t vqabsq_s8 (int8x16_t) 29745 _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0' 29746 29747 6.54.3.32 Negation 29748 .................. 29749 29750 * float32x2_t vneg_f32 (float32x2_t) 29751 _Form of expected instruction(s):_ `vneg.f32 D0, D0' 29752 29753 * int32x2_t vneg_s32 (int32x2_t) 29754 _Form of expected instruction(s):_ `vneg.s32 D0, D0' 29755 29756 * int16x4_t vneg_s16 (int16x4_t) 29757 _Form of expected instruction(s):_ `vneg.s16 D0, D0' 29758 29759 * int8x8_t vneg_s8 (int8x8_t) 29760 _Form of expected instruction(s):_ `vneg.s8 D0, D0' 29761 29762 * float32x4_t vnegq_f32 (float32x4_t) 29763 _Form of expected instruction(s):_ `vneg.f32 Q0, Q0' 29764 29765 * int32x4_t vnegq_s32 (int32x4_t) 29766 _Form of expected instruction(s):_ `vneg.s32 Q0, Q0' 29767 29768 * int16x8_t vnegq_s16 (int16x8_t) 29769 _Form of expected instruction(s):_ `vneg.s16 Q0, Q0' 29770 29771 * int8x16_t vnegq_s8 (int8x16_t) 29772 _Form of expected instruction(s):_ `vneg.s8 Q0, Q0' 29773 29774 * int32x2_t vqneg_s32 (int32x2_t) 29775 _Form of expected instruction(s):_ `vqneg.s32 D0, D0' 29776 29777 * int16x4_t vqneg_s16 (int16x4_t) 29778 _Form of expected instruction(s):_ `vqneg.s16 D0, D0' 29779 29780 * int8x8_t vqneg_s8 (int8x8_t) 29781 _Form of expected instruction(s):_ `vqneg.s8 D0, D0' 29782 29783 * int32x4_t vqnegq_s32 (int32x4_t) 29784 _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0' 29785 29786 * int16x8_t vqnegq_s16 (int16x8_t) 29787 _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0' 29788 29789 * int8x16_t vqnegq_s8 (int8x16_t) 29790 _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0' 29791 29792 6.54.3.33 Bitwise not 29793 ..................... 29794 29795 * uint32x2_t vmvn_u32 (uint32x2_t) 29796 _Form of expected instruction(s):_ `vmvn D0, D0' 29797 29798 * uint16x4_t vmvn_u16 (uint16x4_t) 29799 _Form of expected instruction(s):_ `vmvn D0, D0' 29800 29801 * uint8x8_t vmvn_u8 (uint8x8_t) 29802 _Form of expected instruction(s):_ `vmvn D0, D0' 29803 29804 * int32x2_t vmvn_s32 (int32x2_t) 29805 _Form of expected instruction(s):_ `vmvn D0, D0' 29806 29807 * int16x4_t vmvn_s16 (int16x4_t) 29808 _Form of expected instruction(s):_ `vmvn D0, D0' 29809 29810 * int8x8_t vmvn_s8 (int8x8_t) 29811 _Form of expected instruction(s):_ `vmvn D0, D0' 29812 29813 * poly8x8_t vmvn_p8 (poly8x8_t) 29814 _Form of expected instruction(s):_ `vmvn D0, D0' 29815 29816 * uint32x4_t vmvnq_u32 (uint32x4_t) 29817 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29818 29819 * uint16x8_t vmvnq_u16 (uint16x8_t) 29820 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29821 29822 * uint8x16_t vmvnq_u8 (uint8x16_t) 29823 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29824 29825 * int32x4_t vmvnq_s32 (int32x4_t) 29826 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29827 29828 * int16x8_t vmvnq_s16 (int16x8_t) 29829 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29830 29831 * int8x16_t vmvnq_s8 (int8x16_t) 29832 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29833 29834 * poly8x16_t vmvnq_p8 (poly8x16_t) 29835 _Form of expected instruction(s):_ `vmvn Q0, Q0' 29836 29837 6.54.3.34 Count leading sign bits 29838 ................................. 29839 29840 * int32x2_t vcls_s32 (int32x2_t) 29841 _Form of expected instruction(s):_ `vcls.s32 D0, D0' 29842 29843 * int16x4_t vcls_s16 (int16x4_t) 29844 _Form of expected instruction(s):_ `vcls.s16 D0, D0' 29845 29846 * int8x8_t vcls_s8 (int8x8_t) 29847 _Form of expected instruction(s):_ `vcls.s8 D0, D0' 29848 29849 * int32x4_t vclsq_s32 (int32x4_t) 29850 _Form of expected instruction(s):_ `vcls.s32 Q0, Q0' 29851 29852 * int16x8_t vclsq_s16 (int16x8_t) 29853 _Form of expected instruction(s):_ `vcls.s16 Q0, Q0' 29854 29855 * int8x16_t vclsq_s8 (int8x16_t) 29856 _Form of expected instruction(s):_ `vcls.s8 Q0, Q0' 29857 29858 6.54.3.35 Count leading zeros 29859 ............................. 29860 29861 * uint32x2_t vclz_u32 (uint32x2_t) 29862 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 29863 29864 * uint16x4_t vclz_u16 (uint16x4_t) 29865 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 29866 29867 * uint8x8_t vclz_u8 (uint8x8_t) 29868 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 29869 29870 * int32x2_t vclz_s32 (int32x2_t) 29871 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 29872 29873 * int16x4_t vclz_s16 (int16x4_t) 29874 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 29875 29876 * int8x8_t vclz_s8 (int8x8_t) 29877 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 29878 29879 * uint32x4_t vclzq_u32 (uint32x4_t) 29880 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 29881 29882 * uint16x8_t vclzq_u16 (uint16x8_t) 29883 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 29884 29885 * uint8x16_t vclzq_u8 (uint8x16_t) 29886 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 29887 29888 * int32x4_t vclzq_s32 (int32x4_t) 29889 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 29890 29891 * int16x8_t vclzq_s16 (int16x8_t) 29892 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 29893 29894 * int8x16_t vclzq_s8 (int8x16_t) 29895 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 29896 29897 6.54.3.36 Count number of set bits 29898 .................................. 29899 29900 * uint8x8_t vcnt_u8 (uint8x8_t) 29901 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 29902 29903 * int8x8_t vcnt_s8 (int8x8_t) 29904 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 29905 29906 * poly8x8_t vcnt_p8 (poly8x8_t) 29907 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 29908 29909 * uint8x16_t vcntq_u8 (uint8x16_t) 29910 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 29911 29912 * int8x16_t vcntq_s8 (int8x16_t) 29913 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 29914 29915 * poly8x16_t vcntq_p8 (poly8x16_t) 29916 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 29917 29918 6.54.3.37 Reciprocal estimate 29919 ............................. 29920 29921 * float32x2_t vrecpe_f32 (float32x2_t) 29922 _Form of expected instruction(s):_ `vrecpe.f32 D0, D0' 29923 29924 * uint32x2_t vrecpe_u32 (uint32x2_t) 29925 _Form of expected instruction(s):_ `vrecpe.u32 D0, D0' 29926 29927 * float32x4_t vrecpeq_f32 (float32x4_t) 29928 _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0' 29929 29930 * uint32x4_t vrecpeq_u32 (uint32x4_t) 29931 _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0' 29932 29933 6.54.3.38 Reciprocal square-root estimate 29934 ......................................... 29935 29936 * float32x2_t vrsqrte_f32 (float32x2_t) 29937 _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0' 29938 29939 * uint32x2_t vrsqrte_u32 (uint32x2_t) 29940 _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0' 29941 29942 * float32x4_t vrsqrteq_f32 (float32x4_t) 29943 _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0' 29944 29945 * uint32x4_t vrsqrteq_u32 (uint32x4_t) 29946 _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0' 29947 29948 6.54.3.39 Get lanes from a vector 29949 ................................. 29950 29951 * uint32_t vget_lane_u32 (uint32x2_t, const int) 29952 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29953 29954 * uint16_t vget_lane_u16 (uint16x4_t, const int) 29955 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 29956 29957 * uint8_t vget_lane_u8 (uint8x8_t, const int) 29958 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 29959 29960 * int32_t vget_lane_s32 (int32x2_t, const int) 29961 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29962 29963 * int16_t vget_lane_s16 (int16x4_t, const int) 29964 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 29965 29966 * int8_t vget_lane_s8 (int8x8_t, const int) 29967 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 29968 29969 * float32_t vget_lane_f32 (float32x2_t, const int) 29970 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29971 29972 * poly16_t vget_lane_p16 (poly16x4_t, const int) 29973 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 29974 29975 * poly8_t vget_lane_p8 (poly8x8_t, const int) 29976 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 29977 29978 * uint64_t vget_lane_u64 (uint64x1_t, const int) 29979 29980 * int64_t vget_lane_s64 (int64x1_t, const int) 29981 29982 * uint32_t vgetq_lane_u32 (uint32x4_t, const int) 29983 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29984 29985 * uint16_t vgetq_lane_u16 (uint16x8_t, const int) 29986 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 29987 29988 * uint8_t vgetq_lane_u8 (uint8x16_t, const int) 29989 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 29990 29991 * int32_t vgetq_lane_s32 (int32x4_t, const int) 29992 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 29993 29994 * int16_t vgetq_lane_s16 (int16x8_t, const int) 29995 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 29996 29997 * int8_t vgetq_lane_s8 (int8x16_t, const int) 29998 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 29999 30000 * float32_t vgetq_lane_f32 (float32x4_t, const int) 30001 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 30002 30003 * poly16_t vgetq_lane_p16 (poly16x8_t, const int) 30004 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 30005 30006 * poly8_t vgetq_lane_p8 (poly8x16_t, const int) 30007 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 30008 30009 * uint64_t vgetq_lane_u64 (uint64x2_t, const int) 30010 _Form of expected instruction(s):_ `vmov R0, R0, D0' 30011 30012 * int64_t vgetq_lane_s64 (int64x2_t, const int) 30013 _Form of expected instruction(s):_ `vmov R0, R0, D0' 30014 30015 6.54.3.40 Set lanes in a vector 30016 ............................... 30017 30018 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) 30019 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 30020 30021 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) 30022 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 30023 30024 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) 30025 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 30026 30027 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) 30028 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 30029 30030 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) 30031 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 30032 30033 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) 30034 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 30035 30036 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) 30037 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 30038 30039 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) 30040 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 30041 30042 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) 30043 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 30044 30045 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) 30046 30047 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) 30048 30049 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) 30050 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 30051 30052 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) 30053 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 30054 30055 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) 30056 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 30057 30058 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) 30059 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 30060 30061 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) 30062 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 30063 30064 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) 30065 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 30066 30067 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) 30068 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 30069 30070 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) 30071 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 30072 30073 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) 30074 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 30075 30076 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) 30077 _Form of expected instruction(s):_ `vmov D0, R0, R0' 30078 30079 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) 30080 _Form of expected instruction(s):_ `vmov D0, R0, R0' 30081 30082 6.54.3.41 Create vector from literal bit pattern 30083 ................................................ 30084 30085 * uint32x2_t vcreate_u32 (uint64_t) 30086 30087 * uint16x4_t vcreate_u16 (uint64_t) 30088 30089 * uint8x8_t vcreate_u8 (uint64_t) 30090 30091 * int32x2_t vcreate_s32 (uint64_t) 30092 30093 * int16x4_t vcreate_s16 (uint64_t) 30094 30095 * int8x8_t vcreate_s8 (uint64_t) 30096 30097 * uint64x1_t vcreate_u64 (uint64_t) 30098 30099 * int64x1_t vcreate_s64 (uint64_t) 30100 30101 * float32x2_t vcreate_f32 (uint64_t) 30102 30103 * poly16x4_t vcreate_p16 (uint64_t) 30104 30105 * poly8x8_t vcreate_p8 (uint64_t) 30106 30107 6.54.3.42 Set all lanes to the same value 30108 ......................................... 30109 30110 * uint32x2_t vdup_n_u32 (uint32_t) 30111 _Form of expected instruction(s):_ `vdup.32 D0, R0' 30112 30113 * uint16x4_t vdup_n_u16 (uint16_t) 30114 _Form of expected instruction(s):_ `vdup.16 D0, R0' 30115 30116 * uint8x8_t vdup_n_u8 (uint8_t) 30117 _Form of expected instruction(s):_ `vdup.8 D0, R0' 30118 30119 * int32x2_t vdup_n_s32 (int32_t) 30120 _Form of expected instruction(s):_ `vdup.32 D0, R0' 30121 30122 * int16x4_t vdup_n_s16 (int16_t) 30123 _Form of expected instruction(s):_ `vdup.16 D0, R0' 30124 30125 * int8x8_t vdup_n_s8 (int8_t) 30126 _Form of expected instruction(s):_ `vdup.8 D0, R0' 30127 30128 * float32x2_t vdup_n_f32 (float32_t) 30129 _Form of expected instruction(s):_ `vdup.32 D0, R0' 30130 30131 * poly16x4_t vdup_n_p16 (poly16_t) 30132 _Form of expected instruction(s):_ `vdup.16 D0, R0' 30133 30134 * poly8x8_t vdup_n_p8 (poly8_t) 30135 _Form of expected instruction(s):_ `vdup.8 D0, R0' 30136 30137 * uint64x1_t vdup_n_u64 (uint64_t) 30138 30139 * int64x1_t vdup_n_s64 (int64_t) 30140 30141 * uint32x4_t vdupq_n_u32 (uint32_t) 30142 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 30143 30144 * uint16x8_t vdupq_n_u16 (uint16_t) 30145 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 30146 30147 * uint8x16_t vdupq_n_u8 (uint8_t) 30148 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 30149 30150 * int32x4_t vdupq_n_s32 (int32_t) 30151 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 30152 30153 * int16x8_t vdupq_n_s16 (int16_t) 30154 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 30155 30156 * int8x16_t vdupq_n_s8 (int8_t) 30157 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 30158 30159 * float32x4_t vdupq_n_f32 (float32_t) 30160 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 30161 30162 * poly16x8_t vdupq_n_p16 (poly16_t) 30163 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 30164 30165 * poly8x16_t vdupq_n_p8 (poly8_t) 30166 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 30167 30168 * uint64x2_t vdupq_n_u64 (uint64_t) 30169 30170 * int64x2_t vdupq_n_s64 (int64_t) 30171 30172 * uint32x2_t vmov_n_u32 (uint32_t) 30173 _Form of expected instruction(s):_ `vdup.32 D0, R0' 30174 30175 * uint16x4_t vmov_n_u16 (uint16_t) 30176 _Form of expected instruction(s):_ `vdup.16 D0, R0' 30177 30178 * uint8x8_t vmov_n_u8 (uint8_t) 30179 _Form of expected instruction(s):_ `vdup.8 D0, R0' 30180 30181 * int32x2_t vmov_n_s32 (int32_t) 30182 _Form of expected instruction(s):_ `vdup.32 D0, R0' 30183 30184 * int16x4_t vmov_n_s16 (int16_t) 30185 _Form of expected instruction(s):_ `vdup.16 D0, R0' 30186 30187 * int8x8_t vmov_n_s8 (int8_t) 30188 _Form of expected instruction(s):_ `vdup.8 D0, R0' 30189 30190 * float32x2_t vmov_n_f32 (float32_t) 30191 _Form of expected instruction(s):_ `vdup.32 D0, R0' 30192 30193 * poly16x4_t vmov_n_p16 (poly16_t) 30194 _Form of expected instruction(s):_ `vdup.16 D0, R0' 30195 30196 * poly8x8_t vmov_n_p8 (poly8_t) 30197 _Form of expected instruction(s):_ `vdup.8 D0, R0' 30198 30199 * uint64x1_t vmov_n_u64 (uint64_t) 30200 30201 * int64x1_t vmov_n_s64 (int64_t) 30202 30203 * uint32x4_t vmovq_n_u32 (uint32_t) 30204 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 30205 30206 * uint16x8_t vmovq_n_u16 (uint16_t) 30207 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 30208 30209 * uint8x16_t vmovq_n_u8 (uint8_t) 30210 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 30211 30212 * int32x4_t vmovq_n_s32 (int32_t) 30213 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 30214 30215 * int16x8_t vmovq_n_s16 (int16_t) 30216 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 30217 30218 * int8x16_t vmovq_n_s8 (int8_t) 30219 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 30220 30221 * float32x4_t vmovq_n_f32 (float32_t) 30222 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 30223 30224 * poly16x8_t vmovq_n_p16 (poly16_t) 30225 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 30226 30227 * poly8x16_t vmovq_n_p8 (poly8_t) 30228 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 30229 30230 * uint64x2_t vmovq_n_u64 (uint64_t) 30231 30232 * int64x2_t vmovq_n_s64 (int64_t) 30233 30234 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) 30235 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 30236 30237 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) 30238 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 30239 30240 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) 30241 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 30242 30243 * int32x2_t vdup_lane_s32 (int32x2_t, const int) 30244 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 30245 30246 * int16x4_t vdup_lane_s16 (int16x4_t, const int) 30247 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 30248 30249 * int8x8_t vdup_lane_s8 (int8x8_t, const int) 30250 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 30251 30252 * float32x2_t vdup_lane_f32 (float32x2_t, const int) 30253 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 30254 30255 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) 30256 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 30257 30258 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) 30259 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 30260 30261 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) 30262 30263 * int64x1_t vdup_lane_s64 (int64x1_t, const int) 30264 30265 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) 30266 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 30267 30268 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) 30269 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 30270 30271 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) 30272 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 30273 30274 * int32x4_t vdupq_lane_s32 (int32x2_t, const int) 30275 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 30276 30277 * int16x8_t vdupq_lane_s16 (int16x4_t, const int) 30278 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 30279 30280 * int8x16_t vdupq_lane_s8 (int8x8_t, const int) 30281 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 30282 30283 * float32x4_t vdupq_lane_f32 (float32x2_t, const int) 30284 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 30285 30286 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) 30287 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 30288 30289 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) 30290 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 30291 30292 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) 30293 30294 * int64x2_t vdupq_lane_s64 (int64x1_t, const int) 30295 30296 6.54.3.43 Combining vectors 30297 ........................... 30298 30299 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) 30300 30301 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) 30302 30303 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) 30304 30305 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) 30306 30307 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 30308 30309 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) 30310 30311 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) 30312 30313 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) 30314 30315 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) 30316 30317 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) 30318 30319 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) 30320 30321 6.54.3.44 Splitting vectors 30322 ........................... 30323 30324 * uint32x2_t vget_high_u32 (uint32x4_t) 30325 30326 * uint16x4_t vget_high_u16 (uint16x8_t) 30327 30328 * uint8x8_t vget_high_u8 (uint8x16_t) 30329 30330 * int32x2_t vget_high_s32 (int32x4_t) 30331 30332 * int16x4_t vget_high_s16 (int16x8_t) 30333 30334 * int8x8_t vget_high_s8 (int8x16_t) 30335 30336 * uint64x1_t vget_high_u64 (uint64x2_t) 30337 30338 * int64x1_t vget_high_s64 (int64x2_t) 30339 30340 * float32x2_t vget_high_f32 (float32x4_t) 30341 30342 * poly16x4_t vget_high_p16 (poly16x8_t) 30343 30344 * poly8x8_t vget_high_p8 (poly8x16_t) 30345 30346 * uint32x2_t vget_low_u32 (uint32x4_t) 30347 _Form of expected instruction(s):_ `vmov D0, D0' 30348 30349 * uint16x4_t vget_low_u16 (uint16x8_t) 30350 _Form of expected instruction(s):_ `vmov D0, D0' 30351 30352 * uint8x8_t vget_low_u8 (uint8x16_t) 30353 _Form of expected instruction(s):_ `vmov D0, D0' 30354 30355 * int32x2_t vget_low_s32 (int32x4_t) 30356 _Form of expected instruction(s):_ `vmov D0, D0' 30357 30358 * int16x4_t vget_low_s16 (int16x8_t) 30359 _Form of expected instruction(s):_ `vmov D0, D0' 30360 30361 * int8x8_t vget_low_s8 (int8x16_t) 30362 _Form of expected instruction(s):_ `vmov D0, D0' 30363 30364 * float32x2_t vget_low_f32 (float32x4_t) 30365 _Form of expected instruction(s):_ `vmov D0, D0' 30366 30367 * poly16x4_t vget_low_p16 (poly16x8_t) 30368 _Form of expected instruction(s):_ `vmov D0, D0' 30369 30370 * poly8x8_t vget_low_p8 (poly8x16_t) 30371 _Form of expected instruction(s):_ `vmov D0, D0' 30372 30373 * uint64x1_t vget_low_u64 (uint64x2_t) 30374 30375 * int64x1_t vget_low_s64 (int64x2_t) 30376 30377 6.54.3.45 Conversions 30378 ..................... 30379 30380 * float32x2_t vcvt_f32_u32 (uint32x2_t) 30381 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0' 30382 30383 * float32x2_t vcvt_f32_s32 (int32x2_t) 30384 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0' 30385 30386 * uint32x2_t vcvt_u32_f32 (float32x2_t) 30387 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0' 30388 30389 * int32x2_t vcvt_s32_f32 (float32x2_t) 30390 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0' 30391 30392 * float32x4_t vcvtq_f32_u32 (uint32x4_t) 30393 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0' 30394 30395 * float32x4_t vcvtq_f32_s32 (int32x4_t) 30396 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0' 30397 30398 * uint32x4_t vcvtq_u32_f32 (float32x4_t) 30399 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0' 30400 30401 * int32x4_t vcvtq_s32_f32 (float32x4_t) 30402 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0' 30403 30404 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) 30405 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0' 30406 30407 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) 30408 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0' 30409 30410 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) 30411 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0' 30412 30413 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) 30414 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0' 30415 30416 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) 30417 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0' 30418 30419 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) 30420 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0' 30421 30422 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) 30423 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0' 30424 30425 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) 30426 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0' 30427 30428 6.54.3.46 Move, single_opcode narrowing 30429 ....................................... 30430 30431 * uint32x2_t vmovn_u64 (uint64x2_t) 30432 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 30433 30434 * uint16x4_t vmovn_u32 (uint32x4_t) 30435 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 30436 30437 * uint8x8_t vmovn_u16 (uint16x8_t) 30438 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 30439 30440 * int32x2_t vmovn_s64 (int64x2_t) 30441 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 30442 30443 * int16x4_t vmovn_s32 (int32x4_t) 30444 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 30445 30446 * int8x8_t vmovn_s16 (int16x8_t) 30447 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 30448 30449 * uint32x2_t vqmovn_u64 (uint64x2_t) 30450 _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0' 30451 30452 * uint16x4_t vqmovn_u32 (uint32x4_t) 30453 _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0' 30454 30455 * uint8x8_t vqmovn_u16 (uint16x8_t) 30456 _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0' 30457 30458 * int32x2_t vqmovn_s64 (int64x2_t) 30459 _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0' 30460 30461 * int16x4_t vqmovn_s32 (int32x4_t) 30462 _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0' 30463 30464 * int8x8_t vqmovn_s16 (int16x8_t) 30465 _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0' 30466 30467 * uint32x2_t vqmovun_s64 (int64x2_t) 30468 _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0' 30469 30470 * uint16x4_t vqmovun_s32 (int32x4_t) 30471 _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0' 30472 30473 * uint8x8_t vqmovun_s16 (int16x8_t) 30474 _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0' 30475 30476 6.54.3.47 Move, single_opcode long 30477 .................................. 30478 30479 * uint64x2_t vmovl_u32 (uint32x2_t) 30480 _Form of expected instruction(s):_ `vmovl.u32 Q0, D0' 30481 30482 * uint32x4_t vmovl_u16 (uint16x4_t) 30483 _Form of expected instruction(s):_ `vmovl.u16 Q0, D0' 30484 30485 * uint16x8_t vmovl_u8 (uint8x8_t) 30486 _Form of expected instruction(s):_ `vmovl.u8 Q0, D0' 30487 30488 * int64x2_t vmovl_s32 (int32x2_t) 30489 _Form of expected instruction(s):_ `vmovl.s32 Q0, D0' 30490 30491 * int32x4_t vmovl_s16 (int16x4_t) 30492 _Form of expected instruction(s):_ `vmovl.s16 Q0, D0' 30493 30494 * int16x8_t vmovl_s8 (int8x8_t) 30495 _Form of expected instruction(s):_ `vmovl.s8 Q0, D0' 30496 30497 6.54.3.48 Table lookup 30498 ...................... 30499 30500 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) 30501 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 30502 30503 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) 30504 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 30505 30506 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) 30507 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 30508 30509 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) 30510 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 30511 30512 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) 30513 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 30514 30515 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) 30516 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 30517 30518 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) 30519 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 30520 30521 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) 30522 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 30523 30524 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) 30525 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 30526 30527 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) 30528 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 30529 D0' 30530 30531 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) 30532 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 30533 D0' 30534 30535 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) 30536 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 30537 D0' 30538 30539 6.54.3.49 Extended table lookup 30540 ............................... 30541 30542 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) 30543 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 30544 30545 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) 30546 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 30547 30548 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 30549 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 30550 30551 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) 30552 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 30553 30554 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) 30555 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 30556 30557 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) 30558 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 30559 30560 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) 30561 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 30562 30563 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) 30564 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 30565 30566 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) 30567 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 30568 30569 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) 30570 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 30571 D0' 30572 30573 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) 30574 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 30575 D0' 30576 30577 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) 30578 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 30579 D0' 30580 30581 6.54.3.50 Multiply, lane 30582 ........................ 30583 30584 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) 30585 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 30586 30587 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) 30588 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 30589 30590 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) 30591 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 30592 30593 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) 30594 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 30595 30596 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) 30597 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 30598 30599 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) 30600 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 30601 30602 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) 30603 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 30604 30605 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) 30606 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 30607 30608 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) 30609 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 30610 30611 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) 30612 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 30613 30614 6.54.3.51 Long multiply, lane 30615 ............................. 30616 30617 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) 30618 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 30619 30620 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) 30621 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 30622 30623 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) 30624 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 30625 30626 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) 30627 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 30628 30629 6.54.3.52 Saturating doubling long multiply, lane 30630 ................................................. 30631 30632 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) 30633 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 30634 30635 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) 30636 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 30637 30638 6.54.3.53 Saturating doubling multiply high, lane 30639 ................................................. 30640 30641 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 30642 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 30643 30644 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 30645 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 30646 30647 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 30648 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 30649 30650 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 30651 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 30652 30653 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 30654 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 30655 30656 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 30657 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 30658 30659 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 30660 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 30661 30662 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 30663 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 30664 30665 6.54.3.54 Multiply-accumulate, lane 30666 ................................... 30667 30668 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 30669 const int) 30670 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 30671 30672 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 30673 const int) 30674 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 30675 30676 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 30677 const int) 30678 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 30679 30680 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 30681 int) 30682 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 30683 30684 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 30685 int) 30686 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 30687 30688 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 30689 const int) 30690 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 30691 30692 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 30693 const int) 30694 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 30695 30696 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 30697 const int) 30698 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 30699 30700 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 30701 int) 30702 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 30703 30704 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 30705 int) 30706 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 30707 30708 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 30709 const int) 30710 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 30711 30712 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 30713 const int) 30714 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 30715 30716 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 30717 int) 30718 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 30719 30720 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 30721 int) 30722 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 30723 30724 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 30725 int) 30726 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 30727 30728 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 30729 int) 30730 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 30731 30732 6.54.3.55 Multiply-subtract, lane 30733 ................................. 30734 30735 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 30736 const int) 30737 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 30738 30739 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 30740 const int) 30741 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 30742 30743 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 30744 const int) 30745 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 30746 30747 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 30748 int) 30749 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 30750 30751 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 30752 int) 30753 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 30754 30755 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 30756 const int) 30757 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 30758 30759 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 30760 const int) 30761 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 30762 30763 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 30764 const int) 30765 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 30766 30767 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 30768 int) 30769 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 30770 30771 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 30772 int) 30773 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 30774 30775 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 30776 const int) 30777 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 30778 30779 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 30780 const int) 30781 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 30782 30783 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 30784 int) 30785 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 30786 30787 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 30788 int) 30789 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 30790 30791 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 30792 int) 30793 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 30794 30795 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 30796 int) 30797 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 30798 30799 6.54.3.56 Vector multiply by scalar 30800 ................................... 30801 30802 * float32x2_t vmul_n_f32 (float32x2_t, float32_t) 30803 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 30804 30805 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) 30806 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 30807 30808 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) 30809 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 30810 30811 * int32x2_t vmul_n_s32 (int32x2_t, int32_t) 30812 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 30813 30814 * int16x4_t vmul_n_s16 (int16x4_t, int16_t) 30815 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 30816 30817 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) 30818 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 30819 30820 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) 30821 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 30822 30823 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) 30824 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 30825 30826 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) 30827 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 30828 30829 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) 30830 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 30831 30832 6.54.3.57 Vector long multiply by scalar 30833 ........................................ 30834 30835 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) 30836 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 30837 30838 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) 30839 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 30840 30841 * int64x2_t vmull_n_s32 (int32x2_t, int32_t) 30842 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 30843 30844 * int32x4_t vmull_n_s16 (int16x4_t, int16_t) 30845 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 30846 30847 6.54.3.58 Vector saturating doubling long multiply by scalar 30848 ............................................................ 30849 30850 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) 30851 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 30852 30853 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) 30854 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 30855 30856 6.54.3.59 Vector saturating doubling multiply high by scalar 30857 ............................................................ 30858 30859 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) 30860 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 30861 30862 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) 30863 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 30864 30865 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) 30866 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 30867 30868 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) 30869 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 30870 30871 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) 30872 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 30873 30874 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) 30875 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 30876 30877 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) 30878 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 30879 30880 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) 30881 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 30882 30883 6.54.3.60 Vector multiply-accumulate by scalar 30884 .............................................. 30885 30886 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) 30887 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 30888 30889 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 30890 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 30891 30892 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 30893 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 30894 30895 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) 30896 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 30897 30898 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) 30899 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 30900 30901 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) 30902 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 30903 30904 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 30905 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 30906 30907 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 30908 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 30909 30910 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) 30911 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 30912 30913 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) 30914 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 30915 30916 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 30917 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 30918 30919 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 30920 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 30921 30922 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 30923 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 30924 30925 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 30926 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 30927 30928 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 30929 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 30930 30931 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 30932 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 30933 30934 6.54.3.61 Vector multiply-subtract by scalar 30935 ............................................ 30936 30937 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) 30938 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 30939 30940 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 30941 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 30942 30943 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 30944 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 30945 30946 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) 30947 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 30948 30949 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) 30950 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 30951 30952 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) 30953 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 30954 30955 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 30956 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 30957 30958 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 30959 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 30960 30961 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) 30962 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 30963 30964 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) 30965 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 30966 30967 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 30968 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 30969 30970 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 30971 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 30972 30973 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 30974 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 30975 30976 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 30977 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 30978 30979 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 30980 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 30981 30982 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 30983 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 30984 30985 6.54.3.62 Vector extract 30986 ........................ 30987 30988 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) 30989 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 30990 30991 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) 30992 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 30993 30994 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) 30995 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 30996 30997 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) 30998 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 30999 31000 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) 31001 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 31002 31003 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) 31004 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 31005 31006 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) 31007 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 31008 31009 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) 31010 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 31011 31012 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) 31013 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 31014 31015 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) 31016 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 31017 31018 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) 31019 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 31020 31021 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) 31022 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 31023 31024 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) 31025 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 31026 31027 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) 31028 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 31029 31030 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) 31031 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 31032 31033 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) 31034 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 31035 31036 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) 31037 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 31038 31039 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) 31040 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 31041 31042 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) 31043 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 31044 31045 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) 31046 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 31047 31048 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) 31049 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 31050 31051 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) 31052 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 31053 31054 6.54.3.63 Reverse elements 31055 .......................... 31056 31057 * uint32x2_t vrev64_u32 (uint32x2_t) 31058 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 31059 31060 * uint16x4_t vrev64_u16 (uint16x4_t) 31061 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 31062 31063 * uint8x8_t vrev64_u8 (uint8x8_t) 31064 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 31065 31066 * int32x2_t vrev64_s32 (int32x2_t) 31067 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 31068 31069 * int16x4_t vrev64_s16 (int16x4_t) 31070 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 31071 31072 * int8x8_t vrev64_s8 (int8x8_t) 31073 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 31074 31075 * float32x2_t vrev64_f32 (float32x2_t) 31076 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 31077 31078 * poly16x4_t vrev64_p16 (poly16x4_t) 31079 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 31080 31081 * poly8x8_t vrev64_p8 (poly8x8_t) 31082 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 31083 31084 * uint32x4_t vrev64q_u32 (uint32x4_t) 31085 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 31086 31087 * uint16x8_t vrev64q_u16 (uint16x8_t) 31088 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 31089 31090 * uint8x16_t vrev64q_u8 (uint8x16_t) 31091 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 31092 31093 * int32x4_t vrev64q_s32 (int32x4_t) 31094 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 31095 31096 * int16x8_t vrev64q_s16 (int16x8_t) 31097 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 31098 31099 * int8x16_t vrev64q_s8 (int8x16_t) 31100 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 31101 31102 * float32x4_t vrev64q_f32 (float32x4_t) 31103 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 31104 31105 * poly16x8_t vrev64q_p16 (poly16x8_t) 31106 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 31107 31108 * poly8x16_t vrev64q_p8 (poly8x16_t) 31109 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 31110 31111 * uint16x4_t vrev32_u16 (uint16x4_t) 31112 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 31113 31114 * int16x4_t vrev32_s16 (int16x4_t) 31115 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 31116 31117 * uint8x8_t vrev32_u8 (uint8x8_t) 31118 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 31119 31120 * int8x8_t vrev32_s8 (int8x8_t) 31121 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 31122 31123 * poly16x4_t vrev32_p16 (poly16x4_t) 31124 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 31125 31126 * poly8x8_t vrev32_p8 (poly8x8_t) 31127 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 31128 31129 * uint16x8_t vrev32q_u16 (uint16x8_t) 31130 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 31131 31132 * int16x8_t vrev32q_s16 (int16x8_t) 31133 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 31134 31135 * uint8x16_t vrev32q_u8 (uint8x16_t) 31136 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 31137 31138 * int8x16_t vrev32q_s8 (int8x16_t) 31139 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 31140 31141 * poly16x8_t vrev32q_p16 (poly16x8_t) 31142 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 31143 31144 * poly8x16_t vrev32q_p8 (poly8x16_t) 31145 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 31146 31147 * uint8x8_t vrev16_u8 (uint8x8_t) 31148 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 31149 31150 * int8x8_t vrev16_s8 (int8x8_t) 31151 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 31152 31153 * poly8x8_t vrev16_p8 (poly8x8_t) 31154 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 31155 31156 * uint8x16_t vrev16q_u8 (uint8x16_t) 31157 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 31158 31159 * int8x16_t vrev16q_s8 (int8x16_t) 31160 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 31161 31162 * poly8x16_t vrev16q_p8 (poly8x16_t) 31163 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 31164 31165 6.54.3.64 Bit selection 31166 ....................... 31167 31168 * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 31169 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31170 D0, D0, D0' _or_ `vbif D0, D0, D0' 31171 31172 * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 31173 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31174 D0, D0, D0' _or_ `vbif D0, D0, D0' 31175 31176 * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 31177 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31178 D0, D0, D0' _or_ `vbif D0, D0, D0' 31179 31180 * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) 31181 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31182 D0, D0, D0' _or_ `vbif D0, D0, D0' 31183 31184 * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) 31185 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31186 D0, D0, D0' _or_ `vbif D0, D0, D0' 31187 31188 * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) 31189 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31190 D0, D0, D0' _or_ `vbif D0, D0, D0' 31191 31192 * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) 31193 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31194 D0, D0, D0' _or_ `vbif D0, D0, D0' 31195 31196 * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) 31197 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31198 D0, D0, D0' _or_ `vbif D0, D0, D0' 31199 31200 * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) 31201 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31202 D0, D0, D0' _or_ `vbif D0, D0, D0' 31203 31204 * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) 31205 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31206 D0, D0, D0' _or_ `vbif D0, D0, D0' 31207 31208 * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) 31209 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 31210 D0, D0, D0' _or_ `vbif D0, D0, D0' 31211 31212 * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 31213 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31214 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31215 31216 * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 31217 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31218 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31219 31220 * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 31221 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31222 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31223 31224 * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) 31225 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31226 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31227 31228 * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) 31229 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31230 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31231 31232 * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) 31233 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31234 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31235 31236 * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) 31237 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31238 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31239 31240 * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) 31241 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31242 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31243 31244 * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) 31245 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31246 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31247 31248 * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) 31249 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31250 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31251 31252 * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) 31253 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 31254 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 31255 31256 6.54.3.65 Transpose elements 31257 ............................ 31258 31259 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) 31260 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 31261 31262 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) 31263 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 31264 31265 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) 31266 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 31267 31268 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) 31269 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 31270 31271 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) 31272 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 31273 31274 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) 31275 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 31276 31277 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) 31278 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 31279 31280 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) 31281 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 31282 31283 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) 31284 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 31285 31286 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) 31287 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 31288 31289 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) 31290 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 31291 31292 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) 31293 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 31294 31295 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) 31296 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 31297 31298 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) 31299 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 31300 31301 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) 31302 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 31303 31304 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) 31305 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 31306 31307 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) 31308 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 31309 31310 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) 31311 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 31312 31313 6.54.3.66 Zip elements 31314 ...................... 31315 31316 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) 31317 _Form of expected instruction(s):_ `vzip.32 D0, D1' 31318 31319 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) 31320 _Form of expected instruction(s):_ `vzip.16 D0, D1' 31321 31322 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) 31323 _Form of expected instruction(s):_ `vzip.8 D0, D1' 31324 31325 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) 31326 _Form of expected instruction(s):_ `vzip.32 D0, D1' 31327 31328 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) 31329 _Form of expected instruction(s):_ `vzip.16 D0, D1' 31330 31331 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) 31332 _Form of expected instruction(s):_ `vzip.8 D0, D1' 31333 31334 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) 31335 _Form of expected instruction(s):_ `vzip.32 D0, D1' 31336 31337 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) 31338 _Form of expected instruction(s):_ `vzip.16 D0, D1' 31339 31340 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) 31341 _Form of expected instruction(s):_ `vzip.8 D0, D1' 31342 31343 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) 31344 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 31345 31346 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) 31347 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 31348 31349 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) 31350 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 31351 31352 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) 31353 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 31354 31355 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) 31356 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 31357 31358 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) 31359 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 31360 31361 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) 31362 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 31363 31364 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) 31365 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 31366 31367 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) 31368 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 31369 31370 6.54.3.67 Unzip elements 31371 ........................ 31372 31373 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) 31374 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 31375 31376 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) 31377 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 31378 31379 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) 31380 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 31381 31382 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) 31383 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 31384 31385 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) 31386 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 31387 31388 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) 31389 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 31390 31391 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) 31392 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 31393 31394 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) 31395 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 31396 31397 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) 31398 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 31399 31400 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) 31401 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 31402 31403 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) 31404 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 31405 31406 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) 31407 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 31408 31409 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) 31410 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 31411 31412 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) 31413 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 31414 31415 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) 31416 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 31417 31418 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) 31419 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 31420 31421 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) 31422 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 31423 31424 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) 31425 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 31426 31427 6.54.3.68 Element/structure loads, VLD1 variants 31428 ................................................ 31429 31430 * uint32x2_t vld1_u32 (const uint32_t *) 31431 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 31432 31433 * uint16x4_t vld1_u16 (const uint16_t *) 31434 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 31435 31436 * uint8x8_t vld1_u8 (const uint8_t *) 31437 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 31438 31439 * int32x2_t vld1_s32 (const int32_t *) 31440 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 31441 31442 * int16x4_t vld1_s16 (const int16_t *) 31443 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 31444 31445 * int8x8_t vld1_s8 (const int8_t *) 31446 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 31447 31448 * uint64x1_t vld1_u64 (const uint64_t *) 31449 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31450 31451 * int64x1_t vld1_s64 (const int64_t *) 31452 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31453 31454 * float32x2_t vld1_f32 (const float32_t *) 31455 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 31456 31457 * poly16x4_t vld1_p16 (const poly16_t *) 31458 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 31459 31460 * poly8x8_t vld1_p8 (const poly8_t *) 31461 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 31462 31463 * uint32x4_t vld1q_u32 (const uint32_t *) 31464 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 31465 31466 * uint16x8_t vld1q_u16 (const uint16_t *) 31467 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 31468 31469 * uint8x16_t vld1q_u8 (const uint8_t *) 31470 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 31471 31472 * int32x4_t vld1q_s32 (const int32_t *) 31473 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 31474 31475 * int16x8_t vld1q_s16 (const int16_t *) 31476 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 31477 31478 * int8x16_t vld1q_s8 (const int8_t *) 31479 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 31480 31481 * uint64x2_t vld1q_u64 (const uint64_t *) 31482 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31483 31484 * int64x2_t vld1q_s64 (const int64_t *) 31485 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31486 31487 * float32x4_t vld1q_f32 (const float32_t *) 31488 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 31489 31490 * poly16x8_t vld1q_p16 (const poly16_t *) 31491 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 31492 31493 * poly8x16_t vld1q_p8 (const poly8_t *) 31494 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 31495 31496 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) 31497 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31498 31499 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) 31500 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31501 31502 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) 31503 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31504 31505 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) 31506 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31507 31508 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) 31509 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31510 31511 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) 31512 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31513 31514 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const 31515 int) 31516 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31517 31518 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) 31519 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31520 31521 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) 31522 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31523 31524 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) 31525 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31526 31527 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) 31528 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31529 31530 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) 31531 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31532 31533 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) 31534 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31535 31536 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) 31537 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31538 31539 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) 31540 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31541 31542 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) 31543 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31544 31545 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) 31546 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31547 31548 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const 31549 int) 31550 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 31551 31552 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) 31553 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 31554 31555 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) 31556 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 31557 31558 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) 31559 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31560 31561 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) 31562 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31563 31564 * uint32x2_t vld1_dup_u32 (const uint32_t *) 31565 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 31566 31567 * uint16x4_t vld1_dup_u16 (const uint16_t *) 31568 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 31569 31570 * uint8x8_t vld1_dup_u8 (const uint8_t *) 31571 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 31572 31573 * int32x2_t vld1_dup_s32 (const int32_t *) 31574 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 31575 31576 * int16x4_t vld1_dup_s16 (const int16_t *) 31577 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 31578 31579 * int8x8_t vld1_dup_s8 (const int8_t *) 31580 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 31581 31582 * float32x2_t vld1_dup_f32 (const float32_t *) 31583 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 31584 31585 * poly16x4_t vld1_dup_p16 (const poly16_t *) 31586 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 31587 31588 * poly8x8_t vld1_dup_p8 (const poly8_t *) 31589 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 31590 31591 * uint64x1_t vld1_dup_u64 (const uint64_t *) 31592 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31593 31594 * int64x1_t vld1_dup_s64 (const int64_t *) 31595 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 31596 31597 * uint32x4_t vld1q_dup_u32 (const uint32_t *) 31598 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 31599 31600 * uint16x8_t vld1q_dup_u16 (const uint16_t *) 31601 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 31602 31603 * uint8x16_t vld1q_dup_u8 (const uint8_t *) 31604 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 31605 31606 * int32x4_t vld1q_dup_s32 (const int32_t *) 31607 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 31608 31609 * int16x8_t vld1q_dup_s16 (const int16_t *) 31610 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 31611 31612 * int8x16_t vld1q_dup_s8 (const int8_t *) 31613 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 31614 31615 * float32x4_t vld1q_dup_f32 (const float32_t *) 31616 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 31617 31618 * poly16x8_t vld1q_dup_p16 (const poly16_t *) 31619 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 31620 31621 * poly8x16_t vld1q_dup_p8 (const poly8_t *) 31622 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 31623 31624 * uint64x2_t vld1q_dup_u64 (const uint64_t *) 31625 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31626 31627 * int64x2_t vld1q_dup_s64 (const int64_t *) 31628 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31629 31630 6.54.3.69 Element/structure stores, VST1 variants 31631 ................................................. 31632 31633 * void vst1_u32 (uint32_t *, uint32x2_t) 31634 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 31635 31636 * void vst1_u16 (uint16_t *, uint16x4_t) 31637 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 31638 31639 * void vst1_u8 (uint8_t *, uint8x8_t) 31640 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 31641 31642 * void vst1_s32 (int32_t *, int32x2_t) 31643 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 31644 31645 * void vst1_s16 (int16_t *, int16x4_t) 31646 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 31647 31648 * void vst1_s8 (int8_t *, int8x8_t) 31649 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 31650 31651 * void vst1_u64 (uint64_t *, uint64x1_t) 31652 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31653 31654 * void vst1_s64 (int64_t *, int64x1_t) 31655 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31656 31657 * void vst1_f32 (float32_t *, float32x2_t) 31658 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 31659 31660 * void vst1_p16 (poly16_t *, poly16x4_t) 31661 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 31662 31663 * void vst1_p8 (poly8_t *, poly8x8_t) 31664 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 31665 31666 * void vst1q_u32 (uint32_t *, uint32x4_t) 31667 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 31668 31669 * void vst1q_u16 (uint16_t *, uint16x8_t) 31670 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 31671 31672 * void vst1q_u8 (uint8_t *, uint8x16_t) 31673 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 31674 31675 * void vst1q_s32 (int32_t *, int32x4_t) 31676 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 31677 31678 * void vst1q_s16 (int16_t *, int16x8_t) 31679 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 31680 31681 * void vst1q_s8 (int8_t *, int8x16_t) 31682 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 31683 31684 * void vst1q_u64 (uint64_t *, uint64x2_t) 31685 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 31686 31687 * void vst1q_s64 (int64_t *, int64x2_t) 31688 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 31689 31690 * void vst1q_f32 (float32_t *, float32x4_t) 31691 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 31692 31693 * void vst1q_p16 (poly16_t *, poly16x8_t) 31694 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 31695 31696 * void vst1q_p8 (poly8_t *, poly8x16_t) 31697 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 31698 31699 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) 31700 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31701 31702 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) 31703 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31704 31705 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) 31706 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31707 31708 * void vst1_lane_s32 (int32_t *, int32x2_t, const int) 31709 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31710 31711 * void vst1_lane_s16 (int16_t *, int16x4_t, const int) 31712 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31713 31714 * void vst1_lane_s8 (int8_t *, int8x8_t, const int) 31715 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31716 31717 * void vst1_lane_f32 (float32_t *, float32x2_t, const int) 31718 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31719 31720 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) 31721 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31722 31723 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) 31724 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31725 31726 * void vst1_lane_s64 (int64_t *, int64x1_t, const int) 31727 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31728 31729 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) 31730 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31731 31732 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) 31733 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31734 31735 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) 31736 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31737 31738 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) 31739 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31740 31741 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) 31742 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31743 31744 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) 31745 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31746 31747 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) 31748 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31749 31750 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) 31751 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 31752 31753 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) 31754 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 31755 31756 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) 31757 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 31758 31759 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) 31760 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31761 31762 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) 31763 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 31764 31765 6.54.3.70 Element/structure loads, VLD2 variants 31766 ................................................ 31767 31768 * uint32x2x2_t vld2_u32 (const uint32_t *) 31769 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31770 31771 * uint16x4x2_t vld2_u16 (const uint16_t *) 31772 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31773 31774 * uint8x8x2_t vld2_u8 (const uint8_t *) 31775 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31776 31777 * int32x2x2_t vld2_s32 (const int32_t *) 31778 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31779 31780 * int16x4x2_t vld2_s16 (const int16_t *) 31781 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31782 31783 * int8x8x2_t vld2_s8 (const int8_t *) 31784 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31785 31786 * float32x2x2_t vld2_f32 (const float32_t *) 31787 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31788 31789 * poly16x4x2_t vld2_p16 (const poly16_t *) 31790 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31791 31792 * poly8x8x2_t vld2_p8 (const poly8_t *) 31793 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31794 31795 * uint64x1x2_t vld2_u64 (const uint64_t *) 31796 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31797 31798 * int64x1x2_t vld2_s64 (const int64_t *) 31799 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31800 31801 * uint32x4x2_t vld2q_u32 (const uint32_t *) 31802 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31803 31804 * uint16x8x2_t vld2q_u16 (const uint16_t *) 31805 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31806 31807 * uint8x16x2_t vld2q_u8 (const uint8_t *) 31808 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31809 31810 * int32x4x2_t vld2q_s32 (const int32_t *) 31811 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31812 31813 * int16x8x2_t vld2q_s16 (const int16_t *) 31814 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31815 31816 * int8x16x2_t vld2q_s8 (const int8_t *) 31817 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31818 31819 * float32x4x2_t vld2q_f32 (const float32_t *) 31820 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 31821 31822 * poly16x8x2_t vld2q_p16 (const poly16_t *) 31823 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 31824 31825 * poly8x16x2_t vld2q_p8 (const poly8_t *) 31826 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 31827 31828 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const 31829 int) 31830 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31831 31832 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const 31833 int) 31834 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31835 31836 * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) 31837 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 31838 31839 * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) 31840 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31841 31842 * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) 31843 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31844 31845 * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) 31846 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 31847 31848 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, 31849 const int) 31850 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31851 31852 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const 31853 int) 31854 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31855 31856 * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) 31857 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 31858 31859 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const 31860 int) 31861 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31862 31863 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const 31864 int) 31865 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31866 31867 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const 31868 int) 31869 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31870 31871 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const 31872 int) 31873 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31874 31875 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, 31876 const int) 31877 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 31878 31879 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const 31880 int) 31881 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 31882 31883 * uint32x2x2_t vld2_dup_u32 (const uint32_t *) 31884 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 31885 31886 * uint16x4x2_t vld2_dup_u16 (const uint16_t *) 31887 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 31888 31889 * uint8x8x2_t vld2_dup_u8 (const uint8_t *) 31890 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 31891 31892 * int32x2x2_t vld2_dup_s32 (const int32_t *) 31893 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 31894 31895 * int16x4x2_t vld2_dup_s16 (const int16_t *) 31896 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 31897 31898 * int8x8x2_t vld2_dup_s8 (const int8_t *) 31899 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 31900 31901 * float32x2x2_t vld2_dup_f32 (const float32_t *) 31902 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 31903 31904 * poly16x4x2_t vld2_dup_p16 (const poly16_t *) 31905 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 31906 31907 * poly8x8x2_t vld2_dup_p8 (const poly8_t *) 31908 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 31909 31910 * uint64x1x2_t vld2_dup_u64 (const uint64_t *) 31911 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31912 31913 * int64x1x2_t vld2_dup_s64 (const int64_t *) 31914 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 31915 31916 6.54.3.71 Element/structure stores, VST2 variants 31917 ................................................. 31918 31919 * void vst2_u32 (uint32_t *, uint32x2x2_t) 31920 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31921 31922 * void vst2_u16 (uint16_t *, uint16x4x2_t) 31923 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31924 31925 * void vst2_u8 (uint8_t *, uint8x8x2_t) 31926 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31927 31928 * void vst2_s32 (int32_t *, int32x2x2_t) 31929 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31930 31931 * void vst2_s16 (int16_t *, int16x4x2_t) 31932 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31933 31934 * void vst2_s8 (int8_t *, int8x8x2_t) 31935 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31936 31937 * void vst2_f32 (float32_t *, float32x2x2_t) 31938 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31939 31940 * void vst2_p16 (poly16_t *, poly16x4x2_t) 31941 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31942 31943 * void vst2_p8 (poly8_t *, poly8x8x2_t) 31944 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31945 31946 * void vst2_u64 (uint64_t *, uint64x1x2_t) 31947 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 31948 31949 * void vst2_s64 (int64_t *, int64x1x2_t) 31950 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 31951 31952 * void vst2q_u32 (uint32_t *, uint32x4x2_t) 31953 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31954 31955 * void vst2q_u16 (uint16_t *, uint16x8x2_t) 31956 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31957 31958 * void vst2q_u8 (uint8_t *, uint8x16x2_t) 31959 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31960 31961 * void vst2q_s32 (int32_t *, int32x4x2_t) 31962 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31963 31964 * void vst2q_s16 (int16_t *, int16x8x2_t) 31965 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31966 31967 * void vst2q_s8 (int8_t *, int8x16x2_t) 31968 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31969 31970 * void vst2q_f32 (float32_t *, float32x4x2_t) 31971 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 31972 31973 * void vst2q_p16 (poly16_t *, poly16x8x2_t) 31974 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 31975 31976 * void vst2q_p8 (poly8_t *, poly8x16x2_t) 31977 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 31978 31979 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) 31980 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 31981 31982 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) 31983 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 31984 31985 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) 31986 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 31987 31988 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) 31989 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 31990 31991 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) 31992 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 31993 31994 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) 31995 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 31996 31997 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) 31998 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 31999 32000 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) 32001 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 32002 32003 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) 32004 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 32005 32006 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) 32007 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 32008 32009 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) 32010 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 32011 32012 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) 32013 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 32014 32015 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) 32016 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 32017 32018 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) 32019 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 32020 32021 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) 32022 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 32023 32024 6.54.3.72 Element/structure loads, VLD3 variants 32025 ................................................ 32026 32027 * uint32x2x3_t vld3_u32 (const uint32_t *) 32028 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 32029 32030 * uint16x4x3_t vld3_u16 (const uint16_t *) 32031 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 32032 32033 * uint8x8x3_t vld3_u8 (const uint8_t *) 32034 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 32035 32036 * int32x2x3_t vld3_s32 (const int32_t *) 32037 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 32038 32039 * int16x4x3_t vld3_s16 (const int16_t *) 32040 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 32041 32042 * int8x8x3_t vld3_s8 (const int8_t *) 32043 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 32044 32045 * float32x2x3_t vld3_f32 (const float32_t *) 32046 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 32047 32048 * poly16x4x3_t vld3_p16 (const poly16_t *) 32049 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 32050 32051 * poly8x8x3_t vld3_p8 (const poly8_t *) 32052 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 32053 32054 * uint64x1x3_t vld3_u64 (const uint64_t *) 32055 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 32056 32057 * int64x1x3_t vld3_s64 (const int64_t *) 32058 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 32059 32060 * uint32x4x3_t vld3q_u32 (const uint32_t *) 32061 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 32062 32063 * uint16x8x3_t vld3q_u16 (const uint16_t *) 32064 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 32065 32066 * uint8x16x3_t vld3q_u8 (const uint8_t *) 32067 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 32068 32069 * int32x4x3_t vld3q_s32 (const int32_t *) 32070 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 32071 32072 * int16x8x3_t vld3q_s16 (const int16_t *) 32073 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 32074 32075 * int8x16x3_t vld3q_s8 (const int8_t *) 32076 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 32077 32078 * float32x4x3_t vld3q_f32 (const float32_t *) 32079 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 32080 32081 * poly16x8x3_t vld3q_p16 (const poly16_t *) 32082 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 32083 32084 * poly8x16x3_t vld3q_p8 (const poly8_t *) 32085 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 32086 32087 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const 32088 int) 32089 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 32090 [R0]' 32091 32092 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const 32093 int) 32094 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 32095 [R0]' 32096 32097 * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) 32098 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 32099 [R0]' 32100 32101 * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) 32102 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 32103 [R0]' 32104 32105 * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) 32106 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 32107 [R0]' 32108 32109 * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) 32110 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 32111 [R0]' 32112 32113 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, 32114 const int) 32115 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 32116 [R0]' 32117 32118 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const 32119 int) 32120 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 32121 [R0]' 32122 32123 * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) 32124 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 32125 [R0]' 32126 32127 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const 32128 int) 32129 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 32130 [R0]' 32131 32132 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const 32133 int) 32134 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 32135 [R0]' 32136 32137 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const 32138 int) 32139 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 32140 [R0]' 32141 32142 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const 32143 int) 32144 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 32145 [R0]' 32146 32147 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, 32148 const int) 32149 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 32150 [R0]' 32151 32152 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const 32153 int) 32154 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 32155 [R0]' 32156 32157 * uint32x2x3_t vld3_dup_u32 (const uint32_t *) 32158 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 32159 [R0]' 32160 32161 * uint16x4x3_t vld3_dup_u16 (const uint16_t *) 32162 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 32163 [R0]' 32164 32165 * uint8x8x3_t vld3_dup_u8 (const uint8_t *) 32166 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 32167 [R0]' 32168 32169 * int32x2x3_t vld3_dup_s32 (const int32_t *) 32170 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 32171 [R0]' 32172 32173 * int16x4x3_t vld3_dup_s16 (const int16_t *) 32174 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 32175 [R0]' 32176 32177 * int8x8x3_t vld3_dup_s8 (const int8_t *) 32178 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 32179 [R0]' 32180 32181 * float32x2x3_t vld3_dup_f32 (const float32_t *) 32182 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 32183 [R0]' 32184 32185 * poly16x4x3_t vld3_dup_p16 (const poly16_t *) 32186 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 32187 [R0]' 32188 32189 * poly8x8x3_t vld3_dup_p8 (const poly8_t *) 32190 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 32191 [R0]' 32192 32193 * uint64x1x3_t vld3_dup_u64 (const uint64_t *) 32194 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 32195 32196 * int64x1x3_t vld3_dup_s64 (const int64_t *) 32197 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 32198 32199 6.54.3.73 Element/structure stores, VST3 variants 32200 ................................................. 32201 32202 * void vst3_u32 (uint32_t *, uint32x2x3_t) 32203 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 32204 32205 * void vst3_u16 (uint16_t *, uint16x4x3_t) 32206 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 32207 32208 * void vst3_u8 (uint8_t *, uint8x8x3_t) 32209 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 32210 32211 * void vst3_s32 (int32_t *, int32x2x3_t) 32212 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 32213 32214 * void vst3_s16 (int16_t *, int16x4x3_t) 32215 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 32216 32217 * void vst3_s8 (int8_t *, int8x8x3_t) 32218 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 32219 32220 * void vst3_f32 (float32_t *, float32x2x3_t) 32221 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 32222 32223 * void vst3_p16 (poly16_t *, poly16x4x3_t) 32224 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 32225 32226 * void vst3_p8 (poly8_t *, poly8x8x3_t) 32227 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 32228 32229 * void vst3_u64 (uint64_t *, uint64x1x3_t) 32230 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 32231 32232 * void vst3_s64 (int64_t *, int64x1x3_t) 32233 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 32234 32235 * void vst3q_u32 (uint32_t *, uint32x4x3_t) 32236 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 32237 32238 * void vst3q_u16 (uint16_t *, uint16x8x3_t) 32239 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 32240 32241 * void vst3q_u8 (uint8_t *, uint8x16x3_t) 32242 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 32243 32244 * void vst3q_s32 (int32_t *, int32x4x3_t) 32245 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 32246 32247 * void vst3q_s16 (int16_t *, int16x8x3_t) 32248 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 32249 32250 * void vst3q_s8 (int8_t *, int8x16x3_t) 32251 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 32252 32253 * void vst3q_f32 (float32_t *, float32x4x3_t) 32254 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 32255 32256 * void vst3q_p16 (poly16_t *, poly16x8x3_t) 32257 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 32258 32259 * void vst3q_p8 (poly8_t *, poly8x16x3_t) 32260 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 32261 32262 * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) 32263 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 32264 [R0]' 32265 32266 * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) 32267 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 32268 [R0]' 32269 32270 * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) 32271 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 32272 [R0]' 32273 32274 * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) 32275 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 32276 [R0]' 32277 32278 * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) 32279 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 32280 [R0]' 32281 32282 * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) 32283 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 32284 [R0]' 32285 32286 * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) 32287 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 32288 [R0]' 32289 32290 * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) 32291 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 32292 [R0]' 32293 32294 * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) 32295 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 32296 [R0]' 32297 32298 * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) 32299 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 32300 [R0]' 32301 32302 * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) 32303 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 32304 [R0]' 32305 32306 * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) 32307 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 32308 [R0]' 32309 32310 * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) 32311 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 32312 [R0]' 32313 32314 * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) 32315 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 32316 [R0]' 32317 32318 * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) 32319 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 32320 [R0]' 32321 32322 6.54.3.74 Element/structure loads, VLD4 variants 32323 ................................................ 32324 32325 * uint32x2x4_t vld4_u32 (const uint32_t *) 32326 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 32327 32328 * uint16x4x4_t vld4_u16 (const uint16_t *) 32329 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 32330 32331 * uint8x8x4_t vld4_u8 (const uint8_t *) 32332 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 32333 32334 * int32x2x4_t vld4_s32 (const int32_t *) 32335 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 32336 32337 * int16x4x4_t vld4_s16 (const int16_t *) 32338 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 32339 32340 * int8x8x4_t vld4_s8 (const int8_t *) 32341 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 32342 32343 * float32x2x4_t vld4_f32 (const float32_t *) 32344 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 32345 32346 * poly16x4x4_t vld4_p16 (const poly16_t *) 32347 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 32348 32349 * poly8x8x4_t vld4_p8 (const poly8_t *) 32350 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 32351 32352 * uint64x1x4_t vld4_u64 (const uint64_t *) 32353 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 32354 32355 * int64x1x4_t vld4_s64 (const int64_t *) 32356 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 32357 32358 * uint32x4x4_t vld4q_u32 (const uint32_t *) 32359 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 32360 32361 * uint16x8x4_t vld4q_u16 (const uint16_t *) 32362 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 32363 32364 * uint8x16x4_t vld4q_u8 (const uint8_t *) 32365 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 32366 32367 * int32x4x4_t vld4q_s32 (const int32_t *) 32368 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 32369 32370 * int16x8x4_t vld4q_s16 (const int16_t *) 32371 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 32372 32373 * int8x16x4_t vld4q_s8 (const int8_t *) 32374 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 32375 32376 * float32x4x4_t vld4q_f32 (const float32_t *) 32377 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 32378 32379 * poly16x8x4_t vld4q_p16 (const poly16_t *) 32380 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 32381 32382 * poly8x16x4_t vld4q_p8 (const poly8_t *) 32383 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 32384 32385 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const 32386 int) 32387 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 32388 D3[0]}, [R0]' 32389 32390 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const 32391 int) 32392 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 32393 D3[0]}, [R0]' 32394 32395 * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) 32396 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 32397 D3[0]}, [R0]' 32398 32399 * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) 32400 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 32401 D3[0]}, [R0]' 32402 32403 * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) 32404 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 32405 D3[0]}, [R0]' 32406 32407 * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) 32408 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 32409 D3[0]}, [R0]' 32410 32411 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, 32412 const int) 32413 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 32414 D3[0]}, [R0]' 32415 32416 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const 32417 int) 32418 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 32419 D3[0]}, [R0]' 32420 32421 * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) 32422 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 32423 D3[0]}, [R0]' 32424 32425 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const 32426 int) 32427 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 32428 D3[0]}, [R0]' 32429 32430 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const 32431 int) 32432 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 32433 D3[0]}, [R0]' 32434 32435 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const 32436 int) 32437 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 32438 D3[0]}, [R0]' 32439 32440 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const 32441 int) 32442 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 32443 D3[0]}, [R0]' 32444 32445 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, 32446 const int) 32447 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 32448 D3[0]}, [R0]' 32449 32450 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const 32451 int) 32452 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 32453 D3[0]}, [R0]' 32454 32455 * uint32x2x4_t vld4_dup_u32 (const uint32_t *) 32456 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 32457 D3[]}, [R0]' 32458 32459 * uint16x4x4_t vld4_dup_u16 (const uint16_t *) 32460 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 32461 D3[]}, [R0]' 32462 32463 * uint8x8x4_t vld4_dup_u8 (const uint8_t *) 32464 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 32465 D3[]}, [R0]' 32466 32467 * int32x2x4_t vld4_dup_s32 (const int32_t *) 32468 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 32469 D3[]}, [R0]' 32470 32471 * int16x4x4_t vld4_dup_s16 (const int16_t *) 32472 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 32473 D3[]}, [R0]' 32474 32475 * int8x8x4_t vld4_dup_s8 (const int8_t *) 32476 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 32477 D3[]}, [R0]' 32478 32479 * float32x2x4_t vld4_dup_f32 (const float32_t *) 32480 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 32481 D3[]}, [R0]' 32482 32483 * poly16x4x4_t vld4_dup_p16 (const poly16_t *) 32484 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 32485 D3[]}, [R0]' 32486 32487 * poly8x8x4_t vld4_dup_p8 (const poly8_t *) 32488 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 32489 D3[]}, [R0]' 32490 32491 * uint64x1x4_t vld4_dup_u64 (const uint64_t *) 32492 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 32493 32494 * int64x1x4_t vld4_dup_s64 (const int64_t *) 32495 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 32496 32497 6.54.3.75 Element/structure stores, VST4 variants 32498 ................................................. 32499 32500 * void vst4_u32 (uint32_t *, uint32x2x4_t) 32501 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32502 32503 * void vst4_u16 (uint16_t *, uint16x4x4_t) 32504 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32505 32506 * void vst4_u8 (uint8_t *, uint8x8x4_t) 32507 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32508 32509 * void vst4_s32 (int32_t *, int32x2x4_t) 32510 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32511 32512 * void vst4_s16 (int16_t *, int16x4x4_t) 32513 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32514 32515 * void vst4_s8 (int8_t *, int8x8x4_t) 32516 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32517 32518 * void vst4_f32 (float32_t *, float32x2x4_t) 32519 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32520 32521 * void vst4_p16 (poly16_t *, poly16x4x4_t) 32522 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32523 32524 * void vst4_p8 (poly8_t *, poly8x8x4_t) 32525 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32526 32527 * void vst4_u64 (uint64_t *, uint64x1x4_t) 32528 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 32529 32530 * void vst4_s64 (int64_t *, int64x1x4_t) 32531 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 32532 32533 * void vst4q_u32 (uint32_t *, uint32x4x4_t) 32534 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32535 32536 * void vst4q_u16 (uint16_t *, uint16x8x4_t) 32537 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32538 32539 * void vst4q_u8 (uint8_t *, uint8x16x4_t) 32540 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32541 32542 * void vst4q_s32 (int32_t *, int32x4x4_t) 32543 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32544 32545 * void vst4q_s16 (int16_t *, int16x8x4_t) 32546 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32547 32548 * void vst4q_s8 (int8_t *, int8x16x4_t) 32549 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32550 32551 * void vst4q_f32 (float32_t *, float32x4x4_t) 32552 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 32553 32554 * void vst4q_p16 (poly16_t *, poly16x8x4_t) 32555 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 32556 32557 * void vst4q_p8 (poly8_t *, poly8x16x4_t) 32558 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 32559 32560 * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) 32561 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32562 D3[0]}, [R0]' 32563 32564 * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) 32565 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32566 D3[0]}, [R0]' 32567 32568 * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) 32569 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 32570 D3[0]}, [R0]' 32571 32572 * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) 32573 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32574 D3[0]}, [R0]' 32575 32576 * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) 32577 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32578 D3[0]}, [R0]' 32579 32580 * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) 32581 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 32582 D3[0]}, [R0]' 32583 32584 * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) 32585 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32586 D3[0]}, [R0]' 32587 32588 * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) 32589 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32590 D3[0]}, [R0]' 32591 32592 * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) 32593 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 32594 D3[0]}, [R0]' 32595 32596 * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) 32597 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32598 D3[0]}, [R0]' 32599 32600 * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) 32601 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32602 D3[0]}, [R0]' 32603 32604 * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) 32605 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32606 D3[0]}, [R0]' 32607 32608 * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) 32609 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32610 D3[0]}, [R0]' 32611 32612 * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) 32613 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 32614 D3[0]}, [R0]' 32615 32616 * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) 32617 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 32618 D3[0]}, [R0]' 32619 32620 6.54.3.76 Logical operations (AND) 32621 .................................. 32622 32623 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) 32624 _Form of expected instruction(s):_ `vand D0, D0, D0' 32625 32626 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) 32627 _Form of expected instruction(s):_ `vand D0, D0, D0' 32628 32629 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) 32630 _Form of expected instruction(s):_ `vand D0, D0, D0' 32631 32632 * int32x2_t vand_s32 (int32x2_t, int32x2_t) 32633 _Form of expected instruction(s):_ `vand D0, D0, D0' 32634 32635 * int16x4_t vand_s16 (int16x4_t, int16x4_t) 32636 _Form of expected instruction(s):_ `vand D0, D0, D0' 32637 32638 * int8x8_t vand_s8 (int8x8_t, int8x8_t) 32639 _Form of expected instruction(s):_ `vand D0, D0, D0' 32640 32641 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) 32642 32643 * int64x1_t vand_s64 (int64x1_t, int64x1_t) 32644 32645 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) 32646 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32647 32648 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) 32649 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32650 32651 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) 32652 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32653 32654 * int32x4_t vandq_s32 (int32x4_t, int32x4_t) 32655 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32656 32657 * int16x8_t vandq_s16 (int16x8_t, int16x8_t) 32658 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32659 32660 * int8x16_t vandq_s8 (int8x16_t, int8x16_t) 32661 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32662 32663 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) 32664 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32665 32666 * int64x2_t vandq_s64 (int64x2_t, int64x2_t) 32667 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 32668 32669 6.54.3.77 Logical operations (OR) 32670 ................................. 32671 32672 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) 32673 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32674 32675 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) 32676 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32677 32678 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) 32679 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32680 32681 * int32x2_t vorr_s32 (int32x2_t, int32x2_t) 32682 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32683 32684 * int16x4_t vorr_s16 (int16x4_t, int16x4_t) 32685 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32686 32687 * int8x8_t vorr_s8 (int8x8_t, int8x8_t) 32688 _Form of expected instruction(s):_ `vorr D0, D0, D0' 32689 32690 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) 32691 32692 * int64x1_t vorr_s64 (int64x1_t, int64x1_t) 32693 32694 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) 32695 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32696 32697 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) 32698 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32699 32700 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) 32701 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32702 32703 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) 32704 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32705 32706 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) 32707 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32708 32709 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) 32710 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32711 32712 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) 32713 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32714 32715 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) 32716 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 32717 32718 6.54.3.78 Logical operations (exclusive OR) 32719 ........................................... 32720 32721 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) 32722 _Form of expected instruction(s):_ `veor D0, D0, D0' 32723 32724 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) 32725 _Form of expected instruction(s):_ `veor D0, D0, D0' 32726 32727 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) 32728 _Form of expected instruction(s):_ `veor D0, D0, D0' 32729 32730 * int32x2_t veor_s32 (int32x2_t, int32x2_t) 32731 _Form of expected instruction(s):_ `veor D0, D0, D0' 32732 32733 * int16x4_t veor_s16 (int16x4_t, int16x4_t) 32734 _Form of expected instruction(s):_ `veor D0, D0, D0' 32735 32736 * int8x8_t veor_s8 (int8x8_t, int8x8_t) 32737 _Form of expected instruction(s):_ `veor D0, D0, D0' 32738 32739 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) 32740 32741 * int64x1_t veor_s64 (int64x1_t, int64x1_t) 32742 32743 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) 32744 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32745 32746 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) 32747 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32748 32749 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) 32750 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32751 32752 * int32x4_t veorq_s32 (int32x4_t, int32x4_t) 32753 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32754 32755 * int16x8_t veorq_s16 (int16x8_t, int16x8_t) 32756 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32757 32758 * int8x16_t veorq_s8 (int8x16_t, int8x16_t) 32759 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32760 32761 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) 32762 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32763 32764 * int64x2_t veorq_s64 (int64x2_t, int64x2_t) 32765 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 32766 32767 6.54.3.79 Logical operations (AND-NOT) 32768 ...................................... 32769 32770 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) 32771 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32772 32773 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) 32774 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32775 32776 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) 32777 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32778 32779 * int32x2_t vbic_s32 (int32x2_t, int32x2_t) 32780 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32781 32782 * int16x4_t vbic_s16 (int16x4_t, int16x4_t) 32783 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32784 32785 * int8x8_t vbic_s8 (int8x8_t, int8x8_t) 32786 _Form of expected instruction(s):_ `vbic D0, D0, D0' 32787 32788 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) 32789 32790 * int64x1_t vbic_s64 (int64x1_t, int64x1_t) 32791 32792 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) 32793 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32794 32795 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) 32796 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32797 32798 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) 32799 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32800 32801 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) 32802 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32803 32804 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) 32805 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32806 32807 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) 32808 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32809 32810 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) 32811 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32812 32813 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) 32814 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 32815 32816 6.54.3.80 Logical operations (OR-NOT) 32817 ..................................... 32818 32819 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) 32820 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32821 32822 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) 32823 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32824 32825 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) 32826 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32827 32828 * int32x2_t vorn_s32 (int32x2_t, int32x2_t) 32829 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32830 32831 * int16x4_t vorn_s16 (int16x4_t, int16x4_t) 32832 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32833 32834 * int8x8_t vorn_s8 (int8x8_t, int8x8_t) 32835 _Form of expected instruction(s):_ `vorn D0, D0, D0' 32836 32837 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) 32838 32839 * int64x1_t vorn_s64 (int64x1_t, int64x1_t) 32840 32841 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) 32842 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32843 32844 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) 32845 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32846 32847 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) 32848 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32849 32850 * int32x4_t vornq_s32 (int32x4_t, int32x4_t) 32851 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32852 32853 * int16x8_t vornq_s16 (int16x8_t, int16x8_t) 32854 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32855 32856 * int8x16_t vornq_s8 (int8x16_t, int8x16_t) 32857 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32858 32859 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) 32860 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32861 32862 * int64x2_t vornq_s64 (int64x2_t, int64x2_t) 32863 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 32864 32865 6.54.3.81 Reinterpret casts 32866 ........................... 32867 32868 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) 32869 32870 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) 32871 32872 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) 32873 32874 * poly8x8_t vreinterpret_p8_s32 (int32x2_t) 32875 32876 * poly8x8_t vreinterpret_p8_s16 (int16x4_t) 32877 32878 * poly8x8_t vreinterpret_p8_s8 (int8x8_t) 32879 32880 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) 32881 32882 * poly8x8_t vreinterpret_p8_s64 (int64x1_t) 32883 32884 * poly8x8_t vreinterpret_p8_f32 (float32x2_t) 32885 32886 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) 32887 32888 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) 32889 32890 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) 32891 32892 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) 32893 32894 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) 32895 32896 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) 32897 32898 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) 32899 32900 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) 32901 32902 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) 32903 32904 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) 32905 32906 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) 32907 32908 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) 32909 32910 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) 32911 32912 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) 32913 32914 * poly16x4_t vreinterpret_p16_s32 (int32x2_t) 32915 32916 * poly16x4_t vreinterpret_p16_s16 (int16x4_t) 32917 32918 * poly16x4_t vreinterpret_p16_s8 (int8x8_t) 32919 32920 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) 32921 32922 * poly16x4_t vreinterpret_p16_s64 (int64x1_t) 32923 32924 * poly16x4_t vreinterpret_p16_f32 (float32x2_t) 32925 32926 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) 32927 32928 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) 32929 32930 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) 32931 32932 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) 32933 32934 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) 32935 32936 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) 32937 32938 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) 32939 32940 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) 32941 32942 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) 32943 32944 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) 32945 32946 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) 32947 32948 * float32x2_t vreinterpret_f32_u32 (uint32x2_t) 32949 32950 * float32x2_t vreinterpret_f32_u16 (uint16x4_t) 32951 32952 * float32x2_t vreinterpret_f32_u8 (uint8x8_t) 32953 32954 * float32x2_t vreinterpret_f32_s32 (int32x2_t) 32955 32956 * float32x2_t vreinterpret_f32_s16 (int16x4_t) 32957 32958 * float32x2_t vreinterpret_f32_s8 (int8x8_t) 32959 32960 * float32x2_t vreinterpret_f32_u64 (uint64x1_t) 32961 32962 * float32x2_t vreinterpret_f32_s64 (int64x1_t) 32963 32964 * float32x2_t vreinterpret_f32_p16 (poly16x4_t) 32965 32966 * float32x2_t vreinterpret_f32_p8 (poly8x8_t) 32967 32968 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) 32969 32970 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) 32971 32972 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) 32973 32974 * float32x4_t vreinterpretq_f32_s32 (int32x4_t) 32975 32976 * float32x4_t vreinterpretq_f32_s16 (int16x8_t) 32977 32978 * float32x4_t vreinterpretq_f32_s8 (int8x16_t) 32979 32980 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) 32981 32982 * float32x4_t vreinterpretq_f32_s64 (int64x2_t) 32983 32984 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) 32985 32986 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) 32987 32988 * int64x1_t vreinterpret_s64_u32 (uint32x2_t) 32989 32990 * int64x1_t vreinterpret_s64_u16 (uint16x4_t) 32991 32992 * int64x1_t vreinterpret_s64_u8 (uint8x8_t) 32993 32994 * int64x1_t vreinterpret_s64_s32 (int32x2_t) 32995 32996 * int64x1_t vreinterpret_s64_s16 (int16x4_t) 32997 32998 * int64x1_t vreinterpret_s64_s8 (int8x8_t) 32999 33000 * int64x1_t vreinterpret_s64_u64 (uint64x1_t) 33001 33002 * int64x1_t vreinterpret_s64_f32 (float32x2_t) 33003 33004 * int64x1_t vreinterpret_s64_p16 (poly16x4_t) 33005 33006 * int64x1_t vreinterpret_s64_p8 (poly8x8_t) 33007 33008 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) 33009 33010 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) 33011 33012 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) 33013 33014 * int64x2_t vreinterpretq_s64_s32 (int32x4_t) 33015 33016 * int64x2_t vreinterpretq_s64_s16 (int16x8_t) 33017 33018 * int64x2_t vreinterpretq_s64_s8 (int8x16_t) 33019 33020 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) 33021 33022 * int64x2_t vreinterpretq_s64_f32 (float32x4_t) 33023 33024 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) 33025 33026 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) 33027 33028 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) 33029 33030 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) 33031 33032 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) 33033 33034 * uint64x1_t vreinterpret_u64_s32 (int32x2_t) 33035 33036 * uint64x1_t vreinterpret_u64_s16 (int16x4_t) 33037 33038 * uint64x1_t vreinterpret_u64_s8 (int8x8_t) 33039 33040 * uint64x1_t vreinterpret_u64_s64 (int64x1_t) 33041 33042 * uint64x1_t vreinterpret_u64_f32 (float32x2_t) 33043 33044 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) 33045 33046 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) 33047 33048 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) 33049 33050 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) 33051 33052 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) 33053 33054 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) 33055 33056 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) 33057 33058 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) 33059 33060 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) 33061 33062 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) 33063 33064 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) 33065 33066 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) 33067 33068 * int8x8_t vreinterpret_s8_u32 (uint32x2_t) 33069 33070 * int8x8_t vreinterpret_s8_u16 (uint16x4_t) 33071 33072 * int8x8_t vreinterpret_s8_u8 (uint8x8_t) 33073 33074 * int8x8_t vreinterpret_s8_s32 (int32x2_t) 33075 33076 * int8x8_t vreinterpret_s8_s16 (int16x4_t) 33077 33078 * int8x8_t vreinterpret_s8_u64 (uint64x1_t) 33079 33080 * int8x8_t vreinterpret_s8_s64 (int64x1_t) 33081 33082 * int8x8_t vreinterpret_s8_f32 (float32x2_t) 33083 33084 * int8x8_t vreinterpret_s8_p16 (poly16x4_t) 33085 33086 * int8x8_t vreinterpret_s8_p8 (poly8x8_t) 33087 33088 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) 33089 33090 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) 33091 33092 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) 33093 33094 * int8x16_t vreinterpretq_s8_s32 (int32x4_t) 33095 33096 * int8x16_t vreinterpretq_s8_s16 (int16x8_t) 33097 33098 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) 33099 33100 * int8x16_t vreinterpretq_s8_s64 (int64x2_t) 33101 33102 * int8x16_t vreinterpretq_s8_f32 (float32x4_t) 33103 33104 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) 33105 33106 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) 33107 33108 * int16x4_t vreinterpret_s16_u32 (uint32x2_t) 33109 33110 * int16x4_t vreinterpret_s16_u16 (uint16x4_t) 33111 33112 * int16x4_t vreinterpret_s16_u8 (uint8x8_t) 33113 33114 * int16x4_t vreinterpret_s16_s32 (int32x2_t) 33115 33116 * int16x4_t vreinterpret_s16_s8 (int8x8_t) 33117 33118 * int16x4_t vreinterpret_s16_u64 (uint64x1_t) 33119 33120 * int16x4_t vreinterpret_s16_s64 (int64x1_t) 33121 33122 * int16x4_t vreinterpret_s16_f32 (float32x2_t) 33123 33124 * int16x4_t vreinterpret_s16_p16 (poly16x4_t) 33125 33126 * int16x4_t vreinterpret_s16_p8 (poly8x8_t) 33127 33128 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) 33129 33130 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) 33131 33132 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) 33133 33134 * int16x8_t vreinterpretq_s16_s32 (int32x4_t) 33135 33136 * int16x8_t vreinterpretq_s16_s8 (int8x16_t) 33137 33138 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) 33139 33140 * int16x8_t vreinterpretq_s16_s64 (int64x2_t) 33141 33142 * int16x8_t vreinterpretq_s16_f32 (float32x4_t) 33143 33144 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) 33145 33146 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) 33147 33148 * int32x2_t vreinterpret_s32_u32 (uint32x2_t) 33149 33150 * int32x2_t vreinterpret_s32_u16 (uint16x4_t) 33151 33152 * int32x2_t vreinterpret_s32_u8 (uint8x8_t) 33153 33154 * int32x2_t vreinterpret_s32_s16 (int16x4_t) 33155 33156 * int32x2_t vreinterpret_s32_s8 (int8x8_t) 33157 33158 * int32x2_t vreinterpret_s32_u64 (uint64x1_t) 33159 33160 * int32x2_t vreinterpret_s32_s64 (int64x1_t) 33161 33162 * int32x2_t vreinterpret_s32_f32 (float32x2_t) 33163 33164 * int32x2_t vreinterpret_s32_p16 (poly16x4_t) 33165 33166 * int32x2_t vreinterpret_s32_p8 (poly8x8_t) 33167 33168 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) 33169 33170 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) 33171 33172 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) 33173 33174 * int32x4_t vreinterpretq_s32_s16 (int16x8_t) 33175 33176 * int32x4_t vreinterpretq_s32_s8 (int8x16_t) 33177 33178 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) 33179 33180 * int32x4_t vreinterpretq_s32_s64 (int64x2_t) 33181 33182 * int32x4_t vreinterpretq_s32_f32 (float32x4_t) 33183 33184 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) 33185 33186 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) 33187 33188 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) 33189 33190 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) 33191 33192 * uint8x8_t vreinterpret_u8_s32 (int32x2_t) 33193 33194 * uint8x8_t vreinterpret_u8_s16 (int16x4_t) 33195 33196 * uint8x8_t vreinterpret_u8_s8 (int8x8_t) 33197 33198 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) 33199 33200 * uint8x8_t vreinterpret_u8_s64 (int64x1_t) 33201 33202 * uint8x8_t vreinterpret_u8_f32 (float32x2_t) 33203 33204 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) 33205 33206 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) 33207 33208 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) 33209 33210 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) 33211 33212 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) 33213 33214 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) 33215 33216 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) 33217 33218 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) 33219 33220 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) 33221 33222 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) 33223 33224 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) 33225 33226 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) 33227 33228 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) 33229 33230 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) 33231 33232 * uint16x4_t vreinterpret_u16_s32 (int32x2_t) 33233 33234 * uint16x4_t vreinterpret_u16_s16 (int16x4_t) 33235 33236 * uint16x4_t vreinterpret_u16_s8 (int8x8_t) 33237 33238 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) 33239 33240 * uint16x4_t vreinterpret_u16_s64 (int64x1_t) 33241 33242 * uint16x4_t vreinterpret_u16_f32 (float32x2_t) 33243 33244 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) 33245 33246 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) 33247 33248 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) 33249 33250 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) 33251 33252 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) 33253 33254 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) 33255 33256 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) 33257 33258 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) 33259 33260 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) 33261 33262 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) 33263 33264 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) 33265 33266 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) 33267 33268 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) 33269 33270 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) 33271 33272 * uint32x2_t vreinterpret_u32_s32 (int32x2_t) 33273 33274 * uint32x2_t vreinterpret_u32_s16 (int16x4_t) 33275 33276 * uint32x2_t vreinterpret_u32_s8 (int8x8_t) 33277 33278 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) 33279 33280 * uint32x2_t vreinterpret_u32_s64 (int64x1_t) 33281 33282 * uint32x2_t vreinterpret_u32_f32 (float32x2_t) 33283 33284 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) 33285 33286 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) 33287 33288 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) 33289 33290 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) 33291 33292 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) 33293 33294 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) 33295 33296 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) 33297 33298 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) 33299 33300 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) 33301 33302 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) 33303 33304 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) 33305 33306 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) 33307 33308 33309 File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins 33310 33311 6.54.4 Blackfin Built-in Functions 33312 ---------------------------------- 33313 33314 Currently, there are two Blackfin-specific built-in functions. These 33315 are used for generating `CSYNC' and `SSYNC' machine insns without using 33316 inline assembly; by using these built-in functions the compiler can 33317 automatically add workarounds for hardware errata involving these 33318 instructions. These functions are named as follows: 33319 33320 void __builtin_bfin_csync (void) 33321 void __builtin_bfin_ssync (void) 33322 33323 33324 File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 33325 33326 6.54.5 FR-V Built-in Functions 33327 ------------------------------ 33328 33329 GCC provides many FR-V-specific built-in functions. In general, these 33330 functions are intended to be compatible with those described by `FR-V 33331 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 33332 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of 33333 which pass 128-bit values by pointer rather than by value. 33334 33335 Most of the functions are named after specific FR-V instructions. 33336 Such functions are said to be "directly mapped" and are summarized here 33337 in tabular form. 33338 33339 * Menu: 33340 33341 * Argument Types:: 33342 * Directly-mapped Integer Functions:: 33343 * Directly-mapped Media Functions:: 33344 * Raw read/write Functions:: 33345 * Other Built-in Functions:: 33346 33347 33348 File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 33349 33350 6.54.5.1 Argument Types 33351 ....................... 33352 33353 The arguments to the built-in functions can be divided into three 33354 groups: register numbers, compile-time constants and run-time values. 33355 In order to make this classification clear at a glance, the arguments 33356 and return values are given the following pseudo types: 33357 33358 Pseudo type Real C type Constant? Description 33359 `uh' `unsigned short' No an unsigned halfword 33360 `uw1' `unsigned int' No an unsigned word 33361 `sw1' `int' No a signed word 33362 `uw2' `unsigned long long' No an unsigned doubleword 33363 `sw2' `long long' No a signed doubleword 33364 `const' `int' Yes an integer constant 33365 `acc' `int' Yes an ACC register number 33366 `iacc' `int' Yes an IACC register number 33367 33368 These pseudo types are not defined by GCC, they are simply a notational 33369 convenience used in this manual. 33370 33371 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 33372 run time. They correspond to register operands in the underlying FR-V 33373 instructions. 33374 33375 `const' arguments represent immediate operands in the underlying FR-V 33376 instructions. They must be compile-time constants. 33377 33378 `acc' arguments are evaluated at compile time and specify the number 33379 of an accumulator register. For example, an `acc' argument of 2 will 33380 select the ACC2 register. 33381 33382 `iacc' arguments are similar to `acc' arguments but specify the number 33383 of an IACC register. See *note Other Built-in Functions:: for more 33384 details. 33385 33386 33387 File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 33388 33389 6.54.5.2 Directly-mapped Integer Functions 33390 .......................................... 33391 33392 The functions listed below map directly to FR-V I-type instructions. 33393 33394 Function prototype Example usage Assembly output 33395 `sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 33396 `sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 33397 `sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 33398 `sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 33399 `void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 33400 `void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 33401 `void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 33402 `sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 33403 `sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 33404 `uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 33405 33406 33407 File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 33408 33409 6.54.5.3 Directly-mapped Media Functions 33410 ........................................ 33411 33412 The functions listed below map directly to FR-V M-type instructions. 33413 33414 Function prototype Example usage Assembly output 33415 `uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 33416 `void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 33417 `sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 33418 `uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 33419 `uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 33420 `void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 33421 `uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 33422 `uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 33423 `void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 33424 `void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 33425 `void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 33426 `uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 33427 `uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 33428 `uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 33429 `uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 33430 `void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 33431 `void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 33432 `void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 33433 `void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 33434 `uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 33435 `uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 33436 `void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 33437 `void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 33438 `uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 33439 `uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 33440 `uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 33441 `void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 33442 `void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 33443 `uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 33444 `uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 33445 `uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 33446 `sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 33447 `uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 33448 `sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 33449 `uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 33450 `sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 33451 `uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 33452 `void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 33453 `void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 33454 `void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 33455 `void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 33456 `void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 33457 `void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 33458 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 33459 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 33460 `uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 33461 `uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 33462 `uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 33463 `sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 33464 `uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 33465 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 33466 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 33467 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 33468 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 33469 `sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 33470 `sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 33471 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 33472 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 33473 `void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 33474 sw2)' 33475 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 33476 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 33477 `void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 33478 sw2)' 33479 `void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 33480 uw2)' 33481 `sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 33482 `uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 33483 `sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 33484 `sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 33485 `uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 33486 `void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 33487 sw2)' 33488 `void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 33489 sw2)' 33490 `uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 33491 `uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 33492 `uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 33493 `uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 33494 `sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 33495 `uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 33496 `uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 33497 `sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 33498 `uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 33499 `void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 33500 `sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 33501 `uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 33502 `void __MTRAP (void)' `__MTRAP ()' `MTRAP' 33503 `uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 33504 `uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 33505 `void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 33506 `void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 33507 `uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 33508 33509 33510 File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 33511 33512 6.54.5.4 Raw read/write Functions 33513 ................................. 33514 33515 This sections describes built-in functions related to read and write 33516 instructions to access memory. These functions generate `membar' 33517 instructions to flush the I/O load and stores where appropriate, as 33518 described in Fujitsu's manual described above. 33519 33520 `unsigned char __builtin_read8 (void *DATA)' 33521 33522 `unsigned short __builtin_read16 (void *DATA)' 33523 33524 `unsigned long __builtin_read32 (void *DATA)' 33525 33526 `unsigned long long __builtin_read64 (void *DATA)' 33527 33528 `void __builtin_write8 (void *DATA, unsigned char DATUM)' 33529 33530 `void __builtin_write16 (void *DATA, unsigned short DATUM)' 33531 33532 `void __builtin_write32 (void *DATA, unsigned long DATUM)' 33533 33534 `void __builtin_write64 (void *DATA, unsigned long long DATUM)' 33535 33536 33537 File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 33538 33539 6.54.5.5 Other Built-in Functions 33540 ................................. 33541 33542 This section describes built-in functions that are not named after a 33543 specific FR-V instruction. 33544 33545 `sw2 __IACCreadll (iacc REG)' 33546 Return the full 64-bit value of IACC0. The REG argument is 33547 reserved for future expansion and must be 0. 33548 33549 `sw1 __IACCreadl (iacc REG)' 33550 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 33551 Other values of REG are rejected as invalid. 33552 33553 `void __IACCsetll (iacc REG, sw2 X)' 33554 Set the full 64-bit value of IACC0 to X. The REG argument is 33555 reserved for future expansion and must be 0. 33556 33557 `void __IACCsetl (iacc REG, sw1 X)' 33558 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 33559 values of REG are rejected as invalid. 33560 33561 `void __data_prefetch0 (const void *X)' 33562 Use the `dcpl' instruction to load the contents of address X into 33563 the data cache. 33564 33565 `void __data_prefetch (const void *X)' 33566 Use the `nldub' instruction to load the contents of address X into 33567 the data cache. The instruction will be issued in slot I1. 33568 33569 33570 File: gcc.info, Node: X86 Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: FR-V Built-in Functions, Up: Target Builtins 33571 33572 6.54.6 X86 Built-in Functions 33573 ----------------------------- 33574 33575 These built-in functions are available for the i386 and x86-64 family 33576 of computers, depending on the command-line switches used. 33577 33578 Note that, if you specify command-line switches such as `-msse', the 33579 compiler could use the extended instruction sets even if the built-ins 33580 are not used explicitly in the program. For this reason, applications 33581 which perform runtime CPU detection must compile separate files for each 33582 supported architecture, using the appropriate flags. In particular, 33583 the file containing the CPU detection code should be compiled without 33584 these options. 33585 33586 The following machine modes are available for use with MMX built-in 33587 functions (*note Vector Extensions::): `V2SI' for a vector of two 33588 32-bit integers, `V4HI' for a vector of four 16-bit integers, and 33589 `V8QI' for a vector of eight 8-bit integers. Some of the built-in 33590 functions operate on MMX registers as a whole 64-bit entity, these use 33591 `V1DI' as their mode. 33592 33593 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector 33594 of two 32-bit floating point values. 33595 33596 If SSE extensions are enabled, `V4SF' is used for a vector of four 33597 32-bit floating point values. Some instructions use a vector of four 33598 32-bit integers, these use `V4SI'. Finally, some instructions operate 33599 on an entire vector register, interpreting it as a 128-bit integer, 33600 these use mode `TI'. 33601 33602 In 64-bit mode, the x86-64 family of processors uses additional 33603 built-in functions for efficient use of `TF' (`__float128') 128-bit 33604 floating point and `TC' 128-bit complex floating point values. 33605 33606 The following floating point built-in functions are available in 64-bit 33607 mode. All of them implement the function that is part of the name. 33608 33609 __float128 __builtin_fabsq (__float128) 33610 __float128 __builtin_copysignq (__float128, __float128) 33611 33612 The following floating point built-in functions are made available in 33613 the 64-bit mode. 33614 33615 `__float128 __builtin_infq (void)' 33616 Similar to `__builtin_inf', except the return type is `__float128'. 33617 33618 `__float128 __builtin_huge_valq (void)' 33619 Similar to `__builtin_huge_val', except the return type is 33620 `__float128'. 33621 33622 The following built-in functions are made available by `-mmmx'. All 33623 of them generate the machine instruction that is part of the name. 33624 33625 v8qi __builtin_ia32_paddb (v8qi, v8qi) 33626 v4hi __builtin_ia32_paddw (v4hi, v4hi) 33627 v2si __builtin_ia32_paddd (v2si, v2si) 33628 v8qi __builtin_ia32_psubb (v8qi, v8qi) 33629 v4hi __builtin_ia32_psubw (v4hi, v4hi) 33630 v2si __builtin_ia32_psubd (v2si, v2si) 33631 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 33632 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 33633 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 33634 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 33635 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 33636 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 33637 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 33638 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 33639 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 33640 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 33641 di __builtin_ia32_pand (di, di) 33642 di __builtin_ia32_pandn (di,di) 33643 di __builtin_ia32_por (di, di) 33644 di __builtin_ia32_pxor (di, di) 33645 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 33646 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 33647 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 33648 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 33649 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 33650 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 33651 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 33652 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 33653 v2si __builtin_ia32_punpckhdq (v2si, v2si) 33654 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 33655 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 33656 v2si __builtin_ia32_punpckldq (v2si, v2si) 33657 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 33658 v4hi __builtin_ia32_packssdw (v2si, v2si) 33659 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 33660 33661 v4hi __builtin_ia32_psllw (v4hi, v4hi) 33662 v2si __builtin_ia32_pslld (v2si, v2si) 33663 v1di __builtin_ia32_psllq (v1di, v1di) 33664 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 33665 v2si __builtin_ia32_psrld (v2si, v2si) 33666 v1di __builtin_ia32_psrlq (v1di, v1di) 33667 v4hi __builtin_ia32_psraw (v4hi, v4hi) 33668 v2si __builtin_ia32_psrad (v2si, v2si) 33669 v4hi __builtin_ia32_psllwi (v4hi, int) 33670 v2si __builtin_ia32_pslldi (v2si, int) 33671 v1di __builtin_ia32_psllqi (v1di, int) 33672 v4hi __builtin_ia32_psrlwi (v4hi, int) 33673 v2si __builtin_ia32_psrldi (v2si, int) 33674 v1di __builtin_ia32_psrlqi (v1di, int) 33675 v4hi __builtin_ia32_psrawi (v4hi, int) 33676 v2si __builtin_ia32_psradi (v2si, int) 33677 33678 The following built-in functions are made available either with 33679 `-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 33680 of them generate the machine instruction that is part of the name. 33681 33682 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 33683 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 33684 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 33685 v1di __builtin_ia32_psadbw (v8qi, v8qi) 33686 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 33687 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 33688 v8qi __builtin_ia32_pminub (v8qi, v8qi) 33689 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 33690 int __builtin_ia32_pextrw (v4hi, int) 33691 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 33692 int __builtin_ia32_pmovmskb (v8qi) 33693 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 33694 void __builtin_ia32_movntq (di *, di) 33695 void __builtin_ia32_sfence (void) 33696 33697 The following built-in functions are available when `-msse' is used. 33698 All of them generate the machine instruction that is part of the name. 33699 33700 int __builtin_ia32_comieq (v4sf, v4sf) 33701 int __builtin_ia32_comineq (v4sf, v4sf) 33702 int __builtin_ia32_comilt (v4sf, v4sf) 33703 int __builtin_ia32_comile (v4sf, v4sf) 33704 int __builtin_ia32_comigt (v4sf, v4sf) 33705 int __builtin_ia32_comige (v4sf, v4sf) 33706 int __builtin_ia32_ucomieq (v4sf, v4sf) 33707 int __builtin_ia32_ucomineq (v4sf, v4sf) 33708 int __builtin_ia32_ucomilt (v4sf, v4sf) 33709 int __builtin_ia32_ucomile (v4sf, v4sf) 33710 int __builtin_ia32_ucomigt (v4sf, v4sf) 33711 int __builtin_ia32_ucomige (v4sf, v4sf) 33712 v4sf __builtin_ia32_addps (v4sf, v4sf) 33713 v4sf __builtin_ia32_subps (v4sf, v4sf) 33714 v4sf __builtin_ia32_mulps (v4sf, v4sf) 33715 v4sf __builtin_ia32_divps (v4sf, v4sf) 33716 v4sf __builtin_ia32_addss (v4sf, v4sf) 33717 v4sf __builtin_ia32_subss (v4sf, v4sf) 33718 v4sf __builtin_ia32_mulss (v4sf, v4sf) 33719 v4sf __builtin_ia32_divss (v4sf, v4sf) 33720 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 33721 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 33722 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 33723 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 33724 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 33725 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 33726 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 33727 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 33728 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 33729 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 33730 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 33731 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 33732 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 33733 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 33734 v4si __builtin_ia32_cmpless (v4sf, v4sf) 33735 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 33736 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 33737 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 33738 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 33739 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 33740 v4sf __builtin_ia32_maxps (v4sf, v4sf) 33741 v4sf __builtin_ia32_maxss (v4sf, v4sf) 33742 v4sf __builtin_ia32_minps (v4sf, v4sf) 33743 v4sf __builtin_ia32_minss (v4sf, v4sf) 33744 v4sf __builtin_ia32_andps (v4sf, v4sf) 33745 v4sf __builtin_ia32_andnps (v4sf, v4sf) 33746 v4sf __builtin_ia32_orps (v4sf, v4sf) 33747 v4sf __builtin_ia32_xorps (v4sf, v4sf) 33748 v4sf __builtin_ia32_movss (v4sf, v4sf) 33749 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 33750 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 33751 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 33752 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 33753 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 33754 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 33755 v2si __builtin_ia32_cvtps2pi (v4sf) 33756 int __builtin_ia32_cvtss2si (v4sf) 33757 v2si __builtin_ia32_cvttps2pi (v4sf) 33758 int __builtin_ia32_cvttss2si (v4sf) 33759 v4sf __builtin_ia32_rcpps (v4sf) 33760 v4sf __builtin_ia32_rsqrtps (v4sf) 33761 v4sf __builtin_ia32_sqrtps (v4sf) 33762 v4sf __builtin_ia32_rcpss (v4sf) 33763 v4sf __builtin_ia32_rsqrtss (v4sf) 33764 v4sf __builtin_ia32_sqrtss (v4sf) 33765 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 33766 void __builtin_ia32_movntps (float *, v4sf) 33767 int __builtin_ia32_movmskps (v4sf) 33768 33769 The following built-in functions are available when `-msse' is used. 33770 33771 `v4sf __builtin_ia32_loadaps (float *)' 33772 Generates the `movaps' machine instruction as a load from memory. 33773 33774 `void __builtin_ia32_storeaps (float *, v4sf)' 33775 Generates the `movaps' machine instruction as a store to memory. 33776 33777 `v4sf __builtin_ia32_loadups (float *)' 33778 Generates the `movups' machine instruction as a load from memory. 33779 33780 `void __builtin_ia32_storeups (float *, v4sf)' 33781 Generates the `movups' machine instruction as a store to memory. 33782 33783 `v4sf __builtin_ia32_loadsss (float *)' 33784 Generates the `movss' machine instruction as a load from memory. 33785 33786 `void __builtin_ia32_storess (float *, v4sf)' 33787 Generates the `movss' machine instruction as a store to memory. 33788 33789 `v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 33790 Generates the `movhps' machine instruction as a load from memory. 33791 33792 `v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 33793 Generates the `movlps' machine instruction as a load from memory 33794 33795 `void __builtin_ia32_storehps (v2sf *, v4sf)' 33796 Generates the `movhps' machine instruction as a store to memory. 33797 33798 `void __builtin_ia32_storelps (v2sf *, v4sf)' 33799 Generates the `movlps' machine instruction as a store to memory. 33800 33801 The following built-in functions are available when `-msse2' is used. 33802 All of them generate the machine instruction that is part of the name. 33803 33804 int __builtin_ia32_comisdeq (v2df, v2df) 33805 int __builtin_ia32_comisdlt (v2df, v2df) 33806 int __builtin_ia32_comisdle (v2df, v2df) 33807 int __builtin_ia32_comisdgt (v2df, v2df) 33808 int __builtin_ia32_comisdge (v2df, v2df) 33809 int __builtin_ia32_comisdneq (v2df, v2df) 33810 int __builtin_ia32_ucomisdeq (v2df, v2df) 33811 int __builtin_ia32_ucomisdlt (v2df, v2df) 33812 int __builtin_ia32_ucomisdle (v2df, v2df) 33813 int __builtin_ia32_ucomisdgt (v2df, v2df) 33814 int __builtin_ia32_ucomisdge (v2df, v2df) 33815 int __builtin_ia32_ucomisdneq (v2df, v2df) 33816 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 33817 v2df __builtin_ia32_cmpltpd (v2df, v2df) 33818 v2df __builtin_ia32_cmplepd (v2df, v2df) 33819 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 33820 v2df __builtin_ia32_cmpgepd (v2df, v2df) 33821 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 33822 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 33823 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 33824 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 33825 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 33826 v2df __builtin_ia32_cmpngepd (v2df, v2df) 33827 v2df __builtin_ia32_cmpordpd (v2df, v2df) 33828 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 33829 v2df __builtin_ia32_cmpltsd (v2df, v2df) 33830 v2df __builtin_ia32_cmplesd (v2df, v2df) 33831 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 33832 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 33833 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 33834 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 33835 v2df __builtin_ia32_cmpordsd (v2df, v2df) 33836 v2di __builtin_ia32_paddq (v2di, v2di) 33837 v2di __builtin_ia32_psubq (v2di, v2di) 33838 v2df __builtin_ia32_addpd (v2df, v2df) 33839 v2df __builtin_ia32_subpd (v2df, v2df) 33840 v2df __builtin_ia32_mulpd (v2df, v2df) 33841 v2df __builtin_ia32_divpd (v2df, v2df) 33842 v2df __builtin_ia32_addsd (v2df, v2df) 33843 v2df __builtin_ia32_subsd (v2df, v2df) 33844 v2df __builtin_ia32_mulsd (v2df, v2df) 33845 v2df __builtin_ia32_divsd (v2df, v2df) 33846 v2df __builtin_ia32_minpd (v2df, v2df) 33847 v2df __builtin_ia32_maxpd (v2df, v2df) 33848 v2df __builtin_ia32_minsd (v2df, v2df) 33849 v2df __builtin_ia32_maxsd (v2df, v2df) 33850 v2df __builtin_ia32_andpd (v2df, v2df) 33851 v2df __builtin_ia32_andnpd (v2df, v2df) 33852 v2df __builtin_ia32_orpd (v2df, v2df) 33853 v2df __builtin_ia32_xorpd (v2df, v2df) 33854 v2df __builtin_ia32_movsd (v2df, v2df) 33855 v2df __builtin_ia32_unpckhpd (v2df, v2df) 33856 v2df __builtin_ia32_unpcklpd (v2df, v2df) 33857 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 33858 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 33859 v4si __builtin_ia32_paddd128 (v4si, v4si) 33860 v2di __builtin_ia32_paddq128 (v2di, v2di) 33861 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 33862 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 33863 v4si __builtin_ia32_psubd128 (v4si, v4si) 33864 v2di __builtin_ia32_psubq128 (v2di, v2di) 33865 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 33866 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 33867 v2di __builtin_ia32_pand128 (v2di, v2di) 33868 v2di __builtin_ia32_pandn128 (v2di, v2di) 33869 v2di __builtin_ia32_por128 (v2di, v2di) 33870 v2di __builtin_ia32_pxor128 (v2di, v2di) 33871 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 33872 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 33873 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 33874 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 33875 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 33876 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 33877 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 33878 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 33879 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 33880 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 33881 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 33882 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 33883 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 33884 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 33885 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 33886 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 33887 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 33888 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 33889 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 33890 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 33891 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 33892 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 33893 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 33894 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 33895 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 33896 v2df __builtin_ia32_loadupd (double *) 33897 void __builtin_ia32_storeupd (double *, v2df) 33898 v2df __builtin_ia32_loadhpd (v2df, double const *) 33899 v2df __builtin_ia32_loadlpd (v2df, double const *) 33900 int __builtin_ia32_movmskpd (v2df) 33901 int __builtin_ia32_pmovmskb128 (v16qi) 33902 void __builtin_ia32_movnti (int *, int) 33903 void __builtin_ia32_movntpd (double *, v2df) 33904 void __builtin_ia32_movntdq (v2df *, v2df) 33905 v4si __builtin_ia32_pshufd (v4si, int) 33906 v8hi __builtin_ia32_pshuflw (v8hi, int) 33907 v8hi __builtin_ia32_pshufhw (v8hi, int) 33908 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 33909 v2df __builtin_ia32_sqrtpd (v2df) 33910 v2df __builtin_ia32_sqrtsd (v2df) 33911 v2df __builtin_ia32_shufpd (v2df, v2df, int) 33912 v2df __builtin_ia32_cvtdq2pd (v4si) 33913 v4sf __builtin_ia32_cvtdq2ps (v4si) 33914 v4si __builtin_ia32_cvtpd2dq (v2df) 33915 v2si __builtin_ia32_cvtpd2pi (v2df) 33916 v4sf __builtin_ia32_cvtpd2ps (v2df) 33917 v4si __builtin_ia32_cvttpd2dq (v2df) 33918 v2si __builtin_ia32_cvttpd2pi (v2df) 33919 v2df __builtin_ia32_cvtpi2pd (v2si) 33920 int __builtin_ia32_cvtsd2si (v2df) 33921 int __builtin_ia32_cvttsd2si (v2df) 33922 long long __builtin_ia32_cvtsd2si64 (v2df) 33923 long long __builtin_ia32_cvttsd2si64 (v2df) 33924 v4si __builtin_ia32_cvtps2dq (v4sf) 33925 v2df __builtin_ia32_cvtps2pd (v4sf) 33926 v4si __builtin_ia32_cvttps2dq (v4sf) 33927 v2df __builtin_ia32_cvtsi2sd (v2df, int) 33928 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 33929 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 33930 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 33931 void __builtin_ia32_clflush (const void *) 33932 void __builtin_ia32_lfence (void) 33933 void __builtin_ia32_mfence (void) 33934 v16qi __builtin_ia32_loaddqu (const char *) 33935 void __builtin_ia32_storedqu (char *, v16qi) 33936 v1di __builtin_ia32_pmuludq (v2si, v2si) 33937 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 33938 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 33939 v4si __builtin_ia32_pslld128 (v4si, v4si) 33940 v2di __builtin_ia32_psllq128 (v2di, v2di) 33941 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 33942 v4si __builtin_ia32_psrld128 (v4si, v4si) 33943 v2di __builtin_ia32_psrlq128 (v2di, v2di) 33944 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 33945 v4si __builtin_ia32_psrad128 (v4si, v4si) 33946 v2di __builtin_ia32_pslldqi128 (v2di, int) 33947 v8hi __builtin_ia32_psllwi128 (v8hi, int) 33948 v4si __builtin_ia32_pslldi128 (v4si, int) 33949 v2di __builtin_ia32_psllqi128 (v2di, int) 33950 v2di __builtin_ia32_psrldqi128 (v2di, int) 33951 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 33952 v4si __builtin_ia32_psrldi128 (v4si, int) 33953 v2di __builtin_ia32_psrlqi128 (v2di, int) 33954 v8hi __builtin_ia32_psrawi128 (v8hi, int) 33955 v4si __builtin_ia32_psradi128 (v4si, int) 33956 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 33957 v2di __builtin_ia32_movq128 (v2di) 33958 33959 The following built-in functions are available when `-msse3' is used. 33960 All of them generate the machine instruction that is part of the name. 33961 33962 v2df __builtin_ia32_addsubpd (v2df, v2df) 33963 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 33964 v2df __builtin_ia32_haddpd (v2df, v2df) 33965 v4sf __builtin_ia32_haddps (v4sf, v4sf) 33966 v2df __builtin_ia32_hsubpd (v2df, v2df) 33967 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 33968 v16qi __builtin_ia32_lddqu (char const *) 33969 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 33970 v2df __builtin_ia32_movddup (v2df) 33971 v4sf __builtin_ia32_movshdup (v4sf) 33972 v4sf __builtin_ia32_movsldup (v4sf) 33973 void __builtin_ia32_mwait (unsigned int, unsigned int) 33974 33975 The following built-in functions are available when `-msse3' is used. 33976 33977 `v2df __builtin_ia32_loadddup (double const *)' 33978 Generates the `movddup' machine instruction as a load from memory. 33979 33980 The following built-in functions are available when `-mssse3' is used. 33981 All of them generate the machine instruction that is part of the name 33982 with MMX registers. 33983 33984 v2si __builtin_ia32_phaddd (v2si, v2si) 33985 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 33986 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 33987 v2si __builtin_ia32_phsubd (v2si, v2si) 33988 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 33989 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 33990 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 33991 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 33992 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 33993 v8qi __builtin_ia32_psignb (v8qi, v8qi) 33994 v2si __builtin_ia32_psignd (v2si, v2si) 33995 v4hi __builtin_ia32_psignw (v4hi, v4hi) 33996 v1di __builtin_ia32_palignr (v1di, v1di, int) 33997 v8qi __builtin_ia32_pabsb (v8qi) 33998 v2si __builtin_ia32_pabsd (v2si) 33999 v4hi __builtin_ia32_pabsw (v4hi) 34000 34001 The following built-in functions are available when `-mssse3' is used. 34002 All of them generate the machine instruction that is part of the name 34003 with SSE registers. 34004 34005 v4si __builtin_ia32_phaddd128 (v4si, v4si) 34006 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 34007 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 34008 v4si __builtin_ia32_phsubd128 (v4si, v4si) 34009 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 34010 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 34011 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 34012 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 34013 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 34014 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 34015 v4si __builtin_ia32_psignd128 (v4si, v4si) 34016 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 34017 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 34018 v16qi __builtin_ia32_pabsb128 (v16qi) 34019 v4si __builtin_ia32_pabsd128 (v4si) 34020 v8hi __builtin_ia32_pabsw128 (v8hi) 34021 34022 The following built-in functions are available when `-msse4.1' is 34023 used. All of them generate the machine instruction that is part of the 34024 name. 34025 34026 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 34027 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 34028 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 34029 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 34030 v2df __builtin_ia32_dppd (v2df, v2df, const int) 34031 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 34032 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 34033 v2di __builtin_ia32_movntdqa (v2di *); 34034 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 34035 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 34036 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 34037 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 34038 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 34039 v8hi __builtin_ia32_phminposuw128 (v8hi) 34040 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 34041 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 34042 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 34043 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 34044 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 34045 v4si __builtin_ia32_pminsd128 (v4si, v4si) 34046 v4si __builtin_ia32_pminud128 (v4si, v4si) 34047 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 34048 v4si __builtin_ia32_pmovsxbd128 (v16qi) 34049 v2di __builtin_ia32_pmovsxbq128 (v16qi) 34050 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 34051 v2di __builtin_ia32_pmovsxdq128 (v4si) 34052 v4si __builtin_ia32_pmovsxwd128 (v8hi) 34053 v2di __builtin_ia32_pmovsxwq128 (v8hi) 34054 v4si __builtin_ia32_pmovzxbd128 (v16qi) 34055 v2di __builtin_ia32_pmovzxbq128 (v16qi) 34056 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 34057 v2di __builtin_ia32_pmovzxdq128 (v4si) 34058 v4si __builtin_ia32_pmovzxwd128 (v8hi) 34059 v2di __builtin_ia32_pmovzxwq128 (v8hi) 34060 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 34061 v4si __builtin_ia32_pmulld128 (v4si, v4si) 34062 int __builtin_ia32_ptestc128 (v2di, v2di) 34063 int __builtin_ia32_ptestnzc128 (v2di, v2di) 34064 int __builtin_ia32_ptestz128 (v2di, v2di) 34065 v2df __builtin_ia32_roundpd (v2df, const int) 34066 v4sf __builtin_ia32_roundps (v4sf, const int) 34067 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 34068 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 34069 34070 The following built-in functions are available when `-msse4.1' is used. 34071 34072 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 34073 Generates the `insertps' machine instruction. 34074 34075 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 34076 Generates the `pextrb' machine instruction. 34077 34078 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 34079 Generates the `pinsrb' machine instruction. 34080 34081 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 34082 Generates the `pinsrd' machine instruction. 34083 34084 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 34085 Generates the `pinsrq' machine instruction in 64bit mode. 34086 34087 The following built-in functions are changed to generate new SSE4.1 34088 instructions when `-msse4.1' is used. 34089 34090 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 34091 Generates the `extractps' machine instruction. 34092 34093 `int __builtin_ia32_vec_ext_v4si (v4si, const int)' 34094 Generates the `pextrd' machine instruction. 34095 34096 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 34097 Generates the `pextrq' machine instruction in 64bit mode. 34098 34099 The following built-in functions are available when `-msse4.2' is 34100 used. All of them generate the machine instruction that is part of the 34101 name. 34102 34103 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 34104 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 34105 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 34106 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 34107 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 34108 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 34109 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 34110 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 34111 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 34112 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 34113 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 34114 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 34115 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 34116 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 34117 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 34118 34119 The following built-in functions are available when `-msse4.2' is used. 34120 34121 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 34122 Generates the `crc32b' machine instruction. 34123 34124 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 34125 Generates the `crc32w' machine instruction. 34126 34127 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 34128 Generates the `crc32l' machine instruction. 34129 34130 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 34131 Generates the `crc32q' machine instruction. 34132 34133 The following built-in functions are changed to generate new SSE4.2 34134 instructions when `-msse4.2' is used. 34135 34136 `int __builtin_popcount (unsigned int)' 34137 Generates the `popcntl' machine instruction. 34138 34139 `int __builtin_popcountl (unsigned long)' 34140 Generates the `popcntl' or `popcntq' machine instruction, 34141 depending on the size of `unsigned long'. 34142 34143 `int __builtin_popcountll (unsigned long long)' 34144 Generates the `popcntq' machine instruction. 34145 34146 The following built-in functions are available when `-mavx' is used. 34147 All of them generate the machine instruction that is part of the name. 34148 34149 v4df __builtin_ia32_addpd256 (v4df,v4df) 34150 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 34151 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 34152 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 34153 v4df __builtin_ia32_andnpd256 (v4df,v4df) 34154 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 34155 v4df __builtin_ia32_andpd256 (v4df,v4df) 34156 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 34157 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 34158 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 34159 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 34160 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 34161 v2df __builtin_ia32_cmppd (v2df,v2df,int) 34162 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 34163 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 34164 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 34165 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 34166 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 34167 v4df __builtin_ia32_cvtdq2pd256 (v4si) 34168 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 34169 v4si __builtin_ia32_cvtpd2dq256 (v4df) 34170 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 34171 v8si __builtin_ia32_cvtps2dq256 (v8sf) 34172 v4df __builtin_ia32_cvtps2pd256 (v4sf) 34173 v4si __builtin_ia32_cvttpd2dq256 (v4df) 34174 v8si __builtin_ia32_cvttps2dq256 (v8sf) 34175 v4df __builtin_ia32_divpd256 (v4df,v4df) 34176 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 34177 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 34178 v4df __builtin_ia32_haddpd256 (v4df,v4df) 34179 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 34180 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 34181 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 34182 v32qi __builtin_ia32_lddqu256 (pcchar) 34183 v32qi __builtin_ia32_loaddqu256 (pcchar) 34184 v4df __builtin_ia32_loadupd256 (pcdouble) 34185 v8sf __builtin_ia32_loadups256 (pcfloat) 34186 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 34187 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 34188 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 34189 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 34190 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 34191 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 34192 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 34193 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 34194 v4df __builtin_ia32_maxpd256 (v4df,v4df) 34195 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 34196 v4df __builtin_ia32_minpd256 (v4df,v4df) 34197 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 34198 v4df __builtin_ia32_movddup256 (v4df) 34199 int __builtin_ia32_movmskpd256 (v4df) 34200 int __builtin_ia32_movmskps256 (v8sf) 34201 v8sf __builtin_ia32_movshdup256 (v8sf) 34202 v8sf __builtin_ia32_movsldup256 (v8sf) 34203 v4df __builtin_ia32_mulpd256 (v4df,v4df) 34204 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 34205 v4df __builtin_ia32_orpd256 (v4df,v4df) 34206 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 34207 v2df __builtin_ia32_pd_pd256 (v4df) 34208 v4df __builtin_ia32_pd256_pd (v2df) 34209 v4sf __builtin_ia32_ps_ps256 (v8sf) 34210 v8sf __builtin_ia32_ps256_ps (v4sf) 34211 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 34212 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 34213 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 34214 v8sf __builtin_ia32_rcpps256 (v8sf) 34215 v4df __builtin_ia32_roundpd256 (v4df,int) 34216 v8sf __builtin_ia32_roundps256 (v8sf,int) 34217 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 34218 v8sf __builtin_ia32_rsqrtps256 (v8sf) 34219 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 34220 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 34221 v4si __builtin_ia32_si_si256 (v8si) 34222 v8si __builtin_ia32_si256_si (v4si) 34223 v4df __builtin_ia32_sqrtpd256 (v4df) 34224 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 34225 v8sf __builtin_ia32_sqrtps256 (v8sf) 34226 void __builtin_ia32_storedqu256 (pchar,v32qi) 34227 void __builtin_ia32_storeupd256 (pdouble,v4df) 34228 void __builtin_ia32_storeups256 (pfloat,v8sf) 34229 v4df __builtin_ia32_subpd256 (v4df,v4df) 34230 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 34231 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 34232 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 34233 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 34234 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 34235 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 34236 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 34237 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 34238 v4sf __builtin_ia32_vbroadcastss (pcfloat) 34239 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 34240 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 34241 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 34242 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 34243 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 34244 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 34245 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 34246 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 34247 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 34248 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 34249 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 34250 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 34251 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 34252 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 34253 v2df __builtin_ia32_vpermilpd (v2df,int) 34254 v4df __builtin_ia32_vpermilpd256 (v4df,int) 34255 v4sf __builtin_ia32_vpermilps (v4sf,int) 34256 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 34257 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 34258 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 34259 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 34260 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 34261 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 34262 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 34263 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 34264 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 34265 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 34266 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 34267 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 34268 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 34269 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 34270 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 34271 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 34272 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 34273 void __builtin_ia32_vzeroall (void) 34274 void __builtin_ia32_vzeroupper (void) 34275 v4df __builtin_ia32_xorpd256 (v4df,v4df) 34276 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 34277 34278 The following built-in functions are available when `-maes' is used. 34279 All of them generate the machine instruction that is part of the name. 34280 34281 v2di __builtin_ia32_aesenc128 (v2di, v2di) 34282 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 34283 v2di __builtin_ia32_aesdec128 (v2di, v2di) 34284 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 34285 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 34286 v2di __builtin_ia32_aesimc128 (v2di) 34287 34288 The following built-in function is available when `-mpclmul' is used. 34289 34290 `v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 34291 Generates the `pclmulqdq' machine instruction. 34292 34293 The following built-in function is available when `-mfsgsbase' is 34294 used. All of them generate the machine instruction that is part of the 34295 name. 34296 34297 unsigned int __builtin_ia32_rdfsbase32 (void) 34298 unsigned long long __builtin_ia32_rdfsbase64 (void) 34299 unsigned int __builtin_ia32_rdgsbase32 (void) 34300 unsigned long long __builtin_ia32_rdgsbase64 (void) 34301 void _writefsbase_u32 (unsigned int) 34302 void _writefsbase_u64 (unsigned long long) 34303 void _writegsbase_u32 (unsigned int) 34304 void _writegsbase_u64 (unsigned long long) 34305 34306 The following built-in function is available when `-mrdrnd' is used. 34307 All of them generate the machine instruction that is part of the name. 34308 34309 unsigned int __builtin_ia32_rdrand16_step (unsigned short *) 34310 unsigned int __builtin_ia32_rdrand32_step (unsigned int *) 34311 unsigned int __builtin_ia32_rdrand64_step (unsigned long long *) 34312 34313 The following built-in functions are available when `-msse4a' is used. 34314 All of them generate the machine instruction that is part of the name. 34315 34316 void __builtin_ia32_movntsd (double *, v2df) 34317 void __builtin_ia32_movntss (float *, v4sf) 34318 v2di __builtin_ia32_extrq (v2di, v16qi) 34319 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 34320 v2di __builtin_ia32_insertq (v2di, v2di) 34321 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 34322 34323 The following built-in functions are available when `-mxop' is used. 34324 v2df __builtin_ia32_vfrczpd (v2df) 34325 v4sf __builtin_ia32_vfrczps (v4sf) 34326 v2df __builtin_ia32_vfrczsd (v2df, v2df) 34327 v4sf __builtin_ia32_vfrczss (v4sf, v4sf) 34328 v4df __builtin_ia32_vfrczpd256 (v4df) 34329 v8sf __builtin_ia32_vfrczps256 (v8sf) 34330 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di) 34331 v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di) 34332 v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si) 34333 v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi) 34334 v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi) 34335 v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df) 34336 v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf) 34337 v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di) 34338 v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si) 34339 v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi) 34340 v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi) 34341 v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df) 34342 v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf) 34343 v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi) 34344 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 34345 v4si __builtin_ia32_vpcomeqd (v4si, v4si) 34346 v2di __builtin_ia32_vpcomeqq (v2di, v2di) 34347 v16qi __builtin_ia32_vpcomequb (v16qi, v16qi) 34348 v4si __builtin_ia32_vpcomequd (v4si, v4si) 34349 v2di __builtin_ia32_vpcomequq (v2di, v2di) 34350 v8hi __builtin_ia32_vpcomequw (v8hi, v8hi) 34351 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 34352 v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi) 34353 v4si __builtin_ia32_vpcomfalsed (v4si, v4si) 34354 v2di __builtin_ia32_vpcomfalseq (v2di, v2di) 34355 v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi) 34356 v4si __builtin_ia32_vpcomfalseud (v4si, v4si) 34357 v2di __builtin_ia32_vpcomfalseuq (v2di, v2di) 34358 v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi) 34359 v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi) 34360 v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi) 34361 v4si __builtin_ia32_vpcomged (v4si, v4si) 34362 v2di __builtin_ia32_vpcomgeq (v2di, v2di) 34363 v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi) 34364 v4si __builtin_ia32_vpcomgeud (v4si, v4si) 34365 v2di __builtin_ia32_vpcomgeuq (v2di, v2di) 34366 v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi) 34367 v8hi __builtin_ia32_vpcomgew (v8hi, v8hi) 34368 v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi) 34369 v4si __builtin_ia32_vpcomgtd (v4si, v4si) 34370 v2di __builtin_ia32_vpcomgtq (v2di, v2di) 34371 v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi) 34372 v4si __builtin_ia32_vpcomgtud (v4si, v4si) 34373 v2di __builtin_ia32_vpcomgtuq (v2di, v2di) 34374 v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi) 34375 v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi) 34376 v16qi __builtin_ia32_vpcomleb (v16qi, v16qi) 34377 v4si __builtin_ia32_vpcomled (v4si, v4si) 34378 v2di __builtin_ia32_vpcomleq (v2di, v2di) 34379 v16qi __builtin_ia32_vpcomleub (v16qi, v16qi) 34380 v4si __builtin_ia32_vpcomleud (v4si, v4si) 34381 v2di __builtin_ia32_vpcomleuq (v2di, v2di) 34382 v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi) 34383 v8hi __builtin_ia32_vpcomlew (v8hi, v8hi) 34384 v16qi __builtin_ia32_vpcomltb (v16qi, v16qi) 34385 v4si __builtin_ia32_vpcomltd (v4si, v4si) 34386 v2di __builtin_ia32_vpcomltq (v2di, v2di) 34387 v16qi __builtin_ia32_vpcomltub (v16qi, v16qi) 34388 v4si __builtin_ia32_vpcomltud (v4si, v4si) 34389 v2di __builtin_ia32_vpcomltuq (v2di, v2di) 34390 v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi) 34391 v8hi __builtin_ia32_vpcomltw (v8hi, v8hi) 34392 v16qi __builtin_ia32_vpcomneb (v16qi, v16qi) 34393 v4si __builtin_ia32_vpcomned (v4si, v4si) 34394 v2di __builtin_ia32_vpcomneq (v2di, v2di) 34395 v16qi __builtin_ia32_vpcomneub (v16qi, v16qi) 34396 v4si __builtin_ia32_vpcomneud (v4si, v4si) 34397 v2di __builtin_ia32_vpcomneuq (v2di, v2di) 34398 v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi) 34399 v8hi __builtin_ia32_vpcomnew (v8hi, v8hi) 34400 v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi) 34401 v4si __builtin_ia32_vpcomtrued (v4si, v4si) 34402 v2di __builtin_ia32_vpcomtrueq (v2di, v2di) 34403 v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi) 34404 v4si __builtin_ia32_vpcomtrueud (v4si, v4si) 34405 v2di __builtin_ia32_vpcomtrueuq (v2di, v2di) 34406 v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi) 34407 v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi) 34408 v4si __builtin_ia32_vphaddbd (v16qi) 34409 v2di __builtin_ia32_vphaddbq (v16qi) 34410 v8hi __builtin_ia32_vphaddbw (v16qi) 34411 v2di __builtin_ia32_vphadddq (v4si) 34412 v4si __builtin_ia32_vphaddubd (v16qi) 34413 v2di __builtin_ia32_vphaddubq (v16qi) 34414 v8hi __builtin_ia32_vphaddubw (v16qi) 34415 v2di __builtin_ia32_vphaddudq (v4si) 34416 v4si __builtin_ia32_vphadduwd (v8hi) 34417 v2di __builtin_ia32_vphadduwq (v8hi) 34418 v4si __builtin_ia32_vphaddwd (v8hi) 34419 v2di __builtin_ia32_vphaddwq (v8hi) 34420 v8hi __builtin_ia32_vphsubbw (v16qi) 34421 v2di __builtin_ia32_vphsubdq (v4si) 34422 v4si __builtin_ia32_vphsubwd (v8hi) 34423 v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si) 34424 v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di) 34425 v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di) 34426 v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si) 34427 v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di) 34428 v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di) 34429 v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si) 34430 v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi) 34431 v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si) 34432 v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi) 34433 v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si) 34434 v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si) 34435 v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi) 34436 v16qi __builtin_ia32_vprotb (v16qi, v16qi) 34437 v4si __builtin_ia32_vprotd (v4si, v4si) 34438 v2di __builtin_ia32_vprotq (v2di, v2di) 34439 v8hi __builtin_ia32_vprotw (v8hi, v8hi) 34440 v16qi __builtin_ia32_vpshab (v16qi, v16qi) 34441 v4si __builtin_ia32_vpshad (v4si, v4si) 34442 v2di __builtin_ia32_vpshaq (v2di, v2di) 34443 v8hi __builtin_ia32_vpshaw (v8hi, v8hi) 34444 v16qi __builtin_ia32_vpshlb (v16qi, v16qi) 34445 v4si __builtin_ia32_vpshld (v4si, v4si) 34446 v2di __builtin_ia32_vpshlq (v2di, v2di) 34447 v8hi __builtin_ia32_vpshlw (v8hi, v8hi) 34448 34449 The following built-in functions are available when `-mfma4' is used. 34450 All of them generate the machine instruction that is part of the name 34451 with MMX registers. 34452 34453 v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df) 34454 v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf) 34455 v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df) 34456 v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf) 34457 v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df) 34458 v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf) 34459 v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df) 34460 v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf) 34461 v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df) 34462 v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf) 34463 v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df) 34464 v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf) 34465 v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df) 34466 v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf) 34467 v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df) 34468 v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf) 34469 v2df __builtin_ia32_fmaddsubpd (v2df, v2df, v2df) 34470 v4sf __builtin_ia32_fmaddsubps (v4sf, v4sf, v4sf) 34471 v2df __builtin_ia32_fmsubaddpd (v2df, v2df, v2df) 34472 v4sf __builtin_ia32_fmsubaddps (v4sf, v4sf, v4sf) 34473 v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df) 34474 v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf) 34475 v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df) 34476 v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf) 34477 v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df) 34478 v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf) 34479 v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df) 34480 v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf) 34481 v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df) 34482 v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf) 34483 v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df) 34484 v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf) 34485 34486 The following built-in functions are available when `-mlwp' is used. 34487 34488 void __builtin_ia32_llwpcb16 (void *); 34489 void __builtin_ia32_llwpcb32 (void *); 34490 void __builtin_ia32_llwpcb64 (void *); 34491 void * __builtin_ia32_llwpcb16 (void); 34492 void * __builtin_ia32_llwpcb32 (void); 34493 void * __builtin_ia32_llwpcb64 (void); 34494 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) 34495 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) 34496 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) 34497 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) 34498 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) 34499 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) 34500 34501 The following built-in functions are available when `-mbmi' is used. 34502 All of them generate the machine instruction that is part of the name. 34503 unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int); 34504 unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long); 34505 unsigned short __builtin_ia32_lzcnt_16(unsigned short); 34506 unsigned int __builtin_ia32_lzcnt_u32(unsigned int); 34507 unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long); 34508 34509 The following built-in functions are available when `-mtbm' is used. 34510 Both of them generate the immediate form of the bextr machine 34511 instruction. 34512 unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int); 34513 unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long); 34514 34515 The following built-in functions are available when `-m3dnow' is used. 34516 All of them generate the machine instruction that is part of the name. 34517 34518 void __builtin_ia32_femms (void) 34519 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 34520 v2si __builtin_ia32_pf2id (v2sf) 34521 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 34522 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 34523 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 34524 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 34525 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 34526 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 34527 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 34528 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 34529 v2sf __builtin_ia32_pfrcp (v2sf) 34530 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 34531 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 34532 v2sf __builtin_ia32_pfrsqrt (v2sf) 34533 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 34534 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 34535 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 34536 v2sf __builtin_ia32_pi2fd (v2si) 34537 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 34538 34539 The following built-in functions are available when both `-m3dnow' and 34540 `-march=athlon' are used. All of them generate the machine instruction 34541 that is part of the name. 34542 34543 v2si __builtin_ia32_pf2iw (v2sf) 34544 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 34545 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 34546 v2sf __builtin_ia32_pi2fw (v2si) 34547 v2sf __builtin_ia32_pswapdsf (v2sf) 34548 v2si __builtin_ia32_pswapdsi (v2si) 34549 34550 34551 File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 Built-in Functions, Up: Target Builtins 34552 34553 6.54.7 MIPS DSP Built-in Functions 34554 ---------------------------------- 34555 34556 The MIPS DSP Application-Specific Extension (ASE) includes new 34557 instructions that are designed to improve the performance of DSP and 34558 media applications. It provides instructions that operate on packed 34559 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 34560 34561 GCC supports MIPS DSP operations using both the generic vector 34562 extensions (*note Vector Extensions::) and a collection of 34563 MIPS-specific built-in functions. Both kinds of support are enabled by 34564 the `-mdsp' command-line option. 34565 34566 Revision 2 of the ASE was introduced in the second half of 2006. This 34567 revision adds extra instructions to the original ASE, but is otherwise 34568 backwards-compatible with it. You can select revision 2 using the 34569 command-line option `-mdspr2'; this option implies `-mdsp'. 34570 34571 The SCOUNT and POS bits of the DSP control register are global. The 34572 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and 34573 POS bits. During optimization, the compiler will not delete these 34574 instructions and it will not delete calls to functions containing these 34575 instructions. 34576 34577 At present, GCC only provides support for operations on 32-bit 34578 vectors. The vector type associated with 8-bit integer data is usually 34579 called `v4i8', the vector type associated with Q7 is usually called 34580 `v4q7', the vector type associated with 16-bit integer data is usually 34581 called `v2i16', and the vector type associated with Q15 is usually 34582 called `v2q15'. They can be defined in C as follows: 34583 34584 typedef signed char v4i8 __attribute__ ((vector_size(4))); 34585 typedef signed char v4q7 __attribute__ ((vector_size(4))); 34586 typedef short v2i16 __attribute__ ((vector_size(4))); 34587 typedef short v2q15 __attribute__ ((vector_size(4))); 34588 34589 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same 34590 way as aggregates. For example: 34591 34592 v4i8 a = {1, 2, 3, 4}; 34593 v4i8 b; 34594 b = (v4i8) {5, 6, 7, 8}; 34595 34596 v2q15 c = {0x0fcb, 0x3a75}; 34597 v2q15 d; 34598 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 34599 34600 _Note:_ The CPU's endianness determines the order in which values are 34601 packed. On little-endian targets, the first value is the least 34602 significant and the last value is the most significant. The opposite 34603 order applies to big-endian targets. For example, the code above will 34604 set the lowest byte of `a' to `1' on little-endian targets and `4' on 34605 big-endian targets. 34606 34607 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 34608 representation. As shown in this example, the integer representation 34609 of a Q7 value can be obtained by multiplying the fractional value by 34610 `0x1.0p7'. The equivalent for Q15 values is to multiply by `0x1.0p15'. 34611 The equivalent for Q31 values is to multiply by `0x1.0p31'. 34612 34613 The table below lists the `v4i8' and `v2q15' operations for which 34614 hardware support exists. `a' and `b' are `v4i8' values, and `c' and 34615 `d' are `v2q15' values. 34616 34617 C code MIPS instruction 34618 `a + b' `addu.qb' 34619 `c + d' `addq.ph' 34620 `a - b' `subu.qb' 34621 `c - d' `subq.ph' 34622 34623 The table below lists the `v2i16' operation for which hardware support 34624 exists for the DSP ASE REV 2. `e' and `f' are `v2i16' values. 34625 34626 C code MIPS instruction 34627 `e * f' `mul.ph' 34628 34629 It is easier to describe the DSP built-in functions if we first define 34630 the following types: 34631 34632 typedef int q31; 34633 typedef int i32; 34634 typedef unsigned int ui32; 34635 typedef long long a64; 34636 34637 `q31' and `i32' are actually the same as `int', but we use `q31' to 34638 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 34639 value. Similarly, `a64' is the same as `long long', but we use `a64' 34640 to indicate values that will be placed in one of the four DSP 34641 accumulators (`$ac0', `$ac1', `$ac2' or `$ac3'). 34642 34643 Also, some built-in functions prefer or require immediate numbers as 34644 parameters, because the corresponding DSP instructions accept both 34645 immediate numbers and register operands, or accept immediate numbers 34646 only. The immediate parameters are listed as follows. 34647 34648 imm0_3: 0 to 3. 34649 imm0_7: 0 to 7. 34650 imm0_15: 0 to 15. 34651 imm0_31: 0 to 31. 34652 imm0_63: 0 to 63. 34653 imm0_255: 0 to 255. 34654 imm_n32_31: -32 to 31. 34655 imm_n512_511: -512 to 511. 34656 34657 The following built-in functions map directly to a particular MIPS DSP 34658 instruction. Please refer to the architecture specification for 34659 details on what each instruction does. 34660 34661 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 34662 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 34663 q31 __builtin_mips_addq_s_w (q31, q31) 34664 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 34665 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 34666 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 34667 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 34668 q31 __builtin_mips_subq_s_w (q31, q31) 34669 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 34670 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 34671 i32 __builtin_mips_addsc (i32, i32) 34672 i32 __builtin_mips_addwc (i32, i32) 34673 i32 __builtin_mips_modsub (i32, i32) 34674 i32 __builtin_mips_raddu_w_qb (v4i8) 34675 v2q15 __builtin_mips_absq_s_ph (v2q15) 34676 q31 __builtin_mips_absq_s_w (q31) 34677 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 34678 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 34679 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 34680 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 34681 q31 __builtin_mips_preceq_w_phl (v2q15) 34682 q31 __builtin_mips_preceq_w_phr (v2q15) 34683 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 34684 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 34685 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 34686 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 34687 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 34688 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 34689 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 34690 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 34691 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 34692 v4i8 __builtin_mips_shll_qb (v4i8, i32) 34693 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 34694 v2q15 __builtin_mips_shll_ph (v2q15, i32) 34695 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 34696 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 34697 q31 __builtin_mips_shll_s_w (q31, imm0_31) 34698 q31 __builtin_mips_shll_s_w (q31, i32) 34699 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 34700 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 34701 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 34702 v2q15 __builtin_mips_shra_ph (v2q15, i32) 34703 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 34704 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 34705 q31 __builtin_mips_shra_r_w (q31, imm0_31) 34706 q31 __builtin_mips_shra_r_w (q31, i32) 34707 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 34708 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 34709 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 34710 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 34711 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 34712 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 34713 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 34714 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 34715 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 34716 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 34717 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 34718 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 34719 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 34720 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 34721 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 34722 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 34723 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 34724 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 34725 i32 __builtin_mips_bitrev (i32) 34726 i32 __builtin_mips_insv (i32, i32) 34727 v4i8 __builtin_mips_repl_qb (imm0_255) 34728 v4i8 __builtin_mips_repl_qb (i32) 34729 v2q15 __builtin_mips_repl_ph (imm_n512_511) 34730 v2q15 __builtin_mips_repl_ph (i32) 34731 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 34732 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 34733 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 34734 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 34735 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 34736 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 34737 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 34738 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 34739 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 34740 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 34741 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 34742 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 34743 i32 __builtin_mips_extr_w (a64, imm0_31) 34744 i32 __builtin_mips_extr_w (a64, i32) 34745 i32 __builtin_mips_extr_r_w (a64, imm0_31) 34746 i32 __builtin_mips_extr_s_h (a64, i32) 34747 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 34748 i32 __builtin_mips_extr_rs_w (a64, i32) 34749 i32 __builtin_mips_extr_s_h (a64, imm0_31) 34750 i32 __builtin_mips_extr_r_w (a64, i32) 34751 i32 __builtin_mips_extp (a64, imm0_31) 34752 i32 __builtin_mips_extp (a64, i32) 34753 i32 __builtin_mips_extpdp (a64, imm0_31) 34754 i32 __builtin_mips_extpdp (a64, i32) 34755 a64 __builtin_mips_shilo (a64, imm_n32_31) 34756 a64 __builtin_mips_shilo (a64, i32) 34757 a64 __builtin_mips_mthlip (a64, i32) 34758 void __builtin_mips_wrdsp (i32, imm0_63) 34759 i32 __builtin_mips_rddsp (imm0_63) 34760 i32 __builtin_mips_lbux (void *, i32) 34761 i32 __builtin_mips_lhx (void *, i32) 34762 i32 __builtin_mips_lwx (void *, i32) 34763 i32 __builtin_mips_bposge32 (void) 34764 a64 __builtin_mips_madd (a64, i32, i32); 34765 a64 __builtin_mips_maddu (a64, ui32, ui32); 34766 a64 __builtin_mips_msub (a64, i32, i32); 34767 a64 __builtin_mips_msubu (a64, ui32, ui32); 34768 a64 __builtin_mips_mult (i32, i32); 34769 a64 __builtin_mips_multu (ui32, ui32); 34770 34771 The following built-in functions map directly to a particular MIPS DSP 34772 REV 2 instruction. Please refer to the architecture specification for 34773 details on what each instruction does. 34774 34775 v4q7 __builtin_mips_absq_s_qb (v4q7); 34776 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 34777 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 34778 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 34779 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 34780 i32 __builtin_mips_append (i32, i32, imm0_31); 34781 i32 __builtin_mips_balign (i32, i32, imm0_3); 34782 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 34783 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 34784 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 34785 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 34786 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 34787 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 34788 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 34789 q31 __builtin_mips_mulq_rs_w (q31, q31); 34790 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 34791 q31 __builtin_mips_mulq_s_w (q31, q31); 34792 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 34793 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 34794 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 34795 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 34796 i32 __builtin_mips_prepend (i32, i32, imm0_31); 34797 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 34798 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 34799 v4i8 __builtin_mips_shra_qb (v4i8, i32); 34800 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 34801 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 34802 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 34803 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 34804 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 34805 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 34806 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 34807 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 34808 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 34809 q31 __builtin_mips_addqh_w (q31, q31); 34810 q31 __builtin_mips_addqh_r_w (q31, q31); 34811 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 34812 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 34813 q31 __builtin_mips_subqh_w (q31, q31); 34814 q31 __builtin_mips_subqh_r_w (q31, q31); 34815 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 34816 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 34817 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 34818 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 34819 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 34820 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 34821 34822 34823 File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 34824 34825 6.54.8 MIPS Paired-Single Support 34826 --------------------------------- 34827 34828 The MIPS64 architecture includes a number of instructions that operate 34829 on pairs of single-precision floating-point values. Each pair is 34830 packed into a 64-bit floating-point register, with one element being 34831 designated the "upper half" and the other being designated the "lower 34832 half". 34833 34834 GCC supports paired-single operations using both the generic vector 34835 extensions (*note Vector Extensions::) and a collection of 34836 MIPS-specific built-in functions. Both kinds of support are enabled by 34837 the `-mpaired-single' command-line option. 34838 34839 The vector type associated with paired-single values is usually called 34840 `v2sf'. It can be defined in C as follows: 34841 34842 typedef float v2sf __attribute__ ((vector_size (8))); 34843 34844 `v2sf' values are initialized in the same way as aggregates. For 34845 example: 34846 34847 v2sf a = {1.5, 9.1}; 34848 v2sf b; 34849 float e, f; 34850 b = (v2sf) {e, f}; 34851 34852 _Note:_ The CPU's endianness determines which value is stored in the 34853 upper half of a register and which value is stored in the lower half. 34854 On little-endian targets, the first value is the lower one and the 34855 second value is the upper one. The opposite order applies to 34856 big-endian targets. For example, the code above will set the lower 34857 half of `a' to `1.5' on little-endian targets and `9.1' on big-endian 34858 targets. 34859 34860 34861 File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 34862 34863 6.54.9 MIPS Loongson Built-in Functions 34864 --------------------------------------- 34865 34866 GCC provides intrinsics to access the SIMD instructions provided by the 34867 ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 34868 available after inclusion of the `loongson.h' header file, operate on 34869 the following 64-bit vector types: 34870 34871 * `uint8x8_t', a vector of eight unsigned 8-bit integers; 34872 34873 * `uint16x4_t', a vector of four unsigned 16-bit integers; 34874 34875 * `uint32x2_t', a vector of two unsigned 32-bit integers; 34876 34877 * `int8x8_t', a vector of eight signed 8-bit integers; 34878 34879 * `int16x4_t', a vector of four signed 16-bit integers; 34880 34881 * `int32x2_t', a vector of two signed 32-bit integers. 34882 34883 The intrinsics provided are listed below; each is named after the 34884 machine instruction to which it corresponds, with suffixes added as 34885 appropriate to distinguish intrinsics that expand to the same machine 34886 instruction yet have different argument types. Refer to the 34887 architecture documentation for a description of the functionality of 34888 each instruction. 34889 34890 int16x4_t packsswh (int32x2_t s, int32x2_t t); 34891 int8x8_t packsshb (int16x4_t s, int16x4_t t); 34892 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 34893 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 34894 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 34895 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 34896 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 34897 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 34898 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 34899 uint64_t paddd_u (uint64_t s, uint64_t t); 34900 int64_t paddd_s (int64_t s, int64_t t); 34901 int16x4_t paddsh (int16x4_t s, int16x4_t t); 34902 int8x8_t paddsb (int8x8_t s, int8x8_t t); 34903 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 34904 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 34905 uint64_t pandn_ud (uint64_t s, uint64_t t); 34906 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 34907 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 34908 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 34909 int64_t pandn_sd (int64_t s, int64_t t); 34910 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 34911 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 34912 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 34913 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 34914 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 34915 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 34916 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 34917 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 34918 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 34919 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 34920 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 34921 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 34922 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 34923 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 34924 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 34925 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 34926 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 34927 uint16x4_t pextrh_u (uint16x4_t s, int field); 34928 int16x4_t pextrh_s (int16x4_t s, int field); 34929 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 34930 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 34931 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 34932 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 34933 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 34934 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 34935 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 34936 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 34937 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 34938 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 34939 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 34940 int16x4_t pminsh (int16x4_t s, int16x4_t t); 34941 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 34942 uint8x8_t pmovmskb_u (uint8x8_t s); 34943 int8x8_t pmovmskb_s (int8x8_t s); 34944 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 34945 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 34946 int16x4_t pmullh (int16x4_t s, int16x4_t t); 34947 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 34948 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 34949 uint16x4_t biadd (uint8x8_t s); 34950 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 34951 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 34952 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 34953 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 34954 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 34955 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 34956 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 34957 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 34958 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 34959 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 34960 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 34961 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 34962 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 34963 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 34964 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 34965 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 34966 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 34967 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 34968 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 34969 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 34970 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 34971 uint64_t psubd_u (uint64_t s, uint64_t t); 34972 int64_t psubd_s (int64_t s, int64_t t); 34973 int16x4_t psubsh (int16x4_t s, int16x4_t t); 34974 int8x8_t psubsb (int8x8_t s, int8x8_t t); 34975 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 34976 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 34977 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 34978 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 34979 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 34980 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 34981 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 34982 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 34983 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 34984 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 34985 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 34986 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 34987 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 34988 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 34989 34990 * Menu: 34991 34992 * Paired-Single Arithmetic:: 34993 * Paired-Single Built-in Functions:: 34994 * MIPS-3D Built-in Functions:: 34995 34996 34997 File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 34998 34999 6.54.9.1 Paired-Single Arithmetic 35000 ................................. 35001 35002 The table below lists the `v2sf' operations for which hardware support 35003 exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 35004 value. 35005 35006 C code MIPS instruction 35007 `a + b' `add.ps' 35008 `a - b' `sub.ps' 35009 `-a' `neg.ps' 35010 `a * b' `mul.ps' 35011 `a * b + c' `madd.ps' 35012 `a * b - c' `msub.ps' 35013 `-(a * b + c)' `nmadd.ps' 35014 `-(a * b - c)' `nmsub.ps' 35015 `x ? a : b' `movn.ps'/`movz.ps' 35016 35017 Note that the multiply-accumulate instructions can be disabled using 35018 the command-line option `-mno-fused-madd'. 35019 35020 35021 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 35022 35023 6.54.9.2 Paired-Single Built-in Functions 35024 ......................................... 35025 35026 The following paired-single functions map directly to a particular MIPS 35027 instruction. Please refer to the architecture specification for 35028 details on what each instruction does. 35029 35030 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 35031 Pair lower lower (`pll.ps'). 35032 35033 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 35034 Pair upper lower (`pul.ps'). 35035 35036 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 35037 Pair lower upper (`plu.ps'). 35038 35039 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 35040 Pair upper upper (`puu.ps'). 35041 35042 `v2sf __builtin_mips_cvt_ps_s (float, float)' 35043 Convert pair to paired single (`cvt.ps.s'). 35044 35045 `float __builtin_mips_cvt_s_pl (v2sf)' 35046 Convert pair lower to single (`cvt.s.pl'). 35047 35048 `float __builtin_mips_cvt_s_pu (v2sf)' 35049 Convert pair upper to single (`cvt.s.pu'). 35050 35051 `v2sf __builtin_mips_abs_ps (v2sf)' 35052 Absolute value (`abs.ps'). 35053 35054 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 35055 Align variable (`alnv.ps'). 35056 35057 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 35058 otherwise the result will be unpredictable. Please read the 35059 instruction description for details. 35060 35061 The following multi-instruction functions are also available. In each 35062 case, COND can be any of the 16 floating-point conditions: `f', `un', 35063 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 35064 `lt', `nge', `le' or `ngt'. 35065 35066 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 35067 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 35068 Conditional move based on floating point comparison (`c.COND.ps', 35069 `movt.ps'/`movf.ps'). 35070 35071 The `movt' functions return the value X computed by: 35072 35073 c.COND.ps CC,A,B 35074 mov.ps X,C 35075 movt.ps X,D,CC 35076 35077 The `movf' functions are similar but use `movf.ps' instead of 35078 `movt.ps'. 35079 35080 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 35081 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 35082 Comparison of two paired-single values (`c.COND.ps', 35083 `bc1t'/`bc1f'). 35084 35085 These functions compare A and B using `c.COND.ps' and return 35086 either the upper or lower half of the result. For example: 35087 35088 v2sf a, b; 35089 if (__builtin_mips_upper_c_eq_ps (a, b)) 35090 upper_halves_are_equal (); 35091 else 35092 upper_halves_are_unequal (); 35093 35094 if (__builtin_mips_lower_c_eq_ps (a, b)) 35095 lower_halves_are_equal (); 35096 else 35097 lower_halves_are_unequal (); 35098 35099 35100 File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 35101 35102 6.54.9.3 MIPS-3D Built-in Functions 35103 ................................... 35104 35105 The MIPS-3D Application-Specific Extension (ASE) includes additional 35106 paired-single instructions that are designed to improve the performance 35107 of 3D graphics operations. Support for these instructions is controlled 35108 by the `-mips3d' command-line option. 35109 35110 The functions listed below map directly to a particular MIPS-3D 35111 instruction. Please refer to the architecture specification for more 35112 details on what each instruction does. 35113 35114 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 35115 Reduction add (`addr.ps'). 35116 35117 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 35118 Reduction multiply (`mulr.ps'). 35119 35120 `v2sf __builtin_mips_cvt_pw_ps (v2sf)' 35121 Convert paired single to paired word (`cvt.pw.ps'). 35122 35123 `v2sf __builtin_mips_cvt_ps_pw (v2sf)' 35124 Convert paired word to paired single (`cvt.ps.pw'). 35125 35126 `float __builtin_mips_recip1_s (float)' 35127 `double __builtin_mips_recip1_d (double)' 35128 `v2sf __builtin_mips_recip1_ps (v2sf)' 35129 Reduced precision reciprocal (sequence step 1) (`recip1.FMT'). 35130 35131 `float __builtin_mips_recip2_s (float, float)' 35132 `double __builtin_mips_recip2_d (double, double)' 35133 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 35134 Reduced precision reciprocal (sequence step 2) (`recip2.FMT'). 35135 35136 `float __builtin_mips_rsqrt1_s (float)' 35137 `double __builtin_mips_rsqrt1_d (double)' 35138 `v2sf __builtin_mips_rsqrt1_ps (v2sf)' 35139 Reduced precision reciprocal square root (sequence step 1) 35140 (`rsqrt1.FMT'). 35141 35142 `float __builtin_mips_rsqrt2_s (float, float)' 35143 `double __builtin_mips_rsqrt2_d (double, double)' 35144 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 35145 Reduced precision reciprocal square root (sequence step 2) 35146 (`rsqrt2.FMT'). 35147 35148 The following multi-instruction functions are also available. In each 35149 case, COND can be any of the 16 floating-point conditions: `f', `un', 35150 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 35151 `lt', `nge', `le' or `ngt'. 35152 35153 `int __builtin_mips_cabs_COND_s (float A, float B)' 35154 `int __builtin_mips_cabs_COND_d (double A, double B)' 35155 Absolute comparison of two scalar values (`cabs.COND.FMT', 35156 `bc1t'/`bc1f'). 35157 35158 These functions compare A and B using `cabs.COND.s' or 35159 `cabs.COND.d' and return the result as a boolean value. For 35160 example: 35161 35162 float a, b; 35163 if (__builtin_mips_cabs_eq_s (a, b)) 35164 true (); 35165 else 35166 false (); 35167 35168 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 35169 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 35170 Absolute comparison of two paired-single values (`cabs.COND.ps', 35171 `bc1t'/`bc1f'). 35172 35173 These functions compare A and B using `cabs.COND.ps' and return 35174 either the upper or lower half of the result. For example: 35175 35176 v2sf a, b; 35177 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 35178 upper_halves_are_equal (); 35179 else 35180 upper_halves_are_unequal (); 35181 35182 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 35183 lower_halves_are_equal (); 35184 else 35185 lower_halves_are_unequal (); 35186 35187 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 35188 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 35189 Conditional move based on absolute comparison (`cabs.COND.ps', 35190 `movt.ps'/`movf.ps'). 35191 35192 The `movt' functions return the value X computed by: 35193 35194 cabs.COND.ps CC,A,B 35195 mov.ps X,C 35196 movt.ps X,D,CC 35197 35198 The `movf' functions are similar but use `movf.ps' instead of 35199 `movt.ps'. 35200 35201 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 35202 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 35203 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 35204 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 35205 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 35206 `bc1any2t'/`bc1any2f'). 35207 35208 These functions compare A and B using `c.COND.ps' or 35209 `cabs.COND.ps'. The `any' forms return true if either result is 35210 true and the `all' forms return true if both results are true. 35211 For example: 35212 35213 v2sf a, b; 35214 if (__builtin_mips_any_c_eq_ps (a, b)) 35215 one_is_true (); 35216 else 35217 both_are_false (); 35218 35219 if (__builtin_mips_all_c_eq_ps (a, b)) 35220 both_are_true (); 35221 else 35222 one_is_false (); 35223 35224 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 35225 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 35226 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 35227 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 35228 Comparison of four paired-single values 35229 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 35230 35231 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 35232 with B and to compare C with D. The `any' forms return true if 35233 any of the four results are true and the `all' forms return true 35234 if all four results are true. For example: 35235 35236 v2sf a, b, c, d; 35237 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 35238 some_are_true (); 35239 else 35240 all_are_false (); 35241 35242 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 35243 all_are_true (); 35244 else 35245 some_are_false (); 35246 35247 35248 File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 35249 35250 6.54.10 picoChip Built-in Functions 35251 ----------------------------------- 35252 35253 GCC provides an interface to selected machine instructions from the 35254 picoChip instruction set. 35255 35256 `int __builtin_sbc (int VALUE)' 35257 Sign bit count. Return the number of consecutive bits in VALUE 35258 which have the same value as the sign-bit. The result is the 35259 number of leading sign bits minus one, giving the number of 35260 redundant sign bits in VALUE. 35261 35262 `int __builtin_byteswap (int VALUE)' 35263 Byte swap. Return the result of swapping the upper and lower 35264 bytes of VALUE. 35265 35266 `int __builtin_brev (int VALUE)' 35267 Bit reversal. Return the result of reversing the bits in VALUE. 35268 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 35269 on. 35270 35271 `int __builtin_adds (int X, int Y)' 35272 Saturating addition. Return the result of adding X and Y, storing 35273 the value 32767 if the result overflows. 35274 35275 `int __builtin_subs (int X, int Y)' 35276 Saturating subtraction. Return the result of subtracting Y from 35277 X, storing the value -32768 if the result overflows. 35278 35279 `void __builtin_halt (void)' 35280 Halt. The processor will stop execution. This built-in is useful 35281 for implementing assertions. 35282 35283 35284 35285 File: gcc.info, Node: Other MIPS Built-in Functions, Next: picoChip Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 35286 35287 6.54.11 Other MIPS Built-in Functions 35288 ------------------------------------- 35289 35290 GCC provides other MIPS-specific built-in functions: 35291 35292 `void __builtin_mips_cache (int OP, const volatile void *ADDR)' 35293 Insert a `cache' instruction with operands OP and ADDR. GCC 35294 defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE' 35295 when this function is available. 35296 35297 35298 File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: RX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 35299 35300 6.54.12 PowerPC AltiVec Built-in Functions 35301 ------------------------------------------ 35302 35303 GCC provides an interface for the PowerPC family of processors to access 35304 the AltiVec operations described in Motorola's AltiVec Programming 35305 Interface Manual. The interface is made available by including 35306 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 35307 supports the following vector types. 35308 35309 vector unsigned char 35310 vector signed char 35311 vector bool char 35312 35313 vector unsigned short 35314 vector signed short 35315 vector bool short 35316 vector pixel 35317 35318 vector unsigned int 35319 vector signed int 35320 vector bool int 35321 vector float 35322 35323 If `-mvsx' is used the following additional vector types are 35324 implemented. 35325 35326 vector unsigned long 35327 vector signed long 35328 vector double 35329 35330 The long types are only implemented for 64-bit code generation, and 35331 the long type is only used in the floating point/integer conversion 35332 instructions. 35333 35334 GCC's implementation of the high-level language interface available 35335 from C and C++ code differs from Motorola's documentation in several 35336 ways. 35337 35338 * A vector constant is a list of constant expressions within curly 35339 braces. 35340 35341 * A vector initializer requires no cast if the vector constant is of 35342 the same type as the variable it is initializing. 35343 35344 * If `signed' or `unsigned' is omitted, the signedness of the vector 35345 type is the default signedness of the base type. The default 35346 varies depending on the operating system, so a portable program 35347 should always specify the signedness. 35348 35349 * Compiling with `-maltivec' adds keywords `__vector', `vector', 35350 `__pixel', `pixel', `__bool' and `bool'. When compiling ISO C, 35351 the context-sensitive substitution of the keywords `vector', 35352 `pixel' and `bool' is disabled. To use them, you must include 35353 `<altivec.h>' instead. 35354 35355 * GCC allows using a `typedef' name as the type specifier for a 35356 vector type. 35357 35358 * For C, overloaded functions are implemented with macros so the 35359 following does not work: 35360 35361 vec_add ((vector signed int){1, 2, 3, 4}, foo); 35362 35363 Since `vec_add' is a macro, the vector constant in the example is 35364 treated as four separate arguments. Wrap the entire argument in 35365 parentheses for this to work. 35366 35367 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 35368 GCC uses built-in functions to achieve the functionality in the 35369 aforementioned header file, but they are not supported and are subject 35370 to change without notice. 35371 35372 The following interfaces are supported for the generic and specific 35373 AltiVec operations and the AltiVec predicates. In cases where there is 35374 a direct mapping between generic and specific operations, only the 35375 generic names are shown here, although the specific operations can also 35376 be used. 35377 35378 Arguments that are documented as `const int' require literal integral 35379 values within the range required for that operation. 35380 35381 vector signed char vec_abs (vector signed char); 35382 vector signed short vec_abs (vector signed short); 35383 vector signed int vec_abs (vector signed int); 35384 vector float vec_abs (vector float); 35385 35386 vector signed char vec_abss (vector signed char); 35387 vector signed short vec_abss (vector signed short); 35388 vector signed int vec_abss (vector signed int); 35389 35390 vector signed char vec_add (vector bool char, vector signed char); 35391 vector signed char vec_add (vector signed char, vector bool char); 35392 vector signed char vec_add (vector signed char, vector signed char); 35393 vector unsigned char vec_add (vector bool char, vector unsigned char); 35394 vector unsigned char vec_add (vector unsigned char, vector bool char); 35395 vector unsigned char vec_add (vector unsigned char, 35396 vector unsigned char); 35397 vector signed short vec_add (vector bool short, vector signed short); 35398 vector signed short vec_add (vector signed short, vector bool short); 35399 vector signed short vec_add (vector signed short, vector signed short); 35400 vector unsigned short vec_add (vector bool short, 35401 vector unsigned short); 35402 vector unsigned short vec_add (vector unsigned short, 35403 vector bool short); 35404 vector unsigned short vec_add (vector unsigned short, 35405 vector unsigned short); 35406 vector signed int vec_add (vector bool int, vector signed int); 35407 vector signed int vec_add (vector signed int, vector bool int); 35408 vector signed int vec_add (vector signed int, vector signed int); 35409 vector unsigned int vec_add (vector bool int, vector unsigned int); 35410 vector unsigned int vec_add (vector unsigned int, vector bool int); 35411 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 35412 vector float vec_add (vector float, vector float); 35413 35414 vector float vec_vaddfp (vector float, vector float); 35415 35416 vector signed int vec_vadduwm (vector bool int, vector signed int); 35417 vector signed int vec_vadduwm (vector signed int, vector bool int); 35418 vector signed int vec_vadduwm (vector signed int, vector signed int); 35419 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 35420 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 35421 vector unsigned int vec_vadduwm (vector unsigned int, 35422 vector unsigned int); 35423 35424 vector signed short vec_vadduhm (vector bool short, 35425 vector signed short); 35426 vector signed short vec_vadduhm (vector signed short, 35427 vector bool short); 35428 vector signed short vec_vadduhm (vector signed short, 35429 vector signed short); 35430 vector unsigned short vec_vadduhm (vector bool short, 35431 vector unsigned short); 35432 vector unsigned short vec_vadduhm (vector unsigned short, 35433 vector bool short); 35434 vector unsigned short vec_vadduhm (vector unsigned short, 35435 vector unsigned short); 35436 35437 vector signed char vec_vaddubm (vector bool char, vector signed char); 35438 vector signed char vec_vaddubm (vector signed char, vector bool char); 35439 vector signed char vec_vaddubm (vector signed char, vector signed char); 35440 vector unsigned char vec_vaddubm (vector bool char, 35441 vector unsigned char); 35442 vector unsigned char vec_vaddubm (vector unsigned char, 35443 vector bool char); 35444 vector unsigned char vec_vaddubm (vector unsigned char, 35445 vector unsigned char); 35446 35447 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 35448 35449 vector unsigned char vec_adds (vector bool char, vector unsigned char); 35450 vector unsigned char vec_adds (vector unsigned char, vector bool char); 35451 vector unsigned char vec_adds (vector unsigned char, 35452 vector unsigned char); 35453 vector signed char vec_adds (vector bool char, vector signed char); 35454 vector signed char vec_adds (vector signed char, vector bool char); 35455 vector signed char vec_adds (vector signed char, vector signed char); 35456 vector unsigned short vec_adds (vector bool short, 35457 vector unsigned short); 35458 vector unsigned short vec_adds (vector unsigned short, 35459 vector bool short); 35460 vector unsigned short vec_adds (vector unsigned short, 35461 vector unsigned short); 35462 vector signed short vec_adds (vector bool short, vector signed short); 35463 vector signed short vec_adds (vector signed short, vector bool short); 35464 vector signed short vec_adds (vector signed short, vector signed short); 35465 vector unsigned int vec_adds (vector bool int, vector unsigned int); 35466 vector unsigned int vec_adds (vector unsigned int, vector bool int); 35467 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 35468 vector signed int vec_adds (vector bool int, vector signed int); 35469 vector signed int vec_adds (vector signed int, vector bool int); 35470 vector signed int vec_adds (vector signed int, vector signed int); 35471 35472 vector signed int vec_vaddsws (vector bool int, vector signed int); 35473 vector signed int vec_vaddsws (vector signed int, vector bool int); 35474 vector signed int vec_vaddsws (vector signed int, vector signed int); 35475 35476 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 35477 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 35478 vector unsigned int vec_vadduws (vector unsigned int, 35479 vector unsigned int); 35480 35481 vector signed short vec_vaddshs (vector bool short, 35482 vector signed short); 35483 vector signed short vec_vaddshs (vector signed short, 35484 vector bool short); 35485 vector signed short vec_vaddshs (vector signed short, 35486 vector signed short); 35487 35488 vector unsigned short vec_vadduhs (vector bool short, 35489 vector unsigned short); 35490 vector unsigned short vec_vadduhs (vector unsigned short, 35491 vector bool short); 35492 vector unsigned short vec_vadduhs (vector unsigned short, 35493 vector unsigned short); 35494 35495 vector signed char vec_vaddsbs (vector bool char, vector signed char); 35496 vector signed char vec_vaddsbs (vector signed char, vector bool char); 35497 vector signed char vec_vaddsbs (vector signed char, vector signed char); 35498 35499 vector unsigned char vec_vaddubs (vector bool char, 35500 vector unsigned char); 35501 vector unsigned char vec_vaddubs (vector unsigned char, 35502 vector bool char); 35503 vector unsigned char vec_vaddubs (vector unsigned char, 35504 vector unsigned char); 35505 35506 vector float vec_and (vector float, vector float); 35507 vector float vec_and (vector float, vector bool int); 35508 vector float vec_and (vector bool int, vector float); 35509 vector bool int vec_and (vector bool int, vector bool int); 35510 vector signed int vec_and (vector bool int, vector signed int); 35511 vector signed int vec_and (vector signed int, vector bool int); 35512 vector signed int vec_and (vector signed int, vector signed int); 35513 vector unsigned int vec_and (vector bool int, vector unsigned int); 35514 vector unsigned int vec_and (vector unsigned int, vector bool int); 35515 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 35516 vector bool short vec_and (vector bool short, vector bool short); 35517 vector signed short vec_and (vector bool short, vector signed short); 35518 vector signed short vec_and (vector signed short, vector bool short); 35519 vector signed short vec_and (vector signed short, vector signed short); 35520 vector unsigned short vec_and (vector bool short, 35521 vector unsigned short); 35522 vector unsigned short vec_and (vector unsigned short, 35523 vector bool short); 35524 vector unsigned short vec_and (vector unsigned short, 35525 vector unsigned short); 35526 vector signed char vec_and (vector bool char, vector signed char); 35527 vector bool char vec_and (vector bool char, vector bool char); 35528 vector signed char vec_and (vector signed char, vector bool char); 35529 vector signed char vec_and (vector signed char, vector signed char); 35530 vector unsigned char vec_and (vector bool char, vector unsigned char); 35531 vector unsigned char vec_and (vector unsigned char, vector bool char); 35532 vector unsigned char vec_and (vector unsigned char, 35533 vector unsigned char); 35534 35535 vector float vec_andc (vector float, vector float); 35536 vector float vec_andc (vector float, vector bool int); 35537 vector float vec_andc (vector bool int, vector float); 35538 vector bool int vec_andc (vector bool int, vector bool int); 35539 vector signed int vec_andc (vector bool int, vector signed int); 35540 vector signed int vec_andc (vector signed int, vector bool int); 35541 vector signed int vec_andc (vector signed int, vector signed int); 35542 vector unsigned int vec_andc (vector bool int, vector unsigned int); 35543 vector unsigned int vec_andc (vector unsigned int, vector bool int); 35544 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 35545 vector bool short vec_andc (vector bool short, vector bool short); 35546 vector signed short vec_andc (vector bool short, vector signed short); 35547 vector signed short vec_andc (vector signed short, vector bool short); 35548 vector signed short vec_andc (vector signed short, vector signed short); 35549 vector unsigned short vec_andc (vector bool short, 35550 vector unsigned short); 35551 vector unsigned short vec_andc (vector unsigned short, 35552 vector bool short); 35553 vector unsigned short vec_andc (vector unsigned short, 35554 vector unsigned short); 35555 vector signed char vec_andc (vector bool char, vector signed char); 35556 vector bool char vec_andc (vector bool char, vector bool char); 35557 vector signed char vec_andc (vector signed char, vector bool char); 35558 vector signed char vec_andc (vector signed char, vector signed char); 35559 vector unsigned char vec_andc (vector bool char, vector unsigned char); 35560 vector unsigned char vec_andc (vector unsigned char, vector bool char); 35561 vector unsigned char vec_andc (vector unsigned char, 35562 vector unsigned char); 35563 35564 vector unsigned char vec_avg (vector unsigned char, 35565 vector unsigned char); 35566 vector signed char vec_avg (vector signed char, vector signed char); 35567 vector unsigned short vec_avg (vector unsigned short, 35568 vector unsigned short); 35569 vector signed short vec_avg (vector signed short, vector signed short); 35570 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 35571 vector signed int vec_avg (vector signed int, vector signed int); 35572 35573 vector signed int vec_vavgsw (vector signed int, vector signed int); 35574 35575 vector unsigned int vec_vavguw (vector unsigned int, 35576 vector unsigned int); 35577 35578 vector signed short vec_vavgsh (vector signed short, 35579 vector signed short); 35580 35581 vector unsigned short vec_vavguh (vector unsigned short, 35582 vector unsigned short); 35583 35584 vector signed char vec_vavgsb (vector signed char, vector signed char); 35585 35586 vector unsigned char vec_vavgub (vector unsigned char, 35587 vector unsigned char); 35588 35589 vector float vec_copysign (vector float); 35590 35591 vector float vec_ceil (vector float); 35592 35593 vector signed int vec_cmpb (vector float, vector float); 35594 35595 vector bool char vec_cmpeq (vector signed char, vector signed char); 35596 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 35597 vector bool short vec_cmpeq (vector signed short, vector signed short); 35598 vector bool short vec_cmpeq (vector unsigned short, 35599 vector unsigned short); 35600 vector bool int vec_cmpeq (vector signed int, vector signed int); 35601 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 35602 vector bool int vec_cmpeq (vector float, vector float); 35603 35604 vector bool int vec_vcmpeqfp (vector float, vector float); 35605 35606 vector bool int vec_vcmpequw (vector signed int, vector signed int); 35607 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 35608 35609 vector bool short vec_vcmpequh (vector signed short, 35610 vector signed short); 35611 vector bool short vec_vcmpequh (vector unsigned short, 35612 vector unsigned short); 35613 35614 vector bool char vec_vcmpequb (vector signed char, vector signed char); 35615 vector bool char vec_vcmpequb (vector unsigned char, 35616 vector unsigned char); 35617 35618 vector bool int vec_cmpge (vector float, vector float); 35619 35620 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 35621 vector bool char vec_cmpgt (vector signed char, vector signed char); 35622 vector bool short vec_cmpgt (vector unsigned short, 35623 vector unsigned short); 35624 vector bool short vec_cmpgt (vector signed short, vector signed short); 35625 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 35626 vector bool int vec_cmpgt (vector signed int, vector signed int); 35627 vector bool int vec_cmpgt (vector float, vector float); 35628 35629 vector bool int vec_vcmpgtfp (vector float, vector float); 35630 35631 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 35632 35633 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 35634 35635 vector bool short vec_vcmpgtsh (vector signed short, 35636 vector signed short); 35637 35638 vector bool short vec_vcmpgtuh (vector unsigned short, 35639 vector unsigned short); 35640 35641 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 35642 35643 vector bool char vec_vcmpgtub (vector unsigned char, 35644 vector unsigned char); 35645 35646 vector bool int vec_cmple (vector float, vector float); 35647 35648 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 35649 vector bool char vec_cmplt (vector signed char, vector signed char); 35650 vector bool short vec_cmplt (vector unsigned short, 35651 vector unsigned short); 35652 vector bool short vec_cmplt (vector signed short, vector signed short); 35653 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 35654 vector bool int vec_cmplt (vector signed int, vector signed int); 35655 vector bool int vec_cmplt (vector float, vector float); 35656 35657 vector float vec_ctf (vector unsigned int, const int); 35658 vector float vec_ctf (vector signed int, const int); 35659 35660 vector float vec_vcfsx (vector signed int, const int); 35661 35662 vector float vec_vcfux (vector unsigned int, const int); 35663 35664 vector signed int vec_cts (vector float, const int); 35665 35666 vector unsigned int vec_ctu (vector float, const int); 35667 35668 void vec_dss (const int); 35669 35670 void vec_dssall (void); 35671 35672 void vec_dst (const vector unsigned char *, int, const int); 35673 void vec_dst (const vector signed char *, int, const int); 35674 void vec_dst (const vector bool char *, int, const int); 35675 void vec_dst (const vector unsigned short *, int, const int); 35676 void vec_dst (const vector signed short *, int, const int); 35677 void vec_dst (const vector bool short *, int, const int); 35678 void vec_dst (const vector pixel *, int, const int); 35679 void vec_dst (const vector unsigned int *, int, const int); 35680 void vec_dst (const vector signed int *, int, const int); 35681 void vec_dst (const vector bool int *, int, const int); 35682 void vec_dst (const vector float *, int, const int); 35683 void vec_dst (const unsigned char *, int, const int); 35684 void vec_dst (const signed char *, int, const int); 35685 void vec_dst (const unsigned short *, int, const int); 35686 void vec_dst (const short *, int, const int); 35687 void vec_dst (const unsigned int *, int, const int); 35688 void vec_dst (const int *, int, const int); 35689 void vec_dst (const unsigned long *, int, const int); 35690 void vec_dst (const long *, int, const int); 35691 void vec_dst (const float *, int, const int); 35692 35693 void vec_dstst (const vector unsigned char *, int, const int); 35694 void vec_dstst (const vector signed char *, int, const int); 35695 void vec_dstst (const vector bool char *, int, const int); 35696 void vec_dstst (const vector unsigned short *, int, const int); 35697 void vec_dstst (const vector signed short *, int, const int); 35698 void vec_dstst (const vector bool short *, int, const int); 35699 void vec_dstst (const vector pixel *, int, const int); 35700 void vec_dstst (const vector unsigned int *, int, const int); 35701 void vec_dstst (const vector signed int *, int, const int); 35702 void vec_dstst (const vector bool int *, int, const int); 35703 void vec_dstst (const vector float *, int, const int); 35704 void vec_dstst (const unsigned char *, int, const int); 35705 void vec_dstst (const signed char *, int, const int); 35706 void vec_dstst (const unsigned short *, int, const int); 35707 void vec_dstst (const short *, int, const int); 35708 void vec_dstst (const unsigned int *, int, const int); 35709 void vec_dstst (const int *, int, const int); 35710 void vec_dstst (const unsigned long *, int, const int); 35711 void vec_dstst (const long *, int, const int); 35712 void vec_dstst (const float *, int, const int); 35713 35714 void vec_dststt (const vector unsigned char *, int, const int); 35715 void vec_dststt (const vector signed char *, int, const int); 35716 void vec_dststt (const vector bool char *, int, const int); 35717 void vec_dststt (const vector unsigned short *, int, const int); 35718 void vec_dststt (const vector signed short *, int, const int); 35719 void vec_dststt (const vector bool short *, int, const int); 35720 void vec_dststt (const vector pixel *, int, const int); 35721 void vec_dststt (const vector unsigned int *, int, const int); 35722 void vec_dststt (const vector signed int *, int, const int); 35723 void vec_dststt (const vector bool int *, int, const int); 35724 void vec_dststt (const vector float *, int, const int); 35725 void vec_dststt (const unsigned char *, int, const int); 35726 void vec_dststt (const signed char *, int, const int); 35727 void vec_dststt (const unsigned short *, int, const int); 35728 void vec_dststt (const short *, int, const int); 35729 void vec_dststt (const unsigned int *, int, const int); 35730 void vec_dststt (const int *, int, const int); 35731 void vec_dststt (const unsigned long *, int, const int); 35732 void vec_dststt (const long *, int, const int); 35733 void vec_dststt (const float *, int, const int); 35734 35735 void vec_dstt (const vector unsigned char *, int, const int); 35736 void vec_dstt (const vector signed char *, int, const int); 35737 void vec_dstt (const vector bool char *, int, const int); 35738 void vec_dstt (const vector unsigned short *, int, const int); 35739 void vec_dstt (const vector signed short *, int, const int); 35740 void vec_dstt (const vector bool short *, int, const int); 35741 void vec_dstt (const vector pixel *, int, const int); 35742 void vec_dstt (const vector unsigned int *, int, const int); 35743 void vec_dstt (const vector signed int *, int, const int); 35744 void vec_dstt (const vector bool int *, int, const int); 35745 void vec_dstt (const vector float *, int, const int); 35746 void vec_dstt (const unsigned char *, int, const int); 35747 void vec_dstt (const signed char *, int, const int); 35748 void vec_dstt (const unsigned short *, int, const int); 35749 void vec_dstt (const short *, int, const int); 35750 void vec_dstt (const unsigned int *, int, const int); 35751 void vec_dstt (const int *, int, const int); 35752 void vec_dstt (const unsigned long *, int, const int); 35753 void vec_dstt (const long *, int, const int); 35754 void vec_dstt (const float *, int, const int); 35755 35756 vector float vec_expte (vector float); 35757 35758 vector float vec_floor (vector float); 35759 35760 vector float vec_ld (int, const vector float *); 35761 vector float vec_ld (int, const float *); 35762 vector bool int vec_ld (int, const vector bool int *); 35763 vector signed int vec_ld (int, const vector signed int *); 35764 vector signed int vec_ld (int, const int *); 35765 vector signed int vec_ld (int, const long *); 35766 vector unsigned int vec_ld (int, const vector unsigned int *); 35767 vector unsigned int vec_ld (int, const unsigned int *); 35768 vector unsigned int vec_ld (int, const unsigned long *); 35769 vector bool short vec_ld (int, const vector bool short *); 35770 vector pixel vec_ld (int, const vector pixel *); 35771 vector signed short vec_ld (int, const vector signed short *); 35772 vector signed short vec_ld (int, const short *); 35773 vector unsigned short vec_ld (int, const vector unsigned short *); 35774 vector unsigned short vec_ld (int, const unsigned short *); 35775 vector bool char vec_ld (int, const vector bool char *); 35776 vector signed char vec_ld (int, const vector signed char *); 35777 vector signed char vec_ld (int, const signed char *); 35778 vector unsigned char vec_ld (int, const vector unsigned char *); 35779 vector unsigned char vec_ld (int, const unsigned char *); 35780 35781 vector signed char vec_lde (int, const signed char *); 35782 vector unsigned char vec_lde (int, const unsigned char *); 35783 vector signed short vec_lde (int, const short *); 35784 vector unsigned short vec_lde (int, const unsigned short *); 35785 vector float vec_lde (int, const float *); 35786 vector signed int vec_lde (int, const int *); 35787 vector unsigned int vec_lde (int, const unsigned int *); 35788 vector signed int vec_lde (int, const long *); 35789 vector unsigned int vec_lde (int, const unsigned long *); 35790 35791 vector float vec_lvewx (int, float *); 35792 vector signed int vec_lvewx (int, int *); 35793 vector unsigned int vec_lvewx (int, unsigned int *); 35794 vector signed int vec_lvewx (int, long *); 35795 vector unsigned int vec_lvewx (int, unsigned long *); 35796 35797 vector signed short vec_lvehx (int, short *); 35798 vector unsigned short vec_lvehx (int, unsigned short *); 35799 35800 vector signed char vec_lvebx (int, char *); 35801 vector unsigned char vec_lvebx (int, unsigned char *); 35802 35803 vector float vec_ldl (int, const vector float *); 35804 vector float vec_ldl (int, const float *); 35805 vector bool int vec_ldl (int, const vector bool int *); 35806 vector signed int vec_ldl (int, const vector signed int *); 35807 vector signed int vec_ldl (int, const int *); 35808 vector signed int vec_ldl (int, const long *); 35809 vector unsigned int vec_ldl (int, const vector unsigned int *); 35810 vector unsigned int vec_ldl (int, const unsigned int *); 35811 vector unsigned int vec_ldl (int, const unsigned long *); 35812 vector bool short vec_ldl (int, const vector bool short *); 35813 vector pixel vec_ldl (int, const vector pixel *); 35814 vector signed short vec_ldl (int, const vector signed short *); 35815 vector signed short vec_ldl (int, const short *); 35816 vector unsigned short vec_ldl (int, const vector unsigned short *); 35817 vector unsigned short vec_ldl (int, const unsigned short *); 35818 vector bool char vec_ldl (int, const vector bool char *); 35819 vector signed char vec_ldl (int, const vector signed char *); 35820 vector signed char vec_ldl (int, const signed char *); 35821 vector unsigned char vec_ldl (int, const vector unsigned char *); 35822 vector unsigned char vec_ldl (int, const unsigned char *); 35823 35824 vector float vec_loge (vector float); 35825 35826 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 35827 vector unsigned char vec_lvsl (int, const volatile signed char *); 35828 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 35829 vector unsigned char vec_lvsl (int, const volatile short *); 35830 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 35831 vector unsigned char vec_lvsl (int, const volatile int *); 35832 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 35833 vector unsigned char vec_lvsl (int, const volatile long *); 35834 vector unsigned char vec_lvsl (int, const volatile float *); 35835 35836 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 35837 vector unsigned char vec_lvsr (int, const volatile signed char *); 35838 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 35839 vector unsigned char vec_lvsr (int, const volatile short *); 35840 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 35841 vector unsigned char vec_lvsr (int, const volatile int *); 35842 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 35843 vector unsigned char vec_lvsr (int, const volatile long *); 35844 vector unsigned char vec_lvsr (int, const volatile float *); 35845 35846 vector float vec_madd (vector float, vector float, vector float); 35847 35848 vector signed short vec_madds (vector signed short, 35849 vector signed short, 35850 vector signed short); 35851 35852 vector unsigned char vec_max (vector bool char, vector unsigned char); 35853 vector unsigned char vec_max (vector unsigned char, vector bool char); 35854 vector unsigned char vec_max (vector unsigned char, 35855 vector unsigned char); 35856 vector signed char vec_max (vector bool char, vector signed char); 35857 vector signed char vec_max (vector signed char, vector bool char); 35858 vector signed char vec_max (vector signed char, vector signed char); 35859 vector unsigned short vec_max (vector bool short, 35860 vector unsigned short); 35861 vector unsigned short vec_max (vector unsigned short, 35862 vector bool short); 35863 vector unsigned short vec_max (vector unsigned short, 35864 vector unsigned short); 35865 vector signed short vec_max (vector bool short, vector signed short); 35866 vector signed short vec_max (vector signed short, vector bool short); 35867 vector signed short vec_max (vector signed short, vector signed short); 35868 vector unsigned int vec_max (vector bool int, vector unsigned int); 35869 vector unsigned int vec_max (vector unsigned int, vector bool int); 35870 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 35871 vector signed int vec_max (vector bool int, vector signed int); 35872 vector signed int vec_max (vector signed int, vector bool int); 35873 vector signed int vec_max (vector signed int, vector signed int); 35874 vector float vec_max (vector float, vector float); 35875 35876 vector float vec_vmaxfp (vector float, vector float); 35877 35878 vector signed int vec_vmaxsw (vector bool int, vector signed int); 35879 vector signed int vec_vmaxsw (vector signed int, vector bool int); 35880 vector signed int vec_vmaxsw (vector signed int, vector signed int); 35881 35882 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 35883 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 35884 vector unsigned int vec_vmaxuw (vector unsigned int, 35885 vector unsigned int); 35886 35887 vector signed short vec_vmaxsh (vector bool short, vector signed short); 35888 vector signed short vec_vmaxsh (vector signed short, vector bool short); 35889 vector signed short vec_vmaxsh (vector signed short, 35890 vector signed short); 35891 35892 vector unsigned short vec_vmaxuh (vector bool short, 35893 vector unsigned short); 35894 vector unsigned short vec_vmaxuh (vector unsigned short, 35895 vector bool short); 35896 vector unsigned short vec_vmaxuh (vector unsigned short, 35897 vector unsigned short); 35898 35899 vector signed char vec_vmaxsb (vector bool char, vector signed char); 35900 vector signed char vec_vmaxsb (vector signed char, vector bool char); 35901 vector signed char vec_vmaxsb (vector signed char, vector signed char); 35902 35903 vector unsigned char vec_vmaxub (vector bool char, 35904 vector unsigned char); 35905 vector unsigned char vec_vmaxub (vector unsigned char, 35906 vector bool char); 35907 vector unsigned char vec_vmaxub (vector unsigned char, 35908 vector unsigned char); 35909 35910 vector bool char vec_mergeh (vector bool char, vector bool char); 35911 vector signed char vec_mergeh (vector signed char, vector signed char); 35912 vector unsigned char vec_mergeh (vector unsigned char, 35913 vector unsigned char); 35914 vector bool short vec_mergeh (vector bool short, vector bool short); 35915 vector pixel vec_mergeh (vector pixel, vector pixel); 35916 vector signed short vec_mergeh (vector signed short, 35917 vector signed short); 35918 vector unsigned short vec_mergeh (vector unsigned short, 35919 vector unsigned short); 35920 vector float vec_mergeh (vector float, vector float); 35921 vector bool int vec_mergeh (vector bool int, vector bool int); 35922 vector signed int vec_mergeh (vector signed int, vector signed int); 35923 vector unsigned int vec_mergeh (vector unsigned int, 35924 vector unsigned int); 35925 35926 vector float vec_vmrghw (vector float, vector float); 35927 vector bool int vec_vmrghw (vector bool int, vector bool int); 35928 vector signed int vec_vmrghw (vector signed int, vector signed int); 35929 vector unsigned int vec_vmrghw (vector unsigned int, 35930 vector unsigned int); 35931 35932 vector bool short vec_vmrghh (vector bool short, vector bool short); 35933 vector signed short vec_vmrghh (vector signed short, 35934 vector signed short); 35935 vector unsigned short vec_vmrghh (vector unsigned short, 35936 vector unsigned short); 35937 vector pixel vec_vmrghh (vector pixel, vector pixel); 35938 35939 vector bool char vec_vmrghb (vector bool char, vector bool char); 35940 vector signed char vec_vmrghb (vector signed char, vector signed char); 35941 vector unsigned char vec_vmrghb (vector unsigned char, 35942 vector unsigned char); 35943 35944 vector bool char vec_mergel (vector bool char, vector bool char); 35945 vector signed char vec_mergel (vector signed char, vector signed char); 35946 vector unsigned char vec_mergel (vector unsigned char, 35947 vector unsigned char); 35948 vector bool short vec_mergel (vector bool short, vector bool short); 35949 vector pixel vec_mergel (vector pixel, vector pixel); 35950 vector signed short vec_mergel (vector signed short, 35951 vector signed short); 35952 vector unsigned short vec_mergel (vector unsigned short, 35953 vector unsigned short); 35954 vector float vec_mergel (vector float, vector float); 35955 vector bool int vec_mergel (vector bool int, vector bool int); 35956 vector signed int vec_mergel (vector signed int, vector signed int); 35957 vector unsigned int vec_mergel (vector unsigned int, 35958 vector unsigned int); 35959 35960 vector float vec_vmrglw (vector float, vector float); 35961 vector signed int vec_vmrglw (vector signed int, vector signed int); 35962 vector unsigned int vec_vmrglw (vector unsigned int, 35963 vector unsigned int); 35964 vector bool int vec_vmrglw (vector bool int, vector bool int); 35965 35966 vector bool short vec_vmrglh (vector bool short, vector bool short); 35967 vector signed short vec_vmrglh (vector signed short, 35968 vector signed short); 35969 vector unsigned short vec_vmrglh (vector unsigned short, 35970 vector unsigned short); 35971 vector pixel vec_vmrglh (vector pixel, vector pixel); 35972 35973 vector bool char vec_vmrglb (vector bool char, vector bool char); 35974 vector signed char vec_vmrglb (vector signed char, vector signed char); 35975 vector unsigned char vec_vmrglb (vector unsigned char, 35976 vector unsigned char); 35977 35978 vector unsigned short vec_mfvscr (void); 35979 35980 vector unsigned char vec_min (vector bool char, vector unsigned char); 35981 vector unsigned char vec_min (vector unsigned char, vector bool char); 35982 vector unsigned char vec_min (vector unsigned char, 35983 vector unsigned char); 35984 vector signed char vec_min (vector bool char, vector signed char); 35985 vector signed char vec_min (vector signed char, vector bool char); 35986 vector signed char vec_min (vector signed char, vector signed char); 35987 vector unsigned short vec_min (vector bool short, 35988 vector unsigned short); 35989 vector unsigned short vec_min (vector unsigned short, 35990 vector bool short); 35991 vector unsigned short vec_min (vector unsigned short, 35992 vector unsigned short); 35993 vector signed short vec_min (vector bool short, vector signed short); 35994 vector signed short vec_min (vector signed short, vector bool short); 35995 vector signed short vec_min (vector signed short, vector signed short); 35996 vector unsigned int vec_min (vector bool int, vector unsigned int); 35997 vector unsigned int vec_min (vector unsigned int, vector bool int); 35998 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 35999 vector signed int vec_min (vector bool int, vector signed int); 36000 vector signed int vec_min (vector signed int, vector bool int); 36001 vector signed int vec_min (vector signed int, vector signed int); 36002 vector float vec_min (vector float, vector float); 36003 36004 vector float vec_vminfp (vector float, vector float); 36005 36006 vector signed int vec_vminsw (vector bool int, vector signed int); 36007 vector signed int vec_vminsw (vector signed int, vector bool int); 36008 vector signed int vec_vminsw (vector signed int, vector signed int); 36009 36010 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 36011 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 36012 vector unsigned int vec_vminuw (vector unsigned int, 36013 vector unsigned int); 36014 36015 vector signed short vec_vminsh (vector bool short, vector signed short); 36016 vector signed short vec_vminsh (vector signed short, vector bool short); 36017 vector signed short vec_vminsh (vector signed short, 36018 vector signed short); 36019 36020 vector unsigned short vec_vminuh (vector bool short, 36021 vector unsigned short); 36022 vector unsigned short vec_vminuh (vector unsigned short, 36023 vector bool short); 36024 vector unsigned short vec_vminuh (vector unsigned short, 36025 vector unsigned short); 36026 36027 vector signed char vec_vminsb (vector bool char, vector signed char); 36028 vector signed char vec_vminsb (vector signed char, vector bool char); 36029 vector signed char vec_vminsb (vector signed char, vector signed char); 36030 36031 vector unsigned char vec_vminub (vector bool char, 36032 vector unsigned char); 36033 vector unsigned char vec_vminub (vector unsigned char, 36034 vector bool char); 36035 vector unsigned char vec_vminub (vector unsigned char, 36036 vector unsigned char); 36037 36038 vector signed short vec_mladd (vector signed short, 36039 vector signed short, 36040 vector signed short); 36041 vector signed short vec_mladd (vector signed short, 36042 vector unsigned short, 36043 vector unsigned short); 36044 vector signed short vec_mladd (vector unsigned short, 36045 vector signed short, 36046 vector signed short); 36047 vector unsigned short vec_mladd (vector unsigned short, 36048 vector unsigned short, 36049 vector unsigned short); 36050 36051 vector signed short vec_mradds (vector signed short, 36052 vector signed short, 36053 vector signed short); 36054 36055 vector unsigned int vec_msum (vector unsigned char, 36056 vector unsigned char, 36057 vector unsigned int); 36058 vector signed int vec_msum (vector signed char, 36059 vector unsigned char, 36060 vector signed int); 36061 vector unsigned int vec_msum (vector unsigned short, 36062 vector unsigned short, 36063 vector unsigned int); 36064 vector signed int vec_msum (vector signed short, 36065 vector signed short, 36066 vector signed int); 36067 36068 vector signed int vec_vmsumshm (vector signed short, 36069 vector signed short, 36070 vector signed int); 36071 36072 vector unsigned int vec_vmsumuhm (vector unsigned short, 36073 vector unsigned short, 36074 vector unsigned int); 36075 36076 vector signed int vec_vmsummbm (vector signed char, 36077 vector unsigned char, 36078 vector signed int); 36079 36080 vector unsigned int vec_vmsumubm (vector unsigned char, 36081 vector unsigned char, 36082 vector unsigned int); 36083 36084 vector unsigned int vec_msums (vector unsigned short, 36085 vector unsigned short, 36086 vector unsigned int); 36087 vector signed int vec_msums (vector signed short, 36088 vector signed short, 36089 vector signed int); 36090 36091 vector signed int vec_vmsumshs (vector signed short, 36092 vector signed short, 36093 vector signed int); 36094 36095 vector unsigned int vec_vmsumuhs (vector unsigned short, 36096 vector unsigned short, 36097 vector unsigned int); 36098 36099 void vec_mtvscr (vector signed int); 36100 void vec_mtvscr (vector unsigned int); 36101 void vec_mtvscr (vector bool int); 36102 void vec_mtvscr (vector signed short); 36103 void vec_mtvscr (vector unsigned short); 36104 void vec_mtvscr (vector bool short); 36105 void vec_mtvscr (vector pixel); 36106 void vec_mtvscr (vector signed char); 36107 void vec_mtvscr (vector unsigned char); 36108 void vec_mtvscr (vector bool char); 36109 36110 vector unsigned short vec_mule (vector unsigned char, 36111 vector unsigned char); 36112 vector signed short vec_mule (vector signed char, 36113 vector signed char); 36114 vector unsigned int vec_mule (vector unsigned short, 36115 vector unsigned short); 36116 vector signed int vec_mule (vector signed short, vector signed short); 36117 36118 vector signed int vec_vmulesh (vector signed short, 36119 vector signed short); 36120 36121 vector unsigned int vec_vmuleuh (vector unsigned short, 36122 vector unsigned short); 36123 36124 vector signed short vec_vmulesb (vector signed char, 36125 vector signed char); 36126 36127 vector unsigned short vec_vmuleub (vector unsigned char, 36128 vector unsigned char); 36129 36130 vector unsigned short vec_mulo (vector unsigned char, 36131 vector unsigned char); 36132 vector signed short vec_mulo (vector signed char, vector signed char); 36133 vector unsigned int vec_mulo (vector unsigned short, 36134 vector unsigned short); 36135 vector signed int vec_mulo (vector signed short, vector signed short); 36136 36137 vector signed int vec_vmulosh (vector signed short, 36138 vector signed short); 36139 36140 vector unsigned int vec_vmulouh (vector unsigned short, 36141 vector unsigned short); 36142 36143 vector signed short vec_vmulosb (vector signed char, 36144 vector signed char); 36145 36146 vector unsigned short vec_vmuloub (vector unsigned char, 36147 vector unsigned char); 36148 36149 vector float vec_nmsub (vector float, vector float, vector float); 36150 36151 vector float vec_nor (vector float, vector float); 36152 vector signed int vec_nor (vector signed int, vector signed int); 36153 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 36154 vector bool int vec_nor (vector bool int, vector bool int); 36155 vector signed short vec_nor (vector signed short, vector signed short); 36156 vector unsigned short vec_nor (vector unsigned short, 36157 vector unsigned short); 36158 vector bool short vec_nor (vector bool short, vector bool short); 36159 vector signed char vec_nor (vector signed char, vector signed char); 36160 vector unsigned char vec_nor (vector unsigned char, 36161 vector unsigned char); 36162 vector bool char vec_nor (vector bool char, vector bool char); 36163 36164 vector float vec_or (vector float, vector float); 36165 vector float vec_or (vector float, vector bool int); 36166 vector float vec_or (vector bool int, vector float); 36167 vector bool int vec_or (vector bool int, vector bool int); 36168 vector signed int vec_or (vector bool int, vector signed int); 36169 vector signed int vec_or (vector signed int, vector bool int); 36170 vector signed int vec_or (vector signed int, vector signed int); 36171 vector unsigned int vec_or (vector bool int, vector unsigned int); 36172 vector unsigned int vec_or (vector unsigned int, vector bool int); 36173 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 36174 vector bool short vec_or (vector bool short, vector bool short); 36175 vector signed short vec_or (vector bool short, vector signed short); 36176 vector signed short vec_or (vector signed short, vector bool short); 36177 vector signed short vec_or (vector signed short, vector signed short); 36178 vector unsigned short vec_or (vector bool short, vector unsigned short); 36179 vector unsigned short vec_or (vector unsigned short, vector bool short); 36180 vector unsigned short vec_or (vector unsigned short, 36181 vector unsigned short); 36182 vector signed char vec_or (vector bool char, vector signed char); 36183 vector bool char vec_or (vector bool char, vector bool char); 36184 vector signed char vec_or (vector signed char, vector bool char); 36185 vector signed char vec_or (vector signed char, vector signed char); 36186 vector unsigned char vec_or (vector bool char, vector unsigned char); 36187 vector unsigned char vec_or (vector unsigned char, vector bool char); 36188 vector unsigned char vec_or (vector unsigned char, 36189 vector unsigned char); 36190 36191 vector signed char vec_pack (vector signed short, vector signed short); 36192 vector unsigned char vec_pack (vector unsigned short, 36193 vector unsigned short); 36194 vector bool char vec_pack (vector bool short, vector bool short); 36195 vector signed short vec_pack (vector signed int, vector signed int); 36196 vector unsigned short vec_pack (vector unsigned int, 36197 vector unsigned int); 36198 vector bool short vec_pack (vector bool int, vector bool int); 36199 36200 vector bool short vec_vpkuwum (vector bool int, vector bool int); 36201 vector signed short vec_vpkuwum (vector signed int, vector signed int); 36202 vector unsigned short vec_vpkuwum (vector unsigned int, 36203 vector unsigned int); 36204 36205 vector bool char vec_vpkuhum (vector bool short, vector bool short); 36206 vector signed char vec_vpkuhum (vector signed short, 36207 vector signed short); 36208 vector unsigned char vec_vpkuhum (vector unsigned short, 36209 vector unsigned short); 36210 36211 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 36212 36213 vector unsigned char vec_packs (vector unsigned short, 36214 vector unsigned short); 36215 vector signed char vec_packs (vector signed short, vector signed short); 36216 vector unsigned short vec_packs (vector unsigned int, 36217 vector unsigned int); 36218 vector signed short vec_packs (vector signed int, vector signed int); 36219 36220 vector signed short vec_vpkswss (vector signed int, vector signed int); 36221 36222 vector unsigned short vec_vpkuwus (vector unsigned int, 36223 vector unsigned int); 36224 36225 vector signed char vec_vpkshss (vector signed short, 36226 vector signed short); 36227 36228 vector unsigned char vec_vpkuhus (vector unsigned short, 36229 vector unsigned short); 36230 36231 vector unsigned char vec_packsu (vector unsigned short, 36232 vector unsigned short); 36233 vector unsigned char vec_packsu (vector signed short, 36234 vector signed short); 36235 vector unsigned short vec_packsu (vector unsigned int, 36236 vector unsigned int); 36237 vector unsigned short vec_packsu (vector signed int, vector signed int); 36238 36239 vector unsigned short vec_vpkswus (vector signed int, 36240 vector signed int); 36241 36242 vector unsigned char vec_vpkshus (vector signed short, 36243 vector signed short); 36244 36245 vector float vec_perm (vector float, 36246 vector float, 36247 vector unsigned char); 36248 vector signed int vec_perm (vector signed int, 36249 vector signed int, 36250 vector unsigned char); 36251 vector unsigned int vec_perm (vector unsigned int, 36252 vector unsigned int, 36253 vector unsigned char); 36254 vector bool int vec_perm (vector bool int, 36255 vector bool int, 36256 vector unsigned char); 36257 vector signed short vec_perm (vector signed short, 36258 vector signed short, 36259 vector unsigned char); 36260 vector unsigned short vec_perm (vector unsigned short, 36261 vector unsigned short, 36262 vector unsigned char); 36263 vector bool short vec_perm (vector bool short, 36264 vector bool short, 36265 vector unsigned char); 36266 vector pixel vec_perm (vector pixel, 36267 vector pixel, 36268 vector unsigned char); 36269 vector signed char vec_perm (vector signed char, 36270 vector signed char, 36271 vector unsigned char); 36272 vector unsigned char vec_perm (vector unsigned char, 36273 vector unsigned char, 36274 vector unsigned char); 36275 vector bool char vec_perm (vector bool char, 36276 vector bool char, 36277 vector unsigned char); 36278 36279 vector float vec_re (vector float); 36280 36281 vector signed char vec_rl (vector signed char, 36282 vector unsigned char); 36283 vector unsigned char vec_rl (vector unsigned char, 36284 vector unsigned char); 36285 vector signed short vec_rl (vector signed short, vector unsigned short); 36286 vector unsigned short vec_rl (vector unsigned short, 36287 vector unsigned short); 36288 vector signed int vec_rl (vector signed int, vector unsigned int); 36289 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 36290 36291 vector signed int vec_vrlw (vector signed int, vector unsigned int); 36292 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 36293 36294 vector signed short vec_vrlh (vector signed short, 36295 vector unsigned short); 36296 vector unsigned short vec_vrlh (vector unsigned short, 36297 vector unsigned short); 36298 36299 vector signed char vec_vrlb (vector signed char, vector unsigned char); 36300 vector unsigned char vec_vrlb (vector unsigned char, 36301 vector unsigned char); 36302 36303 vector float vec_round (vector float); 36304 36305 vector float vec_recip (vector float, vector float); 36306 36307 vector float vec_rsqrt (vector float); 36308 36309 vector float vec_rsqrte (vector float); 36310 36311 vector float vec_sel (vector float, vector float, vector bool int); 36312 vector float vec_sel (vector float, vector float, vector unsigned int); 36313 vector signed int vec_sel (vector signed int, 36314 vector signed int, 36315 vector bool int); 36316 vector signed int vec_sel (vector signed int, 36317 vector signed int, 36318 vector unsigned int); 36319 vector unsigned int vec_sel (vector unsigned int, 36320 vector unsigned int, 36321 vector bool int); 36322 vector unsigned int vec_sel (vector unsigned int, 36323 vector unsigned int, 36324 vector unsigned int); 36325 vector bool int vec_sel (vector bool int, 36326 vector bool int, 36327 vector bool int); 36328 vector bool int vec_sel (vector bool int, 36329 vector bool int, 36330 vector unsigned int); 36331 vector signed short vec_sel (vector signed short, 36332 vector signed short, 36333 vector bool short); 36334 vector signed short vec_sel (vector signed short, 36335 vector signed short, 36336 vector unsigned short); 36337 vector unsigned short vec_sel (vector unsigned short, 36338 vector unsigned short, 36339 vector bool short); 36340 vector unsigned short vec_sel (vector unsigned short, 36341 vector unsigned short, 36342 vector unsigned short); 36343 vector bool short vec_sel (vector bool short, 36344 vector bool short, 36345 vector bool short); 36346 vector bool short vec_sel (vector bool short, 36347 vector bool short, 36348 vector unsigned short); 36349 vector signed char vec_sel (vector signed char, 36350 vector signed char, 36351 vector bool char); 36352 vector signed char vec_sel (vector signed char, 36353 vector signed char, 36354 vector unsigned char); 36355 vector unsigned char vec_sel (vector unsigned char, 36356 vector unsigned char, 36357 vector bool char); 36358 vector unsigned char vec_sel (vector unsigned char, 36359 vector unsigned char, 36360 vector unsigned char); 36361 vector bool char vec_sel (vector bool char, 36362 vector bool char, 36363 vector bool char); 36364 vector bool char vec_sel (vector bool char, 36365 vector bool char, 36366 vector unsigned char); 36367 36368 vector signed char vec_sl (vector signed char, 36369 vector unsigned char); 36370 vector unsigned char vec_sl (vector unsigned char, 36371 vector unsigned char); 36372 vector signed short vec_sl (vector signed short, vector unsigned short); 36373 vector unsigned short vec_sl (vector unsigned short, 36374 vector unsigned short); 36375 vector signed int vec_sl (vector signed int, vector unsigned int); 36376 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 36377 36378 vector signed int vec_vslw (vector signed int, vector unsigned int); 36379 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 36380 36381 vector signed short vec_vslh (vector signed short, 36382 vector unsigned short); 36383 vector unsigned short vec_vslh (vector unsigned short, 36384 vector unsigned short); 36385 36386 vector signed char vec_vslb (vector signed char, vector unsigned char); 36387 vector unsigned char vec_vslb (vector unsigned char, 36388 vector unsigned char); 36389 36390 vector float vec_sld (vector float, vector float, const int); 36391 vector signed int vec_sld (vector signed int, 36392 vector signed int, 36393 const int); 36394 vector unsigned int vec_sld (vector unsigned int, 36395 vector unsigned int, 36396 const int); 36397 vector bool int vec_sld (vector bool int, 36398 vector bool int, 36399 const int); 36400 vector signed short vec_sld (vector signed short, 36401 vector signed short, 36402 const int); 36403 vector unsigned short vec_sld (vector unsigned short, 36404 vector unsigned short, 36405 const int); 36406 vector bool short vec_sld (vector bool short, 36407 vector bool short, 36408 const int); 36409 vector pixel vec_sld (vector pixel, 36410 vector pixel, 36411 const int); 36412 vector signed char vec_sld (vector signed char, 36413 vector signed char, 36414 const int); 36415 vector unsigned char vec_sld (vector unsigned char, 36416 vector unsigned char, 36417 const int); 36418 vector bool char vec_sld (vector bool char, 36419 vector bool char, 36420 const int); 36421 36422 vector signed int vec_sll (vector signed int, 36423 vector unsigned int); 36424 vector signed int vec_sll (vector signed int, 36425 vector unsigned short); 36426 vector signed int vec_sll (vector signed int, 36427 vector unsigned char); 36428 vector unsigned int vec_sll (vector unsigned int, 36429 vector unsigned int); 36430 vector unsigned int vec_sll (vector unsigned int, 36431 vector unsigned short); 36432 vector unsigned int vec_sll (vector unsigned int, 36433 vector unsigned char); 36434 vector bool int vec_sll (vector bool int, 36435 vector unsigned int); 36436 vector bool int vec_sll (vector bool int, 36437 vector unsigned short); 36438 vector bool int vec_sll (vector bool int, 36439 vector unsigned char); 36440 vector signed short vec_sll (vector signed short, 36441 vector unsigned int); 36442 vector signed short vec_sll (vector signed short, 36443 vector unsigned short); 36444 vector signed short vec_sll (vector signed short, 36445 vector unsigned char); 36446 vector unsigned short vec_sll (vector unsigned short, 36447 vector unsigned int); 36448 vector unsigned short vec_sll (vector unsigned short, 36449 vector unsigned short); 36450 vector unsigned short vec_sll (vector unsigned short, 36451 vector unsigned char); 36452 vector bool short vec_sll (vector bool short, vector unsigned int); 36453 vector bool short vec_sll (vector bool short, vector unsigned short); 36454 vector bool short vec_sll (vector bool short, vector unsigned char); 36455 vector pixel vec_sll (vector pixel, vector unsigned int); 36456 vector pixel vec_sll (vector pixel, vector unsigned short); 36457 vector pixel vec_sll (vector pixel, vector unsigned char); 36458 vector signed char vec_sll (vector signed char, vector unsigned int); 36459 vector signed char vec_sll (vector signed char, vector unsigned short); 36460 vector signed char vec_sll (vector signed char, vector unsigned char); 36461 vector unsigned char vec_sll (vector unsigned char, 36462 vector unsigned int); 36463 vector unsigned char vec_sll (vector unsigned char, 36464 vector unsigned short); 36465 vector unsigned char vec_sll (vector unsigned char, 36466 vector unsigned char); 36467 vector bool char vec_sll (vector bool char, vector unsigned int); 36468 vector bool char vec_sll (vector bool char, vector unsigned short); 36469 vector bool char vec_sll (vector bool char, vector unsigned char); 36470 36471 vector float vec_slo (vector float, vector signed char); 36472 vector float vec_slo (vector float, vector unsigned char); 36473 vector signed int vec_slo (vector signed int, vector signed char); 36474 vector signed int vec_slo (vector signed int, vector unsigned char); 36475 vector unsigned int vec_slo (vector unsigned int, vector signed char); 36476 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 36477 vector signed short vec_slo (vector signed short, vector signed char); 36478 vector signed short vec_slo (vector signed short, vector unsigned char); 36479 vector unsigned short vec_slo (vector unsigned short, 36480 vector signed char); 36481 vector unsigned short vec_slo (vector unsigned short, 36482 vector unsigned char); 36483 vector pixel vec_slo (vector pixel, vector signed char); 36484 vector pixel vec_slo (vector pixel, vector unsigned char); 36485 vector signed char vec_slo (vector signed char, vector signed char); 36486 vector signed char vec_slo (vector signed char, vector unsigned char); 36487 vector unsigned char vec_slo (vector unsigned char, vector signed char); 36488 vector unsigned char vec_slo (vector unsigned char, 36489 vector unsigned char); 36490 36491 vector signed char vec_splat (vector signed char, const int); 36492 vector unsigned char vec_splat (vector unsigned char, const int); 36493 vector bool char vec_splat (vector bool char, const int); 36494 vector signed short vec_splat (vector signed short, const int); 36495 vector unsigned short vec_splat (vector unsigned short, const int); 36496 vector bool short vec_splat (vector bool short, const int); 36497 vector pixel vec_splat (vector pixel, const int); 36498 vector float vec_splat (vector float, const int); 36499 vector signed int vec_splat (vector signed int, const int); 36500 vector unsigned int vec_splat (vector unsigned int, const int); 36501 vector bool int vec_splat (vector bool int, const int); 36502 36503 vector float vec_vspltw (vector float, const int); 36504 vector signed int vec_vspltw (vector signed int, const int); 36505 vector unsigned int vec_vspltw (vector unsigned int, const int); 36506 vector bool int vec_vspltw (vector bool int, const int); 36507 36508 vector bool short vec_vsplth (vector bool short, const int); 36509 vector signed short vec_vsplth (vector signed short, const int); 36510 vector unsigned short vec_vsplth (vector unsigned short, const int); 36511 vector pixel vec_vsplth (vector pixel, const int); 36512 36513 vector signed char vec_vspltb (vector signed char, const int); 36514 vector unsigned char vec_vspltb (vector unsigned char, const int); 36515 vector bool char vec_vspltb (vector bool char, const int); 36516 36517 vector signed char vec_splat_s8 (const int); 36518 36519 vector signed short vec_splat_s16 (const int); 36520 36521 vector signed int vec_splat_s32 (const int); 36522 36523 vector unsigned char vec_splat_u8 (const int); 36524 36525 vector unsigned short vec_splat_u16 (const int); 36526 36527 vector unsigned int vec_splat_u32 (const int); 36528 36529 vector signed char vec_sr (vector signed char, vector unsigned char); 36530 vector unsigned char vec_sr (vector unsigned char, 36531 vector unsigned char); 36532 vector signed short vec_sr (vector signed short, 36533 vector unsigned short); 36534 vector unsigned short vec_sr (vector unsigned short, 36535 vector unsigned short); 36536 vector signed int vec_sr (vector signed int, vector unsigned int); 36537 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 36538 36539 vector signed int vec_vsrw (vector signed int, vector unsigned int); 36540 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 36541 36542 vector signed short vec_vsrh (vector signed short, 36543 vector unsigned short); 36544 vector unsigned short vec_vsrh (vector unsigned short, 36545 vector unsigned short); 36546 36547 vector signed char vec_vsrb (vector signed char, vector unsigned char); 36548 vector unsigned char vec_vsrb (vector unsigned char, 36549 vector unsigned char); 36550 36551 vector signed char vec_sra (vector signed char, vector unsigned char); 36552 vector unsigned char vec_sra (vector unsigned char, 36553 vector unsigned char); 36554 vector signed short vec_sra (vector signed short, 36555 vector unsigned short); 36556 vector unsigned short vec_sra (vector unsigned short, 36557 vector unsigned short); 36558 vector signed int vec_sra (vector signed int, vector unsigned int); 36559 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 36560 36561 vector signed int vec_vsraw (vector signed int, vector unsigned int); 36562 vector unsigned int vec_vsraw (vector unsigned int, 36563 vector unsigned int); 36564 36565 vector signed short vec_vsrah (vector signed short, 36566 vector unsigned short); 36567 vector unsigned short vec_vsrah (vector unsigned short, 36568 vector unsigned short); 36569 36570 vector signed char vec_vsrab (vector signed char, vector unsigned char); 36571 vector unsigned char vec_vsrab (vector unsigned char, 36572 vector unsigned char); 36573 36574 vector signed int vec_srl (vector signed int, vector unsigned int); 36575 vector signed int vec_srl (vector signed int, vector unsigned short); 36576 vector signed int vec_srl (vector signed int, vector unsigned char); 36577 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 36578 vector unsigned int vec_srl (vector unsigned int, 36579 vector unsigned short); 36580 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 36581 vector bool int vec_srl (vector bool int, vector unsigned int); 36582 vector bool int vec_srl (vector bool int, vector unsigned short); 36583 vector bool int vec_srl (vector bool int, vector unsigned char); 36584 vector signed short vec_srl (vector signed short, vector unsigned int); 36585 vector signed short vec_srl (vector signed short, 36586 vector unsigned short); 36587 vector signed short vec_srl (vector signed short, vector unsigned char); 36588 vector unsigned short vec_srl (vector unsigned short, 36589 vector unsigned int); 36590 vector unsigned short vec_srl (vector unsigned short, 36591 vector unsigned short); 36592 vector unsigned short vec_srl (vector unsigned short, 36593 vector unsigned char); 36594 vector bool short vec_srl (vector bool short, vector unsigned int); 36595 vector bool short vec_srl (vector bool short, vector unsigned short); 36596 vector bool short vec_srl (vector bool short, vector unsigned char); 36597 vector pixel vec_srl (vector pixel, vector unsigned int); 36598 vector pixel vec_srl (vector pixel, vector unsigned short); 36599 vector pixel vec_srl (vector pixel, vector unsigned char); 36600 vector signed char vec_srl (vector signed char, vector unsigned int); 36601 vector signed char vec_srl (vector signed char, vector unsigned short); 36602 vector signed char vec_srl (vector signed char, vector unsigned char); 36603 vector unsigned char vec_srl (vector unsigned char, 36604 vector unsigned int); 36605 vector unsigned char vec_srl (vector unsigned char, 36606 vector unsigned short); 36607 vector unsigned char vec_srl (vector unsigned char, 36608 vector unsigned char); 36609 vector bool char vec_srl (vector bool char, vector unsigned int); 36610 vector bool char vec_srl (vector bool char, vector unsigned short); 36611 vector bool char vec_srl (vector bool char, vector unsigned char); 36612 36613 vector float vec_sro (vector float, vector signed char); 36614 vector float vec_sro (vector float, vector unsigned char); 36615 vector signed int vec_sro (vector signed int, vector signed char); 36616 vector signed int vec_sro (vector signed int, vector unsigned char); 36617 vector unsigned int vec_sro (vector unsigned int, vector signed char); 36618 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 36619 vector signed short vec_sro (vector signed short, vector signed char); 36620 vector signed short vec_sro (vector signed short, vector unsigned char); 36621 vector unsigned short vec_sro (vector unsigned short, 36622 vector signed char); 36623 vector unsigned short vec_sro (vector unsigned short, 36624 vector unsigned char); 36625 vector pixel vec_sro (vector pixel, vector signed char); 36626 vector pixel vec_sro (vector pixel, vector unsigned char); 36627 vector signed char vec_sro (vector signed char, vector signed char); 36628 vector signed char vec_sro (vector signed char, vector unsigned char); 36629 vector unsigned char vec_sro (vector unsigned char, vector signed char); 36630 vector unsigned char vec_sro (vector unsigned char, 36631 vector unsigned char); 36632 36633 void vec_st (vector float, int, vector float *); 36634 void vec_st (vector float, int, float *); 36635 void vec_st (vector signed int, int, vector signed int *); 36636 void vec_st (vector signed int, int, int *); 36637 void vec_st (vector unsigned int, int, vector unsigned int *); 36638 void vec_st (vector unsigned int, int, unsigned int *); 36639 void vec_st (vector bool int, int, vector bool int *); 36640 void vec_st (vector bool int, int, unsigned int *); 36641 void vec_st (vector bool int, int, int *); 36642 void vec_st (vector signed short, int, vector signed short *); 36643 void vec_st (vector signed short, int, short *); 36644 void vec_st (vector unsigned short, int, vector unsigned short *); 36645 void vec_st (vector unsigned short, int, unsigned short *); 36646 void vec_st (vector bool short, int, vector bool short *); 36647 void vec_st (vector bool short, int, unsigned short *); 36648 void vec_st (vector pixel, int, vector pixel *); 36649 void vec_st (vector pixel, int, unsigned short *); 36650 void vec_st (vector pixel, int, short *); 36651 void vec_st (vector bool short, int, short *); 36652 void vec_st (vector signed char, int, vector signed char *); 36653 void vec_st (vector signed char, int, signed char *); 36654 void vec_st (vector unsigned char, int, vector unsigned char *); 36655 void vec_st (vector unsigned char, int, unsigned char *); 36656 void vec_st (vector bool char, int, vector bool char *); 36657 void vec_st (vector bool char, int, unsigned char *); 36658 void vec_st (vector bool char, int, signed char *); 36659 36660 void vec_ste (vector signed char, int, signed char *); 36661 void vec_ste (vector unsigned char, int, unsigned char *); 36662 void vec_ste (vector bool char, int, signed char *); 36663 void vec_ste (vector bool char, int, unsigned char *); 36664 void vec_ste (vector signed short, int, short *); 36665 void vec_ste (vector unsigned short, int, unsigned short *); 36666 void vec_ste (vector bool short, int, short *); 36667 void vec_ste (vector bool short, int, unsigned short *); 36668 void vec_ste (vector pixel, int, short *); 36669 void vec_ste (vector pixel, int, unsigned short *); 36670 void vec_ste (vector float, int, float *); 36671 void vec_ste (vector signed int, int, int *); 36672 void vec_ste (vector unsigned int, int, unsigned int *); 36673 void vec_ste (vector bool int, int, int *); 36674 void vec_ste (vector bool int, int, unsigned int *); 36675 36676 void vec_stvewx (vector float, int, float *); 36677 void vec_stvewx (vector signed int, int, int *); 36678 void vec_stvewx (vector unsigned int, int, unsigned int *); 36679 void vec_stvewx (vector bool int, int, int *); 36680 void vec_stvewx (vector bool int, int, unsigned int *); 36681 36682 void vec_stvehx (vector signed short, int, short *); 36683 void vec_stvehx (vector unsigned short, int, unsigned short *); 36684 void vec_stvehx (vector bool short, int, short *); 36685 void vec_stvehx (vector bool short, int, unsigned short *); 36686 void vec_stvehx (vector pixel, int, short *); 36687 void vec_stvehx (vector pixel, int, unsigned short *); 36688 36689 void vec_stvebx (vector signed char, int, signed char *); 36690 void vec_stvebx (vector unsigned char, int, unsigned char *); 36691 void vec_stvebx (vector bool char, int, signed char *); 36692 void vec_stvebx (vector bool char, int, unsigned char *); 36693 36694 void vec_stl (vector float, int, vector float *); 36695 void vec_stl (vector float, int, float *); 36696 void vec_stl (vector signed int, int, vector signed int *); 36697 void vec_stl (vector signed int, int, int *); 36698 void vec_stl (vector unsigned int, int, vector unsigned int *); 36699 void vec_stl (vector unsigned int, int, unsigned int *); 36700 void vec_stl (vector bool int, int, vector bool int *); 36701 void vec_stl (vector bool int, int, unsigned int *); 36702 void vec_stl (vector bool int, int, int *); 36703 void vec_stl (vector signed short, int, vector signed short *); 36704 void vec_stl (vector signed short, int, short *); 36705 void vec_stl (vector unsigned short, int, vector unsigned short *); 36706 void vec_stl (vector unsigned short, int, unsigned short *); 36707 void vec_stl (vector bool short, int, vector bool short *); 36708 void vec_stl (vector bool short, int, unsigned short *); 36709 void vec_stl (vector bool short, int, short *); 36710 void vec_stl (vector pixel, int, vector pixel *); 36711 void vec_stl (vector pixel, int, unsigned short *); 36712 void vec_stl (vector pixel, int, short *); 36713 void vec_stl (vector signed char, int, vector signed char *); 36714 void vec_stl (vector signed char, int, signed char *); 36715 void vec_stl (vector unsigned char, int, vector unsigned char *); 36716 void vec_stl (vector unsigned char, int, unsigned char *); 36717 void vec_stl (vector bool char, int, vector bool char *); 36718 void vec_stl (vector bool char, int, unsigned char *); 36719 void vec_stl (vector bool char, int, signed char *); 36720 36721 vector signed char vec_sub (vector bool char, vector signed char); 36722 vector signed char vec_sub (vector signed char, vector bool char); 36723 vector signed char vec_sub (vector signed char, vector signed char); 36724 vector unsigned char vec_sub (vector bool char, vector unsigned char); 36725 vector unsigned char vec_sub (vector unsigned char, vector bool char); 36726 vector unsigned char vec_sub (vector unsigned char, 36727 vector unsigned char); 36728 vector signed short vec_sub (vector bool short, vector signed short); 36729 vector signed short vec_sub (vector signed short, vector bool short); 36730 vector signed short vec_sub (vector signed short, vector signed short); 36731 vector unsigned short vec_sub (vector bool short, 36732 vector unsigned short); 36733 vector unsigned short vec_sub (vector unsigned short, 36734 vector bool short); 36735 vector unsigned short vec_sub (vector unsigned short, 36736 vector unsigned short); 36737 vector signed int vec_sub (vector bool int, vector signed int); 36738 vector signed int vec_sub (vector signed int, vector bool int); 36739 vector signed int vec_sub (vector signed int, vector signed int); 36740 vector unsigned int vec_sub (vector bool int, vector unsigned int); 36741 vector unsigned int vec_sub (vector unsigned int, vector bool int); 36742 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 36743 vector float vec_sub (vector float, vector float); 36744 36745 vector float vec_vsubfp (vector float, vector float); 36746 36747 vector signed int vec_vsubuwm (vector bool int, vector signed int); 36748 vector signed int vec_vsubuwm (vector signed int, vector bool int); 36749 vector signed int vec_vsubuwm (vector signed int, vector signed int); 36750 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 36751 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 36752 vector unsigned int vec_vsubuwm (vector unsigned int, 36753 vector unsigned int); 36754 36755 vector signed short vec_vsubuhm (vector bool short, 36756 vector signed short); 36757 vector signed short vec_vsubuhm (vector signed short, 36758 vector bool short); 36759 vector signed short vec_vsubuhm (vector signed short, 36760 vector signed short); 36761 vector unsigned short vec_vsubuhm (vector bool short, 36762 vector unsigned short); 36763 vector unsigned short vec_vsubuhm (vector unsigned short, 36764 vector bool short); 36765 vector unsigned short vec_vsubuhm (vector unsigned short, 36766 vector unsigned short); 36767 36768 vector signed char vec_vsububm (vector bool char, vector signed char); 36769 vector signed char vec_vsububm (vector signed char, vector bool char); 36770 vector signed char vec_vsububm (vector signed char, vector signed char); 36771 vector unsigned char vec_vsububm (vector bool char, 36772 vector unsigned char); 36773 vector unsigned char vec_vsububm (vector unsigned char, 36774 vector bool char); 36775 vector unsigned char vec_vsububm (vector unsigned char, 36776 vector unsigned char); 36777 36778 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 36779 36780 vector unsigned char vec_subs (vector bool char, vector unsigned char); 36781 vector unsigned char vec_subs (vector unsigned char, vector bool char); 36782 vector unsigned char vec_subs (vector unsigned char, 36783 vector unsigned char); 36784 vector signed char vec_subs (vector bool char, vector signed char); 36785 vector signed char vec_subs (vector signed char, vector bool char); 36786 vector signed char vec_subs (vector signed char, vector signed char); 36787 vector unsigned short vec_subs (vector bool short, 36788 vector unsigned short); 36789 vector unsigned short vec_subs (vector unsigned short, 36790 vector bool short); 36791 vector unsigned short vec_subs (vector unsigned short, 36792 vector unsigned short); 36793 vector signed short vec_subs (vector bool short, vector signed short); 36794 vector signed short vec_subs (vector signed short, vector bool short); 36795 vector signed short vec_subs (vector signed short, vector signed short); 36796 vector unsigned int vec_subs (vector bool int, vector unsigned int); 36797 vector unsigned int vec_subs (vector unsigned int, vector bool int); 36798 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 36799 vector signed int vec_subs (vector bool int, vector signed int); 36800 vector signed int vec_subs (vector signed int, vector bool int); 36801 vector signed int vec_subs (vector signed int, vector signed int); 36802 36803 vector signed int vec_vsubsws (vector bool int, vector signed int); 36804 vector signed int vec_vsubsws (vector signed int, vector bool int); 36805 vector signed int vec_vsubsws (vector signed int, vector signed int); 36806 36807 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 36808 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 36809 vector unsigned int vec_vsubuws (vector unsigned int, 36810 vector unsigned int); 36811 36812 vector signed short vec_vsubshs (vector bool short, 36813 vector signed short); 36814 vector signed short vec_vsubshs (vector signed short, 36815 vector bool short); 36816 vector signed short vec_vsubshs (vector signed short, 36817 vector signed short); 36818 36819 vector unsigned short vec_vsubuhs (vector bool short, 36820 vector unsigned short); 36821 vector unsigned short vec_vsubuhs (vector unsigned short, 36822 vector bool short); 36823 vector unsigned short vec_vsubuhs (vector unsigned short, 36824 vector unsigned short); 36825 36826 vector signed char vec_vsubsbs (vector bool char, vector signed char); 36827 vector signed char vec_vsubsbs (vector signed char, vector bool char); 36828 vector signed char vec_vsubsbs (vector signed char, vector signed char); 36829 36830 vector unsigned char vec_vsububs (vector bool char, 36831 vector unsigned char); 36832 vector unsigned char vec_vsububs (vector unsigned char, 36833 vector bool char); 36834 vector unsigned char vec_vsububs (vector unsigned char, 36835 vector unsigned char); 36836 36837 vector unsigned int vec_sum4s (vector unsigned char, 36838 vector unsigned int); 36839 vector signed int vec_sum4s (vector signed char, vector signed int); 36840 vector signed int vec_sum4s (vector signed short, vector signed int); 36841 36842 vector signed int vec_vsum4shs (vector signed short, vector signed int); 36843 36844 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 36845 36846 vector unsigned int vec_vsum4ubs (vector unsigned char, 36847 vector unsigned int); 36848 36849 vector signed int vec_sum2s (vector signed int, vector signed int); 36850 36851 vector signed int vec_sums (vector signed int, vector signed int); 36852 36853 vector float vec_trunc (vector float); 36854 36855 vector signed short vec_unpackh (vector signed char); 36856 vector bool short vec_unpackh (vector bool char); 36857 vector signed int vec_unpackh (vector signed short); 36858 vector bool int vec_unpackh (vector bool short); 36859 vector unsigned int vec_unpackh (vector pixel); 36860 36861 vector bool int vec_vupkhsh (vector bool short); 36862 vector signed int vec_vupkhsh (vector signed short); 36863 36864 vector unsigned int vec_vupkhpx (vector pixel); 36865 36866 vector bool short vec_vupkhsb (vector bool char); 36867 vector signed short vec_vupkhsb (vector signed char); 36868 36869 vector signed short vec_unpackl (vector signed char); 36870 vector bool short vec_unpackl (vector bool char); 36871 vector unsigned int vec_unpackl (vector pixel); 36872 vector signed int vec_unpackl (vector signed short); 36873 vector bool int vec_unpackl (vector bool short); 36874 36875 vector unsigned int vec_vupklpx (vector pixel); 36876 36877 vector bool int vec_vupklsh (vector bool short); 36878 vector signed int vec_vupklsh (vector signed short); 36879 36880 vector bool short vec_vupklsb (vector bool char); 36881 vector signed short vec_vupklsb (vector signed char); 36882 36883 vector float vec_xor (vector float, vector float); 36884 vector float vec_xor (vector float, vector bool int); 36885 vector float vec_xor (vector bool int, vector float); 36886 vector bool int vec_xor (vector bool int, vector bool int); 36887 vector signed int vec_xor (vector bool int, vector signed int); 36888 vector signed int vec_xor (vector signed int, vector bool int); 36889 vector signed int vec_xor (vector signed int, vector signed int); 36890 vector unsigned int vec_xor (vector bool int, vector unsigned int); 36891 vector unsigned int vec_xor (vector unsigned int, vector bool int); 36892 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 36893 vector bool short vec_xor (vector bool short, vector bool short); 36894 vector signed short vec_xor (vector bool short, vector signed short); 36895 vector signed short vec_xor (vector signed short, vector bool short); 36896 vector signed short vec_xor (vector signed short, vector signed short); 36897 vector unsigned short vec_xor (vector bool short, 36898 vector unsigned short); 36899 vector unsigned short vec_xor (vector unsigned short, 36900 vector bool short); 36901 vector unsigned short vec_xor (vector unsigned short, 36902 vector unsigned short); 36903 vector signed char vec_xor (vector bool char, vector signed char); 36904 vector bool char vec_xor (vector bool char, vector bool char); 36905 vector signed char vec_xor (vector signed char, vector bool char); 36906 vector signed char vec_xor (vector signed char, vector signed char); 36907 vector unsigned char vec_xor (vector bool char, vector unsigned char); 36908 vector unsigned char vec_xor (vector unsigned char, vector bool char); 36909 vector unsigned char vec_xor (vector unsigned char, 36910 vector unsigned char); 36911 36912 int vec_all_eq (vector signed char, vector bool char); 36913 int vec_all_eq (vector signed char, vector signed char); 36914 int vec_all_eq (vector unsigned char, vector bool char); 36915 int vec_all_eq (vector unsigned char, vector unsigned char); 36916 int vec_all_eq (vector bool char, vector bool char); 36917 int vec_all_eq (vector bool char, vector unsigned char); 36918 int vec_all_eq (vector bool char, vector signed char); 36919 int vec_all_eq (vector signed short, vector bool short); 36920 int vec_all_eq (vector signed short, vector signed short); 36921 int vec_all_eq (vector unsigned short, vector bool short); 36922 int vec_all_eq (vector unsigned short, vector unsigned short); 36923 int vec_all_eq (vector bool short, vector bool short); 36924 int vec_all_eq (vector bool short, vector unsigned short); 36925 int vec_all_eq (vector bool short, vector signed short); 36926 int vec_all_eq (vector pixel, vector pixel); 36927 int vec_all_eq (vector signed int, vector bool int); 36928 int vec_all_eq (vector signed int, vector signed int); 36929 int vec_all_eq (vector unsigned int, vector bool int); 36930 int vec_all_eq (vector unsigned int, vector unsigned int); 36931 int vec_all_eq (vector bool int, vector bool int); 36932 int vec_all_eq (vector bool int, vector unsigned int); 36933 int vec_all_eq (vector bool int, vector signed int); 36934 int vec_all_eq (vector float, vector float); 36935 36936 int vec_all_ge (vector bool char, vector unsigned char); 36937 int vec_all_ge (vector unsigned char, vector bool char); 36938 int vec_all_ge (vector unsigned char, vector unsigned char); 36939 int vec_all_ge (vector bool char, vector signed char); 36940 int vec_all_ge (vector signed char, vector bool char); 36941 int vec_all_ge (vector signed char, vector signed char); 36942 int vec_all_ge (vector bool short, vector unsigned short); 36943 int vec_all_ge (vector unsigned short, vector bool short); 36944 int vec_all_ge (vector unsigned short, vector unsigned short); 36945 int vec_all_ge (vector signed short, vector signed short); 36946 int vec_all_ge (vector bool short, vector signed short); 36947 int vec_all_ge (vector signed short, vector bool short); 36948 int vec_all_ge (vector bool int, vector unsigned int); 36949 int vec_all_ge (vector unsigned int, vector bool int); 36950 int vec_all_ge (vector unsigned int, vector unsigned int); 36951 int vec_all_ge (vector bool int, vector signed int); 36952 int vec_all_ge (vector signed int, vector bool int); 36953 int vec_all_ge (vector signed int, vector signed int); 36954 int vec_all_ge (vector float, vector float); 36955 36956 int vec_all_gt (vector bool char, vector unsigned char); 36957 int vec_all_gt (vector unsigned char, vector bool char); 36958 int vec_all_gt (vector unsigned char, vector unsigned char); 36959 int vec_all_gt (vector bool char, vector signed char); 36960 int vec_all_gt (vector signed char, vector bool char); 36961 int vec_all_gt (vector signed char, vector signed char); 36962 int vec_all_gt (vector bool short, vector unsigned short); 36963 int vec_all_gt (vector unsigned short, vector bool short); 36964 int vec_all_gt (vector unsigned short, vector unsigned short); 36965 int vec_all_gt (vector bool short, vector signed short); 36966 int vec_all_gt (vector signed short, vector bool short); 36967 int vec_all_gt (vector signed short, vector signed short); 36968 int vec_all_gt (vector bool int, vector unsigned int); 36969 int vec_all_gt (vector unsigned int, vector bool int); 36970 int vec_all_gt (vector unsigned int, vector unsigned int); 36971 int vec_all_gt (vector bool int, vector signed int); 36972 int vec_all_gt (vector signed int, vector bool int); 36973 int vec_all_gt (vector signed int, vector signed int); 36974 int vec_all_gt (vector float, vector float); 36975 36976 int vec_all_in (vector float, vector float); 36977 36978 int vec_all_le (vector bool char, vector unsigned char); 36979 int vec_all_le (vector unsigned char, vector bool char); 36980 int vec_all_le (vector unsigned char, vector unsigned char); 36981 int vec_all_le (vector bool char, vector signed char); 36982 int vec_all_le (vector signed char, vector bool char); 36983 int vec_all_le (vector signed char, vector signed char); 36984 int vec_all_le (vector bool short, vector unsigned short); 36985 int vec_all_le (vector unsigned short, vector bool short); 36986 int vec_all_le (vector unsigned short, vector unsigned short); 36987 int vec_all_le (vector bool short, vector signed short); 36988 int vec_all_le (vector signed short, vector bool short); 36989 int vec_all_le (vector signed short, vector signed short); 36990 int vec_all_le (vector bool int, vector unsigned int); 36991 int vec_all_le (vector unsigned int, vector bool int); 36992 int vec_all_le (vector unsigned int, vector unsigned int); 36993 int vec_all_le (vector bool int, vector signed int); 36994 int vec_all_le (vector signed int, vector bool int); 36995 int vec_all_le (vector signed int, vector signed int); 36996 int vec_all_le (vector float, vector float); 36997 36998 int vec_all_lt (vector bool char, vector unsigned char); 36999 int vec_all_lt (vector unsigned char, vector bool char); 37000 int vec_all_lt (vector unsigned char, vector unsigned char); 37001 int vec_all_lt (vector bool char, vector signed char); 37002 int vec_all_lt (vector signed char, vector bool char); 37003 int vec_all_lt (vector signed char, vector signed char); 37004 int vec_all_lt (vector bool short, vector unsigned short); 37005 int vec_all_lt (vector unsigned short, vector bool short); 37006 int vec_all_lt (vector unsigned short, vector unsigned short); 37007 int vec_all_lt (vector bool short, vector signed short); 37008 int vec_all_lt (vector signed short, vector bool short); 37009 int vec_all_lt (vector signed short, vector signed short); 37010 int vec_all_lt (vector bool int, vector unsigned int); 37011 int vec_all_lt (vector unsigned int, vector bool int); 37012 int vec_all_lt (vector unsigned int, vector unsigned int); 37013 int vec_all_lt (vector bool int, vector signed int); 37014 int vec_all_lt (vector signed int, vector bool int); 37015 int vec_all_lt (vector signed int, vector signed int); 37016 int vec_all_lt (vector float, vector float); 37017 37018 int vec_all_nan (vector float); 37019 37020 int vec_all_ne (vector signed char, vector bool char); 37021 int vec_all_ne (vector signed char, vector signed char); 37022 int vec_all_ne (vector unsigned char, vector bool char); 37023 int vec_all_ne (vector unsigned char, vector unsigned char); 37024 int vec_all_ne (vector bool char, vector bool char); 37025 int vec_all_ne (vector bool char, vector unsigned char); 37026 int vec_all_ne (vector bool char, vector signed char); 37027 int vec_all_ne (vector signed short, vector bool short); 37028 int vec_all_ne (vector signed short, vector signed short); 37029 int vec_all_ne (vector unsigned short, vector bool short); 37030 int vec_all_ne (vector unsigned short, vector unsigned short); 37031 int vec_all_ne (vector bool short, vector bool short); 37032 int vec_all_ne (vector bool short, vector unsigned short); 37033 int vec_all_ne (vector bool short, vector signed short); 37034 int vec_all_ne (vector pixel, vector pixel); 37035 int vec_all_ne (vector signed int, vector bool int); 37036 int vec_all_ne (vector signed int, vector signed int); 37037 int vec_all_ne (vector unsigned int, vector bool int); 37038 int vec_all_ne (vector unsigned int, vector unsigned int); 37039 int vec_all_ne (vector bool int, vector bool int); 37040 int vec_all_ne (vector bool int, vector unsigned int); 37041 int vec_all_ne (vector bool int, vector signed int); 37042 int vec_all_ne (vector float, vector float); 37043 37044 int vec_all_nge (vector float, vector float); 37045 37046 int vec_all_ngt (vector float, vector float); 37047 37048 int vec_all_nle (vector float, vector float); 37049 37050 int vec_all_nlt (vector float, vector float); 37051 37052 int vec_all_numeric (vector float); 37053 37054 int vec_any_eq (vector signed char, vector bool char); 37055 int vec_any_eq (vector signed char, vector signed char); 37056 int vec_any_eq (vector unsigned char, vector bool char); 37057 int vec_any_eq (vector unsigned char, vector unsigned char); 37058 int vec_any_eq (vector bool char, vector bool char); 37059 int vec_any_eq (vector bool char, vector unsigned char); 37060 int vec_any_eq (vector bool char, vector signed char); 37061 int vec_any_eq (vector signed short, vector bool short); 37062 int vec_any_eq (vector signed short, vector signed short); 37063 int vec_any_eq (vector unsigned short, vector bool short); 37064 int vec_any_eq (vector unsigned short, vector unsigned short); 37065 int vec_any_eq (vector bool short, vector bool short); 37066 int vec_any_eq (vector bool short, vector unsigned short); 37067 int vec_any_eq (vector bool short, vector signed short); 37068 int vec_any_eq (vector pixel, vector pixel); 37069 int vec_any_eq (vector signed int, vector bool int); 37070 int vec_any_eq (vector signed int, vector signed int); 37071 int vec_any_eq (vector unsigned int, vector bool int); 37072 int vec_any_eq (vector unsigned int, vector unsigned int); 37073 int vec_any_eq (vector bool int, vector bool int); 37074 int vec_any_eq (vector bool int, vector unsigned int); 37075 int vec_any_eq (vector bool int, vector signed int); 37076 int vec_any_eq (vector float, vector float); 37077 37078 int vec_any_ge (vector signed char, vector bool char); 37079 int vec_any_ge (vector unsigned char, vector bool char); 37080 int vec_any_ge (vector unsigned char, vector unsigned char); 37081 int vec_any_ge (vector signed char, vector signed char); 37082 int vec_any_ge (vector bool char, vector unsigned char); 37083 int vec_any_ge (vector bool char, vector signed char); 37084 int vec_any_ge (vector unsigned short, vector bool short); 37085 int vec_any_ge (vector unsigned short, vector unsigned short); 37086 int vec_any_ge (vector signed short, vector signed short); 37087 int vec_any_ge (vector signed short, vector bool short); 37088 int vec_any_ge (vector bool short, vector unsigned short); 37089 int vec_any_ge (vector bool short, vector signed short); 37090 int vec_any_ge (vector signed int, vector bool int); 37091 int vec_any_ge (vector unsigned int, vector bool int); 37092 int vec_any_ge (vector unsigned int, vector unsigned int); 37093 int vec_any_ge (vector signed int, vector signed int); 37094 int vec_any_ge (vector bool int, vector unsigned int); 37095 int vec_any_ge (vector bool int, vector signed int); 37096 int vec_any_ge (vector float, vector float); 37097 37098 int vec_any_gt (vector bool char, vector unsigned char); 37099 int vec_any_gt (vector unsigned char, vector bool char); 37100 int vec_any_gt (vector unsigned char, vector unsigned char); 37101 int vec_any_gt (vector bool char, vector signed char); 37102 int vec_any_gt (vector signed char, vector bool char); 37103 int vec_any_gt (vector signed char, vector signed char); 37104 int vec_any_gt (vector bool short, vector unsigned short); 37105 int vec_any_gt (vector unsigned short, vector bool short); 37106 int vec_any_gt (vector unsigned short, vector unsigned short); 37107 int vec_any_gt (vector bool short, vector signed short); 37108 int vec_any_gt (vector signed short, vector bool short); 37109 int vec_any_gt (vector signed short, vector signed short); 37110 int vec_any_gt (vector bool int, vector unsigned int); 37111 int vec_any_gt (vector unsigned int, vector bool int); 37112 int vec_any_gt (vector unsigned int, vector unsigned int); 37113 int vec_any_gt (vector bool int, vector signed int); 37114 int vec_any_gt (vector signed int, vector bool int); 37115 int vec_any_gt (vector signed int, vector signed int); 37116 int vec_any_gt (vector float, vector float); 37117 37118 int vec_any_le (vector bool char, vector unsigned char); 37119 int vec_any_le (vector unsigned char, vector bool char); 37120 int vec_any_le (vector unsigned char, vector unsigned char); 37121 int vec_any_le (vector bool char, vector signed char); 37122 int vec_any_le (vector signed char, vector bool char); 37123 int vec_any_le (vector signed char, vector signed char); 37124 int vec_any_le (vector bool short, vector unsigned short); 37125 int vec_any_le (vector unsigned short, vector bool short); 37126 int vec_any_le (vector unsigned short, vector unsigned short); 37127 int vec_any_le (vector bool short, vector signed short); 37128 int vec_any_le (vector signed short, vector bool short); 37129 int vec_any_le (vector signed short, vector signed short); 37130 int vec_any_le (vector bool int, vector unsigned int); 37131 int vec_any_le (vector unsigned int, vector bool int); 37132 int vec_any_le (vector unsigned int, vector unsigned int); 37133 int vec_any_le (vector bool int, vector signed int); 37134 int vec_any_le (vector signed int, vector bool int); 37135 int vec_any_le (vector signed int, vector signed int); 37136 int vec_any_le (vector float, vector float); 37137 37138 int vec_any_lt (vector bool char, vector unsigned char); 37139 int vec_any_lt (vector unsigned char, vector bool char); 37140 int vec_any_lt (vector unsigned char, vector unsigned char); 37141 int vec_any_lt (vector bool char, vector signed char); 37142 int vec_any_lt (vector signed char, vector bool char); 37143 int vec_any_lt (vector signed char, vector signed char); 37144 int vec_any_lt (vector bool short, vector unsigned short); 37145 int vec_any_lt (vector unsigned short, vector bool short); 37146 int vec_any_lt (vector unsigned short, vector unsigned short); 37147 int vec_any_lt (vector bool short, vector signed short); 37148 int vec_any_lt (vector signed short, vector bool short); 37149 int vec_any_lt (vector signed short, vector signed short); 37150 int vec_any_lt (vector bool int, vector unsigned int); 37151 int vec_any_lt (vector unsigned int, vector bool int); 37152 int vec_any_lt (vector unsigned int, vector unsigned int); 37153 int vec_any_lt (vector bool int, vector signed int); 37154 int vec_any_lt (vector signed int, vector bool int); 37155 int vec_any_lt (vector signed int, vector signed int); 37156 int vec_any_lt (vector float, vector float); 37157 37158 int vec_any_nan (vector float); 37159 37160 int vec_any_ne (vector signed char, vector bool char); 37161 int vec_any_ne (vector signed char, vector signed char); 37162 int vec_any_ne (vector unsigned char, vector bool char); 37163 int vec_any_ne (vector unsigned char, vector unsigned char); 37164 int vec_any_ne (vector bool char, vector bool char); 37165 int vec_any_ne (vector bool char, vector unsigned char); 37166 int vec_any_ne (vector bool char, vector signed char); 37167 int vec_any_ne (vector signed short, vector bool short); 37168 int vec_any_ne (vector signed short, vector signed short); 37169 int vec_any_ne (vector unsigned short, vector bool short); 37170 int vec_any_ne (vector unsigned short, vector unsigned short); 37171 int vec_any_ne (vector bool short, vector bool short); 37172 int vec_any_ne (vector bool short, vector unsigned short); 37173 int vec_any_ne (vector bool short, vector signed short); 37174 int vec_any_ne (vector pixel, vector pixel); 37175 int vec_any_ne (vector signed int, vector bool int); 37176 int vec_any_ne (vector signed int, vector signed int); 37177 int vec_any_ne (vector unsigned int, vector bool int); 37178 int vec_any_ne (vector unsigned int, vector unsigned int); 37179 int vec_any_ne (vector bool int, vector bool int); 37180 int vec_any_ne (vector bool int, vector unsigned int); 37181 int vec_any_ne (vector bool int, vector signed int); 37182 int vec_any_ne (vector float, vector float); 37183 37184 int vec_any_nge (vector float, vector float); 37185 37186 int vec_any_ngt (vector float, vector float); 37187 37188 int vec_any_nle (vector float, vector float); 37189 37190 int vec_any_nlt (vector float, vector float); 37191 37192 int vec_any_numeric (vector float); 37193 37194 int vec_any_out (vector float, vector float); 37195 37196 If the vector/scalar (VSX) instruction set is available, the following 37197 additional functions are available: 37198 37199 vector double vec_abs (vector double); 37200 vector double vec_add (vector double, vector double); 37201 vector double vec_and (vector double, vector double); 37202 vector double vec_and (vector double, vector bool long); 37203 vector double vec_and (vector bool long, vector double); 37204 vector double vec_andc (vector double, vector double); 37205 vector double vec_andc (vector double, vector bool long); 37206 vector double vec_andc (vector bool long, vector double); 37207 vector double vec_ceil (vector double); 37208 vector bool long vec_cmpeq (vector double, vector double); 37209 vector bool long vec_cmpge (vector double, vector double); 37210 vector bool long vec_cmpgt (vector double, vector double); 37211 vector bool long vec_cmple (vector double, vector double); 37212 vector bool long vec_cmplt (vector double, vector double); 37213 vector float vec_div (vector float, vector float); 37214 vector double vec_div (vector double, vector double); 37215 vector double vec_floor (vector double); 37216 vector double vec_ld (int, const vector double *); 37217 vector double vec_ld (int, const double *); 37218 vector double vec_ldl (int, const vector double *); 37219 vector double vec_ldl (int, const double *); 37220 vector unsigned char vec_lvsl (int, const volatile double *); 37221 vector unsigned char vec_lvsr (int, const volatile double *); 37222 vector double vec_madd (vector double, vector double, vector double); 37223 vector double vec_max (vector double, vector double); 37224 vector double vec_min (vector double, vector double); 37225 vector float vec_msub (vector float, vector float, vector float); 37226 vector double vec_msub (vector double, vector double, vector double); 37227 vector float vec_mul (vector float, vector float); 37228 vector double vec_mul (vector double, vector double); 37229 vector float vec_nearbyint (vector float); 37230 vector double vec_nearbyint (vector double); 37231 vector float vec_nmadd (vector float, vector float, vector float); 37232 vector double vec_nmadd (vector double, vector double, vector double); 37233 vector double vec_nmsub (vector double, vector double, vector double); 37234 vector double vec_nor (vector double, vector double); 37235 vector double vec_or (vector double, vector double); 37236 vector double vec_or (vector double, vector bool long); 37237 vector double vec_or (vector bool long, vector double); 37238 vector double vec_perm (vector double, 37239 vector double, 37240 vector unsigned char); 37241 vector double vec_rint (vector double); 37242 vector double vec_recip (vector double, vector double); 37243 vector double vec_rsqrt (vector double); 37244 vector double vec_rsqrte (vector double); 37245 vector double vec_sel (vector double, vector double, vector bool long); 37246 vector double vec_sel (vector double, vector double, vector unsigned long); 37247 vector double vec_sub (vector double, vector double); 37248 vector float vec_sqrt (vector float); 37249 vector double vec_sqrt (vector double); 37250 void vec_st (vector double, int, vector double *); 37251 void vec_st (vector double, int, double *); 37252 vector double vec_trunc (vector double); 37253 vector double vec_xor (vector double, vector double); 37254 vector double vec_xor (vector double, vector bool long); 37255 vector double vec_xor (vector bool long, vector double); 37256 int vec_all_eq (vector double, vector double); 37257 int vec_all_ge (vector double, vector double); 37258 int vec_all_gt (vector double, vector double); 37259 int vec_all_le (vector double, vector double); 37260 int vec_all_lt (vector double, vector double); 37261 int vec_all_nan (vector double); 37262 int vec_all_ne (vector double, vector double); 37263 int vec_all_nge (vector double, vector double); 37264 int vec_all_ngt (vector double, vector double); 37265 int vec_all_nle (vector double, vector double); 37266 int vec_all_nlt (vector double, vector double); 37267 int vec_all_numeric (vector double); 37268 int vec_any_eq (vector double, vector double); 37269 int vec_any_ge (vector double, vector double); 37270 int vec_any_gt (vector double, vector double); 37271 int vec_any_le (vector double, vector double); 37272 int vec_any_lt (vector double, vector double); 37273 int vec_any_nan (vector double); 37274 int vec_any_ne (vector double, vector double); 37275 int vec_any_nge (vector double, vector double); 37276 int vec_any_ngt (vector double, vector double); 37277 int vec_any_nle (vector double, vector double); 37278 int vec_any_nlt (vector double, vector double); 37279 int vec_any_numeric (vector double); 37280 37281 vector double vec_vsx_ld (int, const vector double *); 37282 vector double vec_vsx_ld (int, const double *); 37283 vector float vec_vsx_ld (int, const vector float *); 37284 vector float vec_vsx_ld (int, const float *); 37285 vector bool int vec_vsx_ld (int, const vector bool int *); 37286 vector signed int vec_vsx_ld (int, const vector signed int *); 37287 vector signed int vec_vsx_ld (int, const int *); 37288 vector signed int vec_vsx_ld (int, const long *); 37289 vector unsigned int vec_vsx_ld (int, const vector unsigned int *); 37290 vector unsigned int vec_vsx_ld (int, const unsigned int *); 37291 vector unsigned int vec_vsx_ld (int, const unsigned long *); 37292 vector bool short vec_vsx_ld (int, const vector bool short *); 37293 vector pixel vec_vsx_ld (int, const vector pixel *); 37294 vector signed short vec_vsx_ld (int, const vector signed short *); 37295 vector signed short vec_vsx_ld (int, const short *); 37296 vector unsigned short vec_vsx_ld (int, const vector unsigned short *); 37297 vector unsigned short vec_vsx_ld (int, const unsigned short *); 37298 vector bool char vec_vsx_ld (int, const vector bool char *); 37299 vector signed char vec_vsx_ld (int, const vector signed char *); 37300 vector signed char vec_vsx_ld (int, const signed char *); 37301 vector unsigned char vec_vsx_ld (int, const vector unsigned char *); 37302 vector unsigned char vec_vsx_ld (int, const unsigned char *); 37303 37304 void vec_vsx_st (vector double, int, vector double *); 37305 void vec_vsx_st (vector double, int, double *); 37306 void vec_vsx_st (vector float, int, vector float *); 37307 void vec_vsx_st (vector float, int, float *); 37308 void vec_vsx_st (vector signed int, int, vector signed int *); 37309 void vec_vsx_st (vector signed int, int, int *); 37310 void vec_vsx_st (vector unsigned int, int, vector unsigned int *); 37311 void vec_vsx_st (vector unsigned int, int, unsigned int *); 37312 void vec_vsx_st (vector bool int, int, vector bool int *); 37313 void vec_vsx_st (vector bool int, int, unsigned int *); 37314 void vec_vsx_st (vector bool int, int, int *); 37315 void vec_vsx_st (vector signed short, int, vector signed short *); 37316 void vec_vsx_st (vector signed short, int, short *); 37317 void vec_vsx_st (vector unsigned short, int, vector unsigned short *); 37318 void vec_vsx_st (vector unsigned short, int, unsigned short *); 37319 void vec_vsx_st (vector bool short, int, vector bool short *); 37320 void vec_vsx_st (vector bool short, int, unsigned short *); 37321 void vec_vsx_st (vector pixel, int, vector pixel *); 37322 void vec_vsx_st (vector pixel, int, unsigned short *); 37323 void vec_vsx_st (vector pixel, int, short *); 37324 void vec_vsx_st (vector bool short, int, short *); 37325 void vec_vsx_st (vector signed char, int, vector signed char *); 37326 void vec_vsx_st (vector signed char, int, signed char *); 37327 void vec_vsx_st (vector unsigned char, int, vector unsigned char *); 37328 void vec_vsx_st (vector unsigned char, int, unsigned char *); 37329 void vec_vsx_st (vector bool char, int, vector bool char *); 37330 void vec_vsx_st (vector bool char, int, unsigned char *); 37331 void vec_vsx_st (vector bool char, int, signed char *); 37332 37333 Note that the `vec_ld' and `vec_st' builtins will always generate the 37334 Altivec `LVX' and `STVX' instructions even if the VSX instruction set 37335 is available. The `vec_vsx_ld' and `vec_vsx_st' builtins will always 37336 generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X' 37337 instructions. 37338 37339 GCC provides a few other builtins on Powerpc to access certain 37340 instructions: 37341 float __builtin_recipdivf (float, float); 37342 float __builtin_rsqrtf (float); 37343 double __builtin_recipdiv (double, double); 37344 double __builtin_rsqrt (double); 37345 long __builtin_bpermd (long, long); 37346 int __builtin_bswap16 (int); 37347 37348 The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions 37349 generate multiple instructions to implement the reciprocal sqrt 37350 functionality using reciprocal sqrt estimate instructions. 37351 37352 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate 37353 multiple instructions to implement division using the reciprocal 37354 estimate instructions. 37355 37356 37357 File: gcc.info, Node: RX Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins 37358 37359 6.54.13 RX Built-in Functions 37360 ----------------------------- 37361 37362 GCC supports some of the RX instructions which cannot be expressed in 37363 the C programming language via the use of built-in functions. The 37364 following functions are supported: 37365 37366 -- Built-in Function: void __builtin_rx_brk (void) 37367 Generates the `brk' machine instruction. 37368 37369 -- Built-in Function: void __builtin_rx_clrpsw (int) 37370 Generates the `clrpsw' machine instruction to clear the specified 37371 bit in the processor status word. 37372 37373 -- Built-in Function: void __builtin_rx_int (int) 37374 Generates the `int' machine instruction to generate an interrupt 37375 with the specified value. 37376 37377 -- Built-in Function: void __builtin_rx_machi (int, int) 37378 Generates the `machi' machine instruction to add the result of 37379 multiplying the top 16-bits of the two arguments into the 37380 accumulator. 37381 37382 -- Built-in Function: void __builtin_rx_maclo (int, int) 37383 Generates the `maclo' machine instruction to add the result of 37384 multiplying the bottom 16-bits of the two arguments into the 37385 accumulator. 37386 37387 -- Built-in Function: void __builtin_rx_mulhi (int, int) 37388 Generates the `mulhi' machine instruction to place the result of 37389 multiplying the top 16-bits of the two arguments into the 37390 accumulator. 37391 37392 -- Built-in Function: void __builtin_rx_mullo (int, int) 37393 Generates the `mullo' machine instruction to place the result of 37394 multiplying the bottom 16-bits of the two arguments into the 37395 accumulator. 37396 37397 -- Built-in Function: int __builtin_rx_mvfachi (void) 37398 Generates the `mvfachi' machine instruction to read the top 37399 32-bits of the accumulator. 37400 37401 -- Built-in Function: int __builtin_rx_mvfacmi (void) 37402 Generates the `mvfacmi' machine instruction to read the middle 37403 32-bits of the accumulator. 37404 37405 -- Built-in Function: int __builtin_rx_mvfc (int) 37406 Generates the `mvfc' machine instruction which reads the control 37407 register specified in its argument and returns its value. 37408 37409 -- Built-in Function: void __builtin_rx_mvtachi (int) 37410 Generates the `mvtachi' machine instruction to set the top 32-bits 37411 of the accumulator. 37412 37413 -- Built-in Function: void __builtin_rx_mvtaclo (int) 37414 Generates the `mvtaclo' machine instruction to set the bottom 37415 32-bits of the accumulator. 37416 37417 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val) 37418 Generates the `mvtc' machine instruction which sets control 37419 register number `reg' to `val'. 37420 37421 -- Built-in Function: void __builtin_rx_mvtipl (int) 37422 Generates the `mvtipl' machine instruction set the interrupt 37423 priority level. 37424 37425 -- Built-in Function: void __builtin_rx_racw (int) 37426 Generates the `racw' machine instruction to round the accumulator 37427 according to the specified mode. 37428 37429 -- Built-in Function: int __builtin_rx_revw (int) 37430 Generates the `revw' machine instruction which swaps the bytes in 37431 the argument so that bits 0-7 now occupy bits 8-15 and vice versa, 37432 and also bits 16-23 occupy bits 24-31 and vice versa. 37433 37434 -- Built-in Function: void __builtin_rx_rmpa (void) 37435 Generates the `rmpa' machine instruction which initiates a 37436 repeated multiply and accumulate sequence. 37437 37438 -- Built-in Function: void __builtin_rx_round (float) 37439 Generates the `round' machine instruction which returns the 37440 floating point argument rounded according to the current rounding 37441 mode set in the floating point status word register. 37442 37443 -- Built-in Function: int __builtin_rx_sat (int) 37444 Generates the `sat' machine instruction which returns the 37445 saturated value of the argument. 37446 37447 -- Built-in Function: void __builtin_rx_setpsw (int) 37448 Generates the `setpsw' machine instruction to set the specified 37449 bit in the processor status word. 37450 37451 -- Built-in Function: void __builtin_rx_wait (void) 37452 Generates the `wait' machine instruction. 37453 37454 37455 File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins 37456 37457 6.54.14 SPARC VIS Built-in Functions 37458 ------------------------------------ 37459 37460 GCC supports SIMD operations on the SPARC using both the generic vector 37461 extensions (*note Vector Extensions::) as well as built-in functions for 37462 the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 37463 switch, the VIS extension is exposed as the following built-in 37464 functions: 37465 37466 typedef int v2si __attribute__ ((vector_size (8))); 37467 typedef short v4hi __attribute__ ((vector_size (8))); 37468 typedef short v2hi __attribute__ ((vector_size (4))); 37469 typedef char v8qi __attribute__ ((vector_size (8))); 37470 typedef char v4qi __attribute__ ((vector_size (4))); 37471 37472 void * __builtin_vis_alignaddr (void *, long); 37473 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 37474 v2si __builtin_vis_faligndatav2si (v2si, v2si); 37475 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 37476 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 37477 37478 v4hi __builtin_vis_fexpand (v4qi); 37479 37480 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 37481 v4hi __builtin_vis_fmul8x16au (v4qi, v4hi); 37482 v4hi __builtin_vis_fmul8x16al (v4qi, v4hi); 37483 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 37484 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 37485 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 37486 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 37487 37488 v4qi __builtin_vis_fpack16 (v4hi); 37489 v8qi __builtin_vis_fpack32 (v2si, v2si); 37490 v2hi __builtin_vis_fpackfix (v2si); 37491 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 37492 37493 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 37494 37495 37496 File: gcc.info, Node: SPU Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 37497 37498 6.54.15 SPU Built-in Functions 37499 ------------------------------ 37500 37501 GCC provides extensions for the SPU processor as described in the 37502 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 37503 found at `http://cell.scei.co.jp/' or 37504 `http://www.ibm.com/developerworks/power/cell/'. GCC's implementation 37505 differs in several ways. 37506 37507 * The optional extension of specifying vector constants in 37508 parentheses is not supported. 37509 37510 * A vector initializer requires no cast if the vector constant is of 37511 the same type as the variable it is initializing. 37512 37513 * If `signed' or `unsigned' is omitted, the signedness of the vector 37514 type is the default signedness of the base type. The default 37515 varies depending on the operating system, so a portable program 37516 should always specify the signedness. 37517 37518 * By default, the keyword `__vector' is added. The macro `vector' is 37519 defined in `<spu_intrinsics.h>' and can be undefined. 37520 37521 * GCC allows using a `typedef' name as the type specifier for a 37522 vector type. 37523 37524 * For C, overloaded functions are implemented with macros so the 37525 following does not work: 37526 37527 spu_add ((vector signed int){1, 2, 3, 4}, foo); 37528 37529 Since `spu_add' is a macro, the vector constant in the example is 37530 treated as four separate arguments. Wrap the entire argument in 37531 parentheses for this to work. 37532 37533 * The extended version of `__builtin_expect' is not supported. 37534 37535 37536 _Note:_ Only the interface described in the aforementioned 37537 specification is supported. Internally, GCC uses built-in functions to 37538 implement the required functionality, but these are not supported and 37539 are subject to change without notice. 37540 37541 37542 File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 37543 37544 6.55 Format Checks Specific to Particular Target Machines 37545 ========================================================= 37546 37547 For some target machines, GCC supports additional options to the format 37548 attribute (*note Declaring Attributes of Functions: Function 37549 Attributes.). 37550 37551 * Menu: 37552 37553 * Solaris Format Checks:: 37554 * Darwin Format Checks:: 37555 37556 37557 File: gcc.info, Node: Solaris Format Checks, Next: Darwin Format Checks, Up: Target Format Checks 37558 37559 6.55.1 Solaris Format Checks 37560 ---------------------------- 37561 37562 Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 37563 `cmn_err' accepts a subset of the standard `printf' conversions, and 37564 the two-argument `%b' conversion for displaying bit-fields. See the 37565 Solaris man page for `cmn_err' for more information. 37566 37567 37568 File: gcc.info, Node: Darwin Format Checks, Prev: Solaris Format Checks, Up: Target Format Checks 37569 37570 6.55.2 Darwin Format Checks 37571 --------------------------- 37572 37573 Darwin targets support the `CFString' (or `__CFString__') in the format 37574 attribute context. Declarations made with such attribution will be 37575 parsed for correct syntax and format argument types. However, parsing 37576 of the format string itself is currently undefined and will not be 37577 carried out by this version of the compiler. 37578 37579 Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers) 37580 may also be used as format arguments. Note that the relevant headers 37581 are only likely to be available on Darwin (OSX) installations. On such 37582 installations, the XCode and system documentation provide descriptions 37583 of `CFString', `CFStringRefs' and associated functions. 37584 37585 37586 File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 37587 37588 6.56 Pragmas Accepted by GCC 37589 ============================ 37590 37591 GCC supports several types of pragmas, primarily in order to compile 37592 code originally written for other compilers. Note that in general we 37593 do not recommend the use of pragmas; *Note Function Attributes::, for 37594 further explanation. 37595 37596 * Menu: 37597 37598 * ARM Pragmas:: 37599 * M32C Pragmas:: 37600 * MeP Pragmas:: 37601 * RS/6000 and PowerPC Pragmas:: 37602 * Darwin Pragmas:: 37603 * Solaris Pragmas:: 37604 * Symbol-Renaming Pragmas:: 37605 * Structure-Packing Pragmas:: 37606 * Weak Pragmas:: 37607 * Diagnostic Pragmas:: 37608 * Visibility Pragmas:: 37609 * Push/Pop Macro Pragmas:: 37610 * Function Specific Option Pragmas:: 37611 37612 37613 File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 37614 37615 6.56.1 ARM Pragmas 37616 ------------------ 37617 37618 The ARM target defines pragmas for controlling the default addition of 37619 `long_call' and `short_call' attributes to functions. *Note Function 37620 Attributes::, for information about the effects of these attributes. 37621 37622 `long_calls' 37623 Set all subsequent functions to have the `long_call' attribute. 37624 37625 `no_long_calls' 37626 Set all subsequent functions to have the `short_call' attribute. 37627 37628 `long_calls_off' 37629 Do not affect the `long_call' or `short_call' attributes of 37630 subsequent functions. 37631 37632 37633 File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas 37634 37635 6.56.2 M32C Pragmas 37636 ------------------- 37637 37638 `GCC memregs NUMBER' 37639 Overrides the command-line option `-memregs=' for the current 37640 file. Use with care! This pragma must be before any function in 37641 the file, and mixing different memregs values in different objects 37642 may make them incompatible. This pragma is useful when a 37643 performance-critical function uses a memreg for temporary values, 37644 as it may allow you to reduce the number of memregs used. 37645 37646 `ADDRESS NAME ADDRESS' 37647 For any declared symbols matching NAME, this does three things to 37648 that symbol: it forces the symbol to be located at the given 37649 address (a number), it forces the symbol to be volatile, and it 37650 changes the symbol's scope to be static. This pragma exists for 37651 compatibility with other compilers, but note that the common 37652 `1234H' numeric syntax is not supported (use `0x1234' instead). 37653 Example: 37654 37655 #pragma ADDRESS port3 0x103 37656 char port3; 37657 37658 37659 37660 File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas 37661 37662 6.56.3 MeP Pragmas 37663 ------------------ 37664 37665 `custom io_volatile (on|off)' 37666 Overrides the command line option `-mio-volatile' for the current 37667 file. Note that for compatibility with future GCC releases, this 37668 option should only be used once before any `io' variables in each 37669 file. 37670 37671 `GCC coprocessor available REGISTERS' 37672 Specifies which coprocessor registers are available to the register 37673 allocator. REGISTERS may be a single register, register range 37674 separated by ellipses, or comma-separated list of those. Example: 37675 37676 #pragma GCC coprocessor available $c0...$c10, $c28 37677 37678 `GCC coprocessor call_saved REGISTERS' 37679 Specifies which coprocessor registers are to be saved and restored 37680 by any function using them. REGISTERS may be a single register, 37681 register range separated by ellipses, or comma-separated list of 37682 those. Example: 37683 37684 #pragma GCC coprocessor call_saved $c4...$c6, $c31 37685 37686 `GCC coprocessor subclass '(A|B|C|D)' = REGISTERS' 37687 Creates and defines a register class. These register classes can 37688 be used by inline `asm' constructs. REGISTERS may be a single 37689 register, register range separated by ellipses, or comma-separated 37690 list of those. Example: 37691 37692 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6 37693 37694 asm ("cpfoo %0" : "=B" (x)); 37695 37696 `GCC disinterrupt NAME , NAME ...' 37697 For the named functions, the compiler adds code to disable 37698 interrupts for the duration of those functions. Any functions so 37699 named, which are not encountered in the source, cause a warning 37700 that the pragma was not used. Examples: 37701 37702 #pragma disinterrupt foo 37703 #pragma disinterrupt bar, grill 37704 int foo () { ... } 37705 37706 `GCC call NAME , NAME ...' 37707 For the named functions, the compiler always uses a 37708 register-indirect call model when calling the named functions. 37709 Examples: 37710 37711 extern int foo (); 37712 #pragma call foo 37713 37714 37715 37716 File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas 37717 37718 6.56.4 RS/6000 and PowerPC Pragmas 37719 ---------------------------------- 37720 37721 The RS/6000 and PowerPC targets define one pragma for controlling 37722 whether or not the `longcall' attribute is added to function 37723 declarations by default. This pragma overrides the `-mlongcall' 37724 option, but not the `longcall' and `shortcall' attributes. *Note 37725 RS/6000 and PowerPC Options::, for more information about when long 37726 calls are and are not necessary. 37727 37728 `longcall (1)' 37729 Apply the `longcall' attribute to all subsequent function 37730 declarations. 37731 37732 `longcall (0)' 37733 Do not apply the `longcall' attribute to subsequent function 37734 declarations. 37735 37736 37737 File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 37738 37739 6.56.5 Darwin Pragmas 37740 --------------------- 37741 37742 The following pragmas are available for all architectures running the 37743 Darwin operating system. These are useful for compatibility with other 37744 Mac OS compilers. 37745 37746 `mark TOKENS...' 37747 This pragma is accepted, but has no effect. 37748 37749 `options align=ALIGNMENT' 37750 This pragma sets the alignment of fields in structures. The 37751 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 37752 `power', to emulate PowerPC alignment. Uses of this pragma nest 37753 properly; to restore the previous setting, use `reset' for the 37754 ALIGNMENT. 37755 37756 `segment TOKENS...' 37757 This pragma is accepted, but has no effect. 37758 37759 `unused (VAR [, VAR]...)' 37760 This pragma declares variables to be possibly unused. GCC will not 37761 produce warnings for the listed variables. The effect is similar 37762 to that of the `unused' attribute, except that this pragma may 37763 appear anywhere within the variables' scopes. 37764 37765 37766 File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 37767 37768 6.56.6 Solaris Pragmas 37769 ---------------------- 37770 37771 The Solaris target supports `#pragma redefine_extname' (*note 37772 Symbol-Renaming Pragmas::). It also supports additional `#pragma' 37773 directives for compatibility with the system compiler. 37774 37775 `align ALIGNMENT (VARIABLE [, VARIABLE]...)' 37776 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 37777 This is the same as GCC's `aligned' attribute *note Variable 37778 Attributes::). Macro expansion occurs on the arguments to this 37779 pragma when compiling C and Objective-C. It does not currently 37780 occur when compiling C++, but this is a bug which may be fixed in 37781 a future release. 37782 37783 `fini (FUNCTION [, FUNCTION]...)' 37784 This pragma causes each listed FUNCTION to be called after main, 37785 or during shared module unloading, by adding a call to the `.fini' 37786 section. 37787 37788 `init (FUNCTION [, FUNCTION]...)' 37789 This pragma causes each listed FUNCTION to be called during 37790 initialization (before `main') or during shared module loading, by 37791 adding a call to the `.init' section. 37792 37793 37794 37795 File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 37796 37797 6.56.7 Symbol-Renaming Pragmas 37798 ------------------------------ 37799 37800 For compatibility with the Solaris and Tru64 UNIX system headers, GCC 37801 supports two `#pragma' directives which change the name used in 37802 assembly for a given declaration. `#pragma extern_prefix' is only 37803 available on platforms whose system headers need it. To get this effect 37804 on all platforms supported by GCC, use the asm labels extension (*note 37805 Asm Labels::). 37806 37807 `redefine_extname OLDNAME NEWNAME' 37808 This pragma gives the C function OLDNAME the assembly symbol 37809 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will 37810 be defined if this pragma is available (currently on all 37811 platforms). 37812 37813 `extern_prefix STRING' 37814 This pragma causes all subsequent external function and variable 37815 declarations to have STRING prepended to their assembly symbols. 37816 This effect may be terminated with another `extern_prefix' pragma 37817 whose argument is an empty string. The preprocessor macro 37818 `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is 37819 available (currently only on Tru64 UNIX). 37820 37821 These pragmas and the asm labels extension interact in a complicated 37822 manner. Here are some corner cases you may want to be aware of. 37823 37824 1. Both pragmas silently apply only to declarations with external 37825 linkage. Asm labels do not have this restriction. 37826 37827 2. In C++, both pragmas silently apply only to declarations with "C" 37828 linkage. Again, asm labels do not have this restriction. 37829 37830 3. If any of the three ways of changing the assembly name of a 37831 declaration is applied to a declaration whose assembly name has 37832 already been determined (either by a previous use of one of these 37833 features, or because the compiler needed the assembly name in 37834 order to generate code), and the new name is different, a warning 37835 issues and the name does not change. 37836 37837 4. The OLDNAME used by `#pragma redefine_extname' is always the 37838 C-language name. 37839 37840 5. If `#pragma extern_prefix' is in effect, and a declaration occurs 37841 with an asm label attached, the prefix is silently ignored for 37842 that declaration. 37843 37844 6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to 37845 the same declaration, whichever triggered first wins, and a 37846 warning issues if they contradict each other. (We would like to 37847 have `#pragma redefine_extname' always win, for consistency with 37848 asm labels, but if `#pragma extern_prefix' triggers first we have 37849 no way of knowing that that happened.) 37850 37851 37852 File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 37853 37854 6.56.8 Structure-Packing Pragmas 37855 -------------------------------- 37856 37857 For compatibility with Microsoft Windows compilers, GCC supports a set 37858 of `#pragma' directives which change the maximum alignment of members 37859 of structures (other than zero-width bitfields), unions, and classes 37860 subsequently defined. The N value below always is required to be a 37861 small power of two and specifies the new alignment in bytes. 37862 37863 1. `#pragma pack(N)' simply sets the new alignment. 37864 37865 2. `#pragma pack()' sets the alignment to the one that was in effect 37866 when compilation started (see also command-line option 37867 `-fpack-struct[=N]' *note Code Gen Options::). 37868 37869 3. `#pragma pack(push[,N])' pushes the current alignment setting on 37870 an internal stack and then optionally sets the new alignment. 37871 37872 4. `#pragma pack(pop)' restores the alignment setting to the one 37873 saved at the top of the internal stack (and removes that stack 37874 entry). Note that `#pragma pack([N])' does not influence this 37875 internal stack; thus it is possible to have `#pragma pack(push)' 37876 followed by multiple `#pragma pack(N)' instances and finalized by 37877 a single `#pragma pack(pop)'. 37878 37879 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma' 37880 which lays out a structure as the documented `__attribute__ 37881 ((ms_struct))'. 37882 1. `#pragma ms_struct on' turns on the layout for structures declared. 37883 37884 2. `#pragma ms_struct off' turns off the layout for structures 37885 declared. 37886 37887 3. `#pragma ms_struct reset' goes back to the default layout. 37888 37889 37890 File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 37891 37892 6.56.9 Weak Pragmas 37893 ------------------- 37894 37895 For compatibility with SVR4, GCC supports a set of `#pragma' directives 37896 for declaring symbols to be weak, and defining weak aliases. 37897 37898 `#pragma weak SYMBOL' 37899 This pragma declares SYMBOL to be weak, as if the declaration had 37900 the attribute of the same name. The pragma may appear before or 37901 after the declaration of SYMBOL. It is not an error for SYMBOL to 37902 never be defined at all. 37903 37904 `#pragma weak SYMBOL1 = SYMBOL2' 37905 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 37906 an error if SYMBOL2 is not defined in the current translation unit. 37907 37908 37909 File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 37910 37911 6.56.10 Diagnostic Pragmas 37912 -------------------------- 37913 37914 GCC allows the user to selectively enable or disable certain types of 37915 diagnostics, and change the kind of the diagnostic. For example, a 37916 project's policy might require that all sources compile with `-Werror' 37917 but certain files might have exceptions allowing specific types of 37918 warnings. Or, a project might selectively enable diagnostics and treat 37919 them as errors depending on which preprocessor macros are defined. 37920 37921 `#pragma GCC diagnostic KIND OPTION' 37922 Modifies the disposition of a diagnostic. Note that not all 37923 diagnostics are modifiable; at the moment only warnings (normally 37924 controlled by `-W...') can be controlled, and not all of them. 37925 Use `-fdiagnostics-show-option' to determine which diagnostics are 37926 controllable and which option controls them. 37927 37928 KIND is `error' to treat this diagnostic as an error, `warning' to 37929 treat it like a warning (even if `-Werror' is in effect), or 37930 `ignored' if the diagnostic is to be ignored. OPTION is a double 37931 quoted string which matches the command-line option. 37932 37933 #pragma GCC diagnostic warning "-Wformat" 37934 #pragma GCC diagnostic error "-Wformat" 37935 #pragma GCC diagnostic ignored "-Wformat" 37936 37937 Note that these pragmas override any command-line options. GCC 37938 keeps track of the location of each pragma, and issues diagnostics 37939 according to the state as of that point in the source file. Thus, 37940 pragmas occurring after a line do not affect diagnostics caused by 37941 that line. 37942 37943 `#pragma GCC diagnostic push' 37944 `#pragma GCC diagnostic pop' 37945 Causes GCC to remember the state of the diagnostics as of each 37946 `push', and restore to that point at each `pop'. If a `pop' has 37947 no matching `push', the command line options are restored. 37948 37949 #pragma GCC diagnostic error "-Wuninitialized" 37950 foo(a); /* error is given for this one */ 37951 #pragma GCC diagnostic push 37952 #pragma GCC diagnostic ignored "-Wuninitialized" 37953 foo(b); /* no diagnostic for this one */ 37954 #pragma GCC diagnostic pop 37955 foo(c); /* error is given for this one */ 37956 #pragma GCC diagnostic pop 37957 foo(d); /* depends on command line options */ 37958 37959 37960 GCC also offers a simple mechanism for printing messages during 37961 compilation. 37962 37963 `#pragma message STRING' 37964 Prints STRING as a compiler message on compilation. The message 37965 is informational only, and is neither a compilation warning nor an 37966 error. 37967 37968 #pragma message "Compiling " __FILE__ "..." 37969 37970 STRING may be parenthesized, and is printed with location 37971 information. For example, 37972 37973 #define DO_PRAGMA(x) _Pragma (#x) 37974 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 37975 37976 TODO(Remember to fix this) 37977 37978 prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to 37979 fix this'. 37980 37981 37982 37983 File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 37984 37985 6.56.11 Visibility Pragmas 37986 -------------------------- 37987 37988 `#pragma GCC visibility push(VISIBILITY)' 37989 `#pragma GCC visibility pop' 37990 This pragma allows the user to set the visibility for multiple 37991 declarations without having to give each a visibility attribute 37992 *Note Function Attributes::, for more information about visibility 37993 and the attribute syntax. 37994 37995 In C++, `#pragma GCC visibility' affects only namespace-scope 37996 declarations. Class members and template specializations are not 37997 affected; if you want to override the visibility for a particular 37998 member or instantiation, you must use an attribute. 37999 38000 38001 38002 File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 38003 38004 6.56.12 Push/Pop Macro Pragmas 38005 ------------------------------ 38006 38007 For compatibility with Microsoft Windows compilers, GCC supports 38008 `#pragma push_macro("MACRO_NAME")' and `#pragma 38009 pop_macro("MACRO_NAME")'. 38010 38011 `#pragma push_macro("MACRO_NAME")' 38012 This pragma saves the value of the macro named as MACRO_NAME to 38013 the top of the stack for this macro. 38014 38015 `#pragma pop_macro("MACRO_NAME")' 38016 This pragma sets the value of the macro named as MACRO_NAME to the 38017 value on top of the stack for this macro. If the stack for 38018 MACRO_NAME is empty, the value of the macro remains unchanged. 38019 38020 For example: 38021 38022 #define X 1 38023 #pragma push_macro("X") 38024 #undef X 38025 #define X -1 38026 #pragma pop_macro("X") 38027 int x [X]; 38028 38029 In this example, the definition of X as 1 is saved by `#pragma 38030 push_macro' and restored by `#pragma pop_macro'. 38031 38032 38033 File: gcc.info, Node: Function Specific Option Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 38034 38035 6.56.13 Function Specific Option Pragmas 38036 ---------------------------------------- 38037 38038 `#pragma GCC target ("STRING"...)' 38039 This pragma allows you to set target specific options for functions 38040 defined later in the source file. One or more strings can be 38041 specified. Each function that is defined after this point will be 38042 as if `attribute((target("STRING")))' was specified for that 38043 function. The parenthesis around the options is optional. *Note 38044 Function Attributes::, for more information about the `target' 38045 attribute and the attribute syntax. 38046 38047 The `#pragma GCC target' attribute is not implemented in GCC 38048 versions earlier than 4.4 for the i386/x86_64 and 4.6 for the 38049 PowerPC backends. At present, it is not implemented for other 38050 backends. 38051 38052 `#pragma GCC optimize ("STRING"...)' 38053 This pragma allows you to set global optimization options for 38054 functions defined later in the source file. One or more strings 38055 can be specified. Each function that is defined after this point 38056 will be as if `attribute((optimize("STRING")))' was specified for 38057 that function. The parenthesis around the options is optional. 38058 *Note Function Attributes::, for more information about the 38059 `optimize' attribute and the attribute syntax. 38060 38061 The `#pragma GCC optimize' pragma is not implemented in GCC 38062 versions earlier than 4.4. 38063 38064 `#pragma GCC push_options' 38065 `#pragma GCC pop_options' 38066 These pragmas maintain a stack of the current target and 38067 optimization options. It is intended for include files where you 38068 temporarily want to switch to using a different `#pragma GCC 38069 target' or `#pragma GCC optimize' and then to pop back to the 38070 previous options. 38071 38072 The `#pragma GCC push_options' and `#pragma GCC pop_options' 38073 pragmas are not implemented in GCC versions earlier than 4.4. 38074 38075 `#pragma GCC reset_options' 38076 This pragma clears the current `#pragma GCC target' and `#pragma 38077 GCC optimize' to use the default switches as specified on the 38078 command line. 38079 38080 The `#pragma GCC reset_options' pragma is not implemented in GCC 38081 versions earlier than 4.4. 38082 38083 38084 File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 38085 38086 6.57 Unnamed struct/union fields within structs/unions 38087 ====================================================== 38088 38089 As permitted by ISO C1X and for compatibility with other compilers, GCC 38090 allows you to define a structure or union that contains, as fields, 38091 structures and unions without names. For example: 38092 38093 struct { 38094 int a; 38095 union { 38096 int b; 38097 float c; 38098 }; 38099 int d; 38100 } foo; 38101 38102 In this example, the user would be able to access members of the 38103 unnamed union with code like `foo.b'. Note that only unnamed structs 38104 and unions are allowed, you may not have, for example, an unnamed `int'. 38105 38106 You must never create such structures that cause ambiguous field 38107 definitions. For example, this structure: 38108 38109 struct { 38110 int a; 38111 struct { 38112 int a; 38113 }; 38114 } foo; 38115 38116 It is ambiguous which `a' is being referred to with `foo.a'. The 38117 compiler gives errors for such constructs. 38118 38119 Unless `-fms-extensions' is used, the unnamed field must be a 38120 structure or union definition without a tag (for example, `struct { int 38121 a; };'). If `-fms-extensions' is used, the field may also be a 38122 definition with a tag such as `struct foo { int a; };', a reference to 38123 a previously defined structure or union such as `struct foo;', or a 38124 reference to a `typedef' name for a previously defined structure or 38125 union type. 38126 38127 The option `-fplan9-extensions' enables `-fms-extensions' as well as 38128 two other extensions. First, a pointer to a structure is automatically 38129 converted to a pointer to an anonymous field for assignments and 38130 function calls. For example: 38131 38132 struct s1 { int a; }; 38133 struct s2 { struct s1; }; 38134 extern void f1 (struct s1 *); 38135 void f2 (struct s2 *p) { f1 (p); } 38136 38137 In the call to `f1' inside `f2', the pointer `p' is converted into a 38138 pointer to the anonymous field. 38139 38140 Second, when the type of an anonymous field is a `typedef' for a 38141 `struct' or `union', code may refer to the field using the name of the 38142 `typedef'. 38143 38144 typedef struct { int a; } s1; 38145 struct s2 { s1; }; 38146 s1 f1 (struct s2 *p) { return p->s1; } 38147 38148 These usages are only permitted when they are not ambiguous. 38149 38150 38151 File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 38152 38153 6.58 Thread-Local Storage 38154 ========================= 38155 38156 Thread-local storage (TLS) is a mechanism by which variables are 38157 allocated such that there is one instance of the variable per extant 38158 thread. The run-time model GCC uses to implement this originates in 38159 the IA-64 processor-specific ABI, but has since been migrated to other 38160 processors as well. It requires significant support from the linker 38161 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 38162 `libpthread.so'), so it is not available everywhere. 38163 38164 At the user level, the extension is visible with a new storage class 38165 keyword: `__thread'. For example: 38166 38167 __thread int i; 38168 extern __thread struct state s; 38169 static __thread char *p; 38170 38171 The `__thread' specifier may be used alone, with the `extern' or 38172 `static' specifiers, but with no other storage class specifier. When 38173 used with `extern' or `static', `__thread' must appear immediately 38174 after the other storage class specifier. 38175 38176 The `__thread' specifier may be applied to any global, file-scoped 38177 static, function-scoped static, or static data member of a class. It 38178 may not be applied to block-scoped automatic or non-static data member. 38179 38180 When the address-of operator is applied to a thread-local variable, it 38181 is evaluated at run-time and returns the address of the current thread's 38182 instance of that variable. An address so obtained may be used by any 38183 thread. When a thread terminates, any pointers to thread-local 38184 variables in that thread become invalid. 38185 38186 No static initialization may refer to the address of a thread-local 38187 variable. 38188 38189 In C++, if an initializer is present for a thread-local variable, it 38190 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 38191 standard. 38192 38193 See ELF Handling For Thread-Local Storage 38194 (http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of 38195 the four thread-local storage addressing models, and how the run-time 38196 is expected to function. 38197 38198 * Menu: 38199 38200 * C99 Thread-Local Edits:: 38201 * C++98 Thread-Local Edits:: 38202 38203 38204 File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 38205 38206 6.58.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 38207 ------------------------------------------------------- 38208 38209 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 38210 document the exact semantics of the language extension. 38211 38212 * `5.1.2 Execution environments' 38213 38214 Add new text after paragraph 1 38215 38216 Within either execution environment, a "thread" is a flow of 38217 control within a program. It is implementation defined 38218 whether or not there may be more than one thread associated 38219 with a program. It is implementation defined how threads 38220 beyond the first are created, the name and type of the 38221 function called at thread startup, and how threads may be 38222 terminated. However, objects with thread storage duration 38223 shall be initialized before thread startup. 38224 38225 * `6.2.4 Storage durations of objects' 38226 38227 Add new text before paragraph 3 38228 38229 An object whose identifier is declared with the storage-class 38230 specifier `__thread' has "thread storage duration". Its 38231 lifetime is the entire execution of the thread, and its 38232 stored value is initialized only once, prior to thread 38233 startup. 38234 38235 * `6.4.1 Keywords' 38236 38237 Add `__thread'. 38238 38239 * `6.7.1 Storage-class specifiers' 38240 38241 Add `__thread' to the list of storage class specifiers in 38242 paragraph 1. 38243 38244 Change paragraph 2 to 38245 38246 With the exception of `__thread', at most one storage-class 38247 specifier may be given [...]. The `__thread' specifier may 38248 be used alone, or immediately following `extern' or `static'. 38249 38250 Add new text after paragraph 6 38251 38252 The declaration of an identifier for a variable that has 38253 block scope that specifies `__thread' shall also specify 38254 either `extern' or `static'. 38255 38256 The `__thread' specifier shall be used only with variables. 38257 38258 38259 File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 38260 38261 6.58.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 38262 -------------------------------------------------------- 38263 38264 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 38265 that document the exact semantics of the language extension. 38266 38267 * [intro.execution] 38268 38269 New text after paragraph 4 38270 38271 A "thread" is a flow of control within the abstract machine. 38272 It is implementation defined whether or not there may be more 38273 than one thread. 38274 38275 New text after paragraph 7 38276 38277 It is unspecified whether additional action must be taken to 38278 ensure when and whether side effects are visible to other 38279 threads. 38280 38281 * [lex.key] 38282 38283 Add `__thread'. 38284 38285 * [basic.start.main] 38286 38287 Add after paragraph 5 38288 38289 The thread that begins execution at the `main' function is 38290 called the "main thread". It is implementation defined how 38291 functions beginning threads other than the main thread are 38292 designated or typed. A function so designated, as well as 38293 the `main' function, is called a "thread startup function". 38294 It is implementation defined what happens if a thread startup 38295 function returns. It is implementation defined what happens 38296 to other threads when any thread calls `exit'. 38297 38298 * [basic.start.init] 38299 38300 Add after paragraph 4 38301 38302 The storage for an object of thread storage duration shall be 38303 statically initialized before the first statement of the 38304 thread startup function. An object of thread storage 38305 duration shall not require dynamic initialization. 38306 38307 * [basic.start.term] 38308 38309 Add after paragraph 3 38310 38311 The type of an object with thread storage duration shall not 38312 have a non-trivial destructor, nor shall it be an array type 38313 whose elements (directly or indirectly) have non-trivial 38314 destructors. 38315 38316 * [basic.stc] 38317 38318 Add "thread storage duration" to the list in paragraph 1. 38319 38320 Change paragraph 2 38321 38322 Thread, static, and automatic storage durations are 38323 associated with objects introduced by declarations [...]. 38324 38325 Add `__thread' to the list of specifiers in paragraph 3. 38326 38327 * [basic.stc.thread] 38328 38329 New section before [basic.stc.static] 38330 38331 The keyword `__thread' applied to a non-local object gives the 38332 object thread storage duration. 38333 38334 A local variable or class data member declared both `static' 38335 and `__thread' gives the variable or member thread storage 38336 duration. 38337 38338 * [basic.stc.static] 38339 38340 Change paragraph 1 38341 38342 All objects which have neither thread storage duration, 38343 dynamic storage duration nor are local [...]. 38344 38345 * [dcl.stc] 38346 38347 Add `__thread' to the list in paragraph 1. 38348 38349 Change paragraph 1 38350 38351 With the exception of `__thread', at most one 38352 STORAGE-CLASS-SPECIFIER shall appear in a given 38353 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 38354 alone, or immediately following the `extern' or `static' 38355 specifiers. [...] 38356 38357 Add after paragraph 5 38358 38359 The `__thread' specifier can be applied only to the names of 38360 objects and to anonymous unions. 38361 38362 * [class.mem] 38363 38364 Add after paragraph 6 38365 38366 Non-`static' members shall not be `__thread'. 38367 38368 38369 File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 38370 38371 6.59 Binary constants using the `0b' prefix 38372 =========================================== 38373 38374 Integer constants can be written as binary constants, consisting of a 38375 sequence of `0' and `1' digits, prefixed by `0b' or `0B'. This is 38376 particularly useful in environments that operate a lot on the bit-level 38377 (like microcontrollers). 38378 38379 The following statements are identical: 38380 38381 i = 42; 38382 i = 0x2a; 38383 i = 052; 38384 i = 0b101010; 38385 38386 The type of these constants follows the same rules as for octal or 38387 hexadecimal integer constants, so suffixes like `L' or `UL' can be 38388 applied. 38389 38390 38391 File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C++ Implementation, Up: Top 38392 38393 7 Extensions to the C++ Language 38394 ******************************** 38395 38396 The GNU compiler provides these extensions to the C++ language (and you 38397 can also use most of the C language extensions in your C++ programs). 38398 If you want to write code that checks whether these features are 38399 available, you can test for the GNU compiler the same way as for C 38400 programs: check for a predefined macro `__GNUC__'. You can also use 38401 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 38402 (cpp)Common Predefined Macros.). 38403 38404 * Menu: 38405 38406 * C++ Volatiles:: What constitutes an access to a volatile object. 38407 * Restricted Pointers:: C99 restricted pointers and references. 38408 * Vague Linkage:: Where G++ puts inlines, vtables and such. 38409 * C++ Interface:: You can use a single C++ header file for both 38410 declarations and definitions. 38411 * Template Instantiation:: Methods for ensuring that exactly one copy of 38412 each needed template instantiation is emitted. 38413 * Bound member functions:: You can extract a function pointer to the 38414 method denoted by a `->*' or `.*' expression. 38415 * C++ Attributes:: Variable, function, and type attributes for C++ only. 38416 * Namespace Association:: Strong using-directives for namespace association. 38417 * Type Traits:: Compiler support for type traits 38418 * Java Exceptions:: Tweaking exception handling to work with Java. 38419 * Deprecated Features:: Things will disappear from g++. 38420 * Backwards Compatibility:: Compatibilities with earlier definitions of C++. 38421 38422 38423 File: gcc.info, Node: C++ Volatiles, Next: Restricted Pointers, Up: C++ Extensions 38424 38425 7.1 When is a Volatile C++ Object Accessed? 38426 =========================================== 38427 38428 The C++ standard differs from the C standard in its treatment of 38429 volatile objects. It fails to specify what constitutes a volatile 38430 access, except to say that C++ should behave in a similar manner to C 38431 with respect to volatiles, where possible. However, the different 38432 lvalueness of expressions between C and C++ complicate the behavior. 38433 G++ behaves the same as GCC for volatile access, *Note Volatiles: C 38434 Extensions, for a description of GCC's behavior. 38435 38436 The C and C++ language specifications differ when an object is 38437 accessed in a void context: 38438 38439 volatile int *src = SOMEVALUE; 38440 *src; 38441 38442 The C++ standard specifies that such expressions do not undergo lvalue 38443 to rvalue conversion, and that the type of the dereferenced object may 38444 be incomplete. The C++ standard does not specify explicitly that it is 38445 lvalue to rvalue conversion which is responsible for causing an access. 38446 There is reason to believe that it is, because otherwise certain simple 38447 expressions become undefined. However, because it would surprise most 38448 programmers, G++ treats dereferencing a pointer to volatile object of 38449 complete type as GCC would do for an equivalent type in C. When the 38450 object has incomplete type, G++ issues a warning; if you wish to force 38451 an error, you must force a conversion to rvalue with, for instance, a 38452 static cast. 38453 38454 When using a reference to volatile, G++ does not treat equivalent 38455 expressions as accesses to volatiles, but instead issues a warning that 38456 no volatile is accessed. The rationale for this is that otherwise it 38457 becomes difficult to determine where volatile access occur, and not 38458 possible to ignore the return value from functions returning volatile 38459 references. Again, if you wish to force a read, cast the reference to 38460 an rvalue. 38461 38462 G++ implements the same behavior as GCC does when assigning to a 38463 volatile object - there is no reread of the assigned-to object, the 38464 assigned rvalue is reused. Note that in C++ assignment expressions are 38465 lvalues, and if used as an lvalue, the volatile object will be referred 38466 to. For instance, VREF will refer to VOBJ, as expected, in the 38467 following example: 38468 38469 volatile int vobj; 38470 volatile int &vref = vobj = SOMETHING; 38471 38472 38473 File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: C++ Volatiles, Up: C++ Extensions 38474 38475 7.2 Restricting Pointer Aliasing 38476 ================================ 38477 38478 As with the C front end, G++ understands the C99 feature of restricted 38479 pointers, specified with the `__restrict__', or `__restrict' type 38480 qualifier. Because you cannot compile C++ by specifying the `-std=c99' 38481 language flag, `restrict' is not a keyword in C++. 38482 38483 In addition to allowing restricted pointers, you can specify restricted 38484 references, which indicate that the reference is not aliased in the 38485 local context. 38486 38487 void fn (int *__restrict__ rptr, int &__restrict__ rref) 38488 { 38489 /* ... */ 38490 } 38491 38492 In the body of `fn', RPTR points to an unaliased integer and RREF 38493 refers to a (different) unaliased integer. 38494 38495 You may also specify whether a member function's THIS pointer is 38496 unaliased by using `__restrict__' as a member function qualifier. 38497 38498 void T::fn () __restrict__ 38499 { 38500 /* ... */ 38501 } 38502 38503 Within the body of `T::fn', THIS will have the effective definition `T 38504 *__restrict__ const this'. Notice that the interpretation of a 38505 `__restrict__' member function qualifier is different to that of 38506 `const' or `volatile' qualifier, in that it is applied to the pointer 38507 rather than the object. This is consistent with other compilers which 38508 implement restricted pointers. 38509 38510 As with all outermost parameter qualifiers, `__restrict__' is ignored 38511 in function definition matching. This means you only need to specify 38512 `__restrict__' in a function definition, rather than in a function 38513 prototype as well. 38514 38515 38516 File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 38517 38518 7.3 Vague Linkage 38519 ================= 38520 38521 There are several constructs in C++ which require space in the object 38522 file but are not clearly tied to a single translation unit. We say that 38523 these constructs have "vague linkage". Typically such constructs are 38524 emitted wherever they are needed, though sometimes we can be more 38525 clever. 38526 38527 Inline Functions 38528 Inline functions are typically defined in a header file which can 38529 be included in many different compilations. Hopefully they can 38530 usually be inlined, but sometimes an out-of-line copy is 38531 necessary, if the address of the function is taken or if inlining 38532 fails. In general, we emit an out-of-line copy in all translation 38533 units where one is needed. As an exception, we only emit inline 38534 virtual functions with the vtable, since it will always require a 38535 copy. 38536 38537 Local static variables and string constants used in an inline 38538 function are also considered to have vague linkage, since they 38539 must be shared between all inlined and out-of-line instances of 38540 the function. 38541 38542 VTables 38543 C++ virtual functions are implemented in most compilers using a 38544 lookup table, known as a vtable. The vtable contains pointers to 38545 the virtual functions provided by a class, and each object of the 38546 class contains a pointer to its vtable (or vtables, in some 38547 multiple-inheritance situations). If the class declares any 38548 non-inline, non-pure virtual functions, the first one is chosen as 38549 the "key method" for the class, and the vtable is only emitted in 38550 the translation unit where the key method is defined. 38551 38552 _Note:_ If the chosen key method is later defined as inline, the 38553 vtable will still be emitted in every translation unit which 38554 defines it. Make sure that any inline virtuals are declared 38555 inline in the class body, even if they are not defined there. 38556 38557 `type_info' objects 38558 C++ requires information about types to be written out in order to 38559 implement `dynamic_cast', `typeid' and exception handling. For 38560 polymorphic classes (classes with virtual functions), the 38561 `type_info' object is written out along with the vtable so that 38562 `dynamic_cast' can determine the dynamic type of a class object at 38563 runtime. For all other types, we write out the `type_info' object 38564 when it is used: when applying `typeid' to an expression, throwing 38565 an object, or referring to a type in a catch clause or exception 38566 specification. 38567 38568 Template Instantiations 38569 Most everything in this section also applies to template 38570 instantiations, but there are other options as well. *Note 38571 Where's the Template?: Template Instantiation. 38572 38573 38574 When used with GNU ld version 2.8 or later on an ELF system such as 38575 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 38576 these constructs will be discarded at link time. This is known as 38577 COMDAT support. 38578 38579 On targets that don't support COMDAT, but do support weak symbols, GCC 38580 will use them. This way one copy will override all the others, but the 38581 unused copies will still take up space in the executable. 38582 38583 For targets which do not support either COMDAT or weak symbols, most 38584 entities with vague linkage will be emitted as local symbols to avoid 38585 duplicate definition errors from the linker. This will not happen for 38586 local statics in inlines, however, as having multiple copies will 38587 almost certainly break things. 38588 38589 *Note Declarations and Definitions in One Header: C++ Interface, for 38590 another way to control placement of these constructs. 38591 38592 38593 File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 38594 38595 7.4 #pragma interface and implementation 38596 ======================================== 38597 38598 `#pragma interface' and `#pragma implementation' provide the user with 38599 a way of explicitly directing the compiler to emit entities with vague 38600 linkage (and debugging information) in a particular translation unit. 38601 38602 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 38603 cases, because of COMDAT support and the "key method" heuristic 38604 mentioned in *note Vague Linkage::. Using them can actually cause your 38605 program to grow due to unnecessary out-of-line copies of inline 38606 functions. Currently (3.4) the only benefit of these `#pragma's is 38607 reduced duplication of debugging information, and that should be 38608 addressed soon on DWARF 2 targets with the use of COMDAT groups. 38609 38610 `#pragma interface' 38611 `#pragma interface "SUBDIR/OBJECTS.h"' 38612 Use this directive in _header files_ that define object classes, 38613 to save space in most of the object files that use those classes. 38614 Normally, local copies of certain information (backup copies of 38615 inline member functions, debugging information, and the internal 38616 tables that implement virtual functions) must be kept in each 38617 object file that includes class definitions. You can use this 38618 pragma to avoid such duplication. When a header file containing 38619 `#pragma interface' is included in a compilation, this auxiliary 38620 information will not be generated (unless the main input source 38621 file itself uses `#pragma implementation'). Instead, the object 38622 files will contain references to be resolved at link time. 38623 38624 The second form of this directive is useful for the case where you 38625 have multiple headers with the same name in different directories. 38626 If you use this form, you must specify the same string to `#pragma 38627 implementation'. 38628 38629 `#pragma implementation' 38630 `#pragma implementation "OBJECTS.h"' 38631 Use this pragma in a _main input file_, when you want full output 38632 from included header files to be generated (and made globally 38633 visible). The included header file, in turn, should use `#pragma 38634 interface'. Backup copies of inline member functions, debugging 38635 information, and the internal tables used to implement virtual 38636 functions are all generated in implementation files. 38637 38638 If you use `#pragma implementation' with no argument, it applies to 38639 an include file with the same basename(1) as your source file. 38640 For example, in `allclass.cc', giving just `#pragma implementation' 38641 by itself is equivalent to `#pragma implementation "allclass.h"'. 38642 38643 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 38644 an implementation file whenever you would include it from 38645 `allclass.cc' even if you never specified `#pragma 38646 implementation'. This was deemed to be more trouble than it was 38647 worth, however, and disabled. 38648 38649 Use the string argument if you want a single implementation file to 38650 include code from multiple header files. (You must also use 38651 `#include' to include the header file; `#pragma implementation' 38652 only specifies how to use the file--it doesn't actually include 38653 it.) 38654 38655 There is no way to split up the contents of a single header file 38656 into multiple implementation files. 38657 38658 `#pragma implementation' and `#pragma interface' also have an effect 38659 on function inlining. 38660 38661 If you define a class in a header file marked with `#pragma 38662 interface', the effect on an inline function defined in that class is 38663 similar to an explicit `extern' declaration--the compiler emits no code 38664 at all to define an independent version of the function. Its 38665 definition is used only for inlining with its callers. 38666 38667 Conversely, when you include the same header file in a main source file 38668 that declares it as `#pragma implementation', the compiler emits code 38669 for the function itself; this defines a version of the function that 38670 can be found via pointers (or by callers compiled without inlining). 38671 If all calls to the function can be inlined, you can avoid emitting the 38672 function by compiling with `-fno-implement-inlines'. If any calls were 38673 not inlined, you will get linker errors. 38674 38675 ---------- Footnotes ---------- 38676 38677 (1) A file's "basename" was the name stripped of all leading path 38678 information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 38679 38680 38681 File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 38682 38683 7.5 Where's the Template? 38684 ========================= 38685 38686 C++ templates are the first language feature to require more 38687 intelligence from the environment than one usually finds on a UNIX 38688 system. Somehow the compiler and linker have to make sure that each 38689 template instance occurs exactly once in the executable if it is needed, 38690 and not at all otherwise. There are two basic approaches to this 38691 problem, which are referred to as the Borland model and the Cfront 38692 model. 38693 38694 Borland model 38695 Borland C++ solved the template instantiation problem by adding 38696 the code equivalent of common blocks to their linker; the compiler 38697 emits template instances in each translation unit that uses them, 38698 and the linker collapses them together. The advantage of this 38699 model is that the linker only has to consider the object files 38700 themselves; there is no external complexity to worry about. This 38701 disadvantage is that compilation time is increased because the 38702 template code is being compiled repeatedly. Code written for this 38703 model tends to include definitions of all templates in the header 38704 file, since they must be seen to be instantiated. 38705 38706 Cfront model 38707 The AT&T C++ translator, Cfront, solved the template instantiation 38708 problem by creating the notion of a template repository, an 38709 automatically maintained place where template instances are 38710 stored. A more modern version of the repository works as follows: 38711 As individual object files are built, the compiler places any 38712 template definitions and instantiations encountered in the 38713 repository. At link time, the link wrapper adds in the objects in 38714 the repository and compiles any needed instances that were not 38715 previously emitted. The advantages of this model are more optimal 38716 compilation speed and the ability to use the system linker; to 38717 implement the Borland model a compiler vendor also needs to 38718 replace the linker. The disadvantages are vastly increased 38719 complexity, and thus potential for error; for some code this can be 38720 just as transparent, but in practice it can been very difficult to 38721 build multiple programs in one directory and one program in 38722 multiple directories. Code written for this model tends to 38723 separate definitions of non-inline member templates into a 38724 separate file, which should be compiled separately. 38725 38726 When used with GNU ld version 2.8 or later on an ELF system such as 38727 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 38728 Borland model. On other systems, G++ implements neither automatic 38729 model. 38730 38731 A future version of G++ will support a hybrid model whereby the 38732 compiler will emit any instantiations for which the template definition 38733 is included in the compile, and store template definitions and 38734 instantiation context information into the object file for the rest. 38735 The link wrapper will extract that information as necessary and invoke 38736 the compiler to produce the remaining instantiations. The linker will 38737 then combine duplicate instantiations. 38738 38739 In the mean time, you have the following options for dealing with 38740 template instantiations: 38741 38742 1. Compile your template-using code with `-frepo'. The compiler will 38743 generate files with the extension `.rpo' listing all of the 38744 template instantiations used in the corresponding object files 38745 which could be instantiated there; the link wrapper, `collect2', 38746 will then update the `.rpo' files to tell the compiler where to 38747 place those instantiations and rebuild any affected object files. 38748 The link-time overhead is negligible after the first pass, as the 38749 compiler will continue to place the instantiations in the same 38750 files. 38751 38752 This is your best option for application code written for the 38753 Borland model, as it will just work. Code written for the Cfront 38754 model will need to be modified so that the template definitions 38755 are available at one or more points of instantiation; usually this 38756 is as simple as adding `#include <tmethods.cc>' to the end of each 38757 template header. 38758 38759 For library code, if you want the library to provide all of the 38760 template instantiations it needs, just try to link all of its 38761 object files together; the link will fail, but cause the 38762 instantiations to be generated as a side effect. Be warned, 38763 however, that this may cause conflicts if multiple libraries try 38764 to provide the same instantiations. For greater control, use 38765 explicit instantiation as described in the next option. 38766 38767 2. Compile your code with `-fno-implicit-templates' to disable the 38768 implicit generation of template instances, and explicitly 38769 instantiate all the ones you use. This approach requires more 38770 knowledge of exactly which instances you need than do the others, 38771 but it's less mysterious and allows greater control. You can 38772 scatter the explicit instantiations throughout your program, 38773 perhaps putting them in the translation units where the instances 38774 are used or the translation units that define the templates 38775 themselves; you can put all of the explicit instantiations you 38776 need into one big file; or you can create small files like 38777 38778 #include "Foo.h" 38779 #include "Foo.cc" 38780 38781 template class Foo<int>; 38782 template ostream& operator << 38783 (ostream&, const Foo<int>&); 38784 38785 for each of the instances you need, and create a template 38786 instantiation library from those. 38787 38788 If you are using Cfront-model code, you can probably get away with 38789 not using `-fno-implicit-templates' when compiling files that don't 38790 `#include' the member template definitions. 38791 38792 If you use one big file to do the instantiations, you may want to 38793 compile it without `-fno-implicit-templates' so you get all of the 38794 instances required by your explicit instantiations (but not by any 38795 other files) without having to specify them as well. 38796 38797 G++ has extended the template instantiation syntax given in the ISO 38798 standard to allow forward declaration of explicit instantiations 38799 (with `extern'), instantiation of the compiler support data for a 38800 template class (i.e. the vtable) without instantiating any of its 38801 members (with `inline'), and instantiation of only the static data 38802 members of a template class, without the support data or member 38803 functions (with (`static'): 38804 38805 extern template int max (int, int); 38806 inline template class Foo<int>; 38807 static template class Foo<int>; 38808 38809 3. Do nothing. Pretend G++ does implement automatic instantiation 38810 management. Code written for the Borland model will work fine, but 38811 each translation unit will contain instances of each of the 38812 templates it uses. In a large program, this can lead to an 38813 unacceptable amount of code duplication. 38814 38815 38816 File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 38817 38818 7.6 Extracting the function pointer from a bound pointer to member function 38819 =========================================================================== 38820 38821 In C++, pointer to member functions (PMFs) are implemented using a wide 38822 pointer of sorts to handle all the possible call mechanisms; the PMF 38823 needs to store information about how to adjust the `this' pointer, and 38824 if the function pointed to is virtual, where to find the vtable, and 38825 where in the vtable to look for the member function. If you are using 38826 PMFs in an inner loop, you should really reconsider that decision. If 38827 that is not an option, you can extract the pointer to the function that 38828 would be called for a given object/PMF pair and call it directly inside 38829 the inner loop, to save a bit of time. 38830 38831 Note that you will still be paying the penalty for the call through a 38832 function pointer; on most modern architectures, such a call defeats the 38833 branch prediction features of the CPU. This is also true of normal 38834 virtual function calls. 38835 38836 The syntax for this extension is 38837 38838 extern A a; 38839 extern int (A::*fp)(); 38840 typedef int (*fptr)(A *); 38841 38842 fptr p = (fptr)(a.*fp); 38843 38844 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 38845 object is needed to obtain the address of the function. They can be 38846 converted to function pointers directly: 38847 38848 fptr p1 = (fptr)(&A::foo); 38849 38850 You must specify `-Wno-pmf-conversions' to use this extension. 38851 38852 38853 File: gcc.info, Node: C++ Attributes, Next: Namespace Association, Prev: Bound member functions, Up: C++ Extensions 38854 38855 7.7 C++-Specific Variable, Function, and Type Attributes 38856 ======================================================== 38857 38858 Some attributes only make sense for C++ programs. 38859 38860 `init_priority (PRIORITY)' 38861 In Standard C++, objects defined at namespace scope are guaranteed 38862 to be initialized in an order in strict accordance with that of 38863 their definitions _in a given translation unit_. No guarantee is 38864 made for initializations across translation units. However, GNU 38865 C++ allows users to control the order of initialization of objects 38866 defined at namespace scope with the `init_priority' attribute by 38867 specifying a relative PRIORITY, a constant integral expression 38868 currently bounded between 101 and 65535 inclusive. Lower numbers 38869 indicate a higher priority. 38870 38871 In the following example, `A' would normally be created before 38872 `B', but the `init_priority' attribute has reversed that order: 38873 38874 Some_Class A __attribute__ ((init_priority (2000))); 38875 Some_Class B __attribute__ ((init_priority (543))); 38876 38877 Note that the particular values of PRIORITY do not matter; only 38878 their relative ordering. 38879 38880 `java_interface' 38881 This type attribute informs C++ that the class is a Java 38882 interface. It may only be applied to classes declared within an 38883 `extern "Java"' block. Calls to methods declared in this 38884 interface will be dispatched using GCJ's interface table 38885 mechanism, instead of regular virtual table dispatch. 38886 38887 38888 See also *note Namespace Association::. 38889 38890 38891 File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: C++ Attributes, Up: C++ Extensions 38892 38893 7.8 Namespace Association 38894 ========================= 38895 38896 *Caution:* The semantics of this extension are not fully defined. 38897 Users should refrain from using this extension as its semantics may 38898 change subtly over time. It is possible that this extension will be 38899 removed in future versions of G++. 38900 38901 A using-directive with `__attribute ((strong))' is stronger than a 38902 normal using-directive in two ways: 38903 38904 * Templates from the used namespace can be specialized and explicitly 38905 instantiated as though they were members of the using namespace. 38906 38907 * The using namespace is considered an associated namespace of all 38908 templates in the used namespace for purposes of argument-dependent 38909 name lookup. 38910 38911 The used namespace must be nested within the using namespace so that 38912 normal unqualified lookup works properly. 38913 38914 This is useful for composing a namespace transparently from 38915 implementation namespaces. For example: 38916 38917 namespace std { 38918 namespace debug { 38919 template <class T> struct A { }; 38920 } 38921 using namespace debug __attribute ((__strong__)); 38922 template <> struct A<int> { }; // ok to specialize 38923 38924 template <class T> void f (A<T>); 38925 } 38926 38927 int main() 38928 { 38929 f (std::A<float>()); // lookup finds std::f 38930 f (std::A<int>()); 38931 } 38932 38933 38934 File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 38935 38936 7.9 Type Traits 38937 =============== 38938 38939 The C++ front-end implements syntactic extensions that allow to 38940 determine at compile time various characteristics of a type (or of a 38941 pair of types). 38942 38943 `__has_nothrow_assign (type)' 38944 If `type' is const qualified or is a reference type then the trait 38945 is false. Otherwise if `__has_trivial_assign (type)' is true then 38946 the trait is true, else if `type' is a cv class or union type with 38947 copy assignment operators that are known not to throw an exception 38948 then the trait is true, else it is false. Requires: `type' shall 38949 be a complete type, (possibly cv-qualified) `void', or an array of 38950 unknown bound. 38951 38952 `__has_nothrow_copy (type)' 38953 If `__has_trivial_copy (type)' is true then the trait is true, 38954 else if `type' is a cv class or union type with copy constructors 38955 that are known not to throw an exception then the trait is true, 38956 else it is false. Requires: `type' shall be a complete type, 38957 (possibly cv-qualified) `void', or an array of unknown bound. 38958 38959 `__has_nothrow_constructor (type)' 38960 If `__has_trivial_constructor (type)' is true then the trait is 38961 true, else if `type' is a cv class or union type (or array 38962 thereof) with a default constructor that is known not to throw an 38963 exception then the trait is true, else it is false. Requires: 38964 `type' shall be a complete type, (possibly cv-qualified) `void', 38965 or an array of unknown bound. 38966 38967 `__has_trivial_assign (type)' 38968 If `type' is const qualified or is a reference type then the trait 38969 is false. Otherwise if `__is_pod (type)' is true then the trait is 38970 true, else if `type' is a cv class or union type with a trivial 38971 copy assignment ([class.copy]) then the trait is true, else it is 38972 false. Requires: `type' shall be a complete type, (possibly 38973 cv-qualified) `void', or an array of unknown bound. 38974 38975 `__has_trivial_copy (type)' 38976 If `__is_pod (type)' is true or `type' is a reference type then 38977 the trait is true, else if `type' is a cv class or union type with 38978 a trivial copy constructor ([class.copy]) then the trait is true, 38979 else it is false. Requires: `type' shall be a complete type, 38980 (possibly cv-qualified) `void', or an array of unknown bound. 38981 38982 `__has_trivial_constructor (type)' 38983 If `__is_pod (type)' is true then the trait is true, else if 38984 `type' is a cv class or union type (or array thereof) with a 38985 trivial default constructor ([class.ctor]) then the trait is true, 38986 else it is false. Requires: `type' shall be a complete type, 38987 (possibly cv-qualified) `void', or an array of unknown bound. 38988 38989 `__has_trivial_destructor (type)' 38990 If `__is_pod (type)' is true or `type' is a reference type then 38991 the trait is true, else if `type' is a cv class or union type (or 38992 array thereof) with a trivial destructor ([class.dtor]) then the 38993 trait is true, else it is false. Requires: `type' shall be a 38994 complete type, (possibly cv-qualified) `void', or an array of 38995 unknown bound. 38996 38997 `__has_virtual_destructor (type)' 38998 If `type' is a class type with a virtual destructor ([class.dtor]) 38999 then the trait is true, else it is false. Requires: `type' shall 39000 be a complete type, (possibly cv-qualified) `void', or an array of 39001 unknown bound. 39002 39003 `__is_abstract (type)' 39004 If `type' is an abstract class ([class.abstract]) then the trait 39005 is true, else it is false. Requires: `type' shall be a complete 39006 type, (possibly cv-qualified) `void', or an array of unknown bound. 39007 39008 `__is_base_of (base_type, derived_type)' 39009 If `base_type' is a base class of `derived_type' ([class.derived]) 39010 then the trait is true, otherwise it is false. Top-level cv 39011 qualifications of `base_type' and `derived_type' are ignored. For 39012 the purposes of this trait, a class type is considered is own 39013 base. Requires: if `__is_class (base_type)' and `__is_class 39014 (derived_type)' are true and `base_type' and `derived_type' are 39015 not the same type (disregarding cv-qualifiers), `derived_type' 39016 shall be a complete type. Diagnostic is produced if this 39017 requirement is not met. 39018 39019 `__is_class (type)' 39020 If `type' is a cv class type, and not a union type 39021 ([basic.compound]) the trait is true, else it is false. 39022 39023 `__is_empty (type)' 39024 If `__is_class (type)' is false then the trait is false. 39025 Otherwise `type' is considered empty if and only if: `type' has no 39026 non-static data members, or all non-static data members, if any, 39027 are bit-fields of length 0, and `type' has no virtual members, and 39028 `type' has no virtual base classes, and `type' has no base classes 39029 `base_type' for which `__is_empty (base_type)' is false. 39030 Requires: `type' shall be a complete type, (possibly cv-qualified) 39031 `void', or an array of unknown bound. 39032 39033 `__is_enum (type)' 39034 If `type' is a cv enumeration type ([basic.compound]) the trait is 39035 true, else it is false. 39036 39037 `__is_literal_type (type)' 39038 If `type' is a literal type ([basic.types]) the trait is true, 39039 else it is false. Requires: `type' shall be a complete type, 39040 (possibly cv-qualified) `void', or an array of unknown bound. 39041 39042 `__is_pod (type)' 39043 If `type' is a cv POD type ([basic.types]) then the trait is true, 39044 else it is false. Requires: `type' shall be a complete type, 39045 (possibly cv-qualified) `void', or an array of unknown bound. 39046 39047 `__is_polymorphic (type)' 39048 If `type' is a polymorphic class ([class.virtual]) then the trait 39049 is true, else it is false. Requires: `type' shall be a complete 39050 type, (possibly cv-qualified) `void', or an array of unknown bound. 39051 39052 `__is_standard_layout (type)' 39053 If `type' is a standard-layout type ([basic.types]) the trait is 39054 true, else it is false. Requires: `type' shall be a complete 39055 type, (possibly cv-qualified) `void', or an array of unknown bound. 39056 39057 `__is_trivial (type)' 39058 If `type' is a trivial type ([basic.types]) the trait is true, 39059 else it is false. Requires: `type' shall be a complete type, 39060 (possibly cv-qualified) `void', or an array of unknown bound. 39061 39062 `__is_union (type)' 39063 If `type' is a cv union type ([basic.compound]) the trait is true, 39064 else it is false. 39065 39066 39067 39068 File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 39069 39070 7.10 Java Exceptions 39071 ==================== 39072 39073 The Java language uses a slightly different exception handling model 39074 from C++. Normally, GNU C++ will automatically detect when you are 39075 writing C++ code that uses Java exceptions, and handle them 39076 appropriately. However, if C++ code only needs to execute destructors 39077 when Java exceptions are thrown through it, GCC will guess incorrectly. 39078 Sample problematic code is: 39079 39080 struct S { ~S(); }; 39081 extern void bar(); // is written in Java, and may throw exceptions 39082 void foo() 39083 { 39084 S s; 39085 bar(); 39086 } 39087 39088 The usual effect of an incorrect guess is a link failure, complaining of 39089 a missing routine called `__gxx_personality_v0'. 39090 39091 You can inform the compiler that Java exceptions are to be used in a 39092 translation unit, irrespective of what it might think, by writing 39093 `#pragma GCC java_exceptions' at the head of the file. This `#pragma' 39094 must appear before any functions that throw or catch exceptions, or run 39095 destructors when exceptions are thrown through them. 39096 39097 You cannot mix Java and C++ exceptions in the same translation unit. 39098 It is believed to be safe to throw a C++ exception from one file through 39099 another file compiled for the Java exception model, or vice versa, but 39100 there may be bugs in this area. 39101 39102 39103 File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 39104 39105 7.11 Deprecated Features 39106 ======================== 39107 39108 In the past, the GNU C++ compiler was extended to experiment with new 39109 features, at a time when the C++ language was still evolving. Now that 39110 the C++ standard is complete, some of those features are superseded by 39111 superior alternatives. Using the old features might cause a warning in 39112 some cases that the feature will be dropped in the future. In other 39113 cases, the feature might be gone already. 39114 39115 While the list below is not exhaustive, it documents some of the 39116 options that are now deprecated: 39117 39118 `-fexternal-templates' 39119 `-falt-external-templates' 39120 These are two of the many ways for G++ to implement template 39121 instantiation. *Note Template Instantiation::. The C++ standard 39122 clearly defines how template definitions have to be organized 39123 across implementation units. G++ has an implicit instantiation 39124 mechanism that should work just fine for standard-conforming code. 39125 39126 `-fstrict-prototype' 39127 `-fno-strict-prototype' 39128 Previously it was possible to use an empty prototype parameter 39129 list to indicate an unspecified number of parameters (like C), 39130 rather than no parameters, as C++ demands. This feature has been 39131 removed, except where it is required for backwards compatibility. 39132 *Note Backwards Compatibility::. 39133 39134 G++ allows a virtual function returning `void *' to be overridden by 39135 one returning a different pointer type. This extension to the 39136 covariant return type rules is now deprecated and will be removed from a 39137 future version. 39138 39139 The G++ minimum and maximum operators (`<?' and `>?') and their 39140 compound forms (`<?=') and `>?=') have been deprecated and are now 39141 removed from G++. Code using these operators should be modified to use 39142 `std::min' and `std::max' instead. 39143 39144 The named return value extension has been deprecated, and is now 39145 removed from G++. 39146 39147 The use of initializer lists with new expressions has been deprecated, 39148 and is now removed from G++. 39149 39150 Floating and complex non-type template parameters have been deprecated, 39151 and are now removed from G++. 39152 39153 The implicit typename extension has been deprecated and is now removed 39154 from G++. 39155 39156 The use of default arguments in function pointers, function typedefs 39157 and other places where they are not permitted by the standard is 39158 deprecated and will be removed from a future version of G++. 39159 39160 G++ allows floating-point literals to appear in integral constant 39161 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 39162 deprecated and will be removed from a future version. 39163 39164 G++ allows static data members of const floating-point type to be 39165 declared with an initializer in a class definition. The standard only 39166 allows initializers for static members of const integral types and const 39167 enumeration types so this extension has been deprecated and will be 39168 removed from a future version. 39169 39170 39171 File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 39172 39173 7.12 Backwards Compatibility 39174 ============================ 39175 39176 Now that there is a definitive ISO standard C++, G++ has a specification 39177 to adhere to. The C++ language evolved over time, and features that 39178 used to be acceptable in previous drafts of the standard, such as the 39179 ARM [Annotated C++ Reference Manual], are no longer accepted. In order 39180 to allow compilation of C++ written to such drafts, G++ contains some 39181 backwards compatibilities. _All such backwards compatibility features 39182 are liable to disappear in future versions of G++._ They should be 39183 considered deprecated. *Note Deprecated Features::. 39184 39185 `For scope' 39186 If a variable is declared at for scope, it used to remain in scope 39187 until the end of the scope which contained the for statement 39188 (rather than just within the for scope). G++ retains this, but 39189 issues a warning, if such a variable is accessed outside the for 39190 scope. 39191 39192 `Implicit C language' 39193 Old C system header files did not contain an `extern "C" {...}' 39194 scope to set the language. On such systems, all header files are 39195 implicitly scoped inside a C language scope. Also, an empty 39196 prototype `()' will be treated as an unspecified number of 39197 arguments, rather than no arguments, as C++ demands. 39198 39199 39200 File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 39201 39202 8 GNU Objective-C features 39203 ************************** 39204 39205 This document is meant to describe some of the GNU Objective-C 39206 features. It is not intended to teach you Objective-C. There are 39207 several resources on the Internet that present the language. 39208 39209 * Menu: 39210 39211 * GNU Objective-C runtime API:: 39212 * Executing code before main:: 39213 * Type encoding:: 39214 * Garbage Collection:: 39215 * Constant string objects:: 39216 * compatibility_alias:: 39217 * Exceptions:: 39218 * Synchronization:: 39219 * Fast enumeration:: 39220 * Messaging with the GNU Objective-C runtime:: 39221 39222 39223 File: gcc.info, Node: GNU Objective-C runtime API, Next: Executing code before main, Up: Objective-C 39224 39225 8.1 GNU Objective-C runtime API 39226 =============================== 39227 39228 This section is specific for the GNU Objective-C runtime. If you are 39229 using a different runtime, you can skip it. 39230 39231 The GNU Objective-C runtime provides an API that allows you to 39232 interact with the Objective-C runtime system, querying the live runtime 39233 structures and even manipulating them. This allows you for example to 39234 inspect and navigate classes, methods and protocols; to define new 39235 classes or new methods, and even to modify existing classes or 39236 protocols. 39237 39238 If you are using a "Foundation" library such as GNUstep-Base, this 39239 library will provide you with a rich set of functionality to do most of 39240 the inspection tasks, and you probably will only need direct access to 39241 the GNU Objective-C runtime API to define new classes or methods. 39242 39243 * Menu: 39244 39245 * Modern GNU Objective-C runtime API:: 39246 * Traditional GNU Objective-C runtime API:: 39247 39248 39249 File: gcc.info, Node: Modern GNU Objective-C runtime API, Next: Traditional GNU Objective-C runtime API, Up: GNU Objective-C runtime API 39250 39251 8.1.1 Modern GNU Objective-C runtime API 39252 ---------------------------------------- 39253 39254 The GNU Objective-C runtime provides an API which is similar to the one 39255 provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime. The 39256 API is documented in the public header files of the GNU Objective-C 39257 runtime: 39258 39259 * `objc/objc.h': this is the basic Objective-C header file, defining 39260 the basic Objective-C types such as `id', `Class' and `BOOL'. You 39261 have to include this header to do almost anything with Objective-C. 39262 39263 * `objc/runtime.h': this header declares most of the public runtime 39264 API functions allowing you to inspect and manipulate the 39265 Objective-C runtime data structures. These functions are fairly 39266 standardized across Objective-C runtimes and are almost identical 39267 to the Apple/NeXT Objective-C runtime ones. It does not declare 39268 functions in some specialized areas (constructing and forwarding 39269 message invocations, threading) which are in the other headers 39270 below. You have to include `objc/objc.h' and `objc/runtime.h' to 39271 use any of the functions, such as `class_getName()', declared in 39272 `objc/runtime.h'. 39273 39274 * `objc/message.h': this header declares public functions used to 39275 construct, deconstruct and forward message invocations. Because 39276 messaging is done in quite a different way on different runtimes, 39277 functions in this header are specific to the GNU Objective-C 39278 runtime implementation. 39279 39280 * `objc/objc-exception.h': this header declares some public 39281 functions related to Objective-C exceptions. For example 39282 functions in this header allow you to throw an Objective-C 39283 exception from plain C/C++ code. 39284 39285 * `objc/objc-sync.h': this header declares some public functions 39286 related to the Objective-C `@synchronized()' syntax, allowing you 39287 to emulate an Objective-C `@synchronized()' block in plain C/C++ 39288 code. 39289 39290 * `objc/thr.h': this header declares a public runtime API threading 39291 layer that is only provided by the GNU Objective-C runtime. It 39292 declares functions such as `objc_mutex_lock()', which provide a 39293 platform-independent set of threading functions. 39294 39295 39296 The header files contain detailed documentation for each function in 39297 the GNU Objective-C runtime API. 39298 39299 39300 File: gcc.info, Node: Traditional GNU Objective-C runtime API, Prev: Modern GNU Objective-C runtime API, Up: GNU Objective-C runtime API 39301 39302 8.1.2 Traditional GNU Objective-C runtime API 39303 --------------------------------------------- 39304 39305 The GNU Objective-C runtime used to provide a different API, which we 39306 call the "traditional" GNU Objective-C runtime API. Functions 39307 belonging to this API are easy to recognize because they use a 39308 different naming convention, such as `class_get_super_class()' 39309 (traditional API) instead of `class_getSuperclass()' (modern API). 39310 Software using this API includes the file `objc/objc-api.h' where it is 39311 declared. 39312 39313 The traditional API is deprecated but it is still supported in this 39314 release of the runtime; you can access it as usual by including 39315 `objc/objc-api.h'. 39316 39317 If you are using the traditional API you are urged to upgrade your 39318 software to use the modern API because the traditional API requires 39319 access to private runtime internals to do anything serious with it; for 39320 this reason, there is no guarantee that future releases of the GNU 39321 Objective-C runtime library will be able to provide a fully compatible 39322 `objc/objc-api.h' as the private runtime internals change. It is 39323 expected that the next release will hide a number of runtime internals 39324 making the traditional API nominally supported but fairly useless 39325 beyond very simple use cases. 39326 39327 Finally, you can not include both `objc/objc-api.h' and 39328 `objc/runtime.h' at the same time. The traditional and modern APIs 39329 unfortunately have some conflicting declarations (such as the one for 39330 `Method') and can not be used at the same time. 39331 39332 39333 File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: GNU Objective-C runtime API, Up: Objective-C 39334 39335 8.2 `+load': Executing code before main 39336 ======================================= 39337 39338 This section is specific for the GNU Objective-C runtime. If you are 39339 using a different runtime, you can skip it. 39340 39341 The GNU Objective-C runtime provides a way that allows you to execute 39342 code before the execution of the program enters the `main' function. 39343 The code is executed on a per-class and a per-category basis, through a 39344 special class method `+load'. 39345 39346 This facility is very useful if you want to initialize global variables 39347 which can be accessed by the program directly, without sending a message 39348 to the class first. The usual way to initialize global variables, in 39349 the `+initialize' method, might not be useful because `+initialize' is 39350 only called when the first message is sent to a class object, which in 39351 some cases could be too late. 39352 39353 Suppose for example you have a `FileStream' class that declares 39354 `Stdin', `Stdout' and `Stderr' as global variables, like below: 39355 39356 39357 FileStream *Stdin = nil; 39358 FileStream *Stdout = nil; 39359 FileStream *Stderr = nil; 39360 39361 @implementation FileStream 39362 39363 + (void)initialize 39364 { 39365 Stdin = [[FileStream new] initWithFd:0]; 39366 Stdout = [[FileStream new] initWithFd:1]; 39367 Stderr = [[FileStream new] initWithFd:2]; 39368 } 39369 39370 /* Other methods here */ 39371 @end 39372 39373 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 39374 in `+initialize' occurs too late. The programmer can send a message to 39375 one of these objects before the variables are actually initialized, 39376 thus sending messages to the `nil' object. The `+initialize' method 39377 which actually initializes the global variables is not invoked until 39378 the first message is sent to the class object. The solution would 39379 require these variables to be initialized just before entering `main'. 39380 39381 The correct solution of the above problem is to use the `+load' method 39382 instead of `+initialize': 39383 39384 39385 @implementation FileStream 39386 39387 + (void)load 39388 { 39389 Stdin = [[FileStream new] initWithFd:0]; 39390 Stdout = [[FileStream new] initWithFd:1]; 39391 Stderr = [[FileStream new] initWithFd:2]; 39392 } 39393 39394 /* Other methods here */ 39395 @end 39396 39397 The `+load' is a method that is not overridden by categories. If a 39398 class and a category of it both implement `+load', both methods are 39399 invoked. This allows some additional initializations to be performed in 39400 a category. 39401 39402 This mechanism is not intended to be a replacement for `+initialize'. 39403 You should be aware of its limitations when you decide to use it 39404 instead of `+initialize'. 39405 39406 * Menu: 39407 39408 * What you can and what you cannot do in +load:: 39409 39410 39411 File: gcc.info, Node: What you can and what you cannot do in +load, Up: Executing code before main 39412 39413 8.2.1 What you can and what you cannot do in `+load' 39414 ---------------------------------------------------- 39415 39416 `+load' is to be used only as a last resort. Because it is executed 39417 very early, most of the Objective-C runtime machinery will not be ready 39418 when `+load' is executed; hence `+load' works best for executing C code 39419 that is independent on the Objective-C runtime. 39420 39421 The `+load' implementation in the GNU runtime guarantees you the 39422 following things: 39423 39424 * you can write whatever C code you like; 39425 39426 * you can allocate and send messages to objects whose class is 39427 implemented in the same file; 39428 39429 * the `+load' implementation of all super classes of a class are 39430 executed before the `+load' of that class is executed; 39431 39432 * the `+load' implementation of a class is executed before the 39433 `+load' implementation of any category. 39434 39435 39436 In particular, the following things, even if they can work in a 39437 particular case, are not guaranteed: 39438 39439 * allocation of or sending messages to arbitrary objects; 39440 39441 * allocation of or sending messages to objects whose classes have a 39442 category implemented in the same file; 39443 39444 * sending messages to Objective-C constant strings (`@"this is a 39445 constant string"'); 39446 39447 39448 You should make no assumptions about receiving `+load' in sibling 39449 classes when you write `+load' of a class. The order in which sibling 39450 classes receive `+load' is not guaranteed. 39451 39452 The order in which `+load' and `+initialize' are called could be 39453 problematic if this matters. If you don't allocate objects inside 39454 `+load', it is guaranteed that `+load' is called before `+initialize'. 39455 If you create an object inside `+load' the `+initialize' method of 39456 object's class is invoked even if `+load' was not invoked. Note if you 39457 explicitly call `+load' on a class, `+initialize' will be called first. 39458 To avoid possible problems try to implement only one of these methods. 39459 39460 The `+load' method is also invoked when a bundle is dynamically loaded 39461 into your running program. This happens automatically without any 39462 intervening operation from you. When you write bundles and you need to 39463 write `+load' you can safely create and send messages to objects whose 39464 classes already exist in the running program. The same restrictions as 39465 above apply to classes defined in bundle. 39466 39467 39468 File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 39469 39470 8.3 Type encoding 39471 ================= 39472 39473 This is an advanced section. Type encodings are used extensively by 39474 the compiler and by the runtime, but you generally do not need to know 39475 about them to use Objective-C. 39476 39477 The Objective-C compiler generates type encodings for all the types. 39478 These type encodings are used at runtime to find out information about 39479 selectors and methods and about objects and classes. 39480 39481 The types are encoded in the following way: 39482 39483 `_Bool' `B' 39484 `char' `c' 39485 `unsigned char' `C' 39486 `short' `s' 39487 `unsigned short' `S' 39488 `int' `i' 39489 `unsigned int' `I' 39490 `long' `l' 39491 `unsigned long' `L' 39492 `long long' `q' 39493 `unsigned long `Q' 39494 long' 39495 `float' `f' 39496 `double' `d' 39497 `long double' `D' 39498 `void' `v' 39499 `id' `@' 39500 `Class' `#' 39501 `SEL' `:' 39502 `char*' `*' 39503 `enum' an `enum' is encoded exactly as the integer type that 39504 the compiler uses for it, which depends on the 39505 enumeration values. Often the compiler users 39506 `unsigned int', which is then encoded as `I'. 39507 unknown type `?' 39508 Complex types `j' followed by the inner type. For example 39509 `_Complex double' is encoded as "jd". 39510 bit-fields `b' followed by the starting position of the 39511 bit-field, the type of the bit-field and the size of 39512 the bit-field (the bit-fields encoding was changed 39513 from the NeXT's compiler encoding, see below) 39514 39515 The encoding of bit-fields has changed to allow bit-fields to be 39516 properly handled by the runtime functions that compute sizes and 39517 alignments of types that contain bit-fields. The previous encoding 39518 contained only the size of the bit-field. Using only this information 39519 it is not possible to reliably compute the size occupied by the 39520 bit-field. This is very important in the presence of the Boehm's 39521 garbage collector because the objects are allocated using the typed 39522 memory facility available in this collector. The typed memory 39523 allocation requires information about where the pointers are located 39524 inside the object. 39525 39526 The position in the bit-field is the position, counting in bits, of the 39527 bit closest to the beginning of the structure. 39528 39529 The non-atomic types are encoded as follows: 39530 39531 pointers `^' followed by the pointed type. 39532 arrays `[' followed by the number of elements in the array 39533 followed by the type of the elements followed by `]' 39534 structures `{' followed by the name of the structure (or `?' if the 39535 structure is unnamed), the `=' sign, the type of the 39536 members and by `}' 39537 unions `(' followed by the name of the structure (or `?' if the 39538 union is unnamed), the `=' sign, the type of the members 39539 followed by `)' 39540 vectors `![' followed by the vector_size (the number of bytes 39541 composing the vector) followed by a comma, followed by 39542 the alignment (in bytes) of the vector, followed by the 39543 type of the elements followed by `]' 39544 39545 Here are some types and their encodings, as they are generated by the 39546 compiler on an i386 machine: 39547 39548 39549 Objective-C type Compiler encoding 39550 int a[10]; `[10i]' 39551 struct { `{?=i[3f]b128i3b131i2c}' 39552 int i; 39553 float f[3]; 39554 int a:3; 39555 int b:2; 39556 char c; 39557 } 39558 int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine) 39559 39560 39561 In addition to the types the compiler also encodes the type 39562 specifiers. The table below describes the encoding of the current 39563 Objective-C type specifiers: 39564 39565 39566 Specifier Encoding 39567 `const' `r' 39568 `in' `n' 39569 `inout' `N' 39570 `out' `o' 39571 `bycopy' `O' 39572 `byref' `R' 39573 `oneway' `V' 39574 39575 39576 The type specifiers are encoded just before the type. Unlike types 39577 however, the type specifiers are only encoded when they appear in method 39578 argument types. 39579 39580 Note how `const' interacts with pointers: 39581 39582 39583 Objective-C type Compiler encoding 39584 const int `ri' 39585 const int* `^ri' 39586 int *const `r^i' 39587 39588 39589 `const int*' is a pointer to a `const int', and so is encoded as 39590 `^ri'. `int* const', instead, is a `const' pointer to an `int', and so 39591 is encoded as `r^i'. 39592 39593 Finally, there is a complication when encoding `const char *' versus 39594 `char * const'. Because `char *' is encoded as `*' and not as `^c', 39595 there is no way to express the fact that `r' applies to the pointer or 39596 to the pointee. 39597 39598 Hence, it is assumed as a convention that `r*' means `const char *' 39599 (since it is what is most often meant), and there is no way to encode 39600 `char *const'. `char *const' would simply be encoded as `*', and the 39601 `const' is lost. 39602 39603 * Menu: 39604 39605 * Legacy type encoding:: 39606 * @encode:: 39607 * Method signatures:: 39608 39609 39610 File: gcc.info, Node: Legacy type encoding, Next: @encode, Up: Type encoding 39611 39612 8.3.1 Legacy type encoding 39613 -------------------------- 39614 39615 Unfortunately, historically GCC used to have a number of bugs in its 39616 encoding code. The NeXT runtime expects GCC to emit type encodings in 39617 this historical format (compatible with GCC-3.3), so when using the 39618 NeXT runtime, GCC will introduce on purpose a number of incorrect 39619 encodings: 39620 39621 * the read-only qualifier of the pointee gets emitted before the '^'. 39622 The read-only qualifier of the pointer itself gets ignored, unless 39623 it is a typedef. Also, the 'r' is only emitted for the outermost 39624 type. 39625 39626 * 32-bit longs are encoded as 'l' or 'L', but not always. For 39627 typedefs, the compiler uses 'i' or 'I' instead if encoding a 39628 struct field or a pointer. 39629 39630 * `enum's are always encoded as 'i' (int) even if they are actually 39631 unsigned or long. 39632 39633 39634 In addition to that, the NeXT runtime uses a different encoding for 39635 bitfields. It encodes them as `b' followed by the size, without a bit 39636 offset or the underlying field type. 39637 39638 39639 File: gcc.info, Node: @encode, Next: Method signatures, Prev: Legacy type encoding, Up: Type encoding 39640 39641 8.3.2 @encode 39642 ------------- 39643 39644 GNU Objective-C supports the `@encode' syntax that allows you to create 39645 a type encoding from a C/Objective-C type. For example, `@encode(int)' 39646 is compiled by the compiler into `"i"'. 39647 39648 `@encode' does not support type qualifiers other than `const'. For 39649 example, `@encode(const char*)' is valid and is compiled into `"r*"', 39650 while `@encode(bycopy char *)' is invalid and will cause a compilation 39651 error. 39652 39653 39654 File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding 39655 39656 8.3.3 Method signatures 39657 ----------------------- 39658 39659 This section documents the encoding of method types, which is rarely 39660 needed to use Objective-C. You should skip it at a first reading; the 39661 runtime provides functions that will work on methods and can walk 39662 through the list of parameters and interpret them for you. These 39663 functions are part of the public "API" and are the preferred way to 39664 interact with method signatures from user code. 39665 39666 But if you need to debug a problem with method signatures and need to 39667 know how they are implemented (i.e., the "ABI"), read on. 39668 39669 Methods have their "signature" encoded and made available to the 39670 runtime. The "signature" encodes all the information required to 39671 dynamically build invocations of the method at runtime: return type and 39672 arguments. 39673 39674 The "signature" is a null-terminated string, composed of the following: 39675 39676 * The return type, including type qualifiers. For example, a method 39677 returning `int' would have `i' here. 39678 39679 * The total size (in bytes) required to pass all the parameters. 39680 This includes the two hidden parameters (the object `self' and the 39681 method selector `_cmd'). 39682 39683 * Each argument, with the type encoding, followed by the offset (in 39684 bytes) of the argument in the list of parameters. 39685 39686 39687 For example, a method with no arguments and returning `int' would have 39688 the signature `i8@0:4' if the size of a pointer is 4. The signature is 39689 interpreted as follows: the `i' is the return type (an `int'), the `8' 39690 is the total size of the parameters in bytes (two pointers each of size 39691 4), the `@0' is the first parameter (an object at byte offset `0') and 39692 `:4' is the second parameter (a `SEL' at byte offset `4'). 39693 39694 You can easily find more examples by running the "strings" program on 39695 an Objective-C object file compiled by GCC. You'll see a lot of 39696 strings that look very much like `i8@0:4'. They are signatures of 39697 Objective-C methods. 39698 39699 39700 File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 39701 39702 8.4 Garbage Collection 39703 ====================== 39704 39705 This section is specific for the GNU Objective-C runtime. If you are 39706 using a different runtime, you can skip it. 39707 39708 Support for garbage collection with the GNU runtime has been added by 39709 using a powerful conservative garbage collector, known as the 39710 Boehm-Demers-Weiser conservative garbage collector. 39711 39712 To enable the support for it you have to configure the compiler using 39713 an additional argument, `--enable-objc-gc'. This will build the 39714 boehm-gc library, and build an additional runtime library which has 39715 several enhancements to support the garbage collector. The new library 39716 has a new name, `libobjc_gc.a' to not conflict with the 39717 non-garbage-collected library. 39718 39719 When the garbage collector is used, the objects are allocated using the 39720 so-called typed memory allocation mechanism available in the 39721 Boehm-Demers-Weiser collector. This mode requires precise information 39722 on where pointers are located inside objects. This information is 39723 computed once per class, immediately after the class has been 39724 initialized. 39725 39726 There is a new runtime function `class_ivar_set_gcinvisible()' which 39727 can be used to declare a so-called "weak pointer" reference. Such a 39728 pointer is basically hidden for the garbage collector; this can be 39729 useful in certain situations, especially when you want to keep track of 39730 the allocated objects, yet allow them to be collected. This kind of 39731 pointers can only be members of objects, you cannot declare a global 39732 pointer as a weak reference. Every type which is a pointer type can be 39733 declared a weak pointer, including `id', `Class' and `SEL'. 39734 39735 Here is an example of how to use this feature. Suppose you want to 39736 implement a class whose instances hold a weak pointer reference; the 39737 following class does this: 39738 39739 39740 @interface WeakPointer : Object 39741 { 39742 const void* weakPointer; 39743 } 39744 39745 - initWithPointer:(const void*)p; 39746 - (const void*)weakPointer; 39747 @end 39748 39749 39750 @implementation WeakPointer 39751 39752 + (void)initialize 39753 { 39754 class_ivar_set_gcinvisible (self, "weakPointer", YES); 39755 } 39756 39757 - initWithPointer:(const void*)p 39758 { 39759 weakPointer = p; 39760 return self; 39761 } 39762 39763 - (const void*)weakPointer 39764 { 39765 return weakPointer; 39766 } 39767 39768 @end 39769 39770 Weak pointers are supported through a new type character specifier 39771 represented by the `!' character. The `class_ivar_set_gcinvisible()' 39772 function adds or removes this specifier to the string type description 39773 of the instance variable named as argument. 39774 39775 39776 File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 39777 39778 8.5 Constant string objects 39779 =========================== 39780 39781 GNU Objective-C provides constant string objects that are generated 39782 directly by the compiler. You declare a constant string object by 39783 prefixing a C constant string with the character `@': 39784 39785 id myString = @"this is a constant string object"; 39786 39787 The constant string objects are by default instances of the 39788 `NXConstantString' class which is provided by the GNU Objective-C 39789 runtime. To get the definition of this class you must include the 39790 `objc/NXConstStr.h' header file. 39791 39792 User defined libraries may want to implement their own constant string 39793 class. To be able to support them, the GNU Objective-C compiler 39794 provides a new command line options 39795 `-fconstant-string-class=CLASS-NAME'. The provided class should adhere 39796 to a strict structure, the same as `NXConstantString''s structure: 39797 39798 39799 @interface MyConstantStringClass 39800 { 39801 Class isa; 39802 char *c_string; 39803 unsigned int len; 39804 } 39805 @end 39806 39807 `NXConstantString' inherits from `Object'; user class libraries may 39808 choose to inherit the customized constant string class from a different 39809 class than `Object'. There is no requirement in the methods the 39810 constant string class has to implement, but the final ivar layout of 39811 the class must be the compatible with the given structure. 39812 39813 When the compiler creates the statically allocated constant string 39814 object, the `c_string' field will be filled by the compiler with the 39815 string; the `length' field will be filled by the compiler with the 39816 string length; the `isa' pointer will be filled with `NULL' by the 39817 compiler, and it will later be fixed up automatically at runtime by the 39818 GNU Objective-C runtime library to point to the class which was set by 39819 the `-fconstant-string-class' option when the object file is loaded (if 39820 you wonder how it works behind the scenes, the name of the class to 39821 use, and the list of static objects to fixup, are stored by the 39822 compiler in the object file in a place where the GNU runtime library 39823 will find them at runtime). 39824 39825 As a result, when a file is compiled with the 39826 `-fconstant-string-class' option, all the constant string objects will 39827 be instances of the class specified as argument to this option. It is 39828 possible to have multiple compilation units referring to different 39829 constant string classes, neither the compiler nor the linker impose any 39830 restrictions in doing this. 39831 39832 39833 File: gcc.info, Node: compatibility_alias, Next: Exceptions, Prev: Constant string objects, Up: Objective-C 39834 39835 8.6 compatibility_alias 39836 ======================= 39837 39838 The keyword `@compatibility_alias' allows you to define a class name as 39839 equivalent to another class name. For example: 39840 39841 @compatibility_alias WOApplication GSWApplication; 39842 39843 tells the compiler that each time it encounters `WOApplication' as a 39844 class name, it should replace it with `GSWApplication' (that is, 39845 `WOApplication' is just an alias for `GSWApplication'). 39846 39847 There are some constraints on how this can be used-- 39848 39849 * `WOApplication' (the alias) must not be an existing class; 39850 39851 * `GSWApplication' (the real class) must be an existing class. 39852 39853 39854 39855 File: gcc.info, Node: Exceptions, Next: Synchronization, Prev: compatibility_alias, Up: Objective-C 39856 39857 8.7 Exceptions 39858 ============== 39859 39860 GNU Objective-C provides exception support built into the language, as 39861 in the following example: 39862 39863 @try { 39864 ... 39865 @throw expr; 39866 ... 39867 } 39868 @catch (AnObjCClass *exc) { 39869 ... 39870 @throw expr; 39871 ... 39872 @throw; 39873 ... 39874 } 39875 @catch (AnotherClass *exc) { 39876 ... 39877 } 39878 @catch (id allOthers) { 39879 ... 39880 } 39881 @finally { 39882 ... 39883 @throw expr; 39884 ... 39885 } 39886 39887 The `@throw' statement may appear anywhere in an Objective-C or 39888 Objective-C++ program; when used inside of a `@catch' block, the 39889 `@throw' may appear without an argument (as shown above), in which case 39890 the object caught by the `@catch' will be rethrown. 39891 39892 Note that only (pointers to) Objective-C objects may be thrown and 39893 caught using this scheme. When an object is thrown, it will be caught 39894 by the nearest `@catch' clause capable of handling objects of that 39895 type, analogously to how `catch' blocks work in C++ and Java. A 39896 `@catch(id ...)' clause (as shown above) may also be provided to catch 39897 any and all Objective-C exceptions not caught by previous `@catch' 39898 clauses (if any). 39899 39900 The `@finally' clause, if present, will be executed upon exit from the 39901 immediately preceding `@try ... @catch' section. This will happen 39902 regardless of whether any exceptions are thrown, caught or rethrown 39903 inside the `@try ... @catch' section, analogously to the behavior of 39904 the `finally' clause in Java. 39905 39906 There are several caveats to using the new exception mechanism: 39907 39908 * The `-fobjc-exceptions' command line option must be used when 39909 compiling Objective-C files that use exceptions. 39910 39911 * With the GNU runtime, exceptions are always implemented as "native" 39912 exceptions and it is recommended that the `-fexceptions' and 39913 `-shared-libgcc' options are used when linking. 39914 39915 * With the NeXT runtime, although currently designed to be binary 39916 compatible with `NS_HANDLER'-style idioms provided by the 39917 `NSException' class, the new exceptions can only be used on Mac OS 39918 X 10.3 (Panther) and later systems, due to additional functionality 39919 needed in the NeXT Objective-C runtime. 39920 39921 * As mentioned above, the new exceptions do not support handling 39922 types other than Objective-C objects. Furthermore, when used from 39923 Objective-C++, the Objective-C exception model does not 39924 interoperate with C++ exceptions at this time. This means you 39925 cannot `@throw' an exception from Objective-C and `catch' it in 39926 C++, or vice versa (i.e., `throw ... @catch'). 39927 39928 39929 File: gcc.info, Node: Synchronization, Next: Fast enumeration, Prev: Exceptions, Up: Objective-C 39930 39931 8.8 Synchronization 39932 =================== 39933 39934 GNU Objective-C provides support for synchronized blocks: 39935 39936 @synchronized (ObjCClass *guard) { 39937 ... 39938 } 39939 39940 Upon entering the `@synchronized' block, a thread of execution shall 39941 first check whether a lock has been placed on the corresponding `guard' 39942 object by another thread. If it has, the current thread shall wait 39943 until the other thread relinquishes its lock. Once `guard' becomes 39944 available, the current thread will place its own lock on it, execute 39945 the code contained in the `@synchronized' block, and finally relinquish 39946 the lock (thereby making `guard' available to other threads). 39947 39948 Unlike Java, Objective-C does not allow for entire methods to be 39949 marked `@synchronized'. Note that throwing exceptions out of 39950 `@synchronized' blocks is allowed, and will cause the guarding object 39951 to be unlocked properly. 39952 39953 Because of the interactions between synchronization and exception 39954 handling, you can only use `@synchronized' when compiling with 39955 exceptions enabled, that is with the command line option 39956 `-fobjc-exceptions'. 39957 39958 39959 File: gcc.info, Node: Fast enumeration, Next: Messaging with the GNU Objective-C runtime, Prev: Synchronization, Up: Objective-C 39960 39961 8.9 Fast enumeration 39962 ==================== 39963 39964 * Menu: 39965 39966 * Using fast enumeration:: 39967 * c99-like fast enumeration syntax:: 39968 * Fast enumeration details:: 39969 * Fast enumeration protocol:: 39970 39971 39972 File: gcc.info, Node: Using fast enumeration, Next: c99-like fast enumeration syntax, Up: Fast enumeration 39973 39974 8.9.1 Using fast enumeration 39975 ---------------------------- 39976 39977 GNU Objective-C provides support for the fast enumeration syntax: 39978 39979 id array = ...; 39980 id object; 39981 39982 for (object in array) 39983 { 39984 /* Do something with 'object' */ 39985 } 39986 39987 `array' needs to be an Objective-C object (usually a collection 39988 object, for example an array, a dictionary or a set) which implements 39989 the "Fast Enumeration Protocol" (see below). If you are using a 39990 Foundation library such as GNUstep Base or Apple Cocoa Foundation, all 39991 collection objects in the library implement this protocol and can be 39992 used in this way. 39993 39994 The code above would iterate over all objects in `array'. For each of 39995 them, it assigns it to `object', then executes the `Do something with 39996 'object'' statements. 39997 39998 Here is a fully worked-out example using a Foundation library (which 39999 provides the implementation of `NSArray', `NSString' and `NSLog'): 40000 40001 NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil]; 40002 NSString *object; 40003 40004 for (object in array) 40005 NSLog (@"Iterating over %@", object); 40006 40007 40008 File: gcc.info, Node: c99-like fast enumeration syntax, Next: Fast enumeration details, Prev: Using fast enumeration, Up: Fast enumeration 40009 40010 8.9.2 c99-like fast enumeration syntax 40011 -------------------------------------- 40012 40013 A c99-like declaration syntax is also allowed: 40014 40015 id array = ...; 40016 40017 for (id object in array) 40018 { 40019 /* Do something with 'object' */ 40020 } 40021 40022 this is completely equivalent to: 40023 40024 id array = ...; 40025 40026 { 40027 id object; 40028 for (object in array) 40029 { 40030 /* Do something with 'object' */ 40031 } 40032 } 40033 40034 but can save some typing. 40035 40036 Note that the option `-std=c99' is not required to allow this syntax 40037 in Objective-C. 40038 40039 40040 File: gcc.info, Node: Fast enumeration details, Next: Fast enumeration protocol, Prev: c99-like fast enumeration syntax, Up: Fast enumeration 40041 40042 8.9.3 Fast enumeration details 40043 ------------------------------ 40044 40045 Here is a more technical description with the gory details. Consider 40046 the code 40047 40048 for (OBJECT EXPRESSION in COLLECTION EXPRESSION) 40049 { 40050 STATEMENTS 40051 } 40052 40053 here is what happens when you run it: 40054 40055 * `COLLECTION EXPRESSION' is evaluated exactly once and the result 40056 is used as the collection object to iterate over. This means it 40057 is safe to write code such as `for (object in [NSDictionary 40058 keyEnumerator]) ...'. 40059 40060 * the iteration is implemented by the compiler by repeatedly getting 40061 batches of objects from the collection object using the fast 40062 enumeration protocol (see below), then iterating over all objects 40063 in the batch. This is faster than a normal enumeration where 40064 objects are retrieved one by one (hence the name "fast 40065 enumeration"). 40066 40067 * if there are no objects in the collection, then `OBJECT 40068 EXPRESSION' is set to `nil' and the loop immediately terminates. 40069 40070 * if there are objects in the collection, then for each object in the 40071 collection (in the order they are returned) `OBJECT EXPRESSION' is 40072 set to the object, then `STATEMENTS' are executed. 40073 40074 * `STATEMENTS' can contain `break' and `continue' commands, which 40075 will abort the iteration or skip to the next loop iteration as 40076 expected. 40077 40078 * when the iteration ends because there are no more objects to 40079 iterate over, `OBJECT EXPRESSION' is set to `nil'. This allows 40080 you to determine whether the iteration finished because a `break' 40081 command was used (in which case `OBJECT EXPRESSION' will remain 40082 set to the last object that was iterated over) or because it 40083 iterated over all the objects (in which case `OBJECT EXPRESSION' 40084 will be set to `nil'). 40085 40086 * `STATEMENTS' must not make any changes to the collection object; 40087 if they do, it is a hard error and the fast enumeration terminates 40088 by invoking `objc_enumerationMutation', a runtime function that 40089 normally aborts the program but which can be customized by 40090 Foundation libraries via `objc_set_mutation_handler' to do 40091 something different, such as raising an exception. 40092 40093 40094 40095 File: gcc.info, Node: Fast enumeration protocol, Prev: Fast enumeration details, Up: Fast enumeration 40096 40097 8.9.4 Fast enumeration protocol 40098 ------------------------------- 40099 40100 If you want your own collection object to be usable with fast 40101 enumeration, you need to have it implement the method 40102 40103 - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state 40104 objects: (id *)objects 40105 count: (unsigned long)len; 40106 40107 where `NSFastEnumerationState' must be defined in your code as follows: 40108 40109 typedef struct 40110 { 40111 unsigned long state; 40112 id *itemsPtr; 40113 unsigned long *mutationsPtr; 40114 unsigned long extra[5]; 40115 } NSFastEnumerationState; 40116 40117 If no `NSFastEnumerationState' is defined in your code, the compiler 40118 will automatically replace `NSFastEnumerationState *' with `struct 40119 __objcFastEnumerationState *', where that type is silently defined by 40120 the compiler in an identical way. This can be confusing and we 40121 recommend that you define `NSFastEnumerationState' (as shown above) 40122 instead. 40123 40124 The method is called repeatedly during a fast enumeration to retrieve 40125 batches of objects. Each invocation of the method should retrieve the 40126 next batch of objects. 40127 40128 The return value of the method is the number of objects in the current 40129 batch; this should not exceed `len', which is the maximum size of a 40130 batch as requested by the caller. The batch itself is returned in the 40131 `itemsPtr' field of the `NSFastEnumerationState' struct. 40132 40133 To help with returning the objects, the `objects' array is a C array 40134 preallocated by the caller (on the stack) of size `len'. In many cases 40135 you can put the objects you want to return in that `objects' array, 40136 then do `itemsPtr = objects'. But you don't have to; if your 40137 collection already has the objects to return in some form of C array, 40138 it could return them from there instead. 40139 40140 The `state' and `extra' fields of the `NSFastEnumerationState' 40141 structure allows your collection object to keep track of the state of 40142 the enumeration. In a simple array implementation, `state' may keep 40143 track of the index of the last object that was returned, and `extra' 40144 may be unused. 40145 40146 The `mutationsPtr' field of the `NSFastEnumerationState' is used to 40147 keep track of mutations. It should point to a number; before working 40148 on each object, the fast enumeration loop will check that this number 40149 has not changed. If it has, a mutation has happened and the fast 40150 enumeration will abort. So, `mutationsPtr' could be set to point to 40151 some sort of version number of your collection, which is increased by 40152 one every time there is a change (for example when an object is added 40153 or removed). Or, if you are content with less strict mutation checks, 40154 it could point to the number of objects in your collection or some 40155 other value that can be checked to perform an approximate check that 40156 the collection has not been mutated. 40157 40158 Finally, note how we declared the `len' argument and the return value 40159 to be of type `unsigned long'. They could also be declared to be of 40160 type `unsigned int' and everything would still work. 40161 40162 40163 File: gcc.info, Node: Messaging with the GNU Objective-C runtime, Prev: Fast enumeration, Up: Objective-C 40164 40165 8.10 Messaging with the GNU Objective-C runtime 40166 =============================================== 40167 40168 This section is specific for the GNU Objective-C runtime. If you are 40169 using a different runtime, you can skip it. 40170 40171 The implementation of messaging in the GNU Objective-C runtime is 40172 designed to be portable, and so is based on standard C. 40173 40174 Sending a message in the GNU Objective-C runtime is composed of two 40175 separate steps. First, there is a call to the lookup function, 40176 `objc_msg_lookup ()' (or, in the case of messages to super, 40177 `objc_msg_lookup_super ()'). This runtime function takes as argument 40178 the receiver and the selector of the method to be called; it returns 40179 the `IMP', that is a pointer to the function implementing the method. 40180 The second step of method invocation consists of casting this pointer 40181 function to the appropriate function pointer type, and calling the 40182 function pointed to it with the right arguments. 40183 40184 For example, when the compiler encounters a method invocation such as 40185 `[object init]', it compiles it into a call to `objc_msg_lookup 40186 (object, @selector(init))' followed by a cast of the returned value to 40187 the appropriate function pointer type, and then it calls it. 40188 40189 * Menu: 40190 40191 * Dynamically registering methods:: 40192 * Forwarding hook:: 40193 40194 40195 File: gcc.info, Node: Dynamically registering methods, Next: Forwarding hook, Up: Messaging with the GNU Objective-C runtime 40196 40197 8.10.1 Dynamically registering methods 40198 -------------------------------------- 40199 40200 If `objc_msg_lookup()' does not find a suitable method implementation, 40201 because the receiver does not implement the required method, it tries 40202 to see if the class can dynamically register the method. 40203 40204 To do so, the runtime checks if the class of the receiver implements 40205 the method 40206 40207 + (BOOL) resolveInstanceMethod: (SEL)selector; 40208 40209 in the case of an instance method, or 40210 40211 + (BOOL) resolveClassMethod: (SEL)selector; 40212 40213 in the case of a class method. If the class implements it, the 40214 runtime invokes it, passing as argument the selector of the original 40215 method, and if it returns `YES', the runtime tries the lookup again, 40216 which could now succeed if a matching method was added dynamically by 40217 `+resolveInstanceMethod:' or `+resolveClassMethod:'. 40218 40219 This allows classes to dynamically register methods (by adding them to 40220 the class using `class_addMethod') when they are first called. To do 40221 so, a class should implement `+resolveInstanceMethod:' (or, depending 40222 on the case, `+resolveClassMethod:') and have it recognize the 40223 selectors of methods that can be registered dynamically at runtime, 40224 register them, and return `YES'. It should return `NO' for methods 40225 that it does not dynamically registered at runtime. 40226 40227 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not 40228 implemented or returns `NO', the runtime then tries the forwarding hook. 40229 40230 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was 40231 added to the GNU Objective-C runtime in GCC version 4.6. 40232 40233 40234 File: gcc.info, Node: Forwarding hook, Prev: Dynamically registering methods, Up: Messaging with the GNU Objective-C runtime 40235 40236 8.10.2 Forwarding hook 40237 ---------------------- 40238 40239 The GNU Objective-C runtime provides a hook, called 40240 `__objc_msg_forward2', which is called by `objc_msg_lookup()' when it 40241 can't find a method implementation in the runtime tables and after 40242 calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been 40243 attempted and did not succeed in dynamically registering the method. 40244 40245 To configure the hook, you set the global variable 40246 `__objc_msg_foward2' to a function with the same argument and return 40247 types of `objc_msg_lookup()'. When `objc_msg_lookup()' can not find a 40248 method implementation, it invokes the hook function you provided to get 40249 a method implementation to return. So, in practice 40250 `__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by 40251 adding some custom code that is called to do a further lookup when no 40252 standard method implementation can be found using the normal lookup. 40253 40254 This hook is generally reserved for "Foundation" libraries such as 40255 GNUstep Base, which use it to implement their high-level method 40256 forwarding API, typically based around the `forwardInvocation:' method. 40257 So, unless you are implementing your own "Foundation" library, you 40258 should not set this hook. 40259 40260 In a typical forwarding implementation, the `__objc_msg_forward2' hook 40261 function determines the argument and return type of the method that is 40262 being looked up, and then creates a function that takes these arguments 40263 and has that return type, and returns it to the caller. Creating this 40264 function is non-trivial and is typically performed using a dedicated 40265 library such as `libffi'. 40266 40267 The forwarding method implementation thus created is returned by 40268 `objc_msg_lookup()' and is executed as if it was a normal method 40269 implementation. When the forwarding method implementation is called, 40270 it is usually expected to pack all arguments into some sort of object 40271 (typically, an `NSInvocation' in a "Foundation" library), and hand it 40272 over to the programmer (`forwardInvocation:') who is then allowed to 40273 manipulate the method invocation using a high-level API provided by the 40274 "Foundation" library. For example, the programmer may want to examine 40275 the method invocation arguments and name and potentially change them 40276 before forwarding the method invocation to one or more local objects 40277 (`performInvocation:') or even to remote objects (by using Distributed 40278 Objects or some other mechanism). When all this completes, the return 40279 value is passed back and must be returned correctly to the original 40280 caller. 40281 40282 Note that the GNU Objective-C runtime currently provides no support 40283 for method forwarding or method invocations other than the 40284 `__objc_msg_forward2' hook. 40285 40286 If the forwarding hook does not exist or returns `NULL', the runtime 40287 currently attempts forwarding using an older, deprecated API, and if 40288 that fails, it aborts the program. In future versions of the GNU 40289 Objective-C runtime, the runtime will immediately abort. 40290 40291 40292 File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 40293 40294 9 Binary Compatibility 40295 ********************** 40296 40297 Binary compatibility encompasses several related concepts: 40298 40299 "application binary interface (ABI)" 40300 The set of runtime conventions followed by all of the tools that 40301 deal with binary representations of a program, including 40302 compilers, assemblers, linkers, and language runtime support. 40303 Some ABIs are formal with a written specification, possibly 40304 designed by multiple interested parties. Others are simply the 40305 way things are actually done by a particular set of tools. 40306 40307 "ABI conformance" 40308 A compiler conforms to an ABI if it generates code that follows 40309 all of the specifications enumerated by that ABI. A library 40310 conforms to an ABI if it is implemented according to that ABI. An 40311 application conforms to an ABI if it is built using tools that 40312 conform to that ABI and does not contain source code that 40313 specifically changes behavior specified by the ABI. 40314 40315 "calling conventions" 40316 Calling conventions are a subset of an ABI that specify of how 40317 arguments are passed and function results are returned. 40318 40319 "interoperability" 40320 Different sets of tools are interoperable if they generate files 40321 that can be used in the same program. The set of tools includes 40322 compilers, assemblers, linkers, libraries, header files, startup 40323 files, and debuggers. Binaries produced by different sets of 40324 tools are not interoperable unless they implement the same ABI. 40325 This applies to different versions of the same tools as well as 40326 tools from different vendors. 40327 40328 "intercallability" 40329 Whether a function in a binary built by one set of tools can call a 40330 function in a binary built by a different set of tools is a subset 40331 of interoperability. 40332 40333 "implementation-defined features" 40334 Language standards include lists of implementation-defined 40335 features whose behavior can vary from one implementation to 40336 another. Some of these features are normally covered by a 40337 platform's ABI and others are not. The features that are not 40338 covered by an ABI generally affect how a program behaves, but not 40339 intercallability. 40340 40341 "compatibility" 40342 Conformance to the same ABI and the same behavior of 40343 implementation-defined features are both relevant for 40344 compatibility. 40345 40346 The application binary interface implemented by a C or C++ compiler 40347 affects code generation and runtime support for: 40348 40349 * size and alignment of data types 40350 40351 * layout of structured types 40352 40353 * calling conventions 40354 40355 * register usage conventions 40356 40357 * interfaces for runtime arithmetic support 40358 40359 * object file formats 40360 40361 In addition, the application binary interface implemented by a C++ 40362 compiler affects code generation and runtime support for: 40363 * name mangling 40364 40365 * exception handling 40366 40367 * invoking constructors and destructors 40368 40369 * layout, alignment, and padding of classes 40370 40371 * layout and alignment of virtual tables 40372 40373 Some GCC compilation options cause the compiler to generate code that 40374 does not conform to the platform's default ABI. Other options cause 40375 different program behavior for implementation-defined features that are 40376 not covered by an ABI. These options are provided for consistency with 40377 other compilers that do not follow the platform's default ABI or the 40378 usual behavior of implementation-defined features for the platform. Be 40379 very careful about using such options. 40380 40381 Most platforms have a well-defined ABI that covers C code, but ABIs 40382 that cover C++ functionality are not yet common. 40383 40384 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 40385 written, vendor-neutral C++ ABI that was designed to be specific to 40386 64-bit Itanium but also includes generic specifications that apply to 40387 any platform. This C++ ABI is also implemented by other compiler 40388 vendors on some platforms, notably GNU/Linux and BSD systems. We have 40389 tried hard to provide a stable ABI that will be compatible with future 40390 GCC releases, but it is possible that we will encounter problems that 40391 make this difficult. Such problems could include different 40392 interpretations of the C++ ABI by different vendors, bugs in the ABI, or 40393 bugs in the implementation of the ABI in different compilers. GCC's 40394 `-Wabi' switch warns when G++ generates code that is probably not 40395 compatible with the C++ ABI. 40396 40397 The C++ library used with a C++ compiler includes the Standard C++ 40398 Library, with functionality defined in the C++ Standard, plus language 40399 runtime support. The runtime support is included in a C++ ABI, but 40400 there is no formal ABI for the Standard C++ Library. Two 40401 implementations of that library are interoperable if one follows the 40402 de-facto ABI of the other and if they are both built with the same 40403 compiler, or with compilers that conform to the same ABI for C++ 40404 compiler and runtime support. 40405 40406 When G++ and another C++ compiler conform to the same C++ ABI, but the 40407 implementations of the Standard C++ Library that they normally use do 40408 not follow the same ABI for the Standard C++ Library, object files 40409 built with those compilers can be used in the same program only if they 40410 use the same C++ library. This requires specifying the location of the 40411 C++ library header files when invoking the compiler whose usual library 40412 is not being used. The location of GCC's C++ header files depends on 40413 how the GCC build was configured, but can be seen by using the G++ `-v' 40414 option. With default configuration options for G++ 3.3 the compile 40415 line for a different C++ compiler needs to include 40416 40417 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 40418 40419 Similarly, compiling code with G++ that must use a C++ library other 40420 than the GNU C++ library requires specifying the location of the header 40421 files for that other library. 40422 40423 The most straightforward way to link a program to use a particular C++ 40424 library is to use a C++ driver that specifies that C++ library by 40425 default. The `g++' driver, for example, tells the linker where to find 40426 GCC's C++ library (`libstdc++') plus the other libraries and startup 40427 files it needs, in the proper order. 40428 40429 If a program must use a different C++ library and it's not possible to 40430 do the final link using a C++ driver that uses that library by default, 40431 it is necessary to tell `g++' the location and name of that library. 40432 It might also be necessary to specify different startup files and other 40433 runtime support libraries, and to suppress the use of GCC's support 40434 libraries with one or more of the options `-nostdlib', `-nostartfiles', 40435 and `-nodefaultlibs'. 40436 40437 40438 File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 40439 40440 10 `gcov'--a Test Coverage Program 40441 ********************************** 40442 40443 `gcov' is a tool you can use in conjunction with GCC to test code 40444 coverage in your programs. 40445 40446 * Menu: 40447 40448 * Gcov Intro:: Introduction to gcov. 40449 * Invoking Gcov:: How to use gcov. 40450 * Gcov and Optimization:: Using gcov with GCC optimization. 40451 * Gcov Data Files:: The files used by gcov. 40452 * Cross-profiling:: Data file relocation. 40453 40454 40455 File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 40456 40457 10.1 Introduction to `gcov' 40458 =========================== 40459 40460 `gcov' is a test coverage program. Use it in concert with GCC to 40461 analyze your programs to help create more efficient, faster running 40462 code and to discover untested parts of your program. You can use 40463 `gcov' as a profiling tool to help discover where your optimization 40464 efforts will best affect your code. You can also use `gcov' along with 40465 the other profiling tool, `gprof', to assess which parts of your code 40466 use the greatest amount of computing time. 40467 40468 Profiling tools help you analyze your code's performance. Using a 40469 profiler such as `gcov' or `gprof', you can find out some basic 40470 performance statistics, such as: 40471 40472 * how often each line of code executes 40473 40474 * what lines of code are actually executed 40475 40476 * how much computing time each section of code uses 40477 40478 Once you know these things about how your code works when compiled, you 40479 can look at each module to see which modules should be optimized. 40480 `gcov' helps you determine where to work on optimization. 40481 40482 Software developers also use coverage testing in concert with 40483 testsuites, to make sure software is actually good enough for a release. 40484 Testsuites can verify that a program works as expected; a coverage 40485 program tests to see how much of the program is exercised by the 40486 testsuite. Developers can then determine what kinds of test cases need 40487 to be added to the testsuites to create both better testing and a better 40488 final product. 40489 40490 You should compile your code without optimization if you plan to use 40491 `gcov' because the optimization, by combining some lines of code into 40492 one function, may not give you as much information as you need to look 40493 for `hot spots' where the code is using a great deal of computer time. 40494 Likewise, because `gcov' accumulates statistics by line (at the lowest 40495 resolution), it works best with a programming style that places only 40496 one statement on each line. If you use complicated macros that expand 40497 to loops or to other control structures, the statistics are less 40498 helpful--they only report on the line where the macro call appears. If 40499 your complex macros behave like functions, you can replace them with 40500 inline functions to solve this problem. 40501 40502 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 40503 many times each line of a source file `SOURCEFILE.c' has executed. You 40504 can use these logfiles along with `gprof' to aid in fine-tuning the 40505 performance of your programs. `gprof' gives timing information you can 40506 use along with the information you get from `gcov'. 40507 40508 `gcov' works only on code compiled with GCC. It is not compatible 40509 with any other profiling or test coverage mechanism. 40510 40511 40512 File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 40513 40514 10.2 Invoking `gcov' 40515 ==================== 40516 40517 gcov [OPTIONS] SOURCEFILES 40518 40519 `gcov' accepts the following options: 40520 40521 `-h' 40522 `--help' 40523 Display help about using `gcov' (on the standard output), and exit 40524 without doing any further processing. 40525 40526 `-v' 40527 `--version' 40528 Display the `gcov' version number (on the standard output), and 40529 exit without doing any further processing. 40530 40531 `-a' 40532 `--all-blocks' 40533 Write individual execution counts for every basic block. Normally 40534 gcov outputs execution counts only for the main blocks of a line. 40535 With this option you can determine if blocks within a single line 40536 are not being executed. 40537 40538 `-b' 40539 `--branch-probabilities' 40540 Write branch frequencies to the output file, and write branch 40541 summary info to the standard output. This option allows you to 40542 see how often each branch in your program was taken. 40543 Unconditional branches will not be shown, unless the `-u' option 40544 is given. 40545 40546 `-c' 40547 `--branch-counts' 40548 Write branch frequencies as the number of branches taken, rather 40549 than the percentage of branches taken. 40550 40551 `-m' 40552 `--pmu-profile' 40553 Output the additional PMU profile information if available. 40554 40555 `-q' 40556 `--pmu_profile-path' 40557 PMU profile path (default `pmuprofile.gcda'). 40558 40559 `-n' 40560 `--no-output' 40561 Do not create the `gcov' output file. 40562 40563 `-l' 40564 `--long-file-names' 40565 Create long file names for included source files. For example, if 40566 the header file `x.h' contains code, and was included in the file 40567 `a.c', then running `gcov' on the file `a.c' will produce an 40568 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 40569 can be useful if `x.h' is included in multiple source files. If 40570 you use the `-p' option, both the including and included file 40571 names will be complete path names. 40572 40573 `-p' 40574 `--preserve-paths' 40575 Preserve complete path information in the names of generated 40576 `.gcov' files. Without this option, just the filename component is 40577 used. With this option, all directories are used, with `/' 40578 characters translated to `#' characters, `.' directory components 40579 removed and `..' components renamed to `^'. This is useful if 40580 sourcefiles are in several different directories. It also affects 40581 the `-l' option. 40582 40583 `-f' 40584 `--function-summaries' 40585 Output summaries for each function in addition to the file level 40586 summary. 40587 40588 `-o DIRECTORY|FILE' 40589 `--object-directory DIRECTORY' 40590 `--object-file FILE' 40591 Specify either the directory containing the gcov data files, or the 40592 object path name. The `.gcno', and `.gcda' data files are 40593 searched for using this option. If a directory is specified, the 40594 data files are in that directory and named after the source file 40595 name, without its extension. If a file is specified here, the 40596 data files are named after that file, without its extension. If 40597 this option is not supplied, it defaults to the current directory. 40598 40599 `-u' 40600 `--unconditional-branches' 40601 When branch probabilities are given, include those of 40602 unconditional branches. Unconditional branches are normally not 40603 interesting. 40604 40605 `-d' 40606 `--display-progress' 40607 Display the progress on the standard output. 40608 40609 `-i' 40610 `--intermediate-format' 40611 Output gcov file in an intermediate text format that can be used by 40612 `lcov' or other applications. It will output a single *.gcov file 40613 per *.gcda file. No source code is required. 40614 40615 The format of the intermediate `.gcov' file is plain text with one 40616 entry per line 40617 40618 SF:SOURCE_FILE_NAME 40619 FN:LINE_NUMBER,FUNCTION_NAME 40620 FNDA:EXECUTION_COUNT,FUNCTION_NAME 40621 BA:LINE_NUM,BRANCH_COVERAGE_TYPE 40622 DA:LINE NUMBER,EXECUTION_COUNT 40623 40624 Where the BRANCH_COVERAGE_TYPE is 40625 0 (Branch not executed) 40626 1 (Branch executed, but not taken) 40627 2 (Branch executed and taken) 40628 40629 There can be multiple SF entries in an intermediate gcov file. All 40630 entries following SF pertain to that source file until the next SF 40631 entry. 40632 40633 40634 `gcov' should be run with the current directory the same as that when 40635 you invoked the compiler. Otherwise it will not be able to locate the 40636 source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 40637 current directory. These contain the coverage information of the 40638 source file they correspond to. One `.gcov' file is produced for each 40639 source file containing code, which was compiled to produce the data 40640 files. The MANGLEDNAME part of the output file name is usually simply 40641 the source file name, but can be something more complicated if the `-l' 40642 or `-p' options are given. Refer to those options for details. 40643 40644 The `.gcov' files contain the `:' separated fields along with program 40645 source code. The format is 40646 40647 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 40648 40649 Additional block information may succeed each line, when requested by 40650 command line option. The EXECUTION_COUNT is `-' for lines containing 40651 no code and `#####' for lines which were never executed. Some lines of 40652 information at the start have LINE_NUMBER of zero. 40653 40654 The preamble lines are of the form 40655 40656 -:0:TAG:VALUE 40657 40658 The ordering and number of these preamble lines will be augmented as 40659 `gcov' development progresses -- do not rely on them remaining 40660 unchanged. Use TAG to locate a particular preamble line. 40661 40662 The additional block information is of the form 40663 40664 TAG INFORMATION 40665 40666 The INFORMATION is human readable, but designed to be simple enough 40667 for machine parsing too. 40668 40669 When printing percentages, 0% and 100% are only printed when the values 40670 are _exactly_ 0% and 100% respectively. Other values which would 40671 conventionally be rounded to 0% or 100% are instead printed as the 40672 nearest non-boundary value. 40673 40674 When using `gcov', you must first compile your program with two 40675 special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 40676 compiler to generate additional information needed by gcov (basically a 40677 flow graph of the program) and also includes additional code in the 40678 object files for generating the extra profiling information needed by 40679 gcov. These additional files are placed in the directory where the 40680 object file is located. 40681 40682 Running the program will cause profile output to be generated. For 40683 each source file compiled with `-fprofile-arcs', an accompanying 40684 `.gcda' file will be placed in the object file directory. 40685 40686 Running `gcov' with your program's source file names as arguments will 40687 now produce a listing of the code along with frequency of execution for 40688 each line. For example, if your program is called `tmp.c', this is 40689 what you see when you use the basic `gcov' facility: 40690 40691 $ gcc -fprofile-arcs -ftest-coverage tmp.c 40692 $ a.out 40693 $ gcov tmp.c 40694 90.00% of 10 source lines executed in file tmp.c 40695 Creating tmp.c.gcov. 40696 40697 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 40698 40699 -: 0:Source:tmp.c 40700 -: 0:Graph:tmp.gcno 40701 -: 0:Data:tmp.gcda 40702 -: 0:Runs:1 40703 -: 0:Programs:1 40704 -: 1:#include <stdio.h> 40705 -: 2: 40706 -: 3:int main (void) 40707 1: 4:{ 40708 1: 5: int i, total; 40709 -: 6: 40710 1: 7: total = 0; 40711 -: 8: 40712 11: 9: for (i = 0; i < 10; i++) 40713 10: 10: total += i; 40714 -: 11: 40715 1: 12: if (total != 45) 40716 #####: 13: printf ("Failure\n"); 40717 -: 14: else 40718 1: 15: printf ("Success\n"); 40719 1: 16: return 0; 40720 -: 17:} 40721 40722 When you use the `-a' option, you will get individual block counts, 40723 and the output looks like this: 40724 40725 -: 0:Source:tmp.c 40726 -: 0:Graph:tmp.gcno 40727 -: 0:Data:tmp.gcda 40728 -: 0:Runs:1 40729 -: 0:Programs:1 40730 -: 1:#include <stdio.h> 40731 -: 2: 40732 -: 3:int main (void) 40733 1: 4:{ 40734 1: 4-block 0 40735 1: 5: int i, total; 40736 -: 6: 40737 1: 7: total = 0; 40738 -: 8: 40739 11: 9: for (i = 0; i < 10; i++) 40740 11: 9-block 0 40741 10: 10: total += i; 40742 10: 10-block 0 40743 -: 11: 40744 1: 12: if (total != 45) 40745 1: 12-block 0 40746 #####: 13: printf ("Failure\n"); 40747 $$$$$: 13-block 0 40748 -: 14: else 40749 1: 15: printf ("Success\n"); 40750 1: 15-block 0 40751 1: 16: return 0; 40752 1: 16-block 0 40753 -: 17:} 40754 40755 In this mode, each basic block is only shown on one line - the last 40756 line of the block. A multi-line block will only contribute to the 40757 execution count of that last line, and other lines will not be shown to 40758 contain code, unless previous blocks end on those lines. The total 40759 execution count of a line is shown and subsequent lines show the 40760 execution counts for individual blocks that end on that line. After 40761 each block, the branch and call counts of the block will be shown, if 40762 the `-b' option is given. 40763 40764 Because of the way GCC instruments calls, a call count can be shown 40765 after a line with no individual blocks. As you can see, line 13 40766 contains a basic block that was not executed. 40767 40768 When you use the `-b' option, your output looks like this: 40769 40770 $ gcov -b tmp.c 40771 90.00% of 10 source lines executed in file tmp.c 40772 80.00% of 5 branches executed in file tmp.c 40773 80.00% of 5 branches taken at least once in file tmp.c 40774 50.00% of 2 calls executed in file tmp.c 40775 Creating tmp.c.gcov. 40776 40777 Here is a sample of a resulting `tmp.c.gcov' file: 40778 40779 -: 0:Source:tmp.c 40780 -: 0:Graph:tmp.gcno 40781 -: 0:Data:tmp.gcda 40782 -: 0:Runs:1 40783 -: 0:Programs:1 40784 -: 1:#include <stdio.h> 40785 -: 2: 40786 -: 3:int main (void) 40787 function main called 1 returned 1 blocks executed 75% 40788 1: 4:{ 40789 1: 5: int i, total; 40790 -: 6: 40791 1: 7: total = 0; 40792 -: 8: 40793 11: 9: for (i = 0; i < 10; i++) 40794 branch 0 taken 91% (fallthrough) 40795 branch 1 taken 9% 40796 10: 10: total += i; 40797 -: 11: 40798 1: 12: if (total != 45) 40799 branch 0 taken 0% (fallthrough) 40800 branch 1 taken 100% 40801 #####: 13: printf ("Failure\n"); 40802 call 0 never executed 40803 -: 14: else 40804 1: 15: printf ("Success\n"); 40805 call 0 called 1 returned 100% 40806 1: 16: return 0; 40807 -: 17:} 40808 40809 For each function, a line is printed showing how many times the 40810 function is called, how many times it returns and what percentage of the 40811 function's blocks were executed. 40812 40813 For each basic block, a line is printed after the last line of the 40814 basic block describing the branch or call that ends the basic block. 40815 There can be multiple branches and calls listed for a single source 40816 line if there are multiple basic blocks that end on that line. In this 40817 case, the branches and calls are each given a number. There is no 40818 simple way to map these branches and calls back to source constructs. 40819 In general, though, the lowest numbered branch or call will correspond 40820 to the leftmost construct on the source line. 40821 40822 For a branch, if it was executed at least once, then a percentage 40823 indicating the number of times the branch was taken divided by the 40824 number of times the branch was executed will be printed. Otherwise, the 40825 message "never executed" is printed. 40826 40827 For a call, if it was executed at least once, then a percentage 40828 indicating the number of times the call returned divided by the number 40829 of times the call was executed will be printed. This will usually be 40830 100%, but may be less for functions that call `exit' or `longjmp', and 40831 thus may not return every time they are called. 40832 40833 The execution counts are cumulative. If the example program were 40834 executed again without removing the `.gcda' file, the count for the 40835 number of times each line in the source was executed would be added to 40836 the results of the previous run(s). This is potentially useful in 40837 several ways. For example, it could be used to accumulate data over a 40838 number of program runs as part of a test verification suite, or to 40839 provide more accurate long-term information over a large number of 40840 program runs. 40841 40842 The data in the `.gcda' files is saved immediately before the program 40843 exits. For each source file compiled with `-fprofile-arcs', the 40844 profiling code first attempts to read in an existing `.gcda' file; if 40845 the file doesn't match the executable (differing number of basic block 40846 counts) it will ignore the contents of the file. It then adds in the 40847 new execution counts and finally writes the data to the file. 40848 40849 40850 File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 40851 40852 10.3 Using `gcov' with GCC Optimization 40853 ======================================= 40854 40855 If you plan to use `gcov' to help optimize your code, you must first 40856 compile your program with two special GCC options: `-fprofile-arcs 40857 -ftest-coverage'. Aside from that, you can use any other GCC options; 40858 but if you want to prove that every single line in your program was 40859 executed, you should not compile with optimization at the same time. 40860 On some machines the optimizer can eliminate some simple code lines by 40861 combining them with other lines. For example, code like this: 40862 40863 if (a != b) 40864 c = 1; 40865 else 40866 c = 0; 40867 40868 can be compiled into one instruction on some machines. In this case, 40869 there is no way for `gcov' to calculate separate execution counts for 40870 each line because there isn't separate code for each line. Hence the 40871 `gcov' output looks like this if you compiled the program with 40872 optimization: 40873 40874 100: 12:if (a != b) 40875 100: 13: c = 1; 40876 100: 14:else 40877 100: 15: c = 0; 40878 40879 The output shows that this block of code, combined by optimization, 40880 executed 100 times. In one sense this result is correct, because there 40881 was only one instruction representing all four of these lines. However, 40882 the output does not indicate how many times the result was 0 and how 40883 many times the result was 1. 40884 40885 Inlineable functions can create unexpected line counts. Line counts 40886 are shown for the source code of the inlineable function, but what is 40887 shown depends on where the function is inlined, or if it is not inlined 40888 at all. 40889 40890 If the function is not inlined, the compiler must emit an out of line 40891 copy of the function, in any object file that needs it. If `fileA.o' 40892 and `fileB.o' both contain out of line bodies of a particular 40893 inlineable function, they will also both contain coverage counts for 40894 that function. When `fileA.o' and `fileB.o' are linked together, the 40895 linker will, on many systems, select one of those out of line bodies 40896 for all calls to that function, and remove or ignore the other. 40897 Unfortunately, it will not remove the coverage counters for the unused 40898 function body. Hence when instrumented, all but one use of that 40899 function will show zero counts. 40900 40901 If the function is inlined in several places, the block structure in 40902 each location might not be the same. For instance, a condition might 40903 now be calculable at compile time in some instances. Because the 40904 coverage of all the uses of the inline function will be shown for the 40905 same source lines, the line counts themselves might seem inconsistent. 40906 40907 40908 File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 40909 40910 10.4 Brief description of `gcov' data files 40911 =========================================== 40912 40913 `gcov' uses two files for profiling. The names of these files are 40914 derived from the original _object_ file by substituting the file suffix 40915 with either `.gcno', or `.gcda'. All of these files are placed in the 40916 same directory as the object file, and contain data stored in a 40917 platform-independent format. 40918 40919 The `.gcno' file is generated when the source file is compiled with 40920 the GCC `-ftest-coverage' option. It contains information to 40921 reconstruct the basic block graphs and assign source line numbers to 40922 blocks. 40923 40924 The `.gcda' file is generated when a program containing object files 40925 built with the GCC `-fprofile-arcs' option is executed. A separate 40926 `.gcda' file is created for each object file compiled with this option. 40927 It contains arc transition counts, and some summary information. 40928 40929 The full details of the file format is specified in `gcov-io.h', and 40930 functions provided in that header file should be used to access the 40931 coverage files. 40932 40933 40934 File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 40935 40936 10.5 Data file relocation to support cross-profiling 40937 ==================================================== 40938 40939 Running the program will cause profile output to be generated. For each 40940 source file compiled with `-fprofile-arcs', an accompanying `.gcda' 40941 file will be placed in the object file directory. That implicitly 40942 requires running the program on the same system as it was built or 40943 having the same absolute directory structure on the target system. The 40944 program will try to create the needed directory structure, if it is not 40945 already present. 40946 40947 To support cross-profiling, a program compiled with `-fprofile-arcs' 40948 can relocate the data files based on two environment variables: 40949 40950 * GCOV_PREFIX contains the prefix to add to the absolute paths in 40951 the object file. Prefix can be absolute, or relative. The default 40952 is no prefix. 40953 40954 * GCOV_PREFIX_STRIP indicates the how many initial directory names 40955 to strip off the hardwired absolute paths. Default value is 0. 40956 40957 _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is 40958 undefined, then a relative path is made out of the hardwired 40959 absolute paths. 40960 40961 For example, if the object file `/user/build/foo.o' was built with 40962 `-fprofile-arcs', the final executable will try to create the data file 40963 `/user/build/foo.gcda' when running on the target system. This will 40964 fail if the corresponding directory does not exist and it is unable to 40965 create it. This can be overcome by, for example, setting the 40966 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 40967 Such a setting will name the data file `/target/run/build/foo.gcda'. 40968 40969 You must move the data files to the expected directory tree in order to 40970 use them for profile directed optimizations (`--use-profile'), or to 40971 use the `gcov' tool. 40972 40973 40974 File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 40975 40976 11 Known Causes of Trouble with GCC 40977 *********************************** 40978 40979 This section describes known problems that affect users of GCC. Most 40980 of these are not GCC bugs per se--if they were, we would fix them. But 40981 the result for a user may be like the result of a bug. 40982 40983 Some of these problems are due to bugs in other software, some are 40984 missing features that are too much work to add, and some are places 40985 where people's opinions differ as to what is best. 40986 40987 * Menu: 40988 40989 * Actual Bugs:: Bugs we will fix later. 40990 * Cross-Compiler Problems:: Common problems of cross compiling with GCC. 40991 * Interoperation:: Problems using GCC with other compilers, 40992 and with certain linkers, assemblers and debuggers. 40993 * Incompatibilities:: GCC is incompatible with traditional C. 40994 * Fixed Headers:: GCC uses corrected versions of system header files. 40995 This is necessary, but doesn't always work smoothly. 40996 * Standard Libraries:: GCC uses the system C library, which might not be 40997 compliant with the ISO C standard. 40998 * Disappointments:: Regrettable things we can't change, but not quite bugs. 40999 * C++ Misunderstandings:: Common misunderstandings with GNU C++. 41000 * Non-bugs:: Things we think are right, but some others disagree. 41001 * Warnings and Errors:: Which problems in your code get warnings, 41002 and which get errors. 41003 41004 41005 File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble 41006 41007 11.1 Actual Bugs We Haven't Fixed Yet 41008 ===================================== 41009 41010 * The `fixincludes' script interacts badly with automounters; if the 41011 directory of system header files is automounted, it tends to be 41012 unmounted while `fixincludes' is running. This would seem to be a 41013 bug in the automounter. We don't know any good way to work around 41014 it. 41015 41016 41017 File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble 41018 41019 11.2 Cross-Compiler Problems 41020 ============================ 41021 41022 You may run into problems with cross compilation on certain machines, 41023 for several reasons. 41024 41025 * At present, the program `mips-tfile' which adds debug support to 41026 object files on MIPS systems does not work in a cross compile 41027 environment. 41028 41029 41030 File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble 41031 41032 11.3 Interoperation 41033 =================== 41034 41035 This section lists various difficulties encountered in using GCC 41036 together with other compilers or with the assemblers, linkers, 41037 libraries and debuggers on certain systems. 41038 41039 * On many platforms, GCC supports a different ABI for C++ than do 41040 other compilers, so the object files compiled by GCC cannot be 41041 used with object files generated by another C++ compiler. 41042 41043 An area where the difference is most apparent is name mangling. 41044 The use of different name mangling is intentional, to protect you 41045 from more subtle problems. Compilers differ as to many internal 41046 details of C++ implementation, including: how class instances are 41047 laid out, how multiple inheritance is implemented, and how virtual 41048 function calls are handled. If the name encoding were made the 41049 same, your programs would link against libraries provided from 41050 other compilers--but the programs would then crash when run. 41051 Incompatible libraries are then detected at link time, rather than 41052 at run time. 41053 41054 * On some BSD systems, including some versions of Ultrix, use of 41055 profiling causes static variable destructors (currently used only 41056 in C++) not to be run. 41057 41058 * On some SGI systems, when you use `-lgl_s' as an option, it gets 41059 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 41060 does not happen when you use GCC. You must specify all three 41061 options explicitly. 41062 41063 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 41064 boundary, and it expects every `double' to be so aligned. The Sun 41065 compiler usually gives `double' values 8-byte alignment, with one 41066 exception: function arguments of type `double' may not be aligned. 41067 41068 As a result, if a function compiled with Sun CC takes the address 41069 of an argument of type `double' and passes this pointer of type 41070 `double *' to a function compiled with GCC, dereferencing the 41071 pointer may cause a fatal signal. 41072 41073 One way to solve this problem is to compile your entire program 41074 with GCC. Another solution is to modify the function that is 41075 compiled with Sun CC to copy the argument into a local variable; 41076 local variables are always properly aligned. A third solution is 41077 to modify the function that uses the pointer to dereference it via 41078 the following function `access_double' instead of directly with 41079 `*': 41080 41081 inline double 41082 access_double (double *unaligned_ptr) 41083 { 41084 union d2i { double d; int i[2]; }; 41085 41086 union d2i *p = (union d2i *) unaligned_ptr; 41087 union d2i u; 41088 41089 u.i[0] = p->i[0]; 41090 u.i[1] = p->i[1]; 41091 41092 return u.d; 41093 } 41094 41095 Storing into the pointer can be done likewise with the same union. 41096 41097 * On Solaris, the `malloc' function in the `libmalloc.a' library may 41098 allocate memory that is only 4 byte aligned. Since GCC on the 41099 SPARC assumes that doubles are 8 byte aligned, this may result in a 41100 fatal signal if doubles are stored in memory allocated by the 41101 `libmalloc.a' library. 41102 41103 The solution is to not use the `libmalloc.a' library. Use instead 41104 `malloc' and related functions from `libc.a'; they do not have 41105 this problem. 41106 41107 * On the HP PA machine, ADB sometimes fails to work on functions 41108 compiled with GCC. Specifically, it fails to work on functions 41109 that use `alloca' or variable-size arrays. This is because GCC 41110 doesn't generate HP-UX unwind descriptors for such functions. It 41111 may even be impossible to generate them. 41112 41113 * Debugging (`-g') is not supported on the HP PA machine, unless you 41114 use the preliminary GNU tools. 41115 41116 * Taking the address of a label may generate errors from the HP-UX 41117 PA assembler. GAS for the PA does not have this problem. 41118 41119 * Using floating point parameters for indirect calls to static 41120 functions will not work when using the HP assembler. There simply 41121 is no way for GCC to specify what registers hold arguments for 41122 static functions when using the HP assembler. GAS for the PA does 41123 not have this problem. 41124 41125 * In extremely rare cases involving some very large functions you may 41126 receive errors from the HP linker complaining about an out of 41127 bounds unconditional branch offset. This used to occur more often 41128 in previous versions of GCC, but is now exceptionally rare. If 41129 you should run into it, you can work around by making your 41130 function smaller. 41131 41132 * GCC compiled code sometimes emits warnings from the HP-UX 41133 assembler of the form: 41134 41135 (warning) Use of GR3 when 41136 frame >= 8192 may cause conflict. 41137 41138 These warnings are harmless and can be safely ignored. 41139 41140 * In extremely rare cases involving some very large functions you may 41141 receive errors from the AIX Assembler complaining about a 41142 displacement that is too large. If you should run into it, you 41143 can work around by making your function smaller. 41144 41145 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 41146 semantics which merges global symbols between libraries and 41147 applications, especially necessary for C++ streams functionality. 41148 This is not the default behavior of AIX shared libraries and 41149 dynamic linking. `libstdc++.a' is built on AIX with 41150 "runtime-linking" enabled so that symbol merging can occur. To 41151 utilize this feature, the application linked with `libstdc++.a' 41152 must include the `-Wl,-brtl' flag on the link line. G++ cannot 41153 impose this because this option may interfere with the semantics 41154 of the user program and users may not always use `g++' to link his 41155 or her application. Applications are not required to use the 41156 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 41157 library which is not dependent on the symbol merging semantics 41158 will continue to function correctly. 41159 41160 * An application can interpose its own definition of functions for 41161 functions invoked by `libstdc++.a' with "runtime-linking" enabled 41162 on AIX. To accomplish this the application must be linked with 41163 "runtime-linking" option and the functions explicitly must be 41164 exported by the application (`-Wl,-brtl,-bE:exportfile'). 41165 41166 * AIX on the RS/6000 provides support (NLS) for environments outside 41167 of the United States. Compilers and assemblers use NLS to support 41168 locale-specific representations of various objects including 41169 floating-point numbers (`.' vs `,' for separating decimal 41170 fractions). There have been problems reported where the library 41171 linked with GCC does not produce the same floating-point formats 41172 that the assembler accepts. If you have this problem, set the 41173 `LANG' environment variable to `C' or `En_US'. 41174 41175 * Even if you specify `-fdollars-in-identifiers', you cannot 41176 successfully use `$' in identifiers on the RS/6000 due to a 41177 restriction in the IBM assembler. GAS supports these identifiers. 41178 41179 41180 41181 File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 41182 41183 11.4 Incompatibilities of GCC 41184 ============================= 41185 41186 There are several noteworthy incompatibilities between GNU C and K&R 41187 (non-ISO) versions of C. 41188 41189 * GCC normally makes string constants read-only. If several 41190 identical-looking string constants are used, GCC stores only one 41191 copy of the string. 41192 41193 One consequence is that you cannot call `mktemp' with a string 41194 constant argument. The function `mktemp' always alters the string 41195 its argument points to. 41196 41197 Another consequence is that `sscanf' does not work on some very 41198 old systems when passed a string constant as its format control 41199 string or input. This is because `sscanf' incorrectly tries to 41200 write into the string constant. Likewise `fscanf' and `scanf'. 41201 41202 The solution to these problems is to change the program to use 41203 `char'-array variables with initialization strings for these 41204 purposes instead of string constants. 41205 41206 * `-2147483648' is positive. 41207 41208 This is because 2147483648 cannot fit in the type `int', so 41209 (following the ISO C rules) its data type is `unsigned long int'. 41210 Negating this value yields 2147483648 again. 41211 41212 * GCC does not substitute macro arguments when they appear inside of 41213 string constants. For example, the following macro in GCC 41214 41215 #define foo(a) "a" 41216 41217 will produce output `"a"' regardless of what the argument A is. 41218 41219 * When you use `setjmp' and `longjmp', the only automatic variables 41220 guaranteed to remain valid are those declared `volatile'. This is 41221 a consequence of automatic register allocation. Consider this 41222 function: 41223 41224 jmp_buf j; 41225 41226 foo () 41227 { 41228 int a, b; 41229 41230 a = fun1 (); 41231 if (setjmp (j)) 41232 return a; 41233 41234 a = fun2 (); 41235 /* `longjmp (j)' may occur in `fun3'. */ 41236 return a + fun3 (); 41237 } 41238 41239 Here `a' may or may not be restored to its first value when the 41240 `longjmp' occurs. If `a' is allocated in a register, then its 41241 first value is restored; otherwise, it keeps the last value stored 41242 in it. 41243 41244 If you use the `-W' option with the `-O' option, you will get a 41245 warning when GCC thinks such a problem might be possible. 41246 41247 * Programs that use preprocessing directives in the middle of macro 41248 arguments do not work with GCC. For example, a program like this 41249 will not work: 41250 41251 foobar ( 41252 #define luser 41253 hack) 41254 41255 ISO C does not permit such a construct. 41256 41257 * K&R compilers allow comments to cross over an inclusion boundary 41258 (i.e. started in an include file and ended in the including file). 41259 41260 * Declarations of external variables and functions within a block 41261 apply only to the block containing the declaration. In other 41262 words, they have the same scope as any other declaration in the 41263 same place. 41264 41265 In some other C compilers, an `extern' declaration affects all the 41266 rest of the file even if it happens within a block. 41267 41268 * In traditional C, you can combine `long', etc., with a typedef 41269 name, as shown here: 41270 41271 typedef int foo; 41272 typedef long foo bar; 41273 41274 In ISO C, this is not allowed: `long' and other type modifiers 41275 require an explicit `int'. 41276 41277 * PCC allows typedef names to be used as function parameters. 41278 41279 * Traditional C allows the following erroneous pair of declarations 41280 to appear together in a given scope: 41281 41282 typedef int foo; 41283 typedef foo foo; 41284 41285 * GCC treats all characters of identifiers as significant. 41286 According to K&R-1 (2.2), "No more than the first eight characters 41287 are significant, although more may be used.". Also according to 41288 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 41289 the first character must be a letter. The underscore _ counts as 41290 a letter.", but GCC also allows dollar signs in identifiers. 41291 41292 * PCC allows whitespace in the middle of compound assignment 41293 operators such as `+='. GCC, following the ISO standard, does not 41294 allow this. 41295 41296 * GCC complains about unterminated character constants inside of 41297 preprocessing conditionals that fail. Some programs have English 41298 comments enclosed in conditionals that are guaranteed to fail; if 41299 these comments contain apostrophes, GCC will probably report an 41300 error. For example, this code would produce an error: 41301 41302 #if 0 41303 You can't expect this to work. 41304 #endif 41305 41306 The best solution to such a problem is to put the text into an 41307 actual C comment delimited by `/*...*/'. 41308 41309 * Many user programs contain the declaration `long time ();'. In the 41310 past, the system header files on many systems did not actually 41311 declare `time', so it did not matter what type your program 41312 declared it to return. But in systems with ISO C headers, `time' 41313 is declared to return `time_t', and if that is not the same as 41314 `long', then `long time ();' is erroneous. 41315 41316 The solution is to change your program to use appropriate system 41317 headers (`<time.h>' on systems with ISO C headers) and not to 41318 declare `time' if the system header files declare it, or failing 41319 that to use `time_t' as the return type of `time'. 41320 41321 * When compiling functions that return `float', PCC converts it to a 41322 double. GCC actually returns a `float'. If you are concerned 41323 with PCC compatibility, you should declare your functions to return 41324 `double'; you might as well say what you mean. 41325 41326 * When compiling functions that return structures or unions, GCC 41327 output code normally uses a method different from that used on most 41328 versions of Unix. As a result, code compiled with GCC cannot call 41329 a structure-returning function compiled with PCC, and vice versa. 41330 41331 The method used by GCC is as follows: a structure or union which is 41332 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 41333 union with any other size is stored into an address supplied by 41334 the caller (usually in a special, fixed register, but on some 41335 machines it is passed on the stack). The target hook 41336 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 41337 41338 By contrast, PCC on most target machines returns structures and 41339 unions of any size by copying the data into an area of static 41340 storage, and then returning the address of that storage as if it 41341 were a pointer value. The caller must copy the data from that 41342 memory area to the place where the value is wanted. GCC does not 41343 use this method because it is slower and nonreentrant. 41344 41345 On some newer machines, PCC uses a reentrant convention for all 41346 structure and union returning. GCC on most of these machines uses 41347 a compatible convention when returning structures and unions in 41348 memory, but still returns small structures and unions in registers. 41349 41350 You can tell GCC to use a compatible convention for all structure 41351 and union returning with the option `-fpcc-struct-return'. 41352 41353 * GCC complains about program fragments such as `0x74ae-0x4000' 41354 which appear to be two hexadecimal constants separated by the minus 41355 operator. Actually, this string is a single "preprocessing token". 41356 Each such token must correspond to one token in C. Since this 41357 does not, GCC prints an error message. Although it may appear 41358 obvious that what is meant is an operator and two values, the ISO 41359 C standard specifically requires that this be treated as erroneous. 41360 41361 A "preprocessing token" is a "preprocessing number" if it begins 41362 with a digit and is followed by letters, underscores, digits, 41363 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 41364 character sequences. (In strict C90 mode, the sequences `p+', 41365 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 41366 41367 To make the above program fragment valid, place whitespace in 41368 front of the minus sign. This whitespace will end the 41369 preprocessing number. 41370 41371 41372 File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 41373 41374 11.5 Fixed Header Files 41375 ======================= 41376 41377 GCC needs to install corrected versions of some system header files. 41378 This is because most target systems have some header files that won't 41379 work with GCC unless they are changed. Some have bugs, some are 41380 incompatible with ISO C, and some depend on special features of other 41381 compilers. 41382 41383 Installing GCC automatically creates and installs the fixed header 41384 files, by running a program called `fixincludes'. Normally, you don't 41385 need to pay attention to this. But there are cases where it doesn't do 41386 the right thing automatically. 41387 41388 * If you update the system's header files, such as by installing a 41389 new system version, the fixed header files of GCC are not 41390 automatically updated. They can be updated using the `mkheaders' 41391 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 41392 41393 * On some systems, header file directories contain machine-specific 41394 symbolic links in certain places. This makes it possible to share 41395 most of the header files among hosts running the same version of 41396 the system on different machine models. 41397 41398 The programs that fix the header files do not understand this 41399 special way of using symbolic links; therefore, the directory of 41400 fixed header files is good only for the machine model used to 41401 build it. 41402 41403 It is possible to make separate sets of fixed header files for the 41404 different machine models, and arrange a structure of symbolic 41405 links so as to use the proper set, but you'll have to do this by 41406 hand. 41407 41408 41409 File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 41410 41411 11.6 Standard Libraries 41412 ======================= 41413 41414 GCC by itself attempts to be a conforming freestanding implementation. 41415 *Note Language Standards Supported by GCC: Standards, for details of 41416 what this means. Beyond the library facilities required of such an 41417 implementation, the rest of the C library is supplied by the vendor of 41418 the operating system. If that C library doesn't conform to the C 41419 standards, then your programs might get warnings (especially when using 41420 `-Wall') that you don't expect. 41421 41422 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 41423 while the C standard says that `sprintf' returns an `int'. The 41424 `fixincludes' program could make the prototype for this function match 41425 the Standard, but that would be wrong, since the function will still 41426 return `char *'. 41427 41428 If you need a Standard compliant library, then you need to find one, as 41429 GCC does not provide one. The GNU C library (called `glibc') provides 41430 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 41431 HURD-based GNU systems; no recent version of it supports other systems, 41432 though some very old versions did. Version 2.2 of the GNU C library 41433 includes nearly complete C99 support. You could also ask your 41434 operating system vendor if newer libraries are available. 41435 41436 41437 File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 41438 41439 11.7 Disappointments and Misunderstandings 41440 ========================================== 41441 41442 These problems are perhaps regrettable, but we don't know any practical 41443 way around them. 41444 41445 * Certain local variables aren't recognized by debuggers when you 41446 compile with optimization. 41447 41448 This occurs because sometimes GCC optimizes the variable out of 41449 existence. There is no way to tell the debugger how to compute the 41450 value such a variable "would have had", and it is not clear that 41451 would be desirable anyway. So GCC simply does not mention the 41452 eliminated variable when it writes debugging information. 41453 41454 You have to expect a certain amount of disagreement between the 41455 executable and your source code, when you use optimization. 41456 41457 * Users often think it is a bug when GCC reports an error for code 41458 like this: 41459 41460 int foo (struct mumble *); 41461 41462 struct mumble { ... }; 41463 41464 int foo (struct mumble *x) 41465 { ... } 41466 41467 This code really is erroneous, because the scope of `struct 41468 mumble' in the prototype is limited to the argument list 41469 containing it. It does not refer to the `struct mumble' defined 41470 with file scope immediately below--they are two unrelated types 41471 with similar names in different scopes. 41472 41473 But in the definition of `foo', the file-scope type is used 41474 because that is available to be inherited. Thus, the definition 41475 and the prototype do not match, and you get an error. 41476 41477 This behavior may seem silly, but it's what the ISO standard 41478 specifies. It is easy enough for you to make your code work by 41479 moving the definition of `struct mumble' above the prototype. 41480 It's not worth being incompatible with ISO C just to avoid an 41481 error for the example shown above. 41482 41483 * Accesses to bit-fields even in volatile objects works by accessing 41484 larger objects, such as a byte or a word. You cannot rely on what 41485 size of object is accessed in order to read or write the 41486 bit-field; it may even vary for a given bit-field according to the 41487 precise usage. 41488 41489 If you care about controlling the amount of memory that is 41490 accessed, use volatile but do not use bit-fields. 41491 41492 * GCC comes with shell scripts to fix certain known problems in 41493 system header files. They install corrected copies of various 41494 header files in a special directory where only GCC will normally 41495 look for them. The scripts adapt to various systems by searching 41496 all the system header files for the problem cases that we know 41497 about. 41498 41499 If new system header files are installed, nothing automatically 41500 arranges to update the corrected header files. They can be 41501 updated using the `mkheaders' script installed in 41502 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 41503 41504 * On 68000 and x86 systems, for instance, you can get paradoxical 41505 results if you test the precise values of floating point numbers. 41506 For example, you can find that a floating point value which is not 41507 a NaN is not equal to itself. This results from the fact that the 41508 floating point registers hold a few more bits of precision than 41509 fit in a `double' in memory. Compiled code moves values between 41510 memory and floating point registers at its convenience, and moving 41511 them into memory truncates them. 41512 41513 You can partially avoid this problem by using the `-ffloat-store' 41514 option (*note Optimize Options::). 41515 41516 * On AIX and other platforms without weak symbol support, templates 41517 need to be instantiated explicitly and symbols for static members 41518 of templates will not be generated. 41519 41520 * On AIX, GCC scans object files and library archives for static 41521 constructors and destructors when linking an application before the 41522 linker prunes unreferenced symbols. This is necessary to prevent 41523 the AIX linker from mistakenly assuming that static constructor or 41524 destructor are unused and removing them before the scanning can 41525 occur. All static constructors and destructors found will be 41526 referenced even though the modules in which they occur may not be 41527 used by the program. This may lead to both increased executable 41528 size and unexpected symbol references. 41529 41530 41531 File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble 41532 41533 11.8 Common Misunderstandings with GNU C++ 41534 ========================================== 41535 41536 C++ is a complex language and an evolving one, and its standard 41537 definition (the ISO C++ standard) was only recently completed. As a 41538 result, your C++ compiler may occasionally surprise you, even when its 41539 behavior is correct. This section discusses some areas that frequently 41540 give rise to questions of this sort. 41541 41542 * Menu: 41543 41544 * Static Definitions:: Static member declarations are not definitions 41545 * Name lookup:: Name lookup, templates, and accessing members of base classes 41546 * Temporaries:: Temporaries may vanish before you expect 41547 * Copy Assignment:: Copy Assignment operators copy virtual bases twice 41548 41549 41550 File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 41551 41552 11.8.1 Declare _and_ Define Static Members 41553 ------------------------------------------ 41554 41555 When a class has static data members, it is not enough to _declare_ the 41556 static member; you must also _define_ it. For example: 41557 41558 class Foo 41559 { 41560 ... 41561 void method(); 41562 static int bar; 41563 }; 41564 41565 This declaration only establishes that the class `Foo' has an `int' 41566 named `Foo::bar', and a member function named `Foo::method'. But you 41567 still need to define _both_ `method' and `bar' elsewhere. According to 41568 the ISO standard, you must supply an initializer in one (and only one) 41569 source file, such as: 41570 41571 int Foo::bar = 0; 41572 41573 Other C++ compilers may not correctly implement the standard behavior. 41574 As a result, when you switch to `g++' from one of these compilers, you 41575 may discover that a program that appeared to work correctly in fact 41576 does not conform to the standard: `g++' reports as undefined symbols 41577 any static data members that lack definitions. 41578 41579 41580 File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 41581 41582 11.8.2 Name lookup, templates, and accessing members of base classes 41583 -------------------------------------------------------------------- 41584 41585 The C++ standard prescribes that all names that are not dependent on 41586 template parameters are bound to their present definitions when parsing 41587 a template function or class.(1) Only names that are dependent are 41588 looked up at the point of instantiation. For example, consider 41589 41590 void foo(double); 41591 41592 struct A { 41593 template <typename T> 41594 void f () { 41595 foo (1); // 1 41596 int i = N; // 2 41597 T t; 41598 t.bar(); // 3 41599 foo (t); // 4 41600 } 41601 41602 static const int N; 41603 }; 41604 41605 Here, the names `foo' and `N' appear in a context that does not depend 41606 on the type of `T'. The compiler will thus require that they are 41607 defined in the context of use in the template, not only before the 41608 point of instantiation, and will here use `::foo(double)' and `A::N', 41609 respectively. In particular, it will convert the integer value to a 41610 `double' when passing it to `::foo(double)'. 41611 41612 Conversely, `bar' and the call to `foo' in the fourth marked line are 41613 used in contexts that do depend on the type of `T', so they are only 41614 looked up at the point of instantiation, and you can provide 41615 declarations for them after declaring the template, but before 41616 instantiating it. In particular, if you instantiate `A::f<int>', the 41617 last line will call an overloaded `::foo(int)' if one was provided, 41618 even if after the declaration of `struct A'. 41619 41620 This distinction between lookup of dependent and non-dependent names is 41621 called two-stage (or dependent) name lookup. G++ implements it since 41622 version 3.4. 41623 41624 Two-stage name lookup sometimes leads to situations with behavior 41625 different from non-template codes. The most common is probably this: 41626 41627 template <typename T> struct Base { 41628 int i; 41629 }; 41630 41631 template <typename T> struct Derived : public Base<T> { 41632 int get_i() { return i; } 41633 }; 41634 41635 In `get_i()', `i' is not used in a dependent context, so the compiler 41636 will look for a name declared at the enclosing namespace scope (which 41637 is the global scope here). It will not look into the base class, since 41638 that is dependent and you may declare specializations of `Base' even 41639 after declaring `Derived', so the compiler can't really know what `i' 41640 would refer to. If there is no global variable `i', then you will get 41641 an error message. 41642 41643 In order to make it clear that you want the member of the base class, 41644 you need to defer lookup until instantiation time, at which the base 41645 class is known. For this, you need to access `i' in a dependent 41646 context, by either using `this->i' (remember that `this' is of type 41647 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 41648 Alternatively, `Base<T>::i' might be brought into scope by a 41649 `using'-declaration. 41650 41651 Another, similar example involves calling member functions of a base 41652 class: 41653 41654 template <typename T> struct Base { 41655 int f(); 41656 }; 41657 41658 template <typename T> struct Derived : Base<T> { 41659 int g() { return f(); }; 41660 }; 41661 41662 Again, the call to `f()' is not dependent on template arguments (there 41663 are no arguments that depend on the type `T', and it is also not 41664 otherwise specified that the call should be in a dependent context). 41665 Thus a global declaration of such a function must be available, since 41666 the one in the base class is not visible until instantiation time. The 41667 compiler will consequently produce the following error message: 41668 41669 x.cc: In member function `int Derived<T>::g()': 41670 x.cc:6: error: there are no arguments to `f' that depend on a template 41671 parameter, so a declaration of `f' must be available 41672 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 41673 allowing the use of an undeclared name is deprecated) 41674 41675 To make the code valid either use `this->f()', or `Base<T>::f()'. 41676 Using the `-fpermissive' flag will also let the compiler accept the 41677 code, by marking all function calls for which no declaration is visible 41678 at the time of definition of the template for later lookup at 41679 instantiation time, as if it were a dependent call. We do not 41680 recommend using `-fpermissive' to work around invalid code, and it will 41681 also only catch cases where functions in base classes are called, not 41682 where variables in base classes are used (as in the example above). 41683 41684 Note that some compilers (including G++ versions prior to 3.4) get 41685 these examples wrong and accept above code without an error. Those 41686 compilers do not implement two-stage name lookup correctly. 41687 41688 ---------- Footnotes ---------- 41689 41690 (1) The C++ standard just uses the term "dependent" for names that 41691 depend on the type or value of template parameters. This shorter term 41692 will also be used in the rest of this section. 41693 41694 41695 File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 41696 41697 11.8.3 Temporaries May Vanish Before You Expect 41698 ----------------------------------------------- 41699 41700 It is dangerous to use pointers or references to _portions_ of a 41701 temporary object. The compiler may very well delete the object before 41702 you expect it to, leaving a pointer to garbage. The most common place 41703 where this problem crops up is in classes like string classes, 41704 especially ones that define a conversion function to type `char *' or 41705 `const char *'--which is one reason why the standard `string' class 41706 requires you to call the `c_str' member function. However, any class 41707 that returns a pointer to some internal structure is potentially 41708 subject to this problem. 41709 41710 For example, a program may use a function `strfunc' that returns 41711 `string' objects, and another function `charfunc' that operates on 41712 pointers to `char': 41713 41714 string strfunc (); 41715 void charfunc (const char *); 41716 41717 void 41718 f () 41719 { 41720 const char *p = strfunc().c_str(); 41721 ... 41722 charfunc (p); 41723 ... 41724 charfunc (p); 41725 } 41726 41727 In this situation, it may seem reasonable to save a pointer to the C 41728 string returned by the `c_str' member function and use that rather than 41729 call `c_str' repeatedly. However, the temporary string created by the 41730 call to `strfunc' is destroyed after `p' is initialized, at which point 41731 `p' is left pointing to freed memory. 41732 41733 Code like this may run successfully under some other compilers, 41734 particularly obsolete cfront-based compilers that delete temporaries 41735 along with normal local variables. However, the GNU C++ behavior is 41736 standard-conforming, so if your program depends on late destruction of 41737 temporaries it is not portable. 41738 41739 The safe way to write such code is to give the temporary a name, which 41740 forces it to remain until the end of the scope of the name. For 41741 example: 41742 41743 const string& tmp = strfunc (); 41744 charfunc (tmp.c_str ()); 41745 41746 41747 File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 41748 41749 11.8.4 Implicit Copy-Assignment for Virtual Bases 41750 ------------------------------------------------- 41751 41752 When a base class is virtual, only one subobject of the base class 41753 belongs to each full object. Also, the constructors and destructors are 41754 invoked only once, and called from the most-derived class. However, 41755 such objects behave unspecified when being assigned. For example: 41756 41757 struct Base{ 41758 char *name; 41759 Base(char *n) : name(strdup(n)){} 41760 Base& operator= (const Base& other){ 41761 free (name); 41762 name = strdup (other.name); 41763 } 41764 }; 41765 41766 struct A:virtual Base{ 41767 int val; 41768 A():Base("A"){} 41769 }; 41770 41771 struct B:virtual Base{ 41772 int bval; 41773 B():Base("B"){} 41774 }; 41775 41776 struct Derived:public A, public B{ 41777 Derived():Base("Derived"){} 41778 }; 41779 41780 void func(Derived &d1, Derived &d2) 41781 { 41782 d1 = d2; 41783 } 41784 41785 The C++ standard specifies that `Base::Base' is only called once when 41786 constructing or copy-constructing a Derived object. It is unspecified 41787 whether `Base::operator=' is called more than once when the implicit 41788 copy-assignment for Derived objects is invoked (as it is inside `func' 41789 in the example). 41790 41791 G++ implements the "intuitive" algorithm for copy-assignment: assign 41792 all direct bases, then assign all members. In that algorithm, the 41793 virtual base subobject can be encountered more than once. In the 41794 example, copying proceeds in the following order: `val', `name' (via 41795 `strdup'), `bval', and `name' again. 41796 41797 If application code relies on copy-assignment, a user-defined 41798 copy-assignment operator removes any uncertainties. With such an 41799 operator, the application can define whether and how the virtual base 41800 subobject is assigned. 41801 41802 41803 File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble 41804 41805 11.9 Certain Changes We Don't Want to Make 41806 ========================================== 41807 41808 This section lists changes that people frequently request, but which we 41809 do not make because we think GCC is better without them. 41810 41811 * Checking the number and type of arguments to a function which has 41812 an old-fashioned definition and no prototype. 41813 41814 Such a feature would work only occasionally--only for calls that 41815 appear in the same file as the called function, following the 41816 definition. The only way to check all calls reliably is to add a 41817 prototype for the function. But adding a prototype eliminates the 41818 motivation for this feature. So the feature is not worthwhile. 41819 41820 * Warning about using an expression whose type is signed as a shift 41821 count. 41822 41823 Shift count operands are probably signed more often than unsigned. 41824 Warning about this would cause far more annoyance than good. 41825 41826 * Warning about assigning a signed value to an unsigned variable. 41827 41828 Such assignments must be very common; warning about them would 41829 cause more annoyance than good. 41830 41831 * Warning when a non-void function value is ignored. 41832 41833 C contains many standard functions that return a value that most 41834 programs choose to ignore. One obvious example is `printf'. 41835 Warning about this practice only leads the defensive programmer to 41836 clutter programs with dozens of casts to `void'. Such casts are 41837 required so frequently that they become visual noise. Writing 41838 those casts becomes so automatic that they no longer convey useful 41839 information about the intentions of the programmer. For functions 41840 where the return value should never be ignored, use the 41841 `warn_unused_result' function attribute (*note Function 41842 Attributes::). 41843 41844 * Making `-fshort-enums' the default. 41845 41846 This would cause storage layout to be incompatible with most other 41847 C compilers. And it doesn't seem very important, given that you 41848 can get the same result in other ways. The case where it matters 41849 most is when the enumeration-valued object is inside a structure, 41850 and in that case you can specify a field width explicitly. 41851 41852 * Making bit-fields unsigned by default on particular machines where 41853 "the ABI standard" says to do so. 41854 41855 The ISO C standard leaves it up to the implementation whether a 41856 bit-field declared plain `int' is signed or not. This in effect 41857 creates two alternative dialects of C. 41858 41859 The GNU C compiler supports both dialects; you can specify the 41860 signed dialect with `-fsigned-bitfields' and the unsigned dialect 41861 with `-funsigned-bitfields'. However, this leaves open the 41862 question of which dialect to use by default. 41863 41864 Currently, the preferred dialect makes plain bit-fields signed, 41865 because this is simplest. Since `int' is the same as `signed int' 41866 in every other context, it is cleanest for them to be the same in 41867 bit-fields as well. 41868 41869 Some computer manufacturers have published Application Binary 41870 Interface standards which specify that plain bit-fields should be 41871 unsigned. It is a mistake, however, to say anything about this 41872 issue in an ABI. This is because the handling of plain bit-fields 41873 distinguishes two dialects of C. Both dialects are meaningful on 41874 every type of machine. Whether a particular object file was 41875 compiled using signed bit-fields or unsigned is of no concern to 41876 other object files, even if they access the same bit-fields in the 41877 same data structures. 41878 41879 A given program is written in one or the other of these two 41880 dialects. The program stands a chance to work on most any machine 41881 if it is compiled with the proper dialect. It is unlikely to work 41882 at all if compiled with the wrong dialect. 41883 41884 Many users appreciate the GNU C compiler because it provides an 41885 environment that is uniform across machines. These users would be 41886 inconvenienced if the compiler treated plain bit-fields 41887 differently on certain machines. 41888 41889 Occasionally users write programs intended only for a particular 41890 machine type. On these occasions, the users would benefit if the 41891 GNU C compiler were to support by default the same dialect as the 41892 other compilers on that machine. But such applications are rare. 41893 And users writing a program to run on more than one type of 41894 machine cannot possibly benefit from this kind of compatibility. 41895 41896 This is why GCC does and will treat plain bit-fields in the same 41897 fashion on all types of machines (by default). 41898 41899 There are some arguments for making bit-fields unsigned by default 41900 on all machines. If, for example, this becomes a universal de 41901 facto standard, it would make sense for GCC to go along with it. 41902 This is something to be considered in the future. 41903 41904 (Of course, users strongly concerned about portability should 41905 indicate explicitly in each bit-field whether it is signed or not. 41906 In this way, they write programs which have the same meaning in 41907 both C dialects.) 41908 41909 * Undefining `__STDC__' when `-ansi' is not used. 41910 41911 Currently, GCC defines `__STDC__' unconditionally. This provides 41912 good results in practice. 41913 41914 Programmers normally use conditionals on `__STDC__' to ask whether 41915 it is safe to use certain features of ISO C, such as function 41916 prototypes or ISO token concatenation. Since plain `gcc' supports 41917 all the features of ISO C, the correct answer to these questions is 41918 "yes". 41919 41920 Some users try to use `__STDC__' to check for the availability of 41921 certain library facilities. This is actually incorrect usage in 41922 an ISO C program, because the ISO C standard says that a conforming 41923 freestanding implementation should define `__STDC__' even though it 41924 does not have the library facilities. `gcc -ansi -pedantic' is a 41925 conforming freestanding implementation, and it is therefore 41926 required to define `__STDC__', even though it does not come with 41927 an ISO C library. 41928 41929 Sometimes people say that defining `__STDC__' in a compiler that 41930 does not completely conform to the ISO C standard somehow violates 41931 the standard. This is illogical. The standard is a standard for 41932 compilers that claim to support ISO C, such as `gcc -ansi'--not 41933 for other compilers such as plain `gcc'. Whatever the ISO C 41934 standard says is relevant to the design of plain `gcc' without 41935 `-ansi' only for pragmatic reasons, not as a requirement. 41936 41937 GCC normally defines `__STDC__' to be 1, and in addition defines 41938 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 41939 option for strict conformance to some version of ISO C. On some 41940 hosts, system include files use a different convention, where 41941 `__STDC__' is normally 0, but is 1 if the user specifies strict 41942 conformance to the C Standard. GCC follows the host convention 41943 when processing system include files, but when processing user 41944 files it follows the usual GNU C convention. 41945 41946 * Undefining `__STDC__' in C++. 41947 41948 Programs written to compile with C++-to-C translators get the 41949 value of `__STDC__' that goes with the C compiler that is 41950 subsequently used. These programs must test `__STDC__' to 41951 determine what kind of C preprocessor that compiler uses: whether 41952 they should concatenate tokens in the ISO C fashion or in the 41953 traditional fashion. 41954 41955 These programs work properly with GNU C++ if `__STDC__' is defined. 41956 They would not work otherwise. 41957 41958 In addition, many header files are written to provide prototypes 41959 in ISO C but not in traditional C. Many of these header files can 41960 work without change in C++ provided `__STDC__' is defined. If 41961 `__STDC__' is not defined, they will all fail, and will all need 41962 to be changed to test explicitly for C++ as well. 41963 41964 * Deleting "empty" loops. 41965 41966 Historically, GCC has not deleted "empty" loops under the 41967 assumption that the most likely reason you would put one in a 41968 program is to have a delay, so deleting them will not make real 41969 programs run any faster. 41970 41971 However, the rationale here is that optimization of a nonempty loop 41972 cannot produce an empty one. This held for carefully written C 41973 compiled with less powerful optimizers but is not always the case 41974 for carefully written C++ or with more powerful optimizers. Thus 41975 GCC will remove operations from loops whenever it can determine 41976 those operations are not externally visible (apart from the time 41977 taken to execute them, of course). In case the loop can be proved 41978 to be finite, GCC will also remove the loop itself. 41979 41980 Be aware of this when performing timing tests, for instance the 41981 following loop can be completely removed, provided 41982 `some_expression' can provably not change any global state. 41983 41984 { 41985 int sum = 0; 41986 int ix; 41987 41988 for (ix = 0; ix != 10000; ix++) 41989 sum += some_expression; 41990 } 41991 41992 Even though `sum' is accumulated in the loop, no use is made of 41993 that summation, so the accumulation can be removed. 41994 41995 * Making side effects happen in the same order as in some other 41996 compiler. 41997 41998 It is never safe to depend on the order of evaluation of side 41999 effects. For example, a function call like this may very well 42000 behave differently from one compiler to another: 42001 42002 void func (int, int); 42003 42004 int i = 2; 42005 func (i++, i++); 42006 42007 There is no guarantee (in either the C or the C++ standard language 42008 definitions) that the increments will be evaluated in any 42009 particular order. Either increment might happen first. `func' 42010 might get the arguments `2, 3', or it might get `3, 2', or even 42011 `2, 2'. 42012 42013 * Making certain warnings into errors by default. 42014 42015 Some ISO C testsuites report failure when the compiler does not 42016 produce an error message for a certain program. 42017 42018 ISO C requires a "diagnostic" message for certain kinds of invalid 42019 programs, but a warning is defined by GCC to count as a 42020 diagnostic. If GCC produces a warning but not an error, that is 42021 correct ISO C support. If testsuites call this "failure", they 42022 should be run with the GCC option `-pedantic-errors', which will 42023 turn these warnings into errors. 42024 42025 42026 42027 File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 42028 42029 11.10 Warning Messages and Error Messages 42030 ========================================= 42031 42032 The GNU compiler can produce two kinds of diagnostics: errors and 42033 warnings. Each kind has a different purpose: 42034 42035 "Errors" report problems that make it impossible to compile your 42036 program. GCC reports errors with the source file name and line 42037 number where the problem is apparent. 42038 42039 "Warnings" report other unusual conditions in your code that _may_ 42040 indicate a problem, although compilation can (and does) proceed. 42041 Warning messages also report the source file name and line number, 42042 but include the text `warning:' to distinguish them from error 42043 messages. 42044 42045 Warnings may indicate danger points where you should check to make sure 42046 that your program really does what you intend; or the use of obsolete 42047 features; or the use of nonstandard features of GNU C or C++. Many 42048 warnings are issued only if you ask for them, with one of the `-W' 42049 options (for instance, `-Wall' requests a variety of useful warnings). 42050 42051 GCC always tries to compile your program if possible; it never 42052 gratuitously rejects a program whose meaning is clear merely because 42053 (for instance) it fails to conform to a standard. In some cases, 42054 however, the C and C++ standards specify that certain extensions are 42055 forbidden, and a diagnostic _must_ be issued by a conforming compiler. 42056 The `-pedantic' option tells GCC to issue warnings in such cases; 42057 `-pedantic-errors' says to make them errors instead. This does not 42058 mean that _all_ non-ISO constructs get warnings or errors. 42059 42060 *Note Options to Request or Suppress Warnings: Warning Options, for 42061 more detail on these and related command-line options. 42062 42063 42064 File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 42065 42066 12 Reporting Bugs 42067 ***************** 42068 42069 Your bug reports play an essential role in making GCC reliable. 42070 42071 When you encounter a problem, the first thing to do is to see if it is 42072 already known. *Note Trouble::. If it isn't known, then you should 42073 report the problem. 42074 42075 * Menu: 42076 42077 * Criteria: Bug Criteria. Have you really found a bug? 42078 * Reporting: Bug Reporting. How to report a bug effectively. 42079 * Known: Trouble. Known problems. 42080 * Help: Service. Where to ask for help. 42081 42082 42083 File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 42084 42085 12.1 Have You Found a Bug? 42086 ========================== 42087 42088 If you are not sure whether you have found a bug, here are some 42089 guidelines: 42090 42091 * If the compiler gets a fatal signal, for any input whatever, that 42092 is a compiler bug. Reliable compilers never crash. 42093 42094 * If the compiler produces invalid assembly code, for any input 42095 whatever (except an `asm' statement), that is a compiler bug, 42096 unless the compiler reports errors (not just warnings) which would 42097 ordinarily prevent the assembler from being run. 42098 42099 * If the compiler produces valid assembly code that does not 42100 correctly execute the input source code, that is a compiler bug. 42101 42102 However, you must double-check to make sure, because you may have a 42103 program whose behavior is undefined, which happened by chance to 42104 give the desired results with another C or C++ compiler. 42105 42106 For example, in many nonoptimizing compilers, you can write `x;' 42107 at the end of a function instead of `return x;', with the same 42108 results. But the value of the function is undefined if `return' 42109 is omitted; it is not a bug when GCC produces different results. 42110 42111 Problems often result from expressions with two increment 42112 operators, as in `f (*p++, *p++)'. Your previous compiler might 42113 have interpreted that expression the way you intended; GCC might 42114 interpret it another way. Neither compiler is wrong. The bug is 42115 in your code. 42116 42117 After you have localized the error to a single source line, it 42118 should be easy to check for these things. If your program is 42119 correct and well defined, you have found a compiler bug. 42120 42121 * If the compiler produces an error message for valid input, that is 42122 a compiler bug. 42123 42124 * If the compiler does not produce an error message for invalid 42125 input, that is a compiler bug. However, you should note that your 42126 idea of "invalid input" might be someone else's idea of "an 42127 extension" or "support for traditional practice". 42128 42129 * If you are an experienced user of one of the languages GCC 42130 supports, your suggestions for improvement of GCC are welcome in 42131 any case. 42132 42133 42134 File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 42135 42136 12.2 How and where to Report Bugs 42137 ================================= 42138 42139 Bugs should be reported to the bug database at 42140 `http://gcc.gnu.org/bugs.html'. 42141 42142 42143 File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 42144 42145 13 How To Get Help with GCC 42146 *************************** 42147 42148 If you need help installing, using or changing GCC, there are two ways 42149 to find it: 42150 42151 * Send a message to a suitable network mailing list. First try 42152 <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if 42153 that brings no response, try <gcc (a] gcc.gnu.org>. For help changing 42154 GCC, ask <gcc (a] gcc.gnu.org>. If you think you have found a bug in 42155 GCC, please report it following the instructions at *note Bug 42156 Reporting::. 42157 42158 * Look in the service directory for someone who might help you for a 42159 fee. The service directory is found at 42160 `http://www.fsf.org/resources/service'. 42161 42162 For further information, see `http://gcc.gnu.org/faq.html#support'. 42163 42164 42165 File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 42166 42167 14 Contributing to GCC Development 42168 ********************************** 42169 42170 If you would like to help pretest GCC releases to assure they work well, 42171 current development sources are available by SVN (see 42172 `http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 42173 available for FTP; see `http://gcc.gnu.org/snapshots.html'. 42174 42175 If you would like to work on improvements to GCC, please read the 42176 advice at these URLs: 42177 42178 `http://gcc.gnu.org/contribute.html' 42179 `http://gcc.gnu.org/contributewhy.html' 42180 42181 for information on how to make useful contributions and avoid 42182 duplication of effort. Suggested projects are listed at 42183 `http://gcc.gnu.org/projects/'. 42184 42185 42186 File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 42187 42188 Funding Free Software 42189 ********************* 42190 42191 If you want to have more free software a few years from now, it makes 42192 sense for you to help encourage people to contribute funds for its 42193 development. The most effective approach known is to encourage 42194 commercial redistributors to donate. 42195 42196 Users of free software systems can boost the pace of development by 42197 encouraging for-a-fee distributors to donate part of their selling price 42198 to free software developers--the Free Software Foundation, and others. 42199 42200 The way to convince distributors to do this is to demand it and expect 42201 it from them. So when you compare distributors, judge them partly by 42202 how much they give to free software development. Show distributors 42203 they must compete to be the one who gives the most. 42204 42205 To make this approach work, you must insist on numbers that you can 42206 compare, such as, "We will donate ten dollars to the Frobnitz project 42207 for each disk sold." Don't be satisfied with a vague promise, such as 42208 "A portion of the profits are donated," since it doesn't give a basis 42209 for comparison. 42210 42211 Even a precise fraction "of the profits from this disk" is not very 42212 meaningful, since creative accounting and unrelated business decisions 42213 can greatly alter what fraction of the sales price counts as profit. 42214 If the price you pay is $50, ten percent of the profit is probably less 42215 than a dollar; it might be a few cents, or nothing at all. 42216 42217 Some redistributors do development work themselves. This is useful 42218 too; but to keep everyone honest, you need to inquire how much they do, 42219 and what kind. Some kinds of development make much more long-term 42220 difference than others. For example, maintaining a separate version of 42221 a program contributes very little; maintaining the standard version of a 42222 program for the whole community contributes much. Easy new ports 42223 contribute little, since someone else would surely do them; difficult 42224 ports such as adding a new CPU to the GNU Compiler Collection 42225 contribute more; major new features or packages contribute the most. 42226 42227 By establishing the idea that supporting further development is "the 42228 proper thing to do" when distributing free software for a fee, we can 42229 assure a steady flow of resources into making more free software. 42230 42231 Copyright (C) 1994 Free Software Foundation, Inc. 42232 Verbatim copying and redistribution of this section is permitted 42233 without royalty; alteration is not permitted. 42234 42235 42236 File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 42237 42238 The GNU Project and GNU/Linux 42239 ***************************** 42240 42241 The GNU Project was launched in 1984 to develop a complete Unix-like 42242 operating system which is free software: the GNU system. (GNU is a 42243 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 42244 Variants of the GNU operating system, which use the kernel Linux, are 42245 now widely used; though these systems are often referred to as "Linux", 42246 they are more accurately called GNU/Linux systems. 42247 42248 For more information, see: 42249 `http://www.gnu.org/' 42250 `http://www.gnu.org/gnu/linux-and-gnu.html' 42251 42252 42253 File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 42254 42255 GNU General Public License 42256 ************************** 42257 42258 Version 3, 29 June 2007 42259 42260 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 42261 42262 Everyone is permitted to copy and distribute verbatim copies of this 42263 license document, but changing it is not allowed. 42264 42265 Preamble 42266 ======== 42267 42268 The GNU General Public License is a free, copyleft license for software 42269 and other kinds of works. 42270 42271 The licenses for most software and other practical works are designed 42272 to take away your freedom to share and change the works. By contrast, 42273 the GNU General Public License is intended to guarantee your freedom to 42274 share and change all versions of a program-to make sure it remains free 42275 software for all its users. We, the Free Software Foundation, use the 42276 GNU General Public License for most of our software; it applies also to 42277 any other work released this way by its authors. You can apply it to 42278 your programs, too. 42279 42280 When we speak of free software, we are referring to freedom, not 42281 price. Our General Public Licenses are designed to make sure that you 42282 have the freedom to distribute copies of free software (and charge for 42283 them if you wish), that you receive source code or can get it if you 42284 want it, that you can change the software or use pieces of it in new 42285 free programs, and that you know you can do these things. 42286 42287 To protect your rights, we need to prevent others from denying you 42288 these rights or asking you to surrender the rights. Therefore, you 42289 have certain responsibilities if you distribute copies of the software, 42290 or if you modify it: responsibilities to respect the freedom of others. 42291 42292 For example, if you distribute copies of such a program, whether 42293 gratis or for a fee, you must pass on to the recipients the same 42294 freedoms that you received. You must make sure that they, too, receive 42295 or can get the source code. And you must show them these terms so they 42296 know their rights. 42297 42298 Developers that use the GNU GPL protect your rights with two steps: 42299 (1) assert copyright on the software, and (2) offer you this License 42300 giving you legal permission to copy, distribute and/or modify it. 42301 42302 For the developers' and authors' protection, the GPL clearly explains 42303 that there is no warranty for this free software. For both users' and 42304 authors' sake, the GPL requires that modified versions be marked as 42305 changed, so that their problems will not be attributed erroneously to 42306 authors of previous versions. 42307 42308 Some devices are designed to deny users access to install or run 42309 modified versions of the software inside them, although the 42310 manufacturer can do so. This is fundamentally incompatible with the 42311 aim of protecting users' freedom to change the software. The 42312 systematic pattern of such abuse occurs in the area of products for 42313 individuals to use, which is precisely where it is most unacceptable. 42314 Therefore, we have designed this version of the GPL to prohibit the 42315 practice for those products. If such problems arise substantially in 42316 other domains, we stand ready to extend this provision to those domains 42317 in future versions of the GPL, as needed to protect the freedom of 42318 users. 42319 42320 Finally, every program is threatened constantly by software patents. 42321 States should not allow patents to restrict development and use of 42322 software on general-purpose computers, but in those that do, we wish to 42323 avoid the special danger that patents applied to a free program could 42324 make it effectively proprietary. To prevent this, the GPL assures that 42325 patents cannot be used to render the program non-free. 42326 42327 The precise terms and conditions for copying, distribution and 42328 modification follow. 42329 42330 TERMS AND CONDITIONS 42331 ==================== 42332 42333 0. Definitions. 42334 42335 "This License" refers to version 3 of the GNU General Public 42336 License. 42337 42338 "Copyright" also means copyright-like laws that apply to other 42339 kinds of works, such as semiconductor masks. 42340 42341 "The Program" refers to any copyrightable work licensed under this 42342 License. Each licensee is addressed as "you". "Licensees" and 42343 "recipients" may be individuals or organizations. 42344 42345 To "modify" a work means to copy from or adapt all or part of the 42346 work in a fashion requiring copyright permission, other than the 42347 making of an exact copy. The resulting work is called a "modified 42348 version" of the earlier work or a work "based on" the earlier work. 42349 42350 A "covered work" means either the unmodified Program or a work 42351 based on the Program. 42352 42353 To "propagate" a work means to do anything with it that, without 42354 permission, would make you directly or secondarily liable for 42355 infringement under applicable copyright law, except executing it 42356 on a computer or modifying a private copy. Propagation includes 42357 copying, distribution (with or without modification), making 42358 available to the public, and in some countries other activities as 42359 well. 42360 42361 To "convey" a work means any kind of propagation that enables other 42362 parties to make or receive copies. Mere interaction with a user 42363 through a computer network, with no transfer of a copy, is not 42364 conveying. 42365 42366 An interactive user interface displays "Appropriate Legal Notices" 42367 to the extent that it includes a convenient and prominently visible 42368 feature that (1) displays an appropriate copyright notice, and (2) 42369 tells the user that there is no warranty for the work (except to 42370 the extent that warranties are provided), that licensees may 42371 convey the work under this License, and how to view a copy of this 42372 License. If the interface presents a list of user commands or 42373 options, such as a menu, a prominent item in the list meets this 42374 criterion. 42375 42376 1. Source Code. 42377 42378 The "source code" for a work means the preferred form of the work 42379 for making modifications to it. "Object code" means any 42380 non-source form of a work. 42381 42382 A "Standard Interface" means an interface that either is an 42383 official standard defined by a recognized standards body, or, in 42384 the case of interfaces specified for a particular programming 42385 language, one that is widely used among developers working in that 42386 language. 42387 42388 The "System Libraries" of an executable work include anything, 42389 other than the work as a whole, that (a) is included in the normal 42390 form of packaging a Major Component, but which is not part of that 42391 Major Component, and (b) serves only to enable use of the work 42392 with that Major Component, or to implement a Standard Interface 42393 for which an implementation is available to the public in source 42394 code form. A "Major Component", in this context, means a major 42395 essential component (kernel, window system, and so on) of the 42396 specific operating system (if any) on which the executable work 42397 runs, or a compiler used to produce the work, or an object code 42398 interpreter used to run it. 42399 42400 The "Corresponding Source" for a work in object code form means all 42401 the source code needed to generate, install, and (for an executable 42402 work) run the object code and to modify the work, including 42403 scripts to control those activities. However, it does not include 42404 the work's System Libraries, or general-purpose tools or generally 42405 available free programs which are used unmodified in performing 42406 those activities but which are not part of the work. For example, 42407 Corresponding Source includes interface definition files 42408 associated with source files for the work, and the source code for 42409 shared libraries and dynamically linked subprograms that the work 42410 is specifically designed to require, such as by intimate data 42411 communication or control flow between those subprograms and other 42412 parts of the work. 42413 42414 The Corresponding Source need not include anything that users can 42415 regenerate automatically from other parts of the Corresponding 42416 Source. 42417 42418 The Corresponding Source for a work in source code form is that 42419 same work. 42420 42421 2. Basic Permissions. 42422 42423 All rights granted under this License are granted for the term of 42424 copyright on the Program, and are irrevocable provided the stated 42425 conditions are met. This License explicitly affirms your unlimited 42426 permission to run the unmodified Program. The output from running 42427 a covered work is covered by this License only if the output, 42428 given its content, constitutes a covered work. This License 42429 acknowledges your rights of fair use or other equivalent, as 42430 provided by copyright law. 42431 42432 You may make, run and propagate covered works that you do not 42433 convey, without conditions so long as your license otherwise 42434 remains in force. You may convey covered works to others for the 42435 sole purpose of having them make modifications exclusively for 42436 you, or provide you with facilities for running those works, 42437 provided that you comply with the terms of this License in 42438 conveying all material for which you do not control copyright. 42439 Those thus making or running the covered works for you must do so 42440 exclusively on your behalf, under your direction and control, on 42441 terms that prohibit them from making any copies of your 42442 copyrighted material outside their relationship with you. 42443 42444 Conveying under any other circumstances is permitted solely under 42445 the conditions stated below. Sublicensing is not allowed; section 42446 10 makes it unnecessary. 42447 42448 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 42449 42450 No covered work shall be deemed part of an effective technological 42451 measure under any applicable law fulfilling obligations under 42452 article 11 of the WIPO copyright treaty adopted on 20 December 42453 1996, or similar laws prohibiting or restricting circumvention of 42454 such measures. 42455 42456 When you convey a covered work, you waive any legal power to forbid 42457 circumvention of technological measures to the extent such 42458 circumvention is effected by exercising rights under this License 42459 with respect to the covered work, and you disclaim any intention 42460 to limit operation or modification of the work as a means of 42461 enforcing, against the work's users, your or third parties' legal 42462 rights to forbid circumvention of technological measures. 42463 42464 4. Conveying Verbatim Copies. 42465 42466 You may convey verbatim copies of the Program's source code as you 42467 receive it, in any medium, provided that you conspicuously and 42468 appropriately publish on each copy an appropriate copyright notice; 42469 keep intact all notices stating that this License and any 42470 non-permissive terms added in accord with section 7 apply to the 42471 code; keep intact all notices of the absence of any warranty; and 42472 give all recipients a copy of this License along with the Program. 42473 42474 You may charge any price or no price for each copy that you convey, 42475 and you may offer support or warranty protection for a fee. 42476 42477 5. Conveying Modified Source Versions. 42478 42479 You may convey a work based on the Program, or the modifications to 42480 produce it from the Program, in the form of source code under the 42481 terms of section 4, provided that you also meet all of these 42482 conditions: 42483 42484 a. The work must carry prominent notices stating that you 42485 modified it, and giving a relevant date. 42486 42487 b. The work must carry prominent notices stating that it is 42488 released under this License and any conditions added under 42489 section 7. This requirement modifies the requirement in 42490 section 4 to "keep intact all notices". 42491 42492 c. You must license the entire work, as a whole, under this 42493 License to anyone who comes into possession of a copy. This 42494 License will therefore apply, along with any applicable 42495 section 7 additional terms, to the whole of the work, and all 42496 its parts, regardless of how they are packaged. This License 42497 gives no permission to license the work in any other way, but 42498 it does not invalidate such permission if you have separately 42499 received it. 42500 42501 d. If the work has interactive user interfaces, each must display 42502 Appropriate Legal Notices; however, if the Program has 42503 interactive interfaces that do not display Appropriate Legal 42504 Notices, your work need not make them do so. 42505 42506 A compilation of a covered work with other separate and independent 42507 works, which are not by their nature extensions of the covered 42508 work, and which are not combined with it such as to form a larger 42509 program, in or on a volume of a storage or distribution medium, is 42510 called an "aggregate" if the compilation and its resulting 42511 copyright are not used to limit the access or legal rights of the 42512 compilation's users beyond what the individual works permit. 42513 Inclusion of a covered work in an aggregate does not cause this 42514 License to apply to the other parts of the aggregate. 42515 42516 6. Conveying Non-Source Forms. 42517 42518 You may convey a covered work in object code form under the terms 42519 of sections 4 and 5, provided that you also convey the 42520 machine-readable Corresponding Source under the terms of this 42521 License, in one of these ways: 42522 42523 a. Convey the object code in, or embodied in, a physical product 42524 (including a physical distribution medium), accompanied by the 42525 Corresponding Source fixed on a durable physical medium 42526 customarily used for software interchange. 42527 42528 b. Convey the object code in, or embodied in, a physical product 42529 (including a physical distribution medium), accompanied by a 42530 written offer, valid for at least three years and valid for 42531 as long as you offer spare parts or customer support for that 42532 product model, to give anyone who possesses the object code 42533 either (1) a copy of the Corresponding Source for all the 42534 software in the product that is covered by this License, on a 42535 durable physical medium customarily used for software 42536 interchange, for a price no more than your reasonable cost of 42537 physically performing this conveying of source, or (2) access 42538 to copy the Corresponding Source from a network server at no 42539 charge. 42540 42541 c. Convey individual copies of the object code with a copy of 42542 the written offer to provide the Corresponding Source. This 42543 alternative is allowed only occasionally and noncommercially, 42544 and only if you received the object code with such an offer, 42545 in accord with subsection 6b. 42546 42547 d. Convey the object code by offering access from a designated 42548 place (gratis or for a charge), and offer equivalent access 42549 to the Corresponding Source in the same way through the same 42550 place at no further charge. You need not require recipients 42551 to copy the Corresponding Source along with the object code. 42552 If the place to copy the object code is a network server, the 42553 Corresponding Source may be on a different server (operated 42554 by you or a third party) that supports equivalent copying 42555 facilities, provided you maintain clear directions next to 42556 the object code saying where to find the Corresponding Source. 42557 Regardless of what server hosts the Corresponding Source, you 42558 remain obligated to ensure that it is available for as long 42559 as needed to satisfy these requirements. 42560 42561 e. Convey the object code using peer-to-peer transmission, 42562 provided you inform other peers where the object code and 42563 Corresponding Source of the work are being offered to the 42564 general public at no charge under subsection 6d. 42565 42566 42567 A separable portion of the object code, whose source code is 42568 excluded from the Corresponding Source as a System Library, need 42569 not be included in conveying the object code work. 42570 42571 A "User Product" is either (1) a "consumer product", which means 42572 any tangible personal property which is normally used for personal, 42573 family, or household purposes, or (2) anything designed or sold for 42574 incorporation into a dwelling. In determining whether a product 42575 is a consumer product, doubtful cases shall be resolved in favor of 42576 coverage. For a particular product received by a particular user, 42577 "normally used" refers to a typical or common use of that class of 42578 product, regardless of the status of the particular user or of the 42579 way in which the particular user actually uses, or expects or is 42580 expected to use, the product. A product is a consumer product 42581 regardless of whether the product has substantial commercial, 42582 industrial or non-consumer uses, unless such uses represent the 42583 only significant mode of use of the product. 42584 42585 "Installation Information" for a User Product means any methods, 42586 procedures, authorization keys, or other information required to 42587 install and execute modified versions of a covered work in that 42588 User Product from a modified version of its Corresponding Source. 42589 The information must suffice to ensure that the continued 42590 functioning of the modified object code is in no case prevented or 42591 interfered with solely because modification has been made. 42592 42593 If you convey an object code work under this section in, or with, 42594 or specifically for use in, a User Product, and the conveying 42595 occurs as part of a transaction in which the right of possession 42596 and use of the User Product is transferred to the recipient in 42597 perpetuity or for a fixed term (regardless of how the transaction 42598 is characterized), the Corresponding Source conveyed under this 42599 section must be accompanied by the Installation Information. But 42600 this requirement does not apply if neither you nor any third party 42601 retains the ability to install modified object code on the User 42602 Product (for example, the work has been installed in ROM). 42603 42604 The requirement to provide Installation Information does not 42605 include a requirement to continue to provide support service, 42606 warranty, or updates for a work that has been modified or 42607 installed by the recipient, or for the User Product in which it 42608 has been modified or installed. Access to a network may be denied 42609 when the modification itself materially and adversely affects the 42610 operation of the network or violates the rules and protocols for 42611 communication across the network. 42612 42613 Corresponding Source conveyed, and Installation Information 42614 provided, in accord with this section must be in a format that is 42615 publicly documented (and with an implementation available to the 42616 public in source code form), and must require no special password 42617 or key for unpacking, reading or copying. 42618 42619 7. Additional Terms. 42620 42621 "Additional permissions" are terms that supplement the terms of 42622 this License by making exceptions from one or more of its 42623 conditions. Additional permissions that are applicable to the 42624 entire Program shall be treated as though they were included in 42625 this License, to the extent that they are valid under applicable 42626 law. If additional permissions apply only to part of the Program, 42627 that part may be used separately under those permissions, but the 42628 entire Program remains governed by this License without regard to 42629 the additional permissions. 42630 42631 When you convey a copy of a covered work, you may at your option 42632 remove any additional permissions from that copy, or from any part 42633 of it. (Additional permissions may be written to require their own 42634 removal in certain cases when you modify the work.) You may place 42635 additional permissions on material, added by you to a covered work, 42636 for which you have or can give appropriate copyright permission. 42637 42638 Notwithstanding any other provision of this License, for material 42639 you add to a covered work, you may (if authorized by the copyright 42640 holders of that material) supplement the terms of this License 42641 with terms: 42642 42643 a. Disclaiming warranty or limiting liability differently from 42644 the terms of sections 15 and 16 of this License; or 42645 42646 b. Requiring preservation of specified reasonable legal notices 42647 or author attributions in that material or in the Appropriate 42648 Legal Notices displayed by works containing it; or 42649 42650 c. Prohibiting misrepresentation of the origin of that material, 42651 or requiring that modified versions of such material be 42652 marked in reasonable ways as different from the original 42653 version; or 42654 42655 d. Limiting the use for publicity purposes of names of licensors 42656 or authors of the material; or 42657 42658 e. Declining to grant rights under trademark law for use of some 42659 trade names, trademarks, or service marks; or 42660 42661 f. Requiring indemnification of licensors and authors of that 42662 material by anyone who conveys the material (or modified 42663 versions of it) with contractual assumptions of liability to 42664 the recipient, for any liability that these contractual 42665 assumptions directly impose on those licensors and authors. 42666 42667 All other non-permissive additional terms are considered "further 42668 restrictions" within the meaning of section 10. If the Program as 42669 you received it, or any part of it, contains a notice stating that 42670 it is governed by this License along with a term that is a further 42671 restriction, you may remove that term. If a license document 42672 contains a further restriction but permits relicensing or 42673 conveying under this License, you may add to a covered work 42674 material governed by the terms of that license document, provided 42675 that the further restriction does not survive such relicensing or 42676 conveying. 42677 42678 If you add terms to a covered work in accord with this section, you 42679 must place, in the relevant source files, a statement of the 42680 additional terms that apply to those files, or a notice indicating 42681 where to find the applicable terms. 42682 42683 Additional terms, permissive or non-permissive, may be stated in 42684 the form of a separately written license, or stated as exceptions; 42685 the above requirements apply either way. 42686 42687 8. Termination. 42688 42689 You may not propagate or modify a covered work except as expressly 42690 provided under this License. Any attempt otherwise to propagate or 42691 modify it is void, and will automatically terminate your rights 42692 under this License (including any patent licenses granted under 42693 the third paragraph of section 11). 42694 42695 However, if you cease all violation of this License, then your 42696 license from a particular copyright holder is reinstated (a) 42697 provisionally, unless and until the copyright holder explicitly 42698 and finally terminates your license, and (b) permanently, if the 42699 copyright holder fails to notify you of the violation by some 42700 reasonable means prior to 60 days after the cessation. 42701 42702 Moreover, your license from a particular copyright holder is 42703 reinstated permanently if the copyright holder notifies you of the 42704 violation by some reasonable means, this is the first time you have 42705 received notice of violation of this License (for any work) from 42706 that copyright holder, and you cure the violation prior to 30 days 42707 after your receipt of the notice. 42708 42709 Termination of your rights under this section does not terminate 42710 the licenses of parties who have received copies or rights from 42711 you under this License. If your rights have been terminated and 42712 not permanently reinstated, you do not qualify to receive new 42713 licenses for the same material under section 10. 42714 42715 9. Acceptance Not Required for Having Copies. 42716 42717 You are not required to accept this License in order to receive or 42718 run a copy of the Program. Ancillary propagation of a covered work 42719 occurring solely as a consequence of using peer-to-peer 42720 transmission to receive a copy likewise does not require 42721 acceptance. However, nothing other than this License grants you 42722 permission to propagate or modify any covered work. These actions 42723 infringe copyright if you do not accept this License. Therefore, 42724 by modifying or propagating a covered work, you indicate your 42725 acceptance of this License to do so. 42726 42727 10. Automatic Licensing of Downstream Recipients. 42728 42729 Each time you convey a covered work, the recipient automatically 42730 receives a license from the original licensors, to run, modify and 42731 propagate that work, subject to this License. You are not 42732 responsible for enforcing compliance by third parties with this 42733 License. 42734 42735 An "entity transaction" is a transaction transferring control of an 42736 organization, or substantially all assets of one, or subdividing an 42737 organization, or merging organizations. If propagation of a 42738 covered work results from an entity transaction, each party to that 42739 transaction who receives a copy of the work also receives whatever 42740 licenses to the work the party's predecessor in interest had or 42741 could give under the previous paragraph, plus a right to 42742 possession of the Corresponding Source of the work from the 42743 predecessor in interest, if the predecessor has it or can get it 42744 with reasonable efforts. 42745 42746 You may not impose any further restrictions on the exercise of the 42747 rights granted or affirmed under this License. For example, you 42748 may not impose a license fee, royalty, or other charge for 42749 exercise of rights granted under this License, and you may not 42750 initiate litigation (including a cross-claim or counterclaim in a 42751 lawsuit) alleging that any patent claim is infringed by making, 42752 using, selling, offering for sale, or importing the Program or any 42753 portion of it. 42754 42755 11. Patents. 42756 42757 A "contributor" is a copyright holder who authorizes use under this 42758 License of the Program or a work on which the Program is based. 42759 The work thus licensed is called the contributor's "contributor 42760 version". 42761 42762 A contributor's "essential patent claims" are all patent claims 42763 owned or controlled by the contributor, whether already acquired or 42764 hereafter acquired, that would be infringed by some manner, 42765 permitted by this License, of making, using, or selling its 42766 contributor version, but do not include claims that would be 42767 infringed only as a consequence of further modification of the 42768 contributor version. For purposes of this definition, "control" 42769 includes the right to grant patent sublicenses in a manner 42770 consistent with the requirements of this License. 42771 42772 Each contributor grants you a non-exclusive, worldwide, 42773 royalty-free patent license under the contributor's essential 42774 patent claims, to make, use, sell, offer for sale, import and 42775 otherwise run, modify and propagate the contents of its 42776 contributor version. 42777 42778 In the following three paragraphs, a "patent license" is any 42779 express agreement or commitment, however denominated, not to 42780 enforce a patent (such as an express permission to practice a 42781 patent or covenant not to sue for patent infringement). To 42782 "grant" such a patent license to a party means to make such an 42783 agreement or commitment not to enforce a patent against the party. 42784 42785 If you convey a covered work, knowingly relying on a patent 42786 license, and the Corresponding Source of the work is not available 42787 for anyone to copy, free of charge and under the terms of this 42788 License, through a publicly available network server or other 42789 readily accessible means, then you must either (1) cause the 42790 Corresponding Source to be so available, or (2) arrange to deprive 42791 yourself of the benefit of the patent license for this particular 42792 work, or (3) arrange, in a manner consistent with the requirements 42793 of this License, to extend the patent license to downstream 42794 recipients. "Knowingly relying" means you have actual knowledge 42795 that, but for the patent license, your conveying the covered work 42796 in a country, or your recipient's use of the covered work in a 42797 country, would infringe one or more identifiable patents in that 42798 country that you have reason to believe are valid. 42799 42800 If, pursuant to or in connection with a single transaction or 42801 arrangement, you convey, or propagate by procuring conveyance of, a 42802 covered work, and grant a patent license to some of the parties 42803 receiving the covered work authorizing them to use, propagate, 42804 modify or convey a specific copy of the covered work, then the 42805 patent license you grant is automatically extended to all 42806 recipients of the covered work and works based on it. 42807 42808 A patent license is "discriminatory" if it does not include within 42809 the scope of its coverage, prohibits the exercise of, or is 42810 conditioned on the non-exercise of one or more of the rights that 42811 are specifically granted under this License. You may not convey a 42812 covered work if you are a party to an arrangement with a third 42813 party that is in the business of distributing software, under 42814 which you make payment to the third party based on the extent of 42815 your activity of conveying the work, and under which the third 42816 party grants, to any of the parties who would receive the covered 42817 work from you, a discriminatory patent license (a) in connection 42818 with copies of the covered work conveyed by you (or copies made 42819 from those copies), or (b) primarily for and in connection with 42820 specific products or compilations that contain the covered work, 42821 unless you entered into that arrangement, or that patent license 42822 was granted, prior to 28 March 2007. 42823 42824 Nothing in this License shall be construed as excluding or limiting 42825 any implied license or other defenses to infringement that may 42826 otherwise be available to you under applicable patent law. 42827 42828 12. No Surrender of Others' Freedom. 42829 42830 If conditions are imposed on you (whether by court order, 42831 agreement or otherwise) that contradict the conditions of this 42832 License, they do not excuse you from the conditions of this 42833 License. If you cannot convey a covered work so as to satisfy 42834 simultaneously your obligations under this License and any other 42835 pertinent obligations, then as a consequence you may not convey it 42836 at all. For example, if you agree to terms that obligate you to 42837 collect a royalty for further conveying from those to whom you 42838 convey the Program, the only way you could satisfy both those 42839 terms and this License would be to refrain entirely from conveying 42840 the Program. 42841 42842 13. Use with the GNU Affero General Public License. 42843 42844 Notwithstanding any other provision of this License, you have 42845 permission to link or combine any covered work with a work licensed 42846 under version 3 of the GNU Affero General Public License into a 42847 single combined work, and to convey the resulting work. The terms 42848 of this License will continue to apply to the part which is the 42849 covered work, but the special requirements of the GNU Affero 42850 General Public License, section 13, concerning interaction through 42851 a network will apply to the combination as such. 42852 42853 14. Revised Versions of this License. 42854 42855 The Free Software Foundation may publish revised and/or new 42856 versions of the GNU General Public License from time to time. 42857 Such new versions will be similar in spirit to the present 42858 version, but may differ in detail to address new problems or 42859 concerns. 42860 42861 Each version is given a distinguishing version number. If the 42862 Program specifies that a certain numbered version of the GNU 42863 General Public License "or any later version" applies to it, you 42864 have the option of following the terms and conditions either of 42865 that numbered version or of any later version published by the 42866 Free Software Foundation. If the Program does not specify a 42867 version number of the GNU General Public License, you may choose 42868 any version ever published by the Free Software Foundation. 42869 42870 If the Program specifies that a proxy can decide which future 42871 versions of the GNU General Public License can be used, that 42872 proxy's public statement of acceptance of a version permanently 42873 authorizes you to choose that version for the Program. 42874 42875 Later license versions may give you additional or different 42876 permissions. However, no additional obligations are imposed on any 42877 author or copyright holder as a result of your choosing to follow a 42878 later version. 42879 42880 15. Disclaimer of Warranty. 42881 42882 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 42883 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 42884 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 42885 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 42886 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 42887 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 42888 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 42889 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 42890 NECESSARY SERVICING, REPAIR OR CORRECTION. 42891 42892 16. Limitation of Liability. 42893 42894 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 42895 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 42896 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 42897 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 42898 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 42899 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 42900 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 42901 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 42902 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 42903 THE POSSIBILITY OF SUCH DAMAGES. 42904 42905 17. Interpretation of Sections 15 and 16. 42906 42907 If the disclaimer of warranty and limitation of liability provided 42908 above cannot be given local legal effect according to their terms, 42909 reviewing courts shall apply local law that most closely 42910 approximates an absolute waiver of all civil liability in 42911 connection with the Program, unless a warranty or assumption of 42912 liability accompanies a copy of the Program in return for a fee. 42913 42914 42915 END OF TERMS AND CONDITIONS 42916 =========================== 42917 42918 How to Apply These Terms to Your New Programs 42919 ============================================= 42920 42921 If you develop a new program, and you want it to be of the greatest 42922 possible use to the public, the best way to achieve this is to make it 42923 free software which everyone can redistribute and change under these 42924 terms. 42925 42926 To do so, attach the following notices to the program. It is safest 42927 to attach them to the start of each source file to most effectively 42928 state the exclusion of warranty; and each file should have at least the 42929 "copyright" line and a pointer to where the full notice is found. 42930 42931 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 42932 Copyright (C) YEAR NAME OF AUTHOR 42933 42934 This program is free software: you can redistribute it and/or modify 42935 it under the terms of the GNU General Public License as published by 42936 the Free Software Foundation, either version 3 of the License, or (at 42937 your option) any later version. 42938 42939 This program is distributed in the hope that it will be useful, but 42940 WITHOUT ANY WARRANTY; without even the implied warranty of 42941 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 42942 General Public License for more details. 42943 42944 You should have received a copy of the GNU General Public License 42945 along with this program. If not, see `http://www.gnu.org/licenses/'. 42946 42947 Also add information on how to contact you by electronic and paper 42948 mail. 42949 42950 If the program does terminal interaction, make it output a short 42951 notice like this when it starts in an interactive mode: 42952 42953 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 42954 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 42955 This is free software, and you are welcome to redistribute it 42956 under certain conditions; type `show c' for details. 42957 42958 The hypothetical commands `show w' and `show c' should show the 42959 appropriate parts of the General Public License. Of course, your 42960 program's commands might be different; for a GUI interface, you would 42961 use an "about box". 42962 42963 You should also get your employer (if you work as a programmer) or 42964 school, if any, to sign a "copyright disclaimer" for the program, if 42965 necessary. For more information on this, and how to apply and follow 42966 the GNU GPL, see `http://www.gnu.org/licenses/'. 42967 42968 The GNU General Public License does not permit incorporating your 42969 program into proprietary programs. If your program is a subroutine 42970 library, you may consider it more useful to permit linking proprietary 42971 applications with the library. If this is what you want to do, use the 42972 GNU Lesser General Public License instead of this License. But first, 42973 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 42974 42975 42976 File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 42977 42978 GNU Free Documentation License 42979 ****************************** 42980 42981 Version 1.3, 3 November 2008 42982 42983 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 42984 `http://fsf.org/' 42985 42986 Everyone is permitted to copy and distribute verbatim copies 42987 of this license document, but changing it is not allowed. 42988 42989 0. PREAMBLE 42990 42991 The purpose of this License is to make a manual, textbook, or other 42992 functional and useful document "free" in the sense of freedom: to 42993 assure everyone the effective freedom to copy and redistribute it, 42994 with or without modifying it, either commercially or 42995 noncommercially. Secondarily, this License preserves for the 42996 author and publisher a way to get credit for their work, while not 42997 being considered responsible for modifications made by others. 42998 42999 This License is a kind of "copyleft", which means that derivative 43000 works of the document must themselves be free in the same sense. 43001 It complements the GNU General Public License, which is a copyleft 43002 license designed for free software. 43003 43004 We have designed this License in order to use it for manuals for 43005 free software, because free software needs free documentation: a 43006 free program should come with manuals providing the same freedoms 43007 that the software does. But this License is not limited to 43008 software manuals; it can be used for any textual work, regardless 43009 of subject matter or whether it is published as a printed book. 43010 We recommend this License principally for works whose purpose is 43011 instruction or reference. 43012 43013 1. APPLICABILITY AND DEFINITIONS 43014 43015 This License applies to any manual or other work, in any medium, 43016 that contains a notice placed by the copyright holder saying it 43017 can be distributed under the terms of this License. Such a notice 43018 grants a world-wide, royalty-free license, unlimited in duration, 43019 to use that work under the conditions stated herein. The 43020 "Document", below, refers to any such manual or work. Any member 43021 of the public is a licensee, and is addressed as "you". You 43022 accept the license if you copy, modify or distribute the work in a 43023 way requiring permission under copyright law. 43024 43025 A "Modified Version" of the Document means any work containing the 43026 Document or a portion of it, either copied verbatim, or with 43027 modifications and/or translated into another language. 43028 43029 A "Secondary Section" is a named appendix or a front-matter section 43030 of the Document that deals exclusively with the relationship of the 43031 publishers or authors of the Document to the Document's overall 43032 subject (or to related matters) and contains nothing that could 43033 fall directly within that overall subject. (Thus, if the Document 43034 is in part a textbook of mathematics, a Secondary Section may not 43035 explain any mathematics.) The relationship could be a matter of 43036 historical connection with the subject or with related matters, or 43037 of legal, commercial, philosophical, ethical or political position 43038 regarding them. 43039 43040 The "Invariant Sections" are certain Secondary Sections whose 43041 titles are designated, as being those of Invariant Sections, in 43042 the notice that says that the Document is released under this 43043 License. If a section does not fit the above definition of 43044 Secondary then it is not allowed to be designated as Invariant. 43045 The Document may contain zero Invariant Sections. If the Document 43046 does not identify any Invariant Sections then there are none. 43047 43048 The "Cover Texts" are certain short passages of text that are 43049 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 43050 that says that the Document is released under this License. A 43051 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 43052 be at most 25 words. 43053 43054 A "Transparent" copy of the Document means a machine-readable copy, 43055 represented in a format whose specification is available to the 43056 general public, that is suitable for revising the document 43057 straightforwardly with generic text editors or (for images 43058 composed of pixels) generic paint programs or (for drawings) some 43059 widely available drawing editor, and that is suitable for input to 43060 text formatters or for automatic translation to a variety of 43061 formats suitable for input to text formatters. A copy made in an 43062 otherwise Transparent file format whose markup, or absence of 43063 markup, has been arranged to thwart or discourage subsequent 43064 modification by readers is not Transparent. An image format is 43065 not Transparent if used for any substantial amount of text. A 43066 copy that is not "Transparent" is called "Opaque". 43067 43068 Examples of suitable formats for Transparent copies include plain 43069 ASCII without markup, Texinfo input format, LaTeX input format, 43070 SGML or XML using a publicly available DTD, and 43071 standard-conforming simple HTML, PostScript or PDF designed for 43072 human modification. Examples of transparent image formats include 43073 PNG, XCF and JPG. Opaque formats include proprietary formats that 43074 can be read and edited only by proprietary word processors, SGML or 43075 XML for which the DTD and/or processing tools are not generally 43076 available, and the machine-generated HTML, PostScript or PDF 43077 produced by some word processors for output purposes only. 43078 43079 The "Title Page" means, for a printed book, the title page itself, 43080 plus such following pages as are needed to hold, legibly, the 43081 material this License requires to appear in the title page. For 43082 works in formats which do not have any title page as such, "Title 43083 Page" means the text near the most prominent appearance of the 43084 work's title, preceding the beginning of the body of the text. 43085 43086 The "publisher" means any person or entity that distributes copies 43087 of the Document to the public. 43088 43089 A section "Entitled XYZ" means a named subunit of the Document 43090 whose title either is precisely XYZ or contains XYZ in parentheses 43091 following text that translates XYZ in another language. (Here XYZ 43092 stands for a specific section name mentioned below, such as 43093 "Acknowledgements", "Dedications", "Endorsements", or "History".) 43094 To "Preserve the Title" of such a section when you modify the 43095 Document means that it remains a section "Entitled XYZ" according 43096 to this definition. 43097 43098 The Document may include Warranty Disclaimers next to the notice 43099 which states that this License applies to the Document. These 43100 Warranty Disclaimers are considered to be included by reference in 43101 this License, but only as regards disclaiming warranties: any other 43102 implication that these Warranty Disclaimers may have is void and 43103 has no effect on the meaning of this License. 43104 43105 2. VERBATIM COPYING 43106 43107 You may copy and distribute the Document in any medium, either 43108 commercially or noncommercially, provided that this License, the 43109 copyright notices, and the license notice saying this License 43110 applies to the Document are reproduced in all copies, and that you 43111 add no other conditions whatsoever to those of this License. You 43112 may not use technical measures to obstruct or control the reading 43113 or further copying of the copies you make or distribute. However, 43114 you may accept compensation in exchange for copies. If you 43115 distribute a large enough number of copies you must also follow 43116 the conditions in section 3. 43117 43118 You may also lend copies, under the same conditions stated above, 43119 and you may publicly display copies. 43120 43121 3. COPYING IN QUANTITY 43122 43123 If you publish printed copies (or copies in media that commonly 43124 have printed covers) of the Document, numbering more than 100, and 43125 the Document's license notice requires Cover Texts, you must 43126 enclose the copies in covers that carry, clearly and legibly, all 43127 these Cover Texts: Front-Cover Texts on the front cover, and 43128 Back-Cover Texts on the back cover. Both covers must also clearly 43129 and legibly identify you as the publisher of these copies. The 43130 front cover must present the full title with all words of the 43131 title equally prominent and visible. You may add other material 43132 on the covers in addition. Copying with changes limited to the 43133 covers, as long as they preserve the title of the Document and 43134 satisfy these conditions, can be treated as verbatim copying in 43135 other respects. 43136 43137 If the required texts for either cover are too voluminous to fit 43138 legibly, you should put the first ones listed (as many as fit 43139 reasonably) on the actual cover, and continue the rest onto 43140 adjacent pages. 43141 43142 If you publish or distribute Opaque copies of the Document 43143 numbering more than 100, you must either include a 43144 machine-readable Transparent copy along with each Opaque copy, or 43145 state in or with each Opaque copy a computer-network location from 43146 which the general network-using public has access to download 43147 using public-standard network protocols a complete Transparent 43148 copy of the Document, free of added material. If you use the 43149 latter option, you must take reasonably prudent steps, when you 43150 begin distribution of Opaque copies in quantity, to ensure that 43151 this Transparent copy will remain thus accessible at the stated 43152 location until at least one year after the last time you 43153 distribute an Opaque copy (directly or through your agents or 43154 retailers) of that edition to the public. 43155 43156 It is requested, but not required, that you contact the authors of 43157 the Document well before redistributing any large number of 43158 copies, to give them a chance to provide you with an updated 43159 version of the Document. 43160 43161 4. MODIFICATIONS 43162 43163 You may copy and distribute a Modified Version of the Document 43164 under the conditions of sections 2 and 3 above, provided that you 43165 release the Modified Version under precisely this License, with 43166 the Modified Version filling the role of the Document, thus 43167 licensing distribution and modification of the Modified Version to 43168 whoever possesses a copy of it. In addition, you must do these 43169 things in the Modified Version: 43170 43171 A. Use in the Title Page (and on the covers, if any) a title 43172 distinct from that of the Document, and from those of 43173 previous versions (which should, if there were any, be listed 43174 in the History section of the Document). You may use the 43175 same title as a previous version if the original publisher of 43176 that version gives permission. 43177 43178 B. List on the Title Page, as authors, one or more persons or 43179 entities responsible for authorship of the modifications in 43180 the Modified Version, together with at least five of the 43181 principal authors of the Document (all of its principal 43182 authors, if it has fewer than five), unless they release you 43183 from this requirement. 43184 43185 C. State on the Title page the name of the publisher of the 43186 Modified Version, as the publisher. 43187 43188 D. Preserve all the copyright notices of the Document. 43189 43190 E. Add an appropriate copyright notice for your modifications 43191 adjacent to the other copyright notices. 43192 43193 F. Include, immediately after the copyright notices, a license 43194 notice giving the public permission to use the Modified 43195 Version under the terms of this License, in the form shown in 43196 the Addendum below. 43197 43198 G. Preserve in that license notice the full lists of Invariant 43199 Sections and required Cover Texts given in the Document's 43200 license notice. 43201 43202 H. Include an unaltered copy of this License. 43203 43204 I. Preserve the section Entitled "History", Preserve its Title, 43205 and add to it an item stating at least the title, year, new 43206 authors, and publisher of the Modified Version as given on 43207 the Title Page. If there is no section Entitled "History" in 43208 the Document, create one stating the title, year, authors, 43209 and publisher of the Document as given on its Title Page, 43210 then add an item describing the Modified Version as stated in 43211 the previous sentence. 43212 43213 J. Preserve the network location, if any, given in the Document 43214 for public access to a Transparent copy of the Document, and 43215 likewise the network locations given in the Document for 43216 previous versions it was based on. These may be placed in 43217 the "History" section. You may omit a network location for a 43218 work that was published at least four years before the 43219 Document itself, or if the original publisher of the version 43220 it refers to gives permission. 43221 43222 K. For any section Entitled "Acknowledgements" or "Dedications", 43223 Preserve the Title of the section, and preserve in the 43224 section all the substance and tone of each of the contributor 43225 acknowledgements and/or dedications given therein. 43226 43227 L. Preserve all the Invariant Sections of the Document, 43228 unaltered in their text and in their titles. Section numbers 43229 or the equivalent are not considered part of the section 43230 titles. 43231 43232 M. Delete any section Entitled "Endorsements". Such a section 43233 may not be included in the Modified Version. 43234 43235 N. Do not retitle any existing section to be Entitled 43236 "Endorsements" or to conflict in title with any Invariant 43237 Section. 43238 43239 O. Preserve any Warranty Disclaimers. 43240 43241 If the Modified Version includes new front-matter sections or 43242 appendices that qualify as Secondary Sections and contain no 43243 material copied from the Document, you may at your option 43244 designate some or all of these sections as invariant. To do this, 43245 add their titles to the list of Invariant Sections in the Modified 43246 Version's license notice. These titles must be distinct from any 43247 other section titles. 43248 43249 You may add a section Entitled "Endorsements", provided it contains 43250 nothing but endorsements of your Modified Version by various 43251 parties--for example, statements of peer review or that the text 43252 has been approved by an organization as the authoritative 43253 definition of a standard. 43254 43255 You may add a passage of up to five words as a Front-Cover Text, 43256 and a passage of up to 25 words as a Back-Cover Text, to the end 43257 of the list of Cover Texts in the Modified Version. Only one 43258 passage of Front-Cover Text and one of Back-Cover Text may be 43259 added by (or through arrangements made by) any one entity. If the 43260 Document already includes a cover text for the same cover, 43261 previously added by you or by arrangement made by the same entity 43262 you are acting on behalf of, you may not add another; but you may 43263 replace the old one, on explicit permission from the previous 43264 publisher that added the old one. 43265 43266 The author(s) and publisher(s) of the Document do not by this 43267 License give permission to use their names for publicity for or to 43268 assert or imply endorsement of any Modified Version. 43269 43270 5. COMBINING DOCUMENTS 43271 43272 You may combine the Document with other documents released under 43273 this License, under the terms defined in section 4 above for 43274 modified versions, provided that you include in the combination 43275 all of the Invariant Sections of all of the original documents, 43276 unmodified, and list them all as Invariant Sections of your 43277 combined work in its license notice, and that you preserve all 43278 their Warranty Disclaimers. 43279 43280 The combined work need only contain one copy of this License, and 43281 multiple identical Invariant Sections may be replaced with a single 43282 copy. If there are multiple Invariant Sections with the same name 43283 but different contents, make the title of each such section unique 43284 by adding at the end of it, in parentheses, the name of the 43285 original author or publisher of that section if known, or else a 43286 unique number. Make the same adjustment to the section titles in 43287 the list of Invariant Sections in the license notice of the 43288 combined work. 43289 43290 In the combination, you must combine any sections Entitled 43291 "History" in the various original documents, forming one section 43292 Entitled "History"; likewise combine any sections Entitled 43293 "Acknowledgements", and any sections Entitled "Dedications". You 43294 must delete all sections Entitled "Endorsements." 43295 43296 6. COLLECTIONS OF DOCUMENTS 43297 43298 You may make a collection consisting of the Document and other 43299 documents released under this License, and replace the individual 43300 copies of this License in the various documents with a single copy 43301 that is included in the collection, provided that you follow the 43302 rules of this License for verbatim copying of each of the 43303 documents in all other respects. 43304 43305 You may extract a single document from such a collection, and 43306 distribute it individually under this License, provided you insert 43307 a copy of this License into the extracted document, and follow 43308 this License in all other respects regarding verbatim copying of 43309 that document. 43310 43311 7. AGGREGATION WITH INDEPENDENT WORKS 43312 43313 A compilation of the Document or its derivatives with other 43314 separate and independent documents or works, in or on a volume of 43315 a storage or distribution medium, is called an "aggregate" if the 43316 copyright resulting from the compilation is not used to limit the 43317 legal rights of the compilation's users beyond what the individual 43318 works permit. When the Document is included in an aggregate, this 43319 License does not apply to the other works in the aggregate which 43320 are not themselves derivative works of the Document. 43321 43322 If the Cover Text requirement of section 3 is applicable to these 43323 copies of the Document, then if the Document is less than one half 43324 of the entire aggregate, the Document's Cover Texts may be placed 43325 on covers that bracket the Document within the aggregate, or the 43326 electronic equivalent of covers if the Document is in electronic 43327 form. Otherwise they must appear on printed covers that bracket 43328 the whole aggregate. 43329 43330 8. TRANSLATION 43331 43332 Translation is considered a kind of modification, so you may 43333 distribute translations of the Document under the terms of section 43334 4. Replacing Invariant Sections with translations requires special 43335 permission from their copyright holders, but you may include 43336 translations of some or all Invariant Sections in addition to the 43337 original versions of these Invariant Sections. You may include a 43338 translation of this License, and all the license notices in the 43339 Document, and any Warranty Disclaimers, provided that you also 43340 include the original English version of this License and the 43341 original versions of those notices and disclaimers. In case of a 43342 disagreement between the translation and the original version of 43343 this License or a notice or disclaimer, the original version will 43344 prevail. 43345 43346 If a section in the Document is Entitled "Acknowledgements", 43347 "Dedications", or "History", the requirement (section 4) to 43348 Preserve its Title (section 1) will typically require changing the 43349 actual title. 43350 43351 9. TERMINATION 43352 43353 You may not copy, modify, sublicense, or distribute the Document 43354 except as expressly provided under this License. Any attempt 43355 otherwise to copy, modify, sublicense, or distribute it is void, 43356 and will automatically terminate your rights under this License. 43357 43358 However, if you cease all violation of this License, then your 43359 license from a particular copyright holder is reinstated (a) 43360 provisionally, unless and until the copyright holder explicitly 43361 and finally terminates your license, and (b) permanently, if the 43362 copyright holder fails to notify you of the violation by some 43363 reasonable means prior to 60 days after the cessation. 43364 43365 Moreover, your license from a particular copyright holder is 43366 reinstated permanently if the copyright holder notifies you of the 43367 violation by some reasonable means, this is the first time you have 43368 received notice of violation of this License (for any work) from 43369 that copyright holder, and you cure the violation prior to 30 days 43370 after your receipt of the notice. 43371 43372 Termination of your rights under this section does not terminate 43373 the licenses of parties who have received copies or rights from 43374 you under this License. If your rights have been terminated and 43375 not permanently reinstated, receipt of a copy of some or all of 43376 the same material does not give you any rights to use it. 43377 43378 10. FUTURE REVISIONS OF THIS LICENSE 43379 43380 The Free Software Foundation may publish new, revised versions of 43381 the GNU Free Documentation License from time to time. Such new 43382 versions will be similar in spirit to the present version, but may 43383 differ in detail to address new problems or concerns. See 43384 `http://www.gnu.org/copyleft/'. 43385 43386 Each version of the License is given a distinguishing version 43387 number. If the Document specifies that a particular numbered 43388 version of this License "or any later version" applies to it, you 43389 have the option of following the terms and conditions either of 43390 that specified version or of any later version that has been 43391 published (not as a draft) by the Free Software Foundation. If 43392 the Document does not specify a version number of this License, 43393 you may choose any version ever published (not as a draft) by the 43394 Free Software Foundation. If the Document specifies that a proxy 43395 can decide which future versions of this License can be used, that 43396 proxy's public statement of acceptance of a version permanently 43397 authorizes you to choose that version for the Document. 43398 43399 11. RELICENSING 43400 43401 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 43402 World Wide Web server that publishes copyrightable works and also 43403 provides prominent facilities for anybody to edit those works. A 43404 public wiki that anybody can edit is an example of such a server. 43405 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 43406 site means any set of copyrightable works thus published on the MMC 43407 site. 43408 43409 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 43410 license published by Creative Commons Corporation, a not-for-profit 43411 corporation with a principal place of business in San Francisco, 43412 California, as well as future copyleft versions of that license 43413 published by that same organization. 43414 43415 "Incorporate" means to publish or republish a Document, in whole or 43416 in part, as part of another Document. 43417 43418 An MMC is "eligible for relicensing" if it is licensed under this 43419 License, and if all works that were first published under this 43420 License somewhere other than this MMC, and subsequently 43421 incorporated in whole or in part into the MMC, (1) had no cover 43422 texts or invariant sections, and (2) were thus incorporated prior 43423 to November 1, 2008. 43424 43425 The operator of an MMC Site may republish an MMC contained in the 43426 site under CC-BY-SA on the same site at any time before August 1, 43427 2009, provided the MMC is eligible for relicensing. 43428 43429 43430 ADDENDUM: How to use this License for your documents 43431 ==================================================== 43432 43433 To use this License in a document you have written, include a copy of 43434 the License in the document and put the following copyright and license 43435 notices just after the title page: 43436 43437 Copyright (C) YEAR YOUR NAME. 43438 Permission is granted to copy, distribute and/or modify this document 43439 under the terms of the GNU Free Documentation License, Version 1.3 43440 or any later version published by the Free Software Foundation; 43441 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 43442 Texts. A copy of the license is included in the section entitled ``GNU 43443 Free Documentation License''. 43444 43445 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 43446 replace the "with...Texts." line with this: 43447 43448 with the Invariant Sections being LIST THEIR TITLES, with 43449 the Front-Cover Texts being LIST, and with the Back-Cover Texts 43450 being LIST. 43451 43452 If you have Invariant Sections without Cover Texts, or some other 43453 combination of the three, merge those two alternatives to suit the 43454 situation. 43455 43456 If your document contains nontrivial examples of program code, we 43457 recommend releasing these examples in parallel under your choice of 43458 free software license, such as the GNU General Public License, to 43459 permit their use in free software. 43460 43461 43462 File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 43463 43464 Contributors to GCC 43465 ******************* 43466 43467 The GCC project would like to thank its many contributors. Without 43468 them the project would not have been nearly as successful as it has 43469 been. Any omissions in this list are accidental. Feel free to contact 43470 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or 43471 some of your contributions are not listed. Please keep this list in 43472 alphabetical order. 43473 43474 * Analog Devices helped implement the support for complex data types 43475 and iterators. 43476 43477 * John David Anglin for threading-related fixes and improvements to 43478 libstdc++-v3, and the HP-UX port. 43479 43480 * James van Artsdalen wrote the code that makes efficient use of the 43481 Intel 80387 register stack. 43482 43483 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 43484 Series port. 43485 43486 * Alasdair Baird for various bug fixes. 43487 43488 * Giovanni Bajo for analyzing lots of complicated C++ problem 43489 reports. 43490 43491 * Peter Barada for his work to improve code generation for new 43492 ColdFire cores. 43493 43494 * Gerald Baumgartner added the signature extension to the C++ front 43495 end. 43496 43497 * Godmar Back for his Java improvements and encouragement. 43498 43499 * Scott Bambrough for help porting the Java compiler. 43500 43501 * Wolfgang Bangerth for processing tons of bug reports. 43502 43503 * Jon Beniston for his Microsoft Windows port of Java and port to 43504 Lattice Mico32. 43505 43506 * Daniel Berlin for better DWARF2 support, faster/better 43507 optimizations, improved alias analysis, plus migrating GCC to 43508 Bugzilla. 43509 43510 * Geoff Berry for his Java object serialization work and various 43511 patches. 43512 43513 * Uros Bizjak for the implementation of x87 math built-in functions 43514 and for various middle end and i386 back end improvements and bug 43515 fixes. 43516 43517 * Eric Blake for helping to make GCJ and libgcj conform to the 43518 specifications. 43519 43520 * Janne Blomqvist for contributions to GNU Fortran. 43521 43522 * Segher Boessenkool for various fixes. 43523 43524 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 43525 other Java work. 43526 43527 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 43528 miscellaneous clean-ups. 43529 43530 * Steven Bosscher for integrating the GNU Fortran front end into GCC 43531 and for contributing to the tree-ssa branch. 43532 43533 * Eric Botcazou for fixing middle- and backend bugs left and right. 43534 43535 * Per Bothner for his direction via the steering committee and 43536 various improvements to the infrastructure for supporting new 43537 languages. Chill front end implementation. Initial 43538 implementations of cpplib, fix-header, config.guess, libio, and 43539 past C++ library (libg++) maintainer. Dreaming up, designing and 43540 implementing much of GCJ. 43541 43542 * Devon Bowen helped port GCC to the Tahoe. 43543 43544 * Don Bowman for mips-vxworks contributions. 43545 43546 * Dave Brolley for work on cpplib and Chill. 43547 43548 * Paul Brook for work on the ARM architecture and maintaining GNU 43549 Fortran. 43550 43551 * Robert Brown implemented the support for Encore 32000 systems. 43552 43553 * Christian Bruel for improvements to local store elimination. 43554 43555 * Herman A.J. ten Brugge for various fixes. 43556 43557 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 43558 FAQ. 43559 43560 * Joe Buck for his direction via the steering committee. 43561 43562 * Craig Burley for leadership of the G77 Fortran effort. 43563 43564 * Stephan Buys for contributing Doxygen notes for libstdc++. 43565 43566 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 43567 to the C++ strings, streambufs and formatted I/O, hard detective 43568 work on the frustrating localization issues, and keeping up with 43569 the problem reports. 43570 43571 * John Carr for his alias work, SPARC hacking, infrastructure 43572 improvements, previous contributions to the steering committee, 43573 loop optimizations, etc. 43574 43575 * Stephane Carrez for 68HC11 and 68HC12 ports. 43576 43577 * Steve Chamberlain for support for the Renesas SH and H8 processors 43578 and the PicoJava processor, and for GCJ config fixes. 43579 43580 * Glenn Chambers for help with the GCJ FAQ. 43581 43582 * John-Marc Chandonia for various libgcj patches. 43583 43584 * Denis Chertykov for contributing and maintaining the AVR port, the 43585 first GCC port for an 8-bit architecture. 43586 43587 * Scott Christley for his Objective-C contributions. 43588 43589 * Eric Christopher for his Java porting help and clean-ups. 43590 43591 * Branko Cibej for more warning contributions. 43592 43593 * The GNU Classpath project for all of their merged runtime code. 43594 43595 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help', 43596 and other random hacking. 43597 43598 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 43599 43600 * R. Kelley Cook for making GCC buildable from a read-only directory 43601 as well as other miscellaneous build process and documentation 43602 clean-ups. 43603 43604 * Ralf Corsepius for SH testing and minor bug fixing. 43605 43606 * Stan Cox for care and feeding of the x86 port and lots of behind 43607 the scenes hacking. 43608 43609 * Alex Crain provided changes for the 3b1. 43610 43611 * Ian Dall for major improvements to the NS32k port. 43612 43613 * Paul Dale for his work to add uClinux platform support to the m68k 43614 backend. 43615 43616 * Dario Dariol contributed the four varieties of sample programs 43617 that print a copy of their source. 43618 43619 * Russell Davidson for fstream and stringstream fixes in libstdc++. 43620 43621 * Bud Davis for work on the G77 and GNU Fortran compilers. 43622 43623 * Mo DeJong for GCJ and libgcj bug fixes. 43624 43625 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 43626 various bug fixes, and the M32C and MeP ports. 43627 43628 * Arnaud Desitter for helping to debug GNU Fortran. 43629 43630 * Gabriel Dos Reis for contributions to G++, contributions and 43631 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 43632 including `valarray<>', `complex<>', maintaining the numerics 43633 library (including that pesky `<limits>' :-) and keeping 43634 up-to-date anything to do with numbers. 43635 43636 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 43637 ISO C99 support, CFG dumping support, etc., plus support of the 43638 C++ runtime libraries including for all kinds of C interface 43639 issues, contributing and maintaining `complex<>', sanity checking 43640 and disbursement, configuration architecture, libio maintenance, 43641 and early math work. 43642 43643 * Zdenek Dvorak for a new loop unroller and various fixes. 43644 43645 * Michael Eager for his work on the Xilinx MicroBlaze port. 43646 43647 * Richard Earnshaw for his ongoing work with the ARM. 43648 43649 * David Edelsohn for his direction via the steering committee, 43650 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 43651 loop changes, doing the entire AIX port of libstdc++ with his bare 43652 hands, and for ensuring GCC properly keeps working on AIX. 43653 43654 * Kevin Ediger for the floating point formatting of num_put::do_put 43655 in libstdc++. 43656 43657 * Phil Edwards for libstdc++ work including configuration hackery, 43658 documentation maintainer, chief breaker of the web pages, the 43659 occasional iostream bug fix, and work on shared library symbol 43660 versioning. 43661 43662 * Paul Eggert for random hacking all over GCC. 43663 43664 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 43665 configuration support for locales and fstream-related fixes. 43666 43667 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 43668 iostreams. 43669 43670 * Christian Ehrhardt for dealing with bug reports. 43671 43672 * Ben Elliston for his work to move the Objective-C runtime into its 43673 own subdirectory and for his work on autoconf. 43674 43675 * Revital Eres for work on the PowerPC 750CL port. 43676 43677 * Marc Espie for OpenBSD support. 43678 43679 * Doug Evans for much of the global optimization framework, arc, 43680 m32r, and SPARC work. 43681 43682 * Christopher Faylor for his work on the Cygwin port and for caring 43683 and feeding the gcc.gnu.org box and saving its users tons of spam. 43684 43685 * Fred Fish for BeOS support and Ada fixes. 43686 43687 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 43688 43689 * Peter Gerwinski for various bug fixes and the Pascal front end. 43690 43691 * Kaveh R. Ghazi for his direction via the steering committee, 43692 amazing work to make `-W -Wall -W* -Werror' useful, and 43693 continuously testing GCC on a plethora of platforms. Kaveh 43694 extends his gratitude to the CAIP Center at Rutgers University for 43695 providing him with computing resources to work on Free Software 43696 since the late 1980s. 43697 43698 * John Gilmore for a donation to the FSF earmarked improving GNU 43699 Java. 43700 43701 * Judy Goldberg for c++ contributions. 43702 43703 * Torbjorn Granlund for various fixes and the c-torture testsuite, 43704 multiply- and divide-by-constant optimization, improved long long 43705 support, improved leaf function register allocation, and his 43706 direction via the steering committee. 43707 43708 * Anthony Green for his `-Os' contributions, the moxie port, and 43709 Java front end work. 43710 43711 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 43712 Java code. 43713 43714 * Michael K. Gschwind contributed the port to the PDP-11. 43715 43716 * Richard Guenther for his ongoing middle-end contributions and bug 43717 fixes and for release management. 43718 43719 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 43720 the support for Dwarf symbolic debugging information, and much of 43721 the support for System V Release 4. He has also worked heavily on 43722 the Intel 386 and 860 support. 43723 43724 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 43725 GCSE. 43726 43727 * Bruno Haible for improvements in the runtime overhead for EH, new 43728 warnings and assorted bug fixes. 43729 43730 * Andrew Haley for his amazing Java compiler and library efforts. 43731 43732 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 43733 series 300. 43734 43735 * Michael Hayes for various thankless work he's done trying to get 43736 the c30/c40 ports functional. Lots of loop and unroll 43737 improvements and fixes. 43738 43739 * Dara Hazeghi for wading through myriads of target-specific bug 43740 reports. 43741 43742 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 43743 43744 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 43745 work, loop opts, and generally fixing lots of old problems we've 43746 ignored for years, flow rewrite and lots of further stuff, 43747 including reviewing tons of patches. 43748 43749 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 43750 various fixes. 43751 43752 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 43753 contributed the support for the Sony NEWS machine. 43754 43755 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 43756 various fixes. 43757 43758 * Katherine Holcomb for work on GNU Fortran. 43759 43760 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 43761 of testing and bug fixing, particularly of GCC configury code. 43762 43763 * Steve Holmgren for MachTen patches. 43764 43765 * Jan Hubicka for his x86 port improvements. 43766 43767 * Falk Hueffner for working on C and optimization bug reports. 43768 43769 * Bernardo Innocenti for his m68k work, including merging of 43770 ColdFire improvements and uClinux support. 43771 43772 * Christian Iseli for various bug fixes. 43773 43774 * Kamil Iskra for general m68k hacking. 43775 43776 * Lee Iverson for random fixes and MIPS testing. 43777 43778 * Andreas Jaeger for testing and benchmarking of GCC and various bug 43779 fixes. 43780 43781 * Jakub Jelinek for his SPARC work and sibling call optimizations as 43782 well as lots of bug fixes and test cases, and for improving the 43783 Java build system. 43784 43785 * Janis Johnson for ia64 testing and fixes, her quality improvement 43786 sidetracks, and web page maintenance. 43787 43788 * Kean Johnston for SCO OpenServer support and various fixes. 43789 43790 * Tim Josling for the sample language treelang based originally on 43791 Richard Kenner's "toy" language. 43792 43793 * Nicolai Josuttis for additional libstdc++ documentation. 43794 43795 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 43796 target. 43797 43798 * Steven G. Kargl for work on GNU Fortran. 43799 43800 * David Kashtan of SRI adapted GCC to VMS. 43801 43802 * Ryszard Kabatek for many, many libstdc++ bug fixes and 43803 optimizations of strings, especially member functions, and for 43804 auto_ptr fixes. 43805 43806 * Geoffrey Keating for his ongoing work to make the PPC work for 43807 GNU/Linux and his automatic regression tester. 43808 43809 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 43810 work in just about every part of libstdc++. 43811 43812 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 43813 MIL-STD-1750A. 43814 43815 * Richard Kenner of the New York University Ultracomputer Research 43816 Laboratory wrote the machine descriptions for the AMD 29000, the 43817 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 43818 support for instruction attributes. He also made changes to 43819 better support RISC processors including changes to common 43820 subexpression elimination, strength reduction, function calling 43821 sequence handling, and condition code support, in addition to 43822 generalizing the code for frame pointer elimination and delay slot 43823 scheduling. Richard Kenner was also the head maintainer of GCC 43824 for several years. 43825 43826 * Mumit Khan for various contributions to the Cygwin and Mingw32 43827 ports and maintaining binary releases for Microsoft Windows hosts, 43828 and for massive libstdc++ porting work to Cygwin/Mingw32. 43829 43830 * Robin Kirkham for cpu32 support. 43831 43832 * Mark Klein for PA improvements. 43833 43834 * Thomas Koenig for various bug fixes. 43835 43836 * Bruce Korb for the new and improved fixincludes code. 43837 43838 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 43839 effort. 43840 43841 * Charles LaBrec contributed the support for the Integrated Solutions 43842 68020 system. 43843 43844 * Asher Langton and Mike Kumbera for contributing Cray pointer 43845 support to GNU Fortran, and for other GNU Fortran improvements. 43846 43847 * Jeff Law for his direction via the steering committee, 43848 coordinating the entire egcs project and GCC 2.95, rolling out 43849 snapshots and releases, handling merges from GCC2, reviewing tons 43850 of patches that might have fallen through the cracks else, and 43851 random but extensive hacking. 43852 43853 * Marc Lehmann for his direction via the steering committee and 43854 helping with analysis and improvements of x86 performance. 43855 43856 * Victor Leikehman for work on GNU Fortran. 43857 43858 * Ted Lemon wrote parts of the RTL reader and printer. 43859 43860 * Kriang Lerdsuwanakij for C++ improvements including template as 43861 template parameter support, and many C++ fixes. 43862 43863 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 43864 and random work on the Java front end. 43865 43866 * Alain Lichnewsky ported GCC to the MIPS CPU. 43867 43868 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 43869 and patches. 43870 43871 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 43872 43873 * Chen Liqin for various S+core related fixes/improvement, and for 43874 maintaining the S+core port. 43875 43876 * Weiwen Liu for testing and various bug fixes. 43877 43878 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 43879 diagnostics fixes and improvements. 43880 43881 * Dave Love for his ongoing work with the Fortran front end and 43882 runtime libraries. 43883 43884 * Martin von Lo"wis for internal consistency checking infrastructure, 43885 various C++ improvements including namespace support, and tons of 43886 assistance with libstdc++/compiler merges. 43887 43888 * H.J. Lu for his previous contributions to the steering committee, 43889 many x86 bug reports, prototype patches, and keeping the GNU/Linux 43890 ports working. 43891 43892 * Greg McGary for random fixes and (someday) bounded pointers. 43893 43894 * Andrew MacLeod for his ongoing work in building a real EH system, 43895 various code generation improvements, work on the global 43896 optimizer, etc. 43897 43898 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 43899 hacking improvements to compile-time performance, overall 43900 knowledge and direction in the area of instruction scheduling, and 43901 design and implementation of the automaton based instruction 43902 scheduler. 43903 43904 * Bob Manson for his behind the scenes work on dejagnu. 43905 43906 * Philip Martin for lots of libstdc++ string and vector iterator 43907 fixes and improvements, and string clean up and testsuites. 43908 43909 * All of the Mauve project contributors, for Java test code. 43910 43911 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 43912 43913 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 43914 43915 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 43916 powerpc, haifa, ECOFF debug support, and other assorted hacking. 43917 43918 * Jason Merrill for his direction via the steering committee and 43919 leading the G++ effort. 43920 43921 * Martin Michlmayr for testing GCC on several architectures using the 43922 entire Debian archive. 43923 43924 * David Miller for his direction via the steering committee, lots of 43925 SPARC work, improvements in jump.c and interfacing with the Linux 43926 kernel developers. 43927 43928 * Gary Miller ported GCC to Charles River Data Systems machines. 43929 43930 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 43931 the entire libstdc++ testsuite namespace-compatible. 43932 43933 * Mark Mitchell for his direction via the steering committee, 43934 mountains of C++ work, load/store hoisting out of loops, alias 43935 analysis improvements, ISO C `restrict' support, and serving as 43936 release manager for GCC 3.x. 43937 43938 * Alan Modra for various GNU/Linux bits and testing. 43939 43940 * Toon Moene for his direction via the steering committee, Fortran 43941 maintenance, and his ongoing work to make us make Fortran run fast. 43942 43943 * Jason Molenda for major help in the care and feeding of all the 43944 services on the gcc.gnu.org (formerly egcs.cygnus.com) 43945 machine--mail, web services, ftp services, etc etc. Doing all 43946 this work on scrap paper and the backs of envelopes would have 43947 been... difficult. 43948 43949 * Catherine Moore for fixing various ugly problems we have sent her 43950 way, including the haifa bug which was killing the Alpha & PowerPC 43951 Linux kernels. 43952 43953 * Mike Moreton for his various Java patches. 43954 43955 * David Mosberger-Tang for various Alpha improvements, and for the 43956 initial IA-64 port. 43957 43958 * Stephen Moshier contributed the floating point emulator that 43959 assists in cross-compilation and permits support for floating 43960 point numbers wider than 64 bits and for ISO C99 support. 43961 43962 * Bill Moyer for his behind the scenes work on various issues. 43963 43964 * Philippe De Muyter for his work on the m68k port. 43965 43966 * Joseph S. Myers for his work on the PDP-11 port, format checking 43967 and ISO C99 support, and continuous emphasis on (and contributions 43968 to) documentation. 43969 43970 * Nathan Myers for his work on libstdc++-v3: architecture and 43971 authorship through the first three snapshots, including 43972 implementation of locale infrastructure, string, shadow C headers, 43973 and the initial project documentation (DESIGN, CHECKLIST, and so 43974 forth). Later, more work on MT-safe string and shadow headers. 43975 43976 * Felix Natter for documentation on porting libstdc++. 43977 43978 * Nathanael Nerode for cleaning up the configuration/build process. 43979 43980 * NeXT, Inc. donated the front end that supports the Objective-C 43981 language. 43982 43983 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 43984 the search engine setup, various documentation fixes and other 43985 small fixes. 43986 43987 * Geoff Noer for his work on getting cygwin native builds working. 43988 43989 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 43990 tracking web pages, GIMPLE tuples, and assorted fixes. 43991 43992 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 43993 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 43994 related infrastructure improvements. 43995 43996 * Alexandre Oliva for various build infrastructure improvements, 43997 scripts and amazing testing work, including keeping libtool issues 43998 sane and happy. 43999 44000 * Stefan Olsson for work on mt_alloc. 44001 44002 * Melissa O'Neill for various NeXT fixes. 44003 44004 * Rainer Orth for random MIPS work, including improvements to GCC's 44005 o32 ABI support, improvements to dejagnu's MIPS support, Java 44006 configuration clean-ups and porting work, and maintaining the 44007 IRIX, Solaris 2, and Tru64 UNIX ports. 44008 44009 * Hartmut Penner for work on the s390 port. 44010 44011 * Paul Petersen wrote the machine description for the Alliant FX/8. 44012 44013 * Alexandre Petit-Bianco for implementing much of the Java compiler 44014 and continued Java maintainership. 44015 44016 * Matthias Pfaller for major improvements to the NS32k port. 44017 44018 * Gerald Pfeifer for his direction via the steering committee, 44019 pointing out lots of problems we need to solve, maintenance of the 44020 web pages, and taking care of documentation maintenance in general. 44021 44022 * Andrew Pinski for processing bug reports by the dozen. 44023 44024 * Ovidiu Predescu for his work on the Objective-C front end and 44025 runtime libraries. 44026 44027 * Jerry Quinn for major performance improvements in C++ formatted 44028 I/O. 44029 44030 * Ken Raeburn for various improvements to checker, MIPS ports and 44031 various cleanups in the compiler. 44032 44033 * Rolf W. Rasmussen for hacking on AWT. 44034 44035 * David Reese of Sun Microsystems contributed to the Solaris on 44036 PowerPC port. 44037 44038 * Volker Reichelt for keeping up with the problem reports. 44039 44040 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 44041 hacking. 44042 44043 * Loren J. Rittle for improvements to libstdc++-v3 including the 44044 FreeBSD port, threading fixes, thread-related configury changes, 44045 critical threading documentation, and solutions to really tricky 44046 I/O problems, as well as keeping GCC properly working on FreeBSD 44047 and continuous testing. 44048 44049 * Craig Rodrigues for processing tons of bug reports. 44050 44051 * Ola Ro"nnerup for work on mt_alloc. 44052 44053 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 44054 44055 * David Ronis inspired and encouraged Craig to rewrite the G77 44056 documentation in texinfo format by contributing a first pass at a 44057 translation of the old `g77-0.5.16/f/DOC' file. 44058 44059 * Ken Rose for fixes to GCC's delay slot filling code. 44060 44061 * Paul Rubin wrote most of the preprocessor. 44062 44063 * Pe'tur Runo'lfsson for major performance improvements in C++ 44064 formatted I/O and large file support in C++ filebuf. 44065 44066 * Chip Salzenberg for libstdc++ patches and improvements to locales, 44067 traits, Makefiles, libio, libtool hackery, and "long long" support. 44068 44069 * Juha Sarlin for improvements to the H8 code generator. 44070 44071 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 44072 300. 44073 44074 * Roger Sayle for improvements to constant folding and GCC's RTL 44075 optimizers as well as for fixing numerous bugs. 44076 44077 * Bradley Schatz for his work on the GCJ FAQ. 44078 44079 * Peter Schauer wrote the code to allow debugging to work on the 44080 Alpha. 44081 44082 * William Schelter did most of the work on the Intel 80386 support. 44083 44084 * Tobias Schlu"ter for work on GNU Fortran. 44085 44086 * Bernd Schmidt for various code generation improvements and major 44087 work in the reload pass as well a serving as release manager for 44088 GCC 2.95.3. 44089 44090 * Peter Schmid for constant testing of libstdc++--especially 44091 application testing, going above and beyond what was requested for 44092 the release criteria--and libstdc++ header file tweaks. 44093 44094 * Jason Schroeder for jcf-dump patches. 44095 44096 * Andreas Schwab for his work on the m68k port. 44097 44098 * Lars Segerlund for work on GNU Fortran. 44099 44100 * Dodji Seketeli for numerous C++ bug fixes and debug info 44101 improvements. 44102 44103 * Joel Sherrill for his direction via the steering committee, RTEMS 44104 contributions and RTEMS testing. 44105 44106 * Nathan Sidwell for many C++ fixes/improvements. 44107 44108 * Jeffrey Siegal for helping RMS with the original design of GCC, 44109 some code which handles the parse tree and RTL data structures, 44110 constant folding and help with the original VAX & m68k ports. 44111 44112 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 44113 from the LWG (thereby keeping GCC in line with updates from the 44114 ISO). 44115 44116 * Franz Sirl for his ongoing work with making the PPC port stable 44117 for GNU/Linux. 44118 44119 * Andrey Slepuhin for assorted AIX hacking. 44120 44121 * Trevor Smigiel for contributing the SPU port. 44122 44123 * Christopher Smith did the port for Convex machines. 44124 44125 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 44126 44127 * Randy Smith finished the Sun FPA support. 44128 44129 * Scott Snyder for queue, iterator, istream, and string fixes and 44130 libstdc++ testsuite entries. Also for providing the patch to G77 44131 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 44132 `LOGICAL*1'. 44133 44134 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 44135 44136 * Richard Stallman, for writing the original GCC and launching the 44137 GNU project. 44138 44139 * Jan Stein of the Chalmers Computer Society provided support for 44140 Genix, as well as part of the 32000 machine description. 44141 44142 * Nigel Stephens for various mips16 related fixes/improvements. 44143 44144 * Jonathan Stone wrote the machine description for the Pyramid 44145 computer. 44146 44147 * Graham Stott for various infrastructure improvements. 44148 44149 * John Stracke for his Java HTTP protocol fixes. 44150 44151 * Mike Stump for his Elxsi port, G++ contributions over the years 44152 and more recently his vxworks contributions 44153 44154 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 44155 44156 * Shigeya Suzuki for this fixes for the bsdi platforms. 44157 44158 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 44159 support, general configury hacking, fixincludes, etc. 44160 44161 * Holger Teutsch provided the support for the Clipper CPU. 44162 44163 * Gary Thomas for his ongoing work to make the PPC work for 44164 GNU/Linux. 44165 44166 * Philipp Thomas for random bug fixes throughout the compiler 44167 44168 * Jason Thorpe for thread support in libstdc++ on NetBSD. 44169 44170 * Kresten Krab Thorup wrote the run time support for the Objective-C 44171 language and the fantastic Java bytecode interpreter. 44172 44173 * Michael Tiemann for random bug fixes, the first instruction 44174 scheduler, initial C++ support, function integration, NS32k, SPARC 44175 and M88k machine description work, delay slot scheduling. 44176 44177 * Andreas Tobler for his work porting libgcj to Darwin. 44178 44179 * Teemu Torma for thread safe exception handling support. 44180 44181 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 44182 definitions, and of the VAX machine description. 44183 44184 * Daniel Towner and Hariharan Sandanagobalane contributed and 44185 maintain the picoChip port. 44186 44187 * Tom Tromey for internationalization support and for his many Java 44188 contributions and libgcj maintainership. 44189 44190 * Lassi Tuura for improvements to config.guess to determine HP 44191 processor types. 44192 44193 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 44194 44195 * Andy Vaught for the design and initial implementation of the GNU 44196 Fortran front end. 44197 44198 * Brent Verner for work with the libstdc++ cshadow files and their 44199 associated configure steps. 44200 44201 * Todd Vierling for contributions for NetBSD ports. 44202 44203 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 44204 guidance. 44205 44206 * Dean Wakerley for converting the install documentation from HTML 44207 to texinfo in time for GCC 3.0. 44208 44209 * Krister Walfridsson for random bug fixes. 44210 44211 * Feng Wang for contributions to GNU Fortran. 44212 44213 * Stephen M. Webb for time and effort on making libstdc++ shadow 44214 files work with the tricky Solaris 8+ headers, and for pushing the 44215 build-time header tree. 44216 44217 * John Wehle for various improvements for the x86 code generator, 44218 related infrastructure improvements to help x86 code generation, 44219 value range propagation and other work, WE32k port. 44220 44221 * Ulrich Weigand for work on the s390 port. 44222 44223 * Zack Weinberg for major work on cpplib and various other bug fixes. 44224 44225 * Matt Welsh for help with Linux Threads support in GCJ. 44226 44227 * Urban Widmark for help fixing java.io. 44228 44229 * Mark Wielaard for new Java library code and his work integrating 44230 with Classpath. 44231 44232 * Dale Wiles helped port GCC to the Tahoe. 44233 44234 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 44235 44236 * Jim Wilson for his direction via the steering committee, tackling 44237 hard problems in various places that nobody else wanted to work 44238 on, strength reduction and other loop optimizations. 44239 44240 * Paul Woegerer and Tal Agmon for the CRX port. 44241 44242 * Carlo Wood for various fixes. 44243 44244 * Tom Wood for work on the m88k port. 44245 44246 * Canqun Yang for work on GNU Fortran. 44247 44248 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 44249 description for the Tron architecture (specifically, the Gmicro). 44250 44251 * Kevin Zachmann helped port GCC to the Tahoe. 44252 44253 * Ayal Zaks for Swing Modulo Scheduling (SMS). 44254 44255 * Xiaoqiang Zhang for work on GNU Fortran. 44256 44257 * Gilles Zunino for help porting Java to Irix. 44258 44259 44260 The following people are recognized for their contributions to GNAT, 44261 the Ada front end of GCC: 44262 * Bernard Banner 44263 44264 * Romain Berrendonner 44265 44266 * Geert Bosch 44267 44268 * Emmanuel Briot 44269 44270 * Joel Brobecker 44271 44272 * Ben Brosgol 44273 44274 * Vincent Celier 44275 44276 * Arnaud Charlet 44277 44278 * Chien Chieng 44279 44280 * Cyrille Comar 44281 44282 * Cyrille Crozes 44283 44284 * Robert Dewar 44285 44286 * Gary Dismukes 44287 44288 * Robert Duff 44289 44290 * Ed Falis 44291 44292 * Ramon Fernandez 44293 44294 * Sam Figueroa 44295 44296 * Vasiliy Fofanov 44297 44298 * Michael Friess 44299 44300 * Franco Gasperoni 44301 44302 * Ted Giering 44303 44304 * Matthew Gingell 44305 44306 * Laurent Guerby 44307 44308 * Jerome Guitton 44309 44310 * Olivier Hainque 44311 44312 * Jerome Hugues 44313 44314 * Hristian Kirtchev 44315 44316 * Jerome Lambourg 44317 44318 * Bruno Leclerc 44319 44320 * Albert Lee 44321 44322 * Sean McNeil 44323 44324 * Javier Miranda 44325 44326 * Laurent Nana 44327 44328 * Pascal Obry 44329 44330 * Dong-Ik Oh 44331 44332 * Laurent Pautet 44333 44334 * Brett Porter 44335 44336 * Thomas Quinot 44337 44338 * Nicolas Roche 44339 44340 * Pat Rogers 44341 44342 * Jose Ruiz 44343 44344 * Douglas Rupp 44345 44346 * Sergey Rybin 44347 44348 * Gail Schenker 44349 44350 * Ed Schonberg 44351 44352 * Nicolas Setton 44353 44354 * Samuel Tardieu 44355 44356 44357 The following people are recognized for their contributions of new 44358 features, bug reports, testing and integration of classpath/libgcj for 44359 GCC version 4.1: 44360 * Lillian Angel for `JTree' implementation and lots Free Swing 44361 additions and bug fixes. 44362 44363 * Wolfgang Baer for `GapContent' bug fixes. 44364 44365 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 44366 event fixes, lots of Free Swing work including `JTable' editing. 44367 44368 * Stuart Ballard for RMI constant fixes. 44369 44370 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 44371 44372 * Gary Benson for `MessageFormat' fixes. 44373 44374 * Daniel Bonniot for `Serialization' fixes. 44375 44376 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 44377 and `DOM xml:id' support. 44378 44379 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 44380 44381 * Archie Cobbs for build fixes, VM interface updates, 44382 `URLClassLoader' updates. 44383 44384 * Kelley Cook for build fixes. 44385 44386 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 44387 44388 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 44389 and improvements. 44390 44391 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 44392 2D support. Lots of imageio framework additions, lots of AWT and 44393 Free Swing bug fixes. 44394 44395 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 44396 fixes, better `Proxy' support, bug fixes and IKVM integration. 44397 44398 * Santiago Gala for `AccessControlContext' fixes. 44399 44400 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 44401 improvements. 44402 44403 * David Gilbert for `basic' and `metal' icon and plaf support and 44404 lots of documenting, Lots of Free Swing and metal theme additions. 44405 `MetalIconFactory' implementation. 44406 44407 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 44408 44409 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 44410 build speedups. 44411 44412 * Kim Ho for `JFileChooser' implementation. 44413 44414 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 44415 updates, `Serialization' fixes, `Properties' XML support and 44416 generic branch work, VMIntegration guide update. 44417 44418 * Bastiaan Huisman for `TimeZone' bug fixing. 44419 44420 * Andreas Jaeger for mprec updates. 44421 44422 * Paul Jenner for better `-Werror' support. 44423 44424 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 44425 44426 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 44427 bug fixes all over. Lots of Free Swing work including styled text. 44428 44429 * Simon Kitching for `String' cleanups and optimization suggestions. 44430 44431 * Michael Koch for configuration fixes, `Locale' updates, bug and 44432 build fixes. 44433 44434 * Guilhem Lavaux for configuration, thread and channel fixes and 44435 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 44436 44437 * David Lichteblau for JCL support library global/local reference 44438 cleanups. 44439 44440 * Aaron Luchko for JDWP updates and documentation fixes. 44441 44442 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 44443 features. 44444 44445 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 44446 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 44447 and implementing the Qt4 peers. 44448 44449 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 44450 `SystemLogger' and `FileHandler' rotate implementations, NIO 44451 `FileChannel.map' support, security and policy updates. 44452 44453 * Bryce McKinlay for RMI work. 44454 44455 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 44456 testing and documenting. 44457 44458 * Kalle Olavi Niemitalo for build fixes. 44459 44460 * Rainer Orth for build fixes. 44461 44462 * Andrew Overholt for `File' locking fixes. 44463 44464 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 44465 44466 * Olga Rodimina for `MenuSelectionManager' implementation. 44467 44468 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 44469 44470 * Julian Scheid for documentation updates and gjdoc support. 44471 44472 * Christian Schlichtherle for zip fixes and cleanups. 44473 44474 * Robert Schuster for documentation updates and beans fixes, 44475 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 44476 and URL, AWT and Free Swing bug fixes. 44477 44478 * Keith Seitz for lots of JDWP work. 44479 44480 * Christian Thalinger for 64-bit cleanups, Configuration and VM 44481 interface fixes and `CACAO' integration, `fdlibm' updates. 44482 44483 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 44484 44485 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 44486 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 44487 44488 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 44489 integration. `Qt4' build infrastructure, `SHA1PRNG' and 44490 `GdkPixbugDecoder' updates. 44491 44492 * Tom Tromey for Eclipse integration, generics work, lots of bug 44493 fixes and gcj integration including coordinating The Big Merge. 44494 44495 * Mark Wielaard for bug fixes, packaging and release management, 44496 `Clipboard' implementation, system call interrupts and network 44497 timeouts and `GdkPixpufDecoder' fixes. 44498 44499 44500 In addition to the above, all of which also contributed time and 44501 energy in testing GCC, we would like to thank the following for their 44502 contributions to testing: 44503 44504 * Michael Abd-El-Malek 44505 44506 * Thomas Arend 44507 44508 * Bonzo Armstrong 44509 44510 * Steven Ashe 44511 44512 * Chris Baldwin 44513 44514 * David Billinghurst 44515 44516 * Jim Blandy 44517 44518 * Stephane Bortzmeyer 44519 44520 * Horst von Brand 44521 44522 * Frank Braun 44523 44524 * Rodney Brown 44525 44526 * Sidney Cadot 44527 44528 * Bradford Castalia 44529 44530 * Robert Clark 44531 44532 * Jonathan Corbet 44533 44534 * Ralph Doncaster 44535 44536 * Richard Emberson 44537 44538 * Levente Farkas 44539 44540 * Graham Fawcett 44541 44542 * Mark Fernyhough 44543 44544 * Robert A. French 44545 44546 * Jo"rgen Freyh 44547 44548 * Mark K. Gardner 44549 44550 * Charles-Antoine Gauthier 44551 44552 * Yung Shing Gene 44553 44554 * David Gilbert 44555 44556 * Simon Gornall 44557 44558 * Fred Gray 44559 44560 * John Griffin 44561 44562 * Patrik Hagglund 44563 44564 * Phil Hargett 44565 44566 * Amancio Hasty 44567 44568 * Takafumi Hayashi 44569 44570 * Bryan W. Headley 44571 44572 * Kevin B. Hendricks 44573 44574 * Joep Jansen 44575 44576 * Christian Joensson 44577 44578 * Michel Kern 44579 44580 * David Kidd 44581 44582 * Tobias Kuipers 44583 44584 * Anand Krishnaswamy 44585 44586 * A. O. V. Le Blanc 44587 44588 * llewelly 44589 44590 * Damon Love 44591 44592 * Brad Lucier 44593 44594 * Matthias Klose 44595 44596 * Martin Knoblauch 44597 44598 * Rick Lutowski 44599 44600 * Jesse Macnish 44601 44602 * Stefan Morrell 44603 44604 * Anon A. Mous 44605 44606 * Matthias Mueller 44607 44608 * Pekka Nikander 44609 44610 * Rick Niles 44611 44612 * Jon Olson 44613 44614 * Magnus Persson 44615 44616 * Chris Pollard 44617 44618 * Richard Polton 44619 44620 * Derk Reefman 44621 44622 * David Rees 44623 44624 * Paul Reilly 44625 44626 * Tom Reilly 44627 44628 * Torsten Rueger 44629 44630 * Danny Sadinoff 44631 44632 * Marc Schifer 44633 44634 * Erik Schnetter 44635 44636 * Wayne K. Schroll 44637 44638 * David Schuler 44639 44640 * Vin Shelton 44641 44642 * Tim Souder 44643 44644 * Adam Sulmicki 44645 44646 * Bill Thorson 44647 44648 * George Talbot 44649 44650 * Pedro A. M. Vazquez 44651 44652 * Gregory Warnes 44653 44654 * Ian Watson 44655 44656 * David E. Young 44657 44658 * And many others 44659 44660 And finally we'd like to thank everyone who uses the compiler, provides 44661 feedback and generally reminds us why we're doing this work in the first 44662 place. 44663 44664 44665 File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 44666 44667 Option Index 44668 ************ 44669 44670 GCC's command line options are indexed here without any initial `-' or 44671 `--'. Where an option has both positive and negative forms (such as 44672 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 44673 indexed under the most appropriate form; it may sometimes be useful to 44674 look up both forms. 44675 44676 [index] 44677 * Menu: 44678 44679 * ###: Overall Options. (line 209) 44680 * -fno-keep-inline-dllexport: Optimize Options. (line 305) 44681 * -fprofile-generate-sampling: Optimize Options. (line 1773) 44682 * -mcpu: RX Options. (line 30) 44683 * -Wno-thread-attr-bind-param: Warning Options. (line 606) 44684 * -Wno-thread-mismatched-lock-acq-rel: Warning Options. (line 594) 44685 * -Wno-thread-mismatched-lock-order: Warning Options. (line 589) 44686 * -Wno-thread-reentrant-lock: Warning Options. (line 598) 44687 * -Wno-thread-unguarded-func: Warning Options. (line 584) 44688 * -Wno-thread-unguarded-var: Warning Options. (line 579) 44689 * -Wno-thread-unsupported-lock-name: Warning Options. (line 602) 44690 * -Wthread-attr-bind-param: Warning Options. (line 606) 44691 * -Wthread-mismatched-lock-acq-rel: Warning Options. (line 594) 44692 * -Wthread-mismatched-lock-order: Warning Options. (line 589) 44693 * -Wthread-reentrant-lock: Warning Options. (line 598) 44694 * -Wthread-unguarded-func: Warning Options. (line 584) 44695 * -Wthread-unguarded-var: Warning Options. (line 579) 44696 * -Wthread-unsupported-lock-name: Warning Options. (line 602) 44697 * 8bit-idiv: i386 and x86-64 Options. 44698 (line 680) 44699 * A: Preprocessor Options. 44700 (line 551) 44701 * all_load: Darwin Options. (line 112) 44702 * allowable_client: Darwin Options. (line 199) 44703 * ansi <1>: Non-bugs. (line 107) 44704 * ansi <2>: Other Builtins. (line 22) 44705 * ansi <3>: C Dialect Options. (line 11) 44706 * ansi <4>: Standards. (line 16) 44707 * ansi: Preprocessor Options. 44708 (line 326) 44709 * arch_errors_fatal: Darwin Options. (line 116) 44710 * aux-info: C Dialect Options. (line 154) 44711 * avx256-split-unaligned-load: i386 and x86-64 Options. 44712 (line 689) 44713 * avx256-split-unaligned-store: i386 and x86-64 Options. 44714 (line 689) 44715 * B: Directory Options. (line 46) 44716 * Bdynamic: VxWorks Options. (line 22) 44717 * bind_at_load: Darwin Options. (line 120) 44718 * Bstatic: VxWorks Options. (line 22) 44719 * bundle: Darwin Options. (line 125) 44720 * bundle_loader: Darwin Options. (line 129) 44721 * c <1>: Link Options. (line 20) 44722 * c: Overall Options. (line 164) 44723 * C: Preprocessor Options. 44724 (line 609) 44725 * canonical-prefixes: Overall Options. (line 338) 44726 * client_name: Darwin Options. (line 199) 44727 * compatibility_version: Darwin Options. (line 199) 44728 * coverage: Debugging Options. (line 371) 44729 * current_version: Darwin Options. (line 199) 44730 * D: Preprocessor Options. 44731 (line 34) 44732 * d: Debugging Options. (line 497) 44733 * dA: Debugging Options. (line 704) 44734 * dD <1>: Preprocessor Options. 44735 (line 583) 44736 * dD: Debugging Options. (line 708) 44737 * dead_strip: Darwin Options. (line 199) 44738 * dependency-file: Darwin Options. (line 199) 44739 * dH: Debugging Options. (line 712) 44740 * dI: Preprocessor Options. 44741 (line 592) 44742 * dm: Debugging Options. (line 715) 44743 * dM: Preprocessor Options. 44744 (line 567) 44745 * dN: Preprocessor Options. 44746 (line 589) 44747 * dp: Debugging Options. (line 719) 44748 * dP: Debugging Options. (line 724) 44749 * dU: Preprocessor Options. 44750 (line 596) 44751 * dumpmachine: Debugging Options. (line 1203) 44752 * dumpspecs: Debugging Options. (line 1211) 44753 * dumpversion: Debugging Options. (line 1207) 44754 * dv: Debugging Options. (line 728) 44755 * dx: Debugging Options. (line 733) 44756 * dylib_file: Darwin Options. (line 199) 44757 * dylinker_install_name: Darwin Options. (line 199) 44758 * dynamic: Darwin Options. (line 199) 44759 * dynamiclib: Darwin Options. (line 133) 44760 * E <1>: Link Options. (line 20) 44761 * E: Overall Options. (line 185) 44762 * EB <1>: MIPS Options. (line 7) 44763 * EB: ARC Options. (line 12) 44764 * EL <1>: ARC Options. (line 9) 44765 * EL: MIPS Options. (line 10) 44766 * exported_symbols_list: Darwin Options. (line 199) 44767 * F: Darwin Options. (line 32) 44768 * fabi-version: C++ Dialect Options. 44769 (line 20) 44770 * falign-functions: Optimize Options. (line 1394) 44771 * falign-jumps: Optimize Options. (line 1444) 44772 * falign-labels: Optimize Options. (line 1412) 44773 * falign-loops: Optimize Options. (line 1430) 44774 * fassociative-math: Optimize Options. (line 1965) 44775 * fasynchronous-unwind-tables: Code Gen Options. (line 64) 44776 * fauto-inc-dec: Optimize Options. (line 510) 44777 * fbounds-check: Code Gen Options. (line 15) 44778 * fbranch-probabilities: Optimize Options. (line 2098) 44779 * fbranch-target-load-optimize: Optimize Options. (line 2209) 44780 * fbranch-target-load-optimize2: Optimize Options. (line 2215) 44781 * fbtr-bb-exclusive: Optimize Options. (line 2219) 44782 * fcall-saved: Code Gen Options. (line 262) 44783 * fcall-used: Code Gen Options. (line 248) 44784 * fcaller-saves: Optimize Options. (line 779) 44785 * fcallgraph-profiles-sections: Optimize Options. (line 1863) 44786 * fcheck-data-deps: Optimize Options. (line 1052) 44787 * fcheck-new: C++ Dialect Options. 44788 (line 45) 44789 * fcombine-stack-adjustments: Optimize Options. (line 792) 44790 * fcommon: Variable Attributes. 44791 (line 105) 44792 * fcompare-debug: Debugging Options. (line 160) 44793 * fcompare-debug-second: Debugging Options. (line 186) 44794 * fcompare-elim: Optimize Options. (line 1714) 44795 * fcond-mismatch: C Dialect Options. (line 290) 44796 * fconserve-space: C++ Dialect Options. 44797 (line 55) 44798 * fconserve-stack: Optimize Options. (line 798) 44799 * fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 44800 (line 30) 44801 * fconstexpr-depth: C++ Dialect Options. 44802 (line 67) 44803 * fcprop-registers: Optimize Options. (line 1736) 44804 * fcrossjumping: Optimize Options. (line 503) 44805 * fcse-follow-jumps: Optimize Options. (line 431) 44806 * fcse-skip-blocks: Optimize Options. (line 440) 44807 * fcx-fortran-rules: Optimize Options. (line 2079) 44808 * fcx-limited-range: Optimize Options. (line 2067) 44809 * fdata-sections: Optimize Options. (line 2190) 44810 * fdbg-cnt: Debugging Options. (line 424) 44811 * fdbg-cnt-list: Debugging Options. (line 421) 44812 * fdce: Optimize Options. (line 516) 44813 * fdebug-prefix-map: Debugging Options. (line 287) 44814 * fdelayed-branch: Optimize Options. (line 628) 44815 * fdelete-null-pointer-checks: Optimize Options. (line 539) 44816 * fdevirtualize: Optimize Options. (line 557) 44817 * fdiagnostics-show-location: Language Independent Options. 44818 (line 21) 44819 * fdiagnostics-show-option: Language Independent Options. 44820 (line 36) 44821 * fdirectives-only: Preprocessor Options. 44822 (line 459) 44823 * fdisable-: Debugging Options. (line 434) 44824 * fdollars-in-identifiers <1>: Interoperation. (line 146) 44825 * fdollars-in-identifiers: Preprocessor Options. 44826 (line 481) 44827 * fdse: Optimize Options. (line 520) 44828 * fdump-class-hierarchy: Debugging Options. (line 764) 44829 * fdump-final-insns: Debugging Options. (line 154) 44830 * fdump-ipa: Debugging Options. (line 772) 44831 * fdump-noaddr: Debugging Options. (line 737) 44832 * fdump-passes: Debugging Options. (line 790) 44833 * fdump-rtl-alignments: Debugging Options. (line 516) 44834 * fdump-rtl-all: Debugging Options. (line 701) 44835 * fdump-rtl-asmcons: Debugging Options. (line 519) 44836 * fdump-rtl-auto_inc_dec: Debugging Options. (line 523) 44837 * fdump-rtl-barriers: Debugging Options. (line 527) 44838 * fdump-rtl-bbpart: Debugging Options. (line 530) 44839 * fdump-rtl-bbro: Debugging Options. (line 533) 44840 * fdump-rtl-btl2: Debugging Options. (line 537) 44841 * fdump-rtl-bypass: Debugging Options. (line 541) 44842 * fdump-rtl-ce1: Debugging Options. (line 552) 44843 * fdump-rtl-ce2: Debugging Options. (line 552) 44844 * fdump-rtl-ce3: Debugging Options. (line 552) 44845 * fdump-rtl-combine: Debugging Options. (line 544) 44846 * fdump-rtl-compgotos: Debugging Options. (line 547) 44847 * fdump-rtl-cprop_hardreg: Debugging Options. (line 556) 44848 * fdump-rtl-csa: Debugging Options. (line 559) 44849 * fdump-rtl-cse1: Debugging Options. (line 563) 44850 * fdump-rtl-cse2: Debugging Options. (line 563) 44851 * fdump-rtl-dbr: Debugging Options. (line 570) 44852 * fdump-rtl-dce: Debugging Options. (line 567) 44853 * fdump-rtl-dce1: Debugging Options. (line 574) 44854 * fdump-rtl-dce2: Debugging Options. (line 574) 44855 * fdump-rtl-dfinish: Debugging Options. (line 698) 44856 * fdump-rtl-dfinit: Debugging Options. (line 698) 44857 * fdump-rtl-eh: Debugging Options. (line 578) 44858 * fdump-rtl-eh_ranges: Debugging Options. (line 581) 44859 * fdump-rtl-expand: Debugging Options. (line 584) 44860 * fdump-rtl-fwprop1: Debugging Options. (line 588) 44861 * fdump-rtl-fwprop2: Debugging Options. (line 588) 44862 * fdump-rtl-gcse1: Debugging Options. (line 593) 44863 * fdump-rtl-gcse2: Debugging Options. (line 593) 44864 * fdump-rtl-init-regs: Debugging Options. (line 597) 44865 * fdump-rtl-initvals: Debugging Options. (line 600) 44866 * fdump-rtl-into_cfglayout: Debugging Options. (line 603) 44867 * fdump-rtl-ira: Debugging Options. (line 606) 44868 * fdump-rtl-jump: Debugging Options. (line 609) 44869 * fdump-rtl-loop2: Debugging Options. (line 612) 44870 * fdump-rtl-mach: Debugging Options. (line 616) 44871 * fdump-rtl-mode_sw: Debugging Options. (line 620) 44872 * fdump-rtl-outof_cfglayout: Debugging Options. (line 626) 44873 * fdump-rtl-peephole2: Debugging Options. (line 629) 44874 * fdump-rtl-postreload: Debugging Options. (line 632) 44875 * fdump-rtl-pro_and_epilogue: Debugging Options. (line 635) 44876 * fdump-rtl-regclass: Debugging Options. (line 698) 44877 * fdump-rtl-regmove: Debugging Options. (line 638) 44878 * fdump-rtl-rnreg: Debugging Options. (line 623) 44879 * fdump-rtl-sched1: Debugging Options. (line 642) 44880 * fdump-rtl-sched2: Debugging Options. (line 642) 44881 * fdump-rtl-see: Debugging Options. (line 646) 44882 * fdump-rtl-seqabstr: Debugging Options. (line 649) 44883 * fdump-rtl-shorten: Debugging Options. (line 652) 44884 * fdump-rtl-sibling: Debugging Options. (line 655) 44885 * fdump-rtl-sms: Debugging Options. (line 668) 44886 * fdump-rtl-split1: Debugging Options. (line 662) 44887 * fdump-rtl-split2: Debugging Options. (line 662) 44888 * fdump-rtl-split3: Debugging Options. (line 662) 44889 * fdump-rtl-split4: Debugging Options. (line 662) 44890 * fdump-rtl-split5: Debugging Options. (line 662) 44891 * fdump-rtl-stack: Debugging Options. (line 672) 44892 * fdump-rtl-subreg1: Debugging Options. (line 678) 44893 * fdump-rtl-subreg2: Debugging Options. (line 678) 44894 * fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 698) 44895 * fdump-rtl-subregs_of_mode_init: Debugging Options. (line 698) 44896 * fdump-rtl-unshare: Debugging Options. (line 682) 44897 * fdump-rtl-vartrack: Debugging Options. (line 685) 44898 * fdump-rtl-vregs: Debugging Options. (line 688) 44899 * fdump-rtl-web: Debugging Options. (line 691) 44900 * fdump-statistics: Debugging Options. (line 794) 44901 * fdump-translation-unit: Debugging Options. (line 755) 44902 * fdump-tree: Debugging Options. (line 805) 44903 * fdump-tree-alias: Debugging Options. (line 899) 44904 * fdump-tree-all: Debugging Options. (line 989) 44905 * fdump-tree-ccp: Debugging Options. (line 903) 44906 * fdump-tree-cfg: Debugging Options. (line 879) 44907 * fdump-tree-ch: Debugging Options. (line 891) 44908 * fdump-tree-copyprop: Debugging Options. (line 919) 44909 * fdump-tree-copyrename: Debugging Options. (line 965) 44910 * fdump-tree-dce: Debugging Options. (line 927) 44911 * fdump-tree-dom: Debugging Options. (line 945) 44912 * fdump-tree-dse: Debugging Options. (line 950) 44913 * fdump-tree-forwprop: Debugging Options. (line 960) 44914 * fdump-tree-fre: Debugging Options. (line 915) 44915 * fdump-tree-gimple: Debugging Options. (line 874) 44916 * fdump-tree-mudflap: Debugging Options. (line 931) 44917 * fdump-tree-nrv: Debugging Options. (line 970) 44918 * fdump-tree-optimized: Debugging Options. (line 871) 44919 * fdump-tree-original: Debugging Options. (line 868) 44920 * fdump-tree-phiopt: Debugging Options. (line 955) 44921 * fdump-tree-pre: Debugging Options. (line 911) 44922 * fdump-tree-sink: Debugging Options. (line 941) 44923 * fdump-tree-slp: Debugging Options. (line 980) 44924 * fdump-tree-sra: Debugging Options. (line 936) 44925 * fdump-tree-ssa: Debugging Options. (line 895) 44926 * fdump-tree-store_copyprop: Debugging Options. (line 923) 44927 * fdump-tree-storeccp: Debugging Options. (line 907) 44928 * fdump-tree-vcg: Debugging Options. (line 883) 44929 * fdump-tree-vect: Debugging Options. (line 975) 44930 * fdump-tree-vrp: Debugging Options. (line 985) 44931 * fdump-unnumbered: Debugging Options. (line 743) 44932 * fdump-unnumbered-links: Debugging Options. (line 749) 44933 * fdwarf2-cfi-asm: Debugging Options. (line 291) 44934 * fearly-inlining: Optimize Options. (line 262) 44935 * feliminate-dwarf2-dups: Debugging Options. (line 199) 44936 * feliminate-unused-debug-symbols: Debugging Options. (line 52) 44937 * feliminate-unused-debug-types: Debugging Options. (line 1215) 44938 * fenable-: Debugging Options. (line 434) 44939 * fenable-icf-debug: Debugging Options. (line 274) 44940 * fexceptions: Code Gen Options. (line 34) 44941 * fexcess-precision: Optimize Options. (line 1893) 44942 * fexec-charset: Preprocessor Options. 44943 (line 508) 44944 * fexpensive-optimizations: Optimize Options. (line 564) 44945 * fextended-identifiers: Preprocessor Options. 44946 (line 484) 44947 * ffast-math: Optimize Options. (line 1916) 44948 * ffinite-math-only: Optimize Options. (line 1991) 44949 * ffix-and-continue: Darwin Options. (line 106) 44950 * ffixed: Code Gen Options. (line 236) 44951 * ffloat-store <1>: Optimize Options. (line 1879) 44952 * ffloat-store: Disappointments. (line 77) 44953 * ffor-scope: C++ Dialect Options. 44954 (line 121) 44955 * fforward-propagate: Optimize Options. (line 174) 44956 * ffp-contract: Optimize Options. (line 183) 44957 * ffreestanding <1>: C Dialect Options. (line 225) 44958 * ffreestanding <2>: Warning Options. (line 240) 44959 * ffreestanding <3>: Function Attributes. 44960 (line 459) 44961 * ffreestanding: Standards. (line 88) 44962 * ffriend-injection: C++ Dialect Options. 44963 (line 91) 44964 * ffunction-sections: Optimize Options. (line 2190) 44965 * fgcse: Optimize Options. (line 454) 44966 * fgcse-after-reload: Optimize Options. (line 490) 44967 * fgcse-las: Optimize Options. (line 483) 44968 * fgcse-lm: Optimize Options. (line 465) 44969 * fgcse-sm: Optimize Options. (line 474) 44970 * fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 44971 (line 39) 44972 * fgnu89-inline: C Dialect Options. (line 133) 44973 * fgraphite-identity: Optimize Options. (line 1033) 44974 * fhosted: C Dialect Options. (line 218) 44975 * fif-conversion: Optimize Options. (line 524) 44976 * fif-conversion2: Optimize Options. (line 533) 44977 * filelist: Darwin Options. (line 199) 44978 * findirect-data: Darwin Options. (line 106) 44979 * findirect-inlining: Optimize Options. (line 235) 44980 * finhibit-size-directive: Code Gen Options. (line 158) 44981 * finline-functions: Optimize Options. (line 243) 44982 * finline-functions-called-once: Optimize Options. (line 254) 44983 * finline-limit: Optimize Options. (line 279) 44984 * finline-small-functions: Optimize Options. (line 227) 44985 * finput-charset: Preprocessor Options. 44986 (line 521) 44987 * finstrument-functions <1>: Code Gen Options. (line 292) 44988 * finstrument-functions: Function Attributes. 44989 (line 899) 44990 * finstrument-functions-exclude-file-list: Code Gen Options. (line 329) 44991 * finstrument-functions-exclude-function-list: Code Gen Options. 44992 (line 349) 44993 * fipa-cp: Optimize Options. (line 868) 44994 * fipa-cp-clone: Optimize Options. (line 876) 44995 * fipa-matrix-reorg: Optimize Options. (line 886) 44996 * fipa-profile: Optimize Options. (line 860) 44997 * fipa-pta: Optimize Options. (line 854) 44998 * fipa-pure-const: Optimize Options. (line 832) 44999 * fipa-reference: Optimize Options. (line 836) 45000 * fipa-sra: Optimize Options. (line 272) 45001 * fipa-struct-reorg: Optimize Options. (line 840) 45002 * fira-loop-pressure: Optimize Options. (line 603) 45003 * fira-verbose: Optimize Options. (line 623) 45004 * fivopts: Optimize Options. (line 1128) 45005 * fkeep-inline-functions <1>: Inline. (line 51) 45006 * fkeep-inline-functions: Optimize Options. (line 311) 45007 * fkeep-static-consts: Optimize Options. (line 318) 45008 * flat_namespace: Darwin Options. (line 199) 45009 * flax-vector-conversions: C Dialect Options. (line 295) 45010 * fleading-underscore: Code Gen Options. (line 432) 45011 * floop-block: Optimize Options. (line 1004) 45012 * floop-flatten: Optimize Options. (line 1041) 45013 * floop-interchange: Optimize Options. (line 957) 45014 * floop-parallelize-all: Optimize Options. (line 1046) 45015 * floop-strip-mine: Optimize Options. (line 982) 45016 * flto: Optimize Options. (line 1508) 45017 * flto-partition: Optimize Options. (line 1672) 45018 * fmax-errors: Warning Options. (line 18) 45019 * fmem-report: Debugging Options. (line 315) 45020 * fmerge-all-constants: Optimize Options. (line 337) 45021 * fmerge-constants: Optimize Options. (line 327) 45022 * fmerge-debug-strings: Debugging Options. (line 279) 45023 * fmessage-length: Language Independent Options. 45024 (line 15) 45025 * fmodulo-sched: Optimize Options. (line 348) 45026 * fmodulo-sched-allow-regmoves: Optimize Options. (line 353) 45027 * fmove-loop-invariants: Optimize Options. (line 2180) 45028 * fms-extensions <1>: Unnamed Fields. (line 36) 45029 * fms-extensions <2>: C Dialect Options. (line 243) 45030 * fms-extensions: C++ Dialect Options. 45031 (line 156) 45032 * fmudflap: Optimize Options. (line 393) 45033 * fmudflapir: Optimize Options. (line 393) 45034 * fmudflapth: Optimize Options. (line 393) 45035 * fnext-runtime: Objective-C and Objective-C++ Dialect Options. 45036 (line 43) 45037 * fno-access-control: C++ Dialect Options. 45038 (line 41) 45039 * fno-asm: C Dialect Options. (line 170) 45040 * fno-branch-count-reg: Optimize Options. (line 360) 45041 * fno-builtin <1>: Function Attributes. 45042 (line 459) 45043 * fno-builtin <2>: C Dialect Options. (line 184) 45044 * fno-builtin <3>: Warning Options. (line 240) 45045 * fno-builtin: Other Builtins. (line 14) 45046 * fno-common <1>: Variable Attributes. 45047 (line 105) 45048 * fno-common: Code Gen Options. (line 135) 45049 * fno-compare-debug: Debugging Options. (line 160) 45050 * fno-deduce-init-list: C++ Dialect Options. 45051 (line 73) 45052 * fno-default-inline <1>: C++ Dialect Options. 45053 (line 330) 45054 * fno-default-inline <2>: Inline. (line 71) 45055 * fno-default-inline: Optimize Options. (line 159) 45056 * fno-defer-pop: Optimize Options. (line 166) 45057 * fno-diagnostics-show-option: Language Independent Options. 45058 (line 36) 45059 * fno-dwarf2-cfi-asm: Debugging Options. (line 291) 45060 * fno-elide-constructors: C++ Dialect Options. 45061 (line 104) 45062 * fno-enforce-eh-specs: C++ Dialect Options. 45063 (line 110) 45064 * fno-for-scope: C++ Dialect Options. 45065 (line 121) 45066 * fno-function-cse: Optimize Options. (line 370) 45067 * fno-gnu-keywords: C++ Dialect Options. 45068 (line 133) 45069 * fno-guess-branch-probability: Optimize Options. (line 1266) 45070 * fno-ident: Code Gen Options. (line 155) 45071 * fno-implement-inlines <1>: C++ Dialect Options. 45072 (line 150) 45073 * fno-implement-inlines: C++ Interface. (line 75) 45074 * fno-implicit-inline-templates: C++ Dialect Options. 45075 (line 144) 45076 * fno-implicit-templates <1>: Template Instantiation. 45077 (line 87) 45078 * fno-implicit-templates: C++ Dialect Options. 45079 (line 138) 45080 * fno-inline: Optimize Options. (line 221) 45081 * fno-ira-share-save-slots: Optimize Options. (line 611) 45082 * fno-ira-share-spill-slots: Optimize Options. (line 617) 45083 * fno-jump-tables: Code Gen Options. (line 228) 45084 * fno-math-errno: Optimize Options. (line 1930) 45085 * fno-merge-debug-strings: Debugging Options. (line 279) 45086 * fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 45087 (line 49) 45088 * fno-nonansi-builtins: C++ Dialect Options. 45089 (line 161) 45090 * fno-operator-names: C++ Dialect Options. 45091 (line 177) 45092 * fno-optional-diags: C++ Dialect Options. 45093 (line 181) 45094 * fno-peephole: Optimize Options. (line 1257) 45095 * fno-peephole2: Optimize Options. (line 1257) 45096 * fno-pretty-templates: C++ Dialect Options. 45097 (line 191) 45098 * fno-rtti: C++ Dialect Options. 45099 (line 209) 45100 * fno-sched-interblock: Optimize Options. (line 654) 45101 * fno-sched-spec: Optimize Options. (line 659) 45102 * fno-set-stack-executable: i386 and x86-64 Windows Options. 45103 (line 46) 45104 * fno-show-column: Preprocessor Options. 45105 (line 546) 45106 * fno-signed-bitfields: C Dialect Options. (line 328) 45107 * fno-signed-zeros: Optimize Options. (line 2003) 45108 * fno-stack-limit: Code Gen Options. (line 400) 45109 * fno-threadsafe-statics: C++ Dialect Options. 45110 (line 240) 45111 * fno-toplevel-reorder: Optimize Options. (line 1464) 45112 * fno-trapping-math: Optimize Options. (line 2013) 45113 * fno-unsigned-bitfields: C Dialect Options. (line 328) 45114 * fno-use-cxa-get-exception-ptr: C++ Dialect Options. 45115 (line 253) 45116 * fno-var-tracking-assignments: Debugging Options. (line 1126) 45117 * fno-var-tracking-assignments-toggle: Debugging Options. (line 1136) 45118 * fno-weak: C++ Dialect Options. 45119 (line 315) 45120 * fno-working-directory: Preprocessor Options. 45121 (line 531) 45122 * fno-zero-initialized-in-bss: Optimize Options. (line 381) 45123 * fnon-call-exceptions: Code Gen Options. (line 48) 45124 * fnothrow-opt: C++ Dialect Options. 45125 (line 166) 45126 * fobjc-abi-version: Objective-C and Objective-C++ Dialect Options. 45127 (line 56) 45128 * fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 45129 (line 67) 45130 * fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 45131 (line 92) 45132 * fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 45133 (line 96) 45134 * fobjc-gc: Objective-C and Objective-C++ Dialect Options. 45135 (line 105) 45136 * fobjc-nilcheck: Objective-C and Objective-C++ Dialect Options. 45137 (line 111) 45138 * fobjc-std: Objective-C and Objective-C++ Dialect Options. 45139 (line 120) 45140 * fomit-frame-pointer: Optimize Options. (line 194) 45141 * fopenmp: C Dialect Options. (line 235) 45142 * foptimize-register-move: Optimize Options. (line 571) 45143 * foptimize-sibling-calls: Optimize Options. (line 216) 45144 * force_cpusubtype_ALL: Darwin Options. (line 138) 45145 * force_flat_namespace: Darwin Options. (line 199) 45146 * fpack-struct: Code Gen Options. (line 279) 45147 * fpartial-inlining: Optimize Options. (line 1232) 45148 * fpcc-struct-return <1>: Code Gen Options. (line 70) 45149 * fpcc-struct-return: Incompatibilities. (line 170) 45150 * fpch-deps: Preprocessor Options. 45151 (line 282) 45152 * fpch-preprocess: Preprocessor Options. 45153 (line 290) 45154 * fpeel-loops: Optimize Options. (line 2172) 45155 * fpermissive: C++ Dialect Options. 45156 (line 186) 45157 * fPIC: Code Gen Options. (line 205) 45158 * fpic: Code Gen Options. (line 184) 45159 * fpie: Code Gen Options. (line 218) 45160 * fPIE: Code Gen Options. (line 218) 45161 * fplan9-extensions: Unnamed Fields. (line 44) 45162 * fpmu-profile-generate: Optimize Options. (line 1801) 45163 * fpmu-profile-use: Optimize Options. (line 1812) 45164 * fpost-ipa-mem-report: Debugging Options. (line 321) 45165 * fpre-ipa-mem-report: Debugging Options. (line 319) 45166 * fpredictive-commoning: Optimize Options. (line 1239) 45167 * fprefetch-loop-arrays: Optimize Options. (line 1246) 45168 * fpreprocessed: Preprocessor Options. 45169 (line 489) 45170 * fprofile-arcs <1>: Debugging Options. (line 356) 45171 * fprofile-arcs: Other Builtins. (line 247) 45172 * fprofile-correction: Optimize Options. (line 1743) 45173 * fprofile-dir: Optimize Options. (line 1750) 45174 * fprofile-generate: Optimize Options. (line 1761) 45175 * fprofile-use: Optimize Options. (line 1786) 45176 * fprofile-values: Optimize Options. (line 2121) 45177 * fpu: RX Options. (line 17) 45178 * frandom-seed: Debugging Options. (line 1020) 45179 * freciprocal-math: Optimize Options. (line 1982) 45180 * frecord-gcc-switches: Code Gen Options. (line 174) 45181 * frecord-gcc-switches-in-elf: Optimize Options. (line 1871) 45182 * freg-struct-return: Code Gen Options. (line 88) 45183 * fregmove: Optimize Options. (line 571) 45184 * frename-registers: Optimize Options. (line 2139) 45185 * freorder-blocks: Optimize Options. (line 1283) 45186 * freorder-blocks-and-partition: Optimize Options. (line 1289) 45187 * freorder-functions: Optimize Options. (line 1300) 45188 * freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 45189 (line 131) 45190 * frepo <1>: Template Instantiation. 45191 (line 62) 45192 * frepo: C++ Dialect Options. 45193 (line 204) 45194 * frerun-cse-after-loop: Optimize Options. (line 448) 45195 * freschedule-modulo-scheduled-loops: Optimize Options. (line 755) 45196 * fripa: Optimize Options. (line 1817) 45197 * fripa-disallow-asm-modules: Optimize Options. (line 1825) 45198 * fripa-disallow-opt-mismatch: Optimize Options. (line 1833) 45199 * fripa-no-promote-always-inline-func: Optimize Options. (line 1840) 45200 * fripa-peel-size-limit: Optimize Options. (line 1849) 45201 * fripa-unroll-size-limit: Optimize Options. (line 1856) 45202 * fripa-verbose: Optimize Options. (line 1844) 45203 * frounding-math: Optimize Options. (line 2028) 45204 * fsched-critical-path-heuristic: Optimize Options. (line 721) 45205 * fsched-dep-count-heuristic: Optimize Options. (line 748) 45206 * fsched-group-heuristic: Optimize Options. (line 715) 45207 * fsched-last-insn-heuristic: Optimize Options. (line 741) 45208 * fsched-pressure: Optimize Options. (line 664) 45209 * fsched-rank-heuristic: Optimize Options. (line 734) 45210 * fsched-spec-insn-heuristic: Optimize Options. (line 727) 45211 * fsched-spec-load: Optimize Options. (line 673) 45212 * fsched-spec-load-dangerous: Optimize Options. (line 678) 45213 * fsched-stalled-insns: Optimize Options. (line 684) 45214 * fsched-stalled-insns-dep: Optimize Options. (line 694) 45215 * fsched-verbose: Debugging Options. (line 1030) 45216 * fsched2-use-superblocks: Optimize Options. (line 704) 45217 * fschedule-insns: Optimize Options. (line 635) 45218 * fschedule-insns2: Optimize Options. (line 645) 45219 * fsection-anchors: Optimize Options. (line 2240) 45220 * fsel-sched-pipelining: Optimize Options. (line 769) 45221 * fsel-sched-pipelining-outer-loops: Optimize Options. (line 774) 45222 * fselective-scheduling: Optimize Options. (line 761) 45223 * fselective-scheduling2: Optimize Options. (line 765) 45224 * fshort-double: Code Gen Options. (line 117) 45225 * fshort-enums <1>: Code Gen Options. (line 106) 45226 * fshort-enums <2>: Structures unions enumerations and bit-fields implementation. 45227 (line 43) 45228 * fshort-enums <3>: Non-bugs. (line 42) 45229 * fshort-enums: Type Attributes. (line 113) 45230 * fshort-wchar: Code Gen Options. (line 125) 45231 * fsignaling-nans: Optimize Options. (line 2048) 45232 * fsigned-bitfields <1>: Non-bugs. (line 57) 45233 * fsigned-bitfields: C Dialect Options. (line 328) 45234 * fsigned-char <1>: C Dialect Options. (line 318) 45235 * fsigned-char: Characters implementation. 45236 (line 31) 45237 * fsingle-precision-constant: Optimize Options. (line 2063) 45238 * fsplit-ivs-in-unroller: Optimize Options. (line 1213) 45239 * fsplit-stack <1>: Code Gen Options. (line 414) 45240 * fsplit-stack: Function Attributes. 45241 (line 904) 45242 * fsplit-wide-types: Optimize Options. (line 423) 45243 * fstack-check: Code Gen Options. (line 361) 45244 * fstack-limit-register: Code Gen Options. (line 400) 45245 * fstack-limit-symbol: Code Gen Options. (line 400) 45246 * fstack-protector: Optimize Options. (line 2223) 45247 * fstack-protector-all: Optimize Options. (line 2232) 45248 * fstack-protector-strong: Optimize Options. (line 2235) 45249 * fstack-usage: Debugging Options. (line 325) 45250 * fstats: C++ Dialect Options. 45251 (line 219) 45252 * fstrict-aliasing: Optimize Options. (line 1313) 45253 * fstrict-enums: C++ Dialect Options. 45254 (line 224) 45255 * fstrict-overflow: Optimize Options. (line 1359) 45256 * fstrict-volatile-bitfields: Code Gen Options. (line 517) 45257 * fsyntax-only: Warning Options. (line 14) 45258 * ftabstop: Preprocessor Options. 45259 (line 502) 45260 * ftemplate-depth: C++ Dialect Options. 45261 (line 233) 45262 * ftest-coverage: Debugging Options. (line 412) 45263 * fthread-jumps: Optimize Options. (line 414) 45264 * ftime-report: Debugging Options. (line 311) 45265 * ftls-model: Code Gen Options. (line 443) 45266 * ftracer: Optimize Options. (line 1196) 45267 * ftrapv: Code Gen Options. (line 22) 45268 * ftree-bit-ccp: Optimize Options. (line 900) 45269 * ftree-builtin-call-dce: Optimize Options. (line 920) 45270 * ftree-ccp: Optimize Options. (line 906) 45271 * ftree-ch: Optimize Options. (line 940) 45272 * ftree-copy-prop: Optimize Options. (line 827) 45273 * ftree-copyrename: Optimize Options. (line 1152) 45274 * ftree-dce: Optimize Options. (line 916) 45275 * ftree-dominator-opts: Optimize Options. (line 926) 45276 * ftree-dse: Optimize Options. (line 933) 45277 * ftree-forwprop: Optimize Options. (line 812) 45278 * ftree-fre: Optimize Options. (line 816) 45279 * ftree-loop-im: Optimize Options. (line 1113) 45280 * ftree-loop-ivcanon: Optimize Options. (line 1122) 45281 * ftree-loop-linear: Optimize Options. (line 951) 45282 * ftree-loop-optimize: Optimize Options. (line 947) 45283 * ftree-parallelize-loops: Optimize Options. (line 1133) 45284 * ftree-phiprop: Optimize Options. (line 823) 45285 * ftree-pre: Optimize Options. (line 808) 45286 * ftree-pta: Optimize Options. (line 1142) 45287 * ftree-reassoc: Optimize Options. (line 804) 45288 * ftree-sink: Optimize Options. (line 896) 45289 * ftree-slp-vectorize: Optimize Options. (line 1171) 45290 * ftree-sra: Optimize Options. (line 1146) 45291 * ftree-ter: Optimize Options. (line 1159) 45292 * ftree-vect-loop-version: Optimize Options. (line 1175) 45293 * ftree-vectorize: Optimize Options. (line 1167) 45294 * ftree-vectorizer-verbose: Debugging Options. (line 993) 45295 * ftree-vrp: Optimize Options. (line 1187) 45296 * funit-at-a-time: Optimize Options. (line 1457) 45297 * funroll-all-loops: Optimize Options. (line 2166) 45298 * funroll-loops: Optimize Options. (line 1201) 45299 * funsafe-loop-optimizations: Optimize Options. (line 495) 45300 * funsafe-math-optimizations: Optimize Options. (line 1948) 45301 * funsigned-bitfields <1>: Structures unions enumerations and bit-fields implementation. 45302 (line 17) 45303 * funsigned-bitfields <2>: C Dialect Options. (line 328) 45304 * funsigned-bitfields: Non-bugs. (line 57) 45305 * funsigned-char <1>: C Dialect Options. (line 300) 45306 * funsigned-char: Characters implementation. 45307 (line 31) 45308 * funswitch-loops: Optimize Options. (line 2184) 45309 * funwind-tables: Code Gen Options. (line 57) 45310 * fuse-cxa-atexit: C++ Dialect Options. 45311 (line 246) 45312 * fvar-tracking: Debugging Options. (line 1116) 45313 * fvar-tracking-assignments: Debugging Options. (line 1126) 45314 * fvar-tracking-assignments-toggle: Debugging Options. (line 1136) 45315 * fvariable-expansion-in-unroller: Optimize Options. (line 1227) 45316 * fvect-cost-model: Optimize Options. (line 1184) 45317 * fverbose-asm: Code Gen Options. (line 165) 45318 * fvisibility: Code Gen Options. (line 451) 45319 * fvisibility-inlines-hidden: C++ Dialect Options. 45320 (line 258) 45321 * fvisibility-ms-compat: C++ Dialect Options. 45322 (line 286) 45323 * fvpt: Optimize Options. (line 2130) 45324 * fweb: Optimize Options. (line 1476) 45325 * fwhole-program: Optimize Options. (line 1487) 45326 * fwide-exec-charset: Preprocessor Options. 45327 (line 513) 45328 * fworking-directory: Preprocessor Options. 45329 (line 531) 45330 * fwrapv: Code Gen Options. (line 26) 45331 * fzero-link: Objective-C and Objective-C++ Dialect Options. 45332 (line 141) 45333 * g: Debugging Options. (line 10) 45334 * G <1>: System V Options. (line 10) 45335 * G <2>: MIPS Options. (line 315) 45336 * G <3>: RS/6000 and PowerPC Options. 45337 (line 703) 45338 * G: M32R/D Options. (line 57) 45339 * gcoff: Debugging Options. (line 70) 45340 * gdwarf-VERSION: Debugging Options. (line 88) 45341 * gen-decls: Objective-C and Objective-C++ Dialect Options. 45342 (line 153) 45343 * gfull: Darwin Options. (line 71) 45344 * ggdb: Debugging Options. (line 38) 45345 * gmlt: Debugging Options. (line 142) 45346 * gno-strict-dwarf: Debugging Options. (line 105) 45347 * gstabs: Debugging Options. (line 44) 45348 * gstabs+: Debugging Options. (line 64) 45349 * gstrict-dwarf: Debugging Options. (line 99) 45350 * gtoggle: Debugging Options. (line 146) 45351 * gused: Darwin Options. (line 66) 45352 * gvms: Debugging Options. (line 109) 45353 * gxcoff: Debugging Options. (line 75) 45354 * gxcoff+: Debugging Options. (line 80) 45355 * H: Preprocessor Options. 45356 (line 664) 45357 * headerpad_max_install_names: Darwin Options. (line 199) 45358 * help <1>: Preprocessor Options. 45359 (line 656) 45360 * help: Overall Options. (line 221) 45361 * I <1>: Directory Options. (line 10) 45362 * I: Preprocessor Options. 45363 (line 65) 45364 * I- <1>: Directory Options. (line 112) 45365 * I-: Preprocessor Options. 45366 (line 373) 45367 * idirafter: Preprocessor Options. 45368 (line 415) 45369 * iframework: Darwin Options. (line 59) 45370 * imacros: Preprocessor Options. 45371 (line 406) 45372 * image_base: Darwin Options. (line 199) 45373 * imultilib: Preprocessor Options. 45374 (line 440) 45375 * include: Preprocessor Options. 45376 (line 395) 45377 * init: Darwin Options. (line 199) 45378 * install_name: Darwin Options. (line 199) 45379 * iprefix: Preprocessor Options. 45380 (line 422) 45381 * iquote <1>: Directory Options. (line 36) 45382 * iquote: Preprocessor Options. 45383 (line 452) 45384 * isysroot: Preprocessor Options. 45385 (line 434) 45386 * isystem: Preprocessor Options. 45387 (line 444) 45388 * iwithprefix: Preprocessor Options. 45389 (line 428) 45390 * iwithprefixbefore: Preprocessor Options. 45391 (line 428) 45392 * keep_private_externs: Darwin Options. (line 199) 45393 * L: Directory Options. (line 42) 45394 * l: Link Options. (line 26) 45395 * lobjc: Link Options. (line 53) 45396 * M: Preprocessor Options. 45397 (line 173) 45398 * m: RS/6000 and PowerPC Options. 45399 (line 552) 45400 * m1: SH Options. (line 9) 45401 * m10: PDP-11 Options. (line 29) 45402 * m128bit-long-double: i386 and x86-64 Options. 45403 (line 283) 45404 * m16-bit: CRIS Options. (line 64) 45405 * m2: SH Options. (line 12) 45406 * m210: MCore Options. (line 43) 45407 * m2a: SH Options. (line 30) 45408 * m2a-nofpu: SH Options. (line 18) 45409 * m2a-single: SH Options. (line 26) 45410 * m2a-single-only: SH Options. (line 22) 45411 * m3: SH Options. (line 34) 45412 * m31: S/390 and zSeries Options. 45413 (line 87) 45414 * m32 <1>: i386 and x86-64 Options. 45415 (line 697) 45416 * m32 <2>: RS/6000 and PowerPC Options. 45417 (line 266) 45418 * m32: SPARC Options. (line 182) 45419 * m32-bit: CRIS Options. (line 64) 45420 * m32bit-doubles: RX Options. (line 10) 45421 * m32r: M32R/D Options. (line 15) 45422 * m32r2: M32R/D Options. (line 9) 45423 * m32rx: M32R/D Options. (line 12) 45424 * m340: MCore Options. (line 43) 45425 * m3dnow: i386 and x86-64 Options. 45426 (line 477) 45427 * m3e: SH Options. (line 37) 45428 * m4: SH Options. (line 51) 45429 * m4-nofpu: SH Options. (line 40) 45430 * m4-single: SH Options. (line 47) 45431 * m4-single-only: SH Options. (line 43) 45432 * m40: PDP-11 Options. (line 23) 45433 * m45: PDP-11 Options. (line 26) 45434 * m4a: SH Options. (line 66) 45435 * m4a-nofpu: SH Options. (line 54) 45436 * m4a-single: SH Options. (line 62) 45437 * m4a-single-only: SH Options. (line 58) 45438 * m4al: SH Options. (line 69) 45439 * m4byte-functions: MCore Options. (line 27) 45440 * m5200: M680x0 Options. (line 146) 45441 * m5206e: M680x0 Options. (line 155) 45442 * m528x: M680x0 Options. (line 159) 45443 * m5307: M680x0 Options. (line 163) 45444 * m5407: M680x0 Options. (line 167) 45445 * m64 <1>: SPARC Options. (line 182) 45446 * m64 <2>: S/390 and zSeries Options. 45447 (line 87) 45448 * m64 <3>: RS/6000 and PowerPC Options. 45449 (line 266) 45450 * m64: i386 and x86-64 Options. 45451 (line 697) 45452 * m64bit-doubles: RX Options. (line 10) 45453 * m68000: M680x0 Options. (line 94) 45454 * m68010: M680x0 Options. (line 102) 45455 * m68020: M680x0 Options. (line 108) 45456 * m68020-40: M680x0 Options. (line 177) 45457 * m68020-60: M680x0 Options. (line 186) 45458 * m68030: M680x0 Options. (line 113) 45459 * m68040: M680x0 Options. (line 118) 45460 * m68060: M680x0 Options. (line 127) 45461 * m6811: M68hc1x Options. (line 13) 45462 * m6812: M68hc1x Options. (line 18) 45463 * m68881: M680x0 Options. (line 196) 45464 * m68hc11: M68hc1x Options. (line 13) 45465 * m68hc12: M68hc1x Options. (line 18) 45466 * m68hcs12: M68hc1x Options. (line 23) 45467 * m68S12: M68hc1x Options. (line 23) 45468 * m8-bit: CRIS Options. (line 64) 45469 * m96bit-long-double: i386 and x86-64 Options. 45470 (line 283) 45471 * mabi <1>: RS/6000 and PowerPC Options. 45472 (line 583) 45473 * mabi <2>: ARM Options. (line 10) 45474 * mabi: i386 and x86-64 Options. 45475 (line 592) 45476 * mabi=32: MIPS Options. (line 130) 45477 * mabi=64: MIPS Options. (line 130) 45478 * mabi=eabi: MIPS Options. (line 130) 45479 * mabi=gnu: MMIX Options. (line 20) 45480 * mabi=ibmlongdouble: RS/6000 and PowerPC Options. 45481 (line 596) 45482 * mabi=ieeelongdouble: RS/6000 and PowerPC Options. 45483 (line 600) 45484 * mabi=mmixware: MMIX Options. (line 20) 45485 * mabi=n32: MIPS Options. (line 130) 45486 * mabi=no-spe: RS/6000 and PowerPC Options. 45487 (line 593) 45488 * mabi=o64: MIPS Options. (line 130) 45489 * mabi=spe: RS/6000 and PowerPC Options. 45490 (line 588) 45491 * mabicalls: MIPS Options. (line 154) 45492 * mabort-on-noreturn: ARM Options. (line 162) 45493 * mabsdiff: MeP Options. (line 7) 45494 * mabshi: PDP-11 Options. (line 55) 45495 * mac0: PDP-11 Options. (line 16) 45496 * macc-4: FRV Options. (line 113) 45497 * macc-8: FRV Options. (line 116) 45498 * maccumulate-outgoing-args <1>: i386 and x86-64 Options. 45499 (line 609) 45500 * maccumulate-outgoing-args: SH Options. (line 199) 45501 * maddress-space-conversion: SPU Options. (line 63) 45502 * madjust-unroll: SH Options. (line 219) 45503 * mads: RS/6000 and PowerPC Options. 45504 (line 626) 45505 * maix-struct-return: RS/6000 and PowerPC Options. 45506 (line 576) 45507 * maix32: RS/6000 and PowerPC Options. 45508 (line 304) 45509 * maix64: RS/6000 and PowerPC Options. 45510 (line 304) 45511 * malign-300: H8/300 Options. (line 31) 45512 * malign-double: i386 and x86-64 Options. 45513 (line 267) 45514 * malign-int: M680x0 Options. (line 266) 45515 * malign-labels: FRV Options. (line 104) 45516 * malign-loops: M32R/D Options. (line 73) 45517 * malign-natural: RS/6000 and PowerPC Options. 45518 (line 343) 45519 * malign-power: RS/6000 and PowerPC Options. 45520 (line 343) 45521 * mall-opts: MeP Options. (line 11) 45522 * malloc-cc: FRV Options. (line 25) 45523 * malpha-as: DEC Alpha Options. (line 159) 45524 * maltivec: RS/6000 and PowerPC Options. 45525 (line 191) 45526 * mam33: MN10300 Options. (line 17) 45527 * mam33-2: MN10300 Options. (line 24) 45528 * mam34: MN10300 Options. (line 28) 45529 * mandroid: GNU/Linux Options. (line 21) 45530 * mapcs: ARM Options. (line 22) 45531 * mapcs-frame: ARM Options. (line 14) 45532 * mapp-regs <1>: SPARC Options. (line 10) 45533 * mapp-regs: V850 Options. (line 57) 45534 * march <1>: i386 and x86-64 Options. 45535 (line 166) 45536 * march <2>: S/390 and zSeries Options. 45537 (line 116) 45538 * march <3>: ARM Options. (line 108) 45539 * march <4>: CRIS Options. (line 10) 45540 * march <5>: M680x0 Options. (line 12) 45541 * march <6>: HPPA Options. (line 9) 45542 * march <7>: MIPS Options. (line 14) 45543 * march: HPPA Options. (line 162) 45544 * mas100-syntax: RX Options. (line 75) 45545 * masm=DIALECT: i386 and x86-64 Options. 45546 (line 223) 45547 * matomic-updates: SPU Options. (line 78) 45548 * mauto-incdec: M68hc1x Options. (line 26) 45549 * mauto-pic: IA-64 Options. (line 50) 45550 * maverage: MeP Options. (line 16) 45551 * mavoid-indexed-addresses: RS/6000 and PowerPC Options. 45552 (line 412) 45553 * mb: SH Options. (line 74) 45554 * mbackchain: S/390 and zSeries Options. 45555 (line 35) 45556 * mbarrel-shift-enabled: LM32 Options. (line 9) 45557 * mbase-addresses: MMIX Options. (line 54) 45558 * mbased=: MeP Options. (line 20) 45559 * mbcopy: PDP-11 Options. (line 36) 45560 * mbcopy-builtin: PDP-11 Options. (line 32) 45561 * mbig: RS/6000 and PowerPC Options. 45562 (line 493) 45563 * mbig-endian <1>: IA-64 Options. (line 9) 45564 * mbig-endian <2>: RS/6000 and PowerPC Options. 45565 (line 493) 45566 * mbig-endian <3>: MCore Options. (line 39) 45567 * mbig-endian: ARM Options. (line 67) 45568 * mbig-endian-data: RX Options. (line 42) 45569 * mbig-switch <1>: V850 Options. (line 52) 45570 * mbig-switch: HPPA Options. (line 23) 45571 * mbigtable: SH Options. (line 90) 45572 * mbionic: GNU/Linux Options. (line 17) 45573 * mbit-align: RS/6000 and PowerPC Options. 45574 (line 444) 45575 * mbitfield: M680x0 Options. (line 234) 45576 * mbitops <1>: MeP Options. (line 26) 45577 * mbitops: SH Options. (line 94) 45578 * mblock-move-inline-limit: RS/6000 and PowerPC Options. 45579 (line 697) 45580 * mbranch-cheap: PDP-11 Options. (line 65) 45581 * mbranch-cost: MIPS Options. (line 611) 45582 * mbranch-cost=NUMBER: M32R/D Options. (line 82) 45583 * mbranch-expensive: PDP-11 Options. (line 61) 45584 * mbranch-hints: SPU Options. (line 27) 45585 * mbranch-likely: MIPS Options. (line 618) 45586 * mbranch-predict: MMIX Options. (line 49) 45587 * mbss-plt: RS/6000 and PowerPC Options. 45588 (line 214) 45589 * mbuild-constants: DEC Alpha Options. (line 142) 45590 * mbwx: DEC Alpha Options. (line 171) 45591 * mc68000: M680x0 Options. (line 94) 45592 * mc68020: M680x0 Options. (line 108) 45593 * mc=: MeP Options. (line 31) 45594 * mcache-size: SPU Options. (line 70) 45595 * mcall-eabi: RS/6000 and PowerPC Options. 45596 (line 546) 45597 * mcall-freebsd: RS/6000 and PowerPC Options. 45598 (line 564) 45599 * mcall-gnu: RS/6000 and PowerPC Options. 45600 (line 560) 45601 * mcall-linux: RS/6000 and PowerPC Options. 45602 (line 556) 45603 * mcall-netbsd: RS/6000 and PowerPC Options. 45604 (line 568) 45605 * mcall-prologues: AVR Options. (line 36) 45606 * mcall-sysv: RS/6000 and PowerPC Options. 45607 (line 538) 45608 * mcall-sysv-eabi: RS/6000 and PowerPC Options. 45609 (line 546) 45610 * mcall-sysv-noeabi: RS/6000 and PowerPC Options. 45611 (line 549) 45612 * mcallee-super-interworking: ARM Options. (line 255) 45613 * mcaller-super-interworking: ARM Options. (line 262) 45614 * mcallgraph-data: MCore Options. (line 31) 45615 * mcc-init: CRIS Options. (line 41) 45616 * mcfv4e: M680x0 Options. (line 171) 45617 * mcheck-zero-division: MIPS Options. (line 426) 45618 * mcirrus-fix-invalid-insns: ARM Options. (line 202) 45619 * mcix: DEC Alpha Options. (line 171) 45620 * mcld: i386 and x86-64 Options. 45621 (line 506) 45622 * mclip: MeP Options. (line 35) 45623 * mcmodel=embmedany: SPARC Options. (line 204) 45624 * mcmodel=kernel: i386 and x86-64 Options. 45625 (line 719) 45626 * mcmodel=large <1>: RS/6000 and PowerPC Options. 45627 (line 185) 45628 * mcmodel=large: i386 and x86-64 Options. 45629 (line 731) 45630 * mcmodel=medany: SPARC Options. (line 198) 45631 * mcmodel=medium <1>: i386 and x86-64 Options. 45632 (line 724) 45633 * mcmodel=medium: RS/6000 and PowerPC Options. 45634 (line 181) 45635 * mcmodel=medlow: SPARC Options. (line 187) 45636 * mcmodel=medmid: SPARC Options. (line 192) 45637 * mcmodel=small <1>: i386 and x86-64 Options. 45638 (line 713) 45639 * mcmodel=small: RS/6000 and PowerPC Options. 45640 (line 177) 45641 * mcmpb: RS/6000 and PowerPC Options. 45642 (line 33) 45643 * mcode-readable: MIPS Options. (line 386) 45644 * mcond-exec: FRV Options. (line 152) 45645 * mcond-move: FRV Options. (line 128) 45646 * mconfig=: MeP Options. (line 39) 45647 * mconsole: i386 and x86-64 Windows Options. 45648 (line 9) 45649 * mconst-align: CRIS Options. (line 55) 45650 * mconst16: Xtensa Options. (line 10) 45651 * mconstant-gp: IA-64 Options. (line 46) 45652 * mcop: MeP Options. (line 48) 45653 * mcop32: MeP Options. (line 53) 45654 * mcop64: MeP Options. (line 56) 45655 * mcorea: Blackfin Options. (line 150) 45656 * mcoreb: Blackfin Options. (line 156) 45657 * mcpu <1>: M680x0 Options. (line 28) 45658 * mcpu <2>: picoChip Options. (line 9) 45659 * mcpu <3>: SPARC Options. (line 81) 45660 * mcpu <4>: i386 and x86-64 Options. 45661 (line 171) 45662 * mcpu <5>: CRIS Options. (line 10) 45663 * mcpu <6>: DEC Alpha Options. (line 223) 45664 * mcpu <7>: ARM Options. (line 79) 45665 * mcpu <8>: FRV Options. (line 212) 45666 * mcpu <9>: RS/6000 and PowerPC Options. 45667 (line 119) 45668 * mcpu: ARC Options. (line 23) 45669 * mcpu32: M680x0 Options. (line 137) 45670 * mcpu= <1>: M32C Options. (line 7) 45671 * mcpu= <2>: MicroBlaze Options. (line 20) 45672 * mcpu=: Blackfin Options. (line 7) 45673 * mcrc32: i386 and x86-64 Options. 45674 (line 548) 45675 * mcsync-anomaly: Blackfin Options. (line 56) 45676 * mcx16: i386 and x86-64 Options. 45677 (line 526) 45678 * MD: Preprocessor Options. 45679 (line 262) 45680 * mdalign: SH Options. (line 80) 45681 * mdata: ARC Options. (line 30) 45682 * mdata-align: CRIS Options. (line 55) 45683 * mdc: MeP Options. (line 62) 45684 * mdebug <1>: M32R/D Options. (line 69) 45685 * mdebug: S/390 and zSeries Options. 45686 (line 112) 45687 * mdebug-main=PREFIX <1>: DEC Alpha/VMS Options. 45688 (line 13) 45689 * mdebug-main=PREFIX: IA-64/VMS Options. (line 13) 45690 * mdec-asm: PDP-11 Options. (line 72) 45691 * mdisable-callt: V850 Options. (line 93) 45692 * mdisable-fpregs: HPPA Options. (line 33) 45693 * mdisable-indexing: HPPA Options. (line 40) 45694 * mdiv <1>: MeP Options. (line 65) 45695 * mdiv <2>: MCore Options. (line 15) 45696 * mdiv: M680x0 Options. (line 208) 45697 * mdiv=STRATEGY: SH Options. (line 158) 45698 * mdivide-breaks: MIPS Options. (line 432) 45699 * mdivide-enabled: LM32 Options. (line 12) 45700 * mdivide-traps: MIPS Options. (line 432) 45701 * mdivsi3_libfunc=NAME: SH Options. (line 205) 45702 * mdll: i386 and x86-64 Windows Options. 45703 (line 16) 45704 * mdlmzb: RS/6000 and PowerPC Options. 45705 (line 437) 45706 * mdmx: MIPS Options. (line 279) 45707 * mdouble: FRV Options. (line 38) 45708 * mdouble-float <1>: RS/6000 and PowerPC Options. 45709 (line 361) 45710 * mdouble-float: MIPS Options. (line 237) 45711 * mdsp: MIPS Options. (line 256) 45712 * mdspr2: MIPS Options. (line 262) 45713 * mdual-nops: SPU Options. (line 90) 45714 * mdwarf2-asm: IA-64 Options. (line 94) 45715 * mdword: FRV Options. (line 32) 45716 * mdynamic-no-pic: RS/6000 and PowerPC Options. 45717 (line 498) 45718 * mea32: SPU Options. (line 55) 45719 * mea64: SPU Options. (line 55) 45720 * meabi: RS/6000 and PowerPC Options. 45721 (line 645) 45722 * mearly-stop-bits: IA-64 Options. (line 100) 45723 * meb <1>: MeP Options. (line 68) 45724 * meb: Score Options. (line 9) 45725 * mel <1>: Score Options. (line 12) 45726 * mel: MeP Options. (line 71) 45727 * melf <1>: MMIX Options. (line 44) 45728 * melf: CRIS Options. (line 87) 45729 * memb: RS/6000 and PowerPC Options. 45730 (line 640) 45731 * membedded-data: MIPS Options. (line 373) 45732 * memregs=: M32C Options. (line 21) 45733 * mep: V850 Options. (line 16) 45734 * mepsilon: MMIX Options. (line 15) 45735 * merror-reloc: SPU Options. (line 10) 45736 * mesa: S/390 and zSeries Options. 45737 (line 95) 45738 * metrax100: CRIS Options. (line 26) 45739 * metrax4: CRIS Options. (line 26) 45740 * mexplicit-relocs <1>: DEC Alpha Options. (line 184) 45741 * mexplicit-relocs: MIPS Options. (line 417) 45742 * mextern-sdata: MIPS Options. (line 335) 45743 * MF: Preprocessor Options. 45744 (line 208) 45745 * mfast-fp: Blackfin Options. (line 129) 45746 * mfast-indirect-calls: HPPA Options. (line 52) 45747 * mfaster-structs: SPARC Options. (line 71) 45748 * mfdpic: FRV Options. (line 56) 45749 * mfentry: i386 and x86-64 Options. 45750 (line 673) 45751 * mfix: DEC Alpha Options. (line 171) 45752 * mfix-and-continue: Darwin Options. (line 106) 45753 * mfix-at697f: SPARC Options. (line 168) 45754 * mfix-cortex-m3-ldrd: ARM Options. (line 284) 45755 * mfix-r10000: MIPS Options. (line 503) 45756 * mfix-r4000: MIPS Options. (line 482) 45757 * mfix-r4400: MIPS Options. (line 496) 45758 * mfix-sb1: MIPS Options. (line 535) 45759 * mfix-vr4120: MIPS Options. (line 514) 45760 * mfix-vr4130: MIPS Options. (line 528) 45761 * mfixed-cc: FRV Options. (line 28) 45762 * mfixed-range <1>: SPU Options. (line 47) 45763 * mfixed-range <2>: SH Options. (line 212) 45764 * mfixed-range <3>: IA-64 Options. (line 105) 45765 * mfixed-range: HPPA Options. (line 59) 45766 * mflip-mips16: MIPS Options. (line 110) 45767 * mfloat-abi: ARM Options. (line 41) 45768 * mfloat-gprs: RS/6000 and PowerPC Options. 45769 (line 249) 45770 * mfloat-ieee: DEC Alpha Options. (line 179) 45771 * mfloat-vax: DEC Alpha Options. (line 179) 45772 * mfloat32: PDP-11 Options. (line 52) 45773 * mfloat64: PDP-11 Options. (line 48) 45774 * mflush-func: MIPS Options. (line 602) 45775 * mflush-func=NAME: M32R/D Options. (line 94) 45776 * mflush-trap=NUMBER: M32R/D Options. (line 87) 45777 * mfmovd: SH Options. (line 97) 45778 * mforce-no-pic: Xtensa Options. (line 41) 45779 * mfp: ARM Options. (line 120) 45780 * mfp-exceptions: MIPS Options. (line 629) 45781 * mfp-reg: DEC Alpha Options. (line 25) 45782 * mfp-rounding-mode: DEC Alpha Options. (line 85) 45783 * mfp-trap-mode: DEC Alpha Options. (line 63) 45784 * mfp16-format: ARM Options. (line 141) 45785 * mfp32: MIPS Options. (line 220) 45786 * mfp64: MIPS Options. (line 223) 45787 * mfpe: ARM Options. (line 120) 45788 * mfpmath <1>: i386 and x86-64 Options. 45789 (line 174) 45790 * mfpmath: Optimize Options. (line 1908) 45791 * mfpr-32: FRV Options. (line 13) 45792 * mfpr-64: FRV Options. (line 16) 45793 * mfprnd: RS/6000 and PowerPC Options. 45794 (line 33) 45795 * mfpu <1>: PDP-11 Options. (line 9) 45796 * mfpu <2>: SPARC Options. (line 20) 45797 * mfpu <3>: RS/6000 and PowerPC Options. 45798 (line 369) 45799 * mfpu: ARM Options. (line 120) 45800 * mfriz: RS/6000 and PowerPC Options. 45801 (line 827) 45802 * mfull-toc: RS/6000 and PowerPC Options. 45803 (line 277) 45804 * mfused-madd <1>: Xtensa Options. (line 19) 45805 * mfused-madd <2>: IA-64 Options. (line 88) 45806 * mfused-madd <3>: i386 and x86-64 Options. 45807 (line 501) 45808 * mfused-madd <4>: S/390 and zSeries Options. 45809 (line 137) 45810 * mfused-madd <5>: MIPS Options. (line 467) 45811 * mfused-madd: RS/6000 and PowerPC Options. 45812 (line 421) 45813 * mg: VAX Options. (line 17) 45814 * MG: Preprocessor Options. 45815 (line 217) 45816 * mgas <1>: HPPA Options. (line 75) 45817 * mgas: DEC Alpha Options. (line 159) 45818 * mgen-cell-microcode: RS/6000 and PowerPC Options. 45819 (line 202) 45820 * mgettrcost=NUMBER: SH Options. (line 234) 45821 * mglibc: GNU/Linux Options. (line 9) 45822 * mgnu: VAX Options. (line 13) 45823 * mgnu-as: IA-64 Options. (line 18) 45824 * mgnu-ld <1>: IA-64 Options. (line 23) 45825 * mgnu-ld: HPPA Options. (line 111) 45826 * mgotplt: CRIS Options. (line 81) 45827 * mgp32: MIPS Options. (line 214) 45828 * mgp64: MIPS Options. (line 217) 45829 * mgpopt: MIPS Options. (line 358) 45830 * mgpr-32: FRV Options. (line 7) 45831 * mgpr-64: FRV Options. (line 10) 45832 * mgprel-ro: FRV Options. (line 79) 45833 * mh: H8/300 Options. (line 14) 45834 * mhard-dfp <1>: S/390 and zSeries Options. 45835 (line 20) 45836 * mhard-dfp: RS/6000 and PowerPC Options. 45837 (line 33) 45838 * mhard-float <1>: FRV Options. (line 19) 45839 * mhard-float <2>: RS/6000 and PowerPC Options. 45840 (line 355) 45841 * mhard-float <3>: MicroBlaze Options. (line 10) 45842 * mhard-float <4>: ARM Options. (line 57) 45843 * mhard-float <5>: SPARC Options. (line 20) 45844 * mhard-float <6>: S/390 and zSeries Options. 45845 (line 11) 45846 * mhard-float <7>: MIPS Options. (line 226) 45847 * mhard-float: M680x0 Options. (line 196) 45848 * mhard-quad-float: SPARC Options. (line 41) 45849 * mhardlit: MCore Options. (line 10) 45850 * mhint-max-distance: SPU Options. (line 102) 45851 * mhint-max-nops: SPU Options. (line 96) 45852 * mhitachi: SH Options. (line 104) 45853 * mhp-ld: HPPA Options. (line 123) 45854 * micplb: Blackfin Options. (line 169) 45855 * mid-shared-library: Blackfin Options. (line 77) 45856 * mieee <1>: DEC Alpha Options. (line 39) 45857 * mieee: SH Options. (line 116) 45858 * mieee-conformant: DEC Alpha Options. (line 134) 45859 * mieee-fp: i386 and x86-64 Options. 45860 (line 229) 45861 * mieee-with-inexact: DEC Alpha Options. (line 52) 45862 * milp32: IA-64 Options. (line 121) 45863 * mimpure-text: Solaris 2 Options. (line 9) 45864 * mincoming-stack-boundary: i386 and x86-64 Options. 45865 (line 407) 45866 * mindexed-addressing: SH Options. (line 224) 45867 * minline-all-stringops: i386 and x86-64 Options. 45868 (line 630) 45869 * minline-float-divide-max-throughput: IA-64 Options. (line 58) 45870 * minline-float-divide-min-latency: IA-64 Options. (line 54) 45871 * minline-ic_invalidate: SH Options. (line 123) 45872 * minline-int-divide-max-throughput: IA-64 Options. (line 69) 45873 * minline-int-divide-min-latency: IA-64 Options. (line 65) 45874 * minline-plt <1>: Blackfin Options. (line 134) 45875 * minline-plt: FRV Options. (line 64) 45876 * minline-sqrt-max-throughput: IA-64 Options. (line 80) 45877 * minline-sqrt-min-latency: IA-64 Options. (line 76) 45878 * minline-stringops-dynamically: i386 and x86-64 Options. 45879 (line 637) 45880 * minmax: M68hc1x Options. (line 31) 45881 * minsert-sched-nops: RS/6000 and PowerPC Options. 45882 (line 526) 45883 * mint-register: RX Options. (line 99) 45884 * mint16: PDP-11 Options. (line 40) 45885 * mint32 <1>: PDP-11 Options. (line 44) 45886 * mint32: H8/300 Options. (line 28) 45887 * mint8: AVR Options. (line 43) 45888 * minterlink-mips16: MIPS Options. (line 117) 45889 * minvalid-symbols: SH Options. (line 257) 45890 * mio-volatile: MeP Options. (line 74) 45891 * mips1: MIPS Options. (line 77) 45892 * mips16: MIPS Options. (line 102) 45893 * mips2: MIPS Options. (line 80) 45894 * mips3: MIPS Options. (line 83) 45895 * mips32: MIPS Options. (line 89) 45896 * mips32r2: MIPS Options. (line 92) 45897 * mips3d: MIPS Options. (line 285) 45898 * mips4: MIPS Options. (line 86) 45899 * mips64: MIPS Options. (line 95) 45900 * mips64r2: MIPS Options. (line 98) 45901 * misel: RS/6000 and PowerPC Options. 45902 (line 220) 45903 * misize: SH Options. (line 135) 45904 * missue-rate=NUMBER: M32R/D Options. (line 79) 45905 * mivc2: MeP Options. (line 59) 45906 * mjump-in-delay: HPPA Options. (line 28) 45907 * mkernel: Darwin Options. (line 84) 45908 * mknuthdiv: MMIX Options. (line 33) 45909 * ml <1>: MeP Options. (line 78) 45910 * ml: SH Options. (line 77) 45911 * mlarge-data: DEC Alpha Options. (line 195) 45912 * mlarge-data-threshold=NUMBER: i386 and x86-64 Options. 45913 (line 309) 45914 * mlarge-mem: SPU Options. (line 35) 45915 * mlarge-text: DEC Alpha Options. (line 213) 45916 * mleadz: MeP Options. (line 81) 45917 * mleaf-id-shared-library: Blackfin Options. (line 88) 45918 * mlibfuncs: MMIX Options. (line 10) 45919 * mlibrary-pic: FRV Options. (line 110) 45920 * mlinked-fp: FRV Options. (line 94) 45921 * mlinker-opt: HPPA Options. (line 85) 45922 * mlinux: CRIS Options. (line 91) 45923 * mlittle: RS/6000 and PowerPC Options. 45924 (line 487) 45925 * mlittle-endian <1>: RS/6000 and PowerPC Options. 45926 (line 487) 45927 * mlittle-endian <2>: MCore Options. (line 39) 45928 * mlittle-endian <3>: ARM Options. (line 63) 45929 * mlittle-endian <4>: SPARC Options. (line 176) 45930 * mlittle-endian: IA-64 Options. (line 13) 45931 * mlittle-endian-data: RX Options. (line 42) 45932 * mliw: MN10300 Options. (line 55) 45933 * mllsc: MIPS Options. (line 242) 45934 * mlocal-sdata: MIPS Options. (line 323) 45935 * mlong-calls <1>: M68hc1x Options. (line 35) 45936 * mlong-calls <2>: ARM Options. (line 167) 45937 * mlong-calls <3>: MIPS Options. (line 453) 45938 * mlong-calls <4>: FRV Options. (line 99) 45939 * mlong-calls <5>: V850 Options. (line 10) 45940 * mlong-calls: Blackfin Options. (line 117) 45941 * mlong-double-128: S/390 and zSeries Options. 45942 (line 29) 45943 * mlong-double-64: S/390 and zSeries Options. 45944 (line 29) 45945 * mlong-load-store: HPPA Options. (line 66) 45946 * mlong32: MIPS Options. (line 298) 45947 * mlong64: MIPS Options. (line 293) 45948 * mlongcall: RS/6000 and PowerPC Options. 45949 (line 717) 45950 * mlongcalls: Xtensa Options. (line 72) 45951 * mlow-64k: Blackfin Options. (line 66) 45952 * mlp64: IA-64 Options. (line 121) 45953 * MM: Preprocessor Options. 45954 (line 198) 45955 * mm: MeP Options. (line 84) 45956 * mmac <1>: Score Options. (line 21) 45957 * mmac: CRX Options. (line 9) 45958 * mmad: MIPS Options. (line 462) 45959 * mmalloc64 <1>: DEC Alpha/VMS Options. 45960 (line 17) 45961 * mmalloc64: IA-64/VMS Options. (line 17) 45962 * mmangle-cpu: ARC Options. (line 15) 45963 * mmax: DEC Alpha Options. (line 171) 45964 * mmax-constant-size: RX Options. (line 81) 45965 * mmax-stack-frame: CRIS Options. (line 22) 45966 * mmcount-ra-address: MIPS Options. (line 678) 45967 * mmcu: AVR Options. (line 9) 45968 * MMD: Preprocessor Options. 45969 (line 278) 45970 * mmedia: FRV Options. (line 44) 45971 * mmemcpy <1>: MIPS Options. (line 447) 45972 * mmemcpy: MicroBlaze Options. (line 13) 45973 * mmemory-latency: DEC Alpha Options. (line 276) 45974 * mmfcrf: RS/6000 and PowerPC Options. 45975 (line 33) 45976 * mmfpgpr: RS/6000 and PowerPC Options. 45977 (line 33) 45978 * mminimal-toc: RS/6000 and PowerPC Options. 45979 (line 277) 45980 * mminmax: MeP Options. (line 87) 45981 * mmmx: i386 and x86-64 Options. 45982 (line 477) 45983 * mmodel=large: M32R/D Options. (line 33) 45984 * mmodel=medium: M32R/D Options. (line 27) 45985 * mmodel=small: M32R/D Options. (line 18) 45986 * mmovbe: i386 and x86-64 Options. 45987 (line 544) 45988 * mmt: MIPS Options. (line 290) 45989 * mmul-bug-workaround: CRIS Options. (line 31) 45990 * mmuladd: FRV Options. (line 50) 45991 * mmulhw: RS/6000 and PowerPC Options. 45992 (line 430) 45993 * mmult: MeP Options. (line 90) 45994 * mmult-bug: MN10300 Options. (line 9) 45995 * mmulti-cond-exec: FRV Options. (line 176) 45996 * mmulticore: Blackfin Options. (line 138) 45997 * mmultiple: RS/6000 and PowerPC Options. 45998 (line 380) 45999 * mmvcle: S/390 and zSeries Options. 46000 (line 105) 46001 * mmvme: RS/6000 and PowerPC Options. 46002 (line 621) 46003 * mn: H8/300 Options. (line 20) 46004 * mnested-cond-exec: FRV Options. (line 189) 46005 * mnew-mnemonics: RS/6000 and PowerPC Options. 46006 (line 104) 46007 * mnhwloop: Score Options. (line 15) 46008 * mno-3dnow: i386 and x86-64 Options. 46009 (line 477) 46010 * mno-4byte-functions: MCore Options. (line 27) 46011 * mno-abicalls: MIPS Options. (line 154) 46012 * mno-abshi: PDP-11 Options. (line 58) 46013 * mno-ac0: PDP-11 Options. (line 20) 46014 * mno-address-space-conversion: SPU Options. (line 63) 46015 * mno-align-double: i386 and x86-64 Options. 46016 (line 267) 46017 * mno-align-int: M680x0 Options. (line 266) 46018 * mno-align-loops: M32R/D Options. (line 76) 46019 * mno-align-stringops: i386 and x86-64 Options. 46020 (line 625) 46021 * mno-altivec: RS/6000 and PowerPC Options. 46022 (line 191) 46023 * mno-am33: MN10300 Options. (line 20) 46024 * mno-app-regs <1>: V850 Options. (line 61) 46025 * mno-app-regs: SPARC Options. (line 10) 46026 * mno-as100-syntax: RX Options. (line 75) 46027 * mno-atomic-updates: SPU Options. (line 78) 46028 * mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 46029 (line 412) 46030 * mno-backchain: S/390 and zSeries Options. 46031 (line 35) 46032 * mno-base-addresses: MMIX Options. (line 54) 46033 * mno-bit-align: RS/6000 and PowerPC Options. 46034 (line 444) 46035 * mno-bitfield: M680x0 Options. (line 230) 46036 * mno-branch-likely: MIPS Options. (line 618) 46037 * mno-branch-predict: MMIX Options. (line 49) 46038 * mno-bwx: DEC Alpha Options. (line 171) 46039 * mno-callgraph-data: MCore Options. (line 31) 46040 * mno-check-zero-division: MIPS Options. (line 426) 46041 * mno-cirrus-fix-invalid-insns: ARM Options. (line 202) 46042 * mno-cix: DEC Alpha Options. (line 171) 46043 * mno-clearbss: MicroBlaze Options. (line 16) 46044 * mno-cmpb: RS/6000 and PowerPC Options. 46045 (line 33) 46046 * mno-cond-exec: FRV Options. (line 158) 46047 * mno-cond-move: FRV Options. (line 134) 46048 * mno-const-align: CRIS Options. (line 55) 46049 * mno-const16: Xtensa Options. (line 10) 46050 * mno-crt0: MN10300 Options. (line 44) 46051 * mno-csync-anomaly: Blackfin Options. (line 62) 46052 * mno-data-align: CRIS Options. (line 55) 46053 * mno-debug: S/390 and zSeries Options. 46054 (line 112) 46055 * mno-div <1>: M680x0 Options. (line 208) 46056 * mno-div: MCore Options. (line 15) 46057 * mno-dlmzb: RS/6000 and PowerPC Options. 46058 (line 437) 46059 * mno-double: FRV Options. (line 41) 46060 * mno-dsp: MIPS Options. (line 256) 46061 * mno-dspr2: MIPS Options. (line 262) 46062 * mno-dwarf2-asm: IA-64 Options. (line 94) 46063 * mno-dword: FRV Options. (line 35) 46064 * mno-eabi: RS/6000 and PowerPC Options. 46065 (line 645) 46066 * mno-early-stop-bits: IA-64 Options. (line 100) 46067 * mno-eflags: FRV Options. (line 125) 46068 * mno-embedded-data: MIPS Options. (line 373) 46069 * mno-ep: V850 Options. (line 16) 46070 * mno-epsilon: MMIX Options. (line 15) 46071 * mno-explicit-relocs <1>: DEC Alpha Options. (line 184) 46072 * mno-explicit-relocs: MIPS Options. (line 417) 46073 * mno-extern-sdata: MIPS Options. (line 335) 46074 * mno-fancy-math-387: i386 and x86-64 Options. 46075 (line 256) 46076 * mno-faster-structs: SPARC Options. (line 71) 46077 * mno-fix: DEC Alpha Options. (line 171) 46078 * mno-fix-r10000: MIPS Options. (line 503) 46079 * mno-fix-r4000: MIPS Options. (line 482) 46080 * mno-fix-r4400: MIPS Options. (line 496) 46081 * mno-float32: PDP-11 Options. (line 48) 46082 * mno-float64: PDP-11 Options. (line 52) 46083 * mno-flush-func: M32R/D Options. (line 99) 46084 * mno-flush-trap: M32R/D Options. (line 91) 46085 * mno-fp-in-toc: RS/6000 and PowerPC Options. 46086 (line 277) 46087 * mno-fp-regs: DEC Alpha Options. (line 25) 46088 * mno-fp-ret-in-387: i386 and x86-64 Options. 46089 (line 246) 46090 * mno-fprnd: RS/6000 and PowerPC Options. 46091 (line 33) 46092 * mno-fpu: SPARC Options. (line 25) 46093 * mno-fused-madd <1>: Xtensa Options. (line 19) 46094 * mno-fused-madd <2>: S/390 and zSeries Options. 46095 (line 137) 46096 * mno-fused-madd <3>: RS/6000 and PowerPC Options. 46097 (line 421) 46098 * mno-fused-madd <4>: IA-64 Options. (line 88) 46099 * mno-fused-madd <5>: MIPS Options. (line 467) 46100 * mno-fused-madd: i386 and x86-64 Options. 46101 (line 501) 46102 * mno-gnu-as: IA-64 Options. (line 18) 46103 * mno-gnu-ld: IA-64 Options. (line 23) 46104 * mno-gotplt: CRIS Options. (line 81) 46105 * mno-gpopt: MIPS Options. (line 358) 46106 * mno-hard-dfp <1>: RS/6000 and PowerPC Options. 46107 (line 33) 46108 * mno-hard-dfp: S/390 and zSeries Options. 46109 (line 20) 46110 * mno-hardlit: MCore Options. (line 10) 46111 * mno-id-shared-library: Blackfin Options. (line 84) 46112 * mno-ieee-fp: i386 and x86-64 Options. 46113 (line 229) 46114 * mno-inline-float-divide: IA-64 Options. (line 62) 46115 * mno-inline-int-divide: IA-64 Options. (line 73) 46116 * mno-inline-sqrt: IA-64 Options. (line 84) 46117 * mno-int16: PDP-11 Options. (line 44) 46118 * mno-int32: PDP-11 Options. (line 40) 46119 * mno-interlink-mips16: MIPS Options. (line 117) 46120 * mno-interrupts: AVR Options. (line 32) 46121 * mno-isel: RS/6000 and PowerPC Options. 46122 (line 220) 46123 * mno-knuthdiv: MMIX Options. (line 33) 46124 * mno-leaf-id-shared-library: Blackfin Options. (line 94) 46125 * mno-libfuncs: MMIX Options. (line 10) 46126 * mno-llsc: MIPS Options. (line 242) 46127 * mno-local-sdata: MIPS Options. (line 323) 46128 * mno-long-calls <1>: M68hc1x Options. (line 35) 46129 * mno-long-calls <2>: ARM Options. (line 167) 46130 * mno-long-calls <3>: Blackfin Options. (line 117) 46131 * mno-long-calls <4>: MIPS Options. (line 453) 46132 * mno-long-calls <5>: V850 Options. (line 10) 46133 * mno-long-calls: HPPA Options. (line 136) 46134 * mno-longcall: RS/6000 and PowerPC Options. 46135 (line 717) 46136 * mno-longcalls: Xtensa Options. (line 72) 46137 * mno-low-64k: Blackfin Options. (line 70) 46138 * mno-lsim <1>: FR30 Options. (line 14) 46139 * mno-lsim: MCore Options. (line 46) 46140 * mno-mad: MIPS Options. (line 462) 46141 * mno-max: DEC Alpha Options. (line 171) 46142 * mno-mcount-ra-address: MIPS Options. (line 678) 46143 * mno-mdmx: MIPS Options. (line 279) 46144 * mno-media: FRV Options. (line 47) 46145 * mno-memcpy: MIPS Options. (line 447) 46146 * mno-mfcrf: RS/6000 and PowerPC Options. 46147 (line 33) 46148 * mno-mfpgpr: RS/6000 and PowerPC Options. 46149 (line 33) 46150 * mno-mips16: MIPS Options. (line 102) 46151 * mno-mips3d: MIPS Options. (line 285) 46152 * mno-mmx: i386 and x86-64 Options. 46153 (line 477) 46154 * mno-mt: MIPS Options. (line 290) 46155 * mno-mul-bug-workaround: CRIS Options. (line 31) 46156 * mno-muladd: FRV Options. (line 53) 46157 * mno-mulhw: RS/6000 and PowerPC Options. 46158 (line 430) 46159 * mno-mult-bug: MN10300 Options. (line 13) 46160 * mno-multi-cond-exec: FRV Options. (line 183) 46161 * mno-multiple: RS/6000 and PowerPC Options. 46162 (line 380) 46163 * mno-mvcle: S/390 and zSeries Options. 46164 (line 105) 46165 * mno-nested-cond-exec: FRV Options. (line 195) 46166 * mno-optimize-membar: FRV Options. (line 205) 46167 * mno-opts: MeP Options. (line 93) 46168 * mno-pack: FRV Options. (line 122) 46169 * mno-packed-stack: S/390 and zSeries Options. 46170 (line 54) 46171 * mno-paired: RS/6000 and PowerPC Options. 46172 (line 234) 46173 * mno-paired-single: MIPS Options. (line 273) 46174 * mno-pic: IA-64 Options. (line 26) 46175 * mno-plt: MIPS Options. (line 181) 46176 * mno-popcntb: RS/6000 and PowerPC Options. 46177 (line 33) 46178 * mno-popcntd: RS/6000 and PowerPC Options. 46179 (line 33) 46180 * mno-power: RS/6000 and PowerPC Options. 46181 (line 33) 46182 * mno-power2: RS/6000 and PowerPC Options. 46183 (line 33) 46184 * mno-powerpc: RS/6000 and PowerPC Options. 46185 (line 33) 46186 * mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 46187 (line 33) 46188 * mno-powerpc-gpopt: RS/6000 and PowerPC Options. 46189 (line 33) 46190 * mno-powerpc64: RS/6000 and PowerPC Options. 46191 (line 33) 46192 * mno-prolog-function: V850 Options. (line 23) 46193 * mno-prologue-epilogue: CRIS Options. (line 71) 46194 * mno-prototype: RS/6000 and PowerPC Options. 46195 (line 605) 46196 * mno-push-args: i386 and x86-64 Options. 46197 (line 602) 46198 * mno-red-zone: i386 and x86-64 Options. 46199 (line 705) 46200 * mno-register-names: IA-64 Options. (line 37) 46201 * mno-regnames: RS/6000 and PowerPC Options. 46202 (line 711) 46203 * mno-relax-immediate: MCore Options. (line 19) 46204 * mno-relocatable: RS/6000 and PowerPC Options. 46205 (line 461) 46206 * mno-relocatable-lib: RS/6000 and PowerPC Options. 46207 (line 472) 46208 * mno-rtd: M680x0 Options. (line 261) 46209 * mno-scc: FRV Options. (line 146) 46210 * mno-sched-ar-data-spec: IA-64 Options. (line 135) 46211 * mno-sched-ar-in-data-spec: IA-64 Options. (line 156) 46212 * mno-sched-br-data-spec: IA-64 Options. (line 128) 46213 * mno-sched-br-in-data-spec: IA-64 Options. (line 149) 46214 * mno-sched-control-spec: IA-64 Options. (line 142) 46215 * mno-sched-count-spec-in-critical-path: IA-64 Options. (line 183) 46216 * mno-sched-in-control-spec: IA-64 Options. (line 163) 46217 * mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 176) 46218 * mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 169) 46219 * mno-sched-prolog: ARM Options. (line 32) 46220 * mno-sdata <1>: IA-64 Options. (line 42) 46221 * mno-sdata: RS/6000 and PowerPC Options. 46222 (line 692) 46223 * mno-sep-data: Blackfin Options. (line 112) 46224 * mno-serialize-volatile: Xtensa Options. (line 35) 46225 * mno-short: M680x0 Options. (line 225) 46226 * mno-side-effects: CRIS Options. (line 46) 46227 * mno-sim: RX Options. (line 70) 46228 * mno-single-exit: MMIX Options. (line 66) 46229 * mno-slow-bytes: MCore Options. (line 35) 46230 * mno-small-exec: S/390 and zSeries Options. 46231 (line 80) 46232 * mno-smartmips: MIPS Options. (line 269) 46233 * mno-soft-float: DEC Alpha Options. (line 10) 46234 * mno-space-regs: HPPA Options. (line 45) 46235 * mno-spe: RS/6000 and PowerPC Options. 46236 (line 229) 46237 * mno-specld-anomaly: Blackfin Options. (line 52) 46238 * mno-split-addresses: MIPS Options. (line 411) 46239 * mno-sse: i386 and x86-64 Options. 46240 (line 477) 46241 * mno-stack-align: CRIS Options. (line 55) 46242 * mno-stack-bias: SPARC Options. (line 213) 46243 * mno-strict-align <1>: M680x0 Options. (line 286) 46244 * mno-strict-align: RS/6000 and PowerPC Options. 46245 (line 456) 46246 * mno-string: RS/6000 and PowerPC Options. 46247 (line 391) 46248 * mno-sum-in-toc: RS/6000 and PowerPC Options. 46249 (line 277) 46250 * mno-sym32: MIPS Options. (line 308) 46251 * mno-target-align: Xtensa Options. (line 59) 46252 * mno-text-section-literals: Xtensa Options. (line 47) 46253 * mno-tls-markers: RS/6000 and PowerPC Options. 46254 (line 750) 46255 * mno-toc: RS/6000 and PowerPC Options. 46256 (line 481) 46257 * mno-toplevel-symbols: MMIX Options. (line 40) 46258 * mno-tpf-trace: S/390 and zSeries Options. 46259 (line 131) 46260 * mno-unaligned-doubles: SPARC Options. (line 59) 46261 * mno-uninit-const-in-rodata: MIPS Options. (line 381) 46262 * mno-update: RS/6000 and PowerPC Options. 46263 (line 402) 46264 * mno-v8plus: SPARC Options. (line 156) 46265 * mno-vis: SPARC Options. (line 163) 46266 * mno-vliw-branch: FRV Options. (line 170) 46267 * mno-volatile-asm-stop: IA-64 Options. (line 32) 46268 * mno-vrsave: RS/6000 and PowerPC Options. 46269 (line 199) 46270 * mno-vsx: RS/6000 and PowerPC Options. 46271 (line 243) 46272 * mno-wide-bitfields: MCore Options. (line 23) 46273 * mno-xgot <1>: M680x0 Options. (line 318) 46274 * mno-xgot: MIPS Options. (line 191) 46275 * mno-xl-compat: RS/6000 and PowerPC Options. 46276 (line 312) 46277 * mno-zero-extend: MMIX Options. (line 27) 46278 * mnobitfield: M680x0 Options. (line 230) 46279 * mnoliw: MN10300 Options. (line 60) 46280 * mnomacsave: SH Options. (line 112) 46281 * mnominmax: M68hc1x Options. (line 31) 46282 * mnop-fun-dllimport: i386 and x86-64 Windows Options. 46283 (line 22) 46284 * mold-mnemonics: RS/6000 and PowerPC Options. 46285 (line 104) 46286 * momit-leaf-frame-pointer <1>: i386 and x86-64 Options. 46287 (line 650) 46288 * momit-leaf-frame-pointer: Blackfin Options. (line 40) 46289 * mone-byte-bool: Darwin Options. (line 92) 46290 * moptimize-membar: FRV Options. (line 201) 46291 * MP: Preprocessor Options. 46292 (line 227) 46293 * mpa-risc-1-0: HPPA Options. (line 19) 46294 * mpa-risc-1-1: HPPA Options. (line 19) 46295 * mpa-risc-2-0: HPPA Options. (line 19) 46296 * mpack: FRV Options. (line 119) 46297 * mpacked-stack: S/390 and zSeries Options. 46298 (line 54) 46299 * mpadstruct: SH Options. (line 138) 46300 * mpaired: RS/6000 and PowerPC Options. 46301 (line 234) 46302 * mpaired-single: MIPS Options. (line 273) 46303 * mpc32: i386 and x86-64 Options. 46304 (line 372) 46305 * mpc64: i386 and x86-64 Options. 46306 (line 372) 46307 * mpc80: i386 and x86-64 Options. 46308 (line 372) 46309 * mpcrel: M680x0 Options. (line 278) 46310 * mpdebug: CRIS Options. (line 35) 46311 * mpe: RS/6000 and PowerPC Options. 46312 (line 332) 46313 * mpe-aligned-commons: i386 and x86-64 Windows Options. 46314 (line 53) 46315 * mpic-register: ARM Options. (line 198) 46316 * mplt: MIPS Options. (line 181) 46317 * mpoke-function-name: ARM Options. (line 212) 46318 * mpopcntb: RS/6000 and PowerPC Options. 46319 (line 33) 46320 * mpopcntd: RS/6000 and PowerPC Options. 46321 (line 33) 46322 * mportable-runtime: HPPA Options. (line 71) 46323 * mpower: RS/6000 and PowerPC Options. 46324 (line 33) 46325 * mpower2: RS/6000 and PowerPC Options. 46326 (line 33) 46327 * mpowerpc: RS/6000 and PowerPC Options. 46328 (line 33) 46329 * mpowerpc-gfxopt: RS/6000 and PowerPC Options. 46330 (line 33) 46331 * mpowerpc-gpopt: RS/6000 and PowerPC Options. 46332 (line 33) 46333 * mpowerpc64: RS/6000 and PowerPC Options. 46334 (line 33) 46335 * mprefergot: SH Options. (line 145) 46336 * mpreferred-stack-boundary: i386 and x86-64 Options. 46337 (line 402) 46338 * mprioritize-restricted-insns: RS/6000 and PowerPC Options. 46339 (line 510) 46340 * mprolog-function: V850 Options. (line 23) 46341 * mprologue-epilogue: CRIS Options. (line 71) 46342 * mprototype: RS/6000 and PowerPC Options. 46343 (line 605) 46344 * mpt-fixed: SH Options. (line 238) 46345 * mpush-args <1>: i386 and x86-64 Options. 46346 (line 602) 46347 * mpush-args: CRX Options. (line 13) 46348 * MQ: Preprocessor Options. 46349 (line 253) 46350 * mr10k-cache-barrier: MIPS Options. (line 540) 46351 * mrecip <1>: RS/6000 and PowerPC Options. 46352 (line 762) 46353 * mrecip: i386 and x86-64 Options. 46354 (line 554) 46355 * mrecip-precision: RS/6000 and PowerPC Options. 46356 (line 798) 46357 * mrecip=opt: RS/6000 and PowerPC Options. 46358 (line 775) 46359 * mregister-names: IA-64 Options. (line 37) 46360 * mregnames: RS/6000 and PowerPC Options. 46361 (line 711) 46362 * mregparm: i386 and x86-64 Options. 46363 (line 339) 46364 * mrelax <1>: SH Options. (line 86) 46365 * mrelax <2>: MN10300 Options. (line 47) 46366 * mrelax <3>: H8/300 Options. (line 9) 46367 * mrelax: RX Options. (line 94) 46368 * mrelax-immediate: MCore Options. (line 19) 46369 * mrelax-pic-calls: MIPS Options. (line 665) 46370 * mrelocatable: RS/6000 and PowerPC Options. 46371 (line 461) 46372 * mrelocatable-lib: RS/6000 and PowerPC Options. 46373 (line 472) 46374 * mrepeat: MeP Options. (line 96) 46375 * mreturn-pointer-on-d0: MN10300 Options. (line 37) 46376 * mrodata: ARC Options. (line 30) 46377 * mrtd <1>: Function Attributes. 46378 (line 177) 46379 * mrtd <2>: i386 and x86-64 Options. 46380 (line 315) 46381 * mrtd: M680x0 Options. (line 239) 46382 * mrtp: VxWorks Options. (line 11) 46383 * ms <1>: MeP Options. (line 100) 46384 * ms: H8/300 Options. (line 17) 46385 * ms2600: H8/300 Options. (line 24) 46386 * msafe-dma: SPU Options. (line 17) 46387 * msafe-hints: SPU Options. (line 107) 46388 * msahf: i386 and x86-64 Options. 46389 (line 534) 46390 * msatur: MeP Options. (line 105) 46391 * msave-acc-in-interrupts: RX Options. (line 108) 46392 * mscc: FRV Options. (line 140) 46393 * msched-ar-data-spec: IA-64 Options. (line 135) 46394 * msched-ar-in-data-spec: IA-64 Options. (line 156) 46395 * msched-br-data-spec: IA-64 Options. (line 128) 46396 * msched-br-in-data-spec: IA-64 Options. (line 149) 46397 * msched-control-spec: IA-64 Options. (line 142) 46398 * msched-costly-dep: RS/6000 and PowerPC Options. 46399 (line 517) 46400 * msched-count-spec-in-critical-path: IA-64 Options. (line 183) 46401 * msched-fp-mem-deps-zero-cost: IA-64 Options. (line 200) 46402 * msched-in-control-spec: IA-64 Options. (line 163) 46403 * msched-max-memory-insns: IA-64 Options. (line 209) 46404 * msched-max-memory-insns-hard-limit: IA-64 Options. (line 215) 46405 * msched-prefer-non-control-spec-insns: IA-64 Options. (line 176) 46406 * msched-prefer-non-data-spec-insns: IA-64 Options. (line 169) 46407 * msched-spec-ldc: IA-64 Options. (line 192) 46408 * msched-stop-bits-after-every-cycle: IA-64 Options. (line 196) 46409 * mschedule: HPPA Options. (line 78) 46410 * mscore5: Score Options. (line 25) 46411 * mscore5u: Score Options. (line 28) 46412 * mscore7: Score Options. (line 31) 46413 * mscore7d: Score Options. (line 34) 46414 * msda: V850 Options. (line 40) 46415 * msdata <1>: IA-64 Options. (line 42) 46416 * msdata: RS/6000 and PowerPC Options. 46417 (line 679) 46418 * msdata=data: RS/6000 and PowerPC Options. 46419 (line 684) 46420 * msdata=default: RS/6000 and PowerPC Options. 46421 (line 679) 46422 * msdata=eabi: RS/6000 and PowerPC Options. 46423 (line 659) 46424 * msdata=none <1>: RS/6000 and PowerPC Options. 46425 (line 692) 46426 * msdata=none: M32R/D Options. (line 40) 46427 * msdata=sdata: M32R/D Options. (line 49) 46428 * msdata=sysv: RS/6000 and PowerPC Options. 46429 (line 670) 46430 * msdata=use: M32R/D Options. (line 53) 46431 * msdram <1>: MeP Options. (line 110) 46432 * msdram: Blackfin Options. (line 163) 46433 * msecure-plt: RS/6000 and PowerPC Options. 46434 (line 209) 46435 * msel-sched-dont-check-control-spec: IA-64 Options. (line 205) 46436 * msep-data: Blackfin Options. (line 106) 46437 * mserialize-volatile: Xtensa Options. (line 35) 46438 * mshared-library-id: Blackfin Options. (line 99) 46439 * mshort <1>: M68hc1x Options. (line 40) 46440 * mshort: M680x0 Options. (line 219) 46441 * msign-extend-enabled: LM32 Options. (line 18) 46442 * msim <1>: RX Options. (line 70) 46443 * msim <2>: RS/6000 and PowerPC Options. 46444 (line 615) 46445 * msim <3>: M32C Options. (line 13) 46446 * msim <4>: MeP Options. (line 114) 46447 * msim <5>: Xstormy16 Options. (line 9) 46448 * msim: Blackfin Options. (line 33) 46449 * msimnovec: MeP Options. (line 117) 46450 * msimple-fpu: RS/6000 and PowerPC Options. 46451 (line 365) 46452 * msingle-exit: MMIX Options. (line 66) 46453 * msingle-float <1>: RS/6000 and PowerPC Options. 46454 (line 361) 46455 * msingle-float: MIPS Options. (line 233) 46456 * msingle-pic-base <1>: RS/6000 and PowerPC Options. 46457 (line 504) 46458 * msingle-pic-base: ARM Options. (line 192) 46459 * msio: HPPA Options. (line 105) 46460 * mslow-bytes: MCore Options. (line 35) 46461 * msmall-data: DEC Alpha Options. (line 195) 46462 * msmall-data-limit: RX Options. (line 47) 46463 * msmall-divides: MicroBlaze Options. (line 38) 46464 * msmall-exec: S/390 and zSeries Options. 46465 (line 80) 46466 * msmall-mem: SPU Options. (line 35) 46467 * msmall-model: FR30 Options. (line 9) 46468 * msmall-text: DEC Alpha Options. (line 213) 46469 * msmartmips: MIPS Options. (line 269) 46470 * msoft-float <1>: M680x0 Options. (line 202) 46471 * msoft-float <2>: PDP-11 Options. (line 13) 46472 * msoft-float <3>: S/390 and zSeries Options. 46473 (line 11) 46474 * msoft-float <4>: MicroBlaze Options. (line 7) 46475 * msoft-float <5>: i386 and x86-64 Options. 46476 (line 234) 46477 * msoft-float <6>: DEC Alpha Options. (line 10) 46478 * msoft-float <7>: HPPA Options. (line 91) 46479 * msoft-float <8>: SPARC Options. (line 25) 46480 * msoft-float <9>: ARM Options. (line 60) 46481 * msoft-float <10>: MIPS Options. (line 229) 46482 * msoft-float <11>: RS/6000 and PowerPC Options. 46483 (line 355) 46484 * msoft-float: FRV Options. (line 22) 46485 * msoft-quad-float: SPARC Options. (line 45) 46486 * msoft-reg-count: M68hc1x Options. (line 43) 46487 * mspace <1>: V850 Options. (line 30) 46488 * mspace: SH Options. (line 142) 46489 * mspe: RS/6000 and PowerPC Options. 46490 (line 229) 46491 * mspecld-anomaly: Blackfin Options. (line 47) 46492 * msplit-addresses: MIPS Options. (line 411) 46493 * msse: i386 and x86-64 Options. 46494 (line 477) 46495 * msse2avx: i386 and x86-64 Options. 46496 (line 668) 46497 * msseregparm: i386 and x86-64 Options. 46498 (line 350) 46499 * mstack-align: CRIS Options. (line 55) 46500 * mstack-bias: SPARC Options. (line 213) 46501 * mstack-check-l1: Blackfin Options. (line 73) 46502 * mstack-guard: S/390 and zSeries Options. 46503 (line 156) 46504 * mstack-increment: MCore Options. (line 50) 46505 * mstack-size: S/390 and zSeries Options. 46506 (line 156) 46507 * mstackrealign: i386 and x86-64 Options. 46508 (line 393) 46509 * mstdmain: SPU Options. (line 40) 46510 * mstrict-align <1>: RS/6000 and PowerPC Options. 46511 (line 456) 46512 * mstrict-align: M680x0 Options. (line 286) 46513 * mstring: RS/6000 and PowerPC Options. 46514 (line 391) 46515 * mstringop-strategy=ALG: i386 and x86-64 Options. 46516 (line 642) 46517 * mstructure-size-boundary: ARM Options. (line 147) 46518 * msvr4-struct-return: RS/6000 and PowerPC Options. 46519 (line 579) 46520 * msym32: MIPS Options. (line 308) 46521 * msynci: MIPS Options. (line 650) 46522 * MT: Preprocessor Options. 46523 (line 239) 46524 * mtarget-align: Xtensa Options. (line 59) 46525 * mtda: V850 Options. (line 34) 46526 * mtext: ARC Options. (line 30) 46527 * mtext-section-literals: Xtensa Options. (line 47) 46528 * mtf: MeP Options. (line 121) 46529 * mthread: i386 and x86-64 Windows Options. 46530 (line 26) 46531 * mthreads: i386 and x86-64 Options. 46532 (line 617) 46533 * mthumb: ARM Options. (line 233) 46534 * mthumb-interwork: ARM Options. (line 25) 46535 * mtiny-stack: AVR Options. (line 40) 46536 * mtiny=: MeP Options. (line 125) 46537 * mTLS: FRV Options. (line 72) 46538 * mtls: FRV Options. (line 75) 46539 * mtls-direct-seg-refs: i386 and x86-64 Options. 46540 (line 658) 46541 * mtls-markers: RS/6000 and PowerPC Options. 46542 (line 750) 46543 * mtls-size: IA-64 Options. (line 112) 46544 * mtoc: RS/6000 and PowerPC Options. 46545 (line 481) 46546 * mtomcat-stats: FRV Options. (line 209) 46547 * mtoplevel-symbols: MMIX Options. (line 40) 46548 * mtp: ARM Options. (line 270) 46549 * mtpcs-frame: ARM Options. (line 243) 46550 * mtpcs-leaf-frame: ARM Options. (line 249) 46551 * mtpf-trace: S/390 and zSeries Options. 46552 (line 131) 46553 * mtrap-precision: DEC Alpha Options. (line 109) 46554 * mtune <1>: i386 and x86-64 Options. 46555 (line 10) 46556 * mtune <2>: ARM Options. (line 98) 46557 * mtune <3>: RS/6000 and PowerPC Options. 46558 (line 168) 46559 * mtune <4>: DEC Alpha Options. (line 267) 46560 * mtune <5>: SPARC Options. (line 143) 46561 * mtune <6>: IA-64 Options. (line 116) 46562 * mtune <7>: MN10300 Options. (line 31) 46563 * mtune <8>: MIPS Options. (line 62) 46564 * mtune <9>: S/390 and zSeries Options. 46565 (line 124) 46566 * mtune <10>: CRIS Options. (line 16) 46567 * mtune: M680x0 Options. (line 69) 46568 * muclibc: GNU/Linux Options. (line 13) 46569 * muls: Score Options. (line 18) 46570 * multcost=NUMBER: SH Options. (line 155) 46571 * multi_module: Darwin Options. (line 199) 46572 * multilib-library-pic: FRV Options. (line 89) 46573 * multiply-enabled: LM32 Options. (line 15) 46574 * multiply_defined: Darwin Options. (line 199) 46575 * multiply_defined_unused: Darwin Options. (line 199) 46576 * munaligned-doubles: SPARC Options. (line 59) 46577 * municode: i386 and x86-64 Windows Options. 46578 (line 30) 46579 * muninit-const-in-rodata: MIPS Options. (line 381) 46580 * munix: VAX Options. (line 9) 46581 * munix-asm: PDP-11 Options. (line 68) 46582 * munsafe-dma: SPU Options. (line 17) 46583 * mupdate: RS/6000 and PowerPC Options. 46584 (line 402) 46585 * muser-enabled: LM32 Options. (line 21) 46586 * musermode: SH Options. (line 150) 46587 * mv850: V850 Options. (line 49) 46588 * mv850e: V850 Options. (line 81) 46589 * mv850e1: V850 Options. (line 73) 46590 * mv850e2: V850 Options. (line 69) 46591 * mv850e2v3: V850 Options. (line 64) 46592 * mv850es: V850 Options. (line 77) 46593 * mv8plus: SPARC Options. (line 156) 46594 * mveclibabi <1>: RS/6000 and PowerPC Options. 46595 (line 807) 46596 * mveclibabi: i386 and x86-64 Options. 46597 (line 571) 46598 * mvect8-ret-in-mem: i386 and x86-64 Options. 46599 (line 360) 46600 * mvis: SPARC Options. (line 163) 46601 * mvliw-branch: FRV Options. (line 164) 46602 * mvms-return-codes <1>: IA-64/VMS Options. (line 9) 46603 * mvms-return-codes: DEC Alpha/VMS Options. 46604 (line 9) 46605 * mvolatile-asm-stop: IA-64 Options. (line 32) 46606 * mvr4130-align: MIPS Options. (line 639) 46607 * mvrsave: RS/6000 and PowerPC Options. 46608 (line 199) 46609 * mvsx: RS/6000 and PowerPC Options. 46610 (line 243) 46611 * mvxworks: RS/6000 and PowerPC Options. 46612 (line 636) 46613 * mvzeroupper: i386 and x86-64 Options. 46614 (line 520) 46615 * mwarn-cell-microcode: RS/6000 and PowerPC Options. 46616 (line 205) 46617 * mwarn-dynamicstack: S/390 and zSeries Options. 46618 (line 150) 46619 * mwarn-framesize: S/390 and zSeries Options. 46620 (line 142) 46621 * mwarn-reloc: SPU Options. (line 10) 46622 * mwide-bitfields: MCore Options. (line 23) 46623 * mwin32: i386 and x86-64 Windows Options. 46624 (line 35) 46625 * mwindows: i386 and x86-64 Windows Options. 46626 (line 41) 46627 * mword-relocations: ARM Options. (line 278) 46628 * mwords-little-endian: ARM Options. (line 71) 46629 * mxgot <1>: MIPS Options. (line 191) 46630 * mxgot: M680x0 Options. (line 318) 46631 * mxilinx-fpu: RS/6000 and PowerPC Options. 46632 (line 375) 46633 * mxl-barrel-shift: MicroBlaze Options. (line 32) 46634 * mxl-compat: RS/6000 and PowerPC Options. 46635 (line 312) 46636 * mxl-float-convert: MicroBlaze Options. (line 50) 46637 * mxl-float-sqrt: MicroBlaze Options. (line 53) 46638 * mxl-gp-opt: MicroBlaze Options. (line 44) 46639 * mxl-multiply-high: MicroBlaze Options. (line 47) 46640 * mxl-pattern-compare: MicroBlaze Options. (line 35) 46641 * mxl-soft-div: MicroBlaze Options. (line 29) 46642 * mxl-soft-mul: MicroBlaze Options. (line 26) 46643 * mxl-stack-check: MicroBlaze Options. (line 41) 46644 * myellowknife: RS/6000 and PowerPC Options. 46645 (line 631) 46646 * mzarch: S/390 and zSeries Options. 46647 (line 95) 46648 * mzda: V850 Options. (line 45) 46649 * mzero-extend: MMIX Options. (line 27) 46650 * no-canonical-prefixes: Overall Options. (line 343) 46651 * no-integrated-cpp: C Dialect Options. (line 272) 46652 * no_dead_strip_inits_and_terms: Darwin Options. (line 199) 46653 * noall_load: Darwin Options. (line 199) 46654 * nocpp: MIPS Options. (line 477) 46655 * nodefaultlibs: Link Options. (line 62) 46656 * nofixprebinding: Darwin Options. (line 199) 46657 * nofpu: RX Options. (line 17) 46658 * nolibdld: HPPA Options. (line 188) 46659 * nomultidefs: Darwin Options. (line 199) 46660 * non-static: VxWorks Options. (line 16) 46661 * noprebind: Darwin Options. (line 199) 46662 * noseglinkedit: Darwin Options. (line 199) 46663 * nostartfiles: Link Options. (line 57) 46664 * nostdinc: Preprocessor Options. 46665 (line 385) 46666 * nostdinc++ <1>: Preprocessor Options. 46667 (line 390) 46668 * nostdinc++: C++ Dialect Options. 46669 (line 322) 46670 * nostdlib: Link Options. (line 73) 46671 * O: Optimize Options. (line 39) 46672 * o <1>: Preprocessor Options. 46673 (line 75) 46674 * o: Overall Options. (line 192) 46675 * O0: Optimize Options. (line 126) 46676 * O1: Optimize Options. (line 39) 46677 * O2: Optimize Options. (line 82) 46678 * O3: Optimize Options. (line 119) 46679 * Ofast: Optimize Options. (line 140) 46680 * Os: Optimize Options. (line 130) 46681 * p: Debugging Options. (line 295) 46682 * P: Preprocessor Options. 46683 (line 603) 46684 * pagezero_size: Darwin Options. (line 199) 46685 * param: Optimize Options. (line 2264) 46686 * pass-exit-codes: Overall Options. (line 150) 46687 * pedantic <1>: Standards. (line 16) 46688 * pedantic <2>: Warning Options. (line 72) 46689 * pedantic <3>: Preprocessor Options. 46690 (line 163) 46691 * pedantic <4>: C Extensions. (line 6) 46692 * pedantic <5>: Alternate Keywords. (line 30) 46693 * pedantic: Warnings and Errors. 46694 (line 25) 46695 * pedantic-errors <1>: Non-bugs. (line 216) 46696 * pedantic-errors <2>: Warning Options. (line 114) 46697 * pedantic-errors <3>: Standards. (line 16) 46698 * pedantic-errors <4>: Warnings and Errors. 46699 (line 25) 46700 * pedantic-errors: Preprocessor Options. 46701 (line 168) 46702 * pg: Debugging Options. (line 301) 46703 * pie: Link Options. (line 95) 46704 * pipe: Overall Options. (line 215) 46705 * prebind: Darwin Options. (line 199) 46706 * prebind_all_twolevel_modules: Darwin Options. (line 199) 46707 * print-file-name: Debugging Options. (line 1140) 46708 * print-libgcc-file-name: Debugging Options. (line 1170) 46709 * print-multi-directory: Debugging Options. (line 1146) 46710 * print-multi-lib: Debugging Options. (line 1151) 46711 * print-multi-os-directory: Debugging Options. (line 1158) 46712 * print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 46713 (line 203) 46714 * print-prog-name: Debugging Options. (line 1167) 46715 * print-search-dirs: Debugging Options. (line 1178) 46716 * print-sysroot: Debugging Options. (line 1191) 46717 * print-sysroot-headers-suffix: Debugging Options. (line 1198) 46718 * private_bundle: Darwin Options. (line 199) 46719 * pthread <1>: Solaris 2 Options. (line 37) 46720 * pthread: RS/6000 and PowerPC Options. 46721 (line 757) 46722 * pthreads: Solaris 2 Options. (line 31) 46723 * Q: Debugging Options. (line 307) 46724 * Qn: System V Options. (line 18) 46725 * Qy: System V Options. (line 14) 46726 * rdynamic: Link Options. (line 101) 46727 * read_only_relocs: Darwin Options. (line 199) 46728 * remap: Preprocessor Options. 46729 (line 651) 46730 * s: Link Options. (line 108) 46731 * S <1>: Link Options. (line 20) 46732 * S: Overall Options. (line 175) 46733 * save-temps: Debugging Options. (line 1048) 46734 * save-temps=obj: Debugging Options. (line 1074) 46735 * sectalign: Darwin Options. (line 199) 46736 * sectcreate: Darwin Options. (line 199) 46737 * sectobjectsymbols: Darwin Options. (line 199) 46738 * sectorder: Darwin Options. (line 199) 46739 * seg1addr: Darwin Options. (line 199) 46740 * seg_addr_table: Darwin Options. (line 199) 46741 * seg_addr_table_filename: Darwin Options. (line 199) 46742 * segaddr: Darwin Options. (line 199) 46743 * seglinkedit: Darwin Options. (line 199) 46744 * segprot: Darwin Options. (line 199) 46745 * segs_read_only_addr: Darwin Options. (line 199) 46746 * segs_read_write_addr: Darwin Options. (line 199) 46747 * shared: Link Options. (line 117) 46748 * shared-libgcc: Link Options. (line 125) 46749 * sim: CRIS Options. (line 95) 46750 * sim2: CRIS Options. (line 101) 46751 * single_module: Darwin Options. (line 199) 46752 * specs: Directory Options. (line 89) 46753 * static <1>: Darwin Options. (line 199) 46754 * static <2>: HPPA Options. (line 192) 46755 * static: Link Options. (line 112) 46756 * static-libgcc: Link Options. (line 125) 46757 * std <1>: C Dialect Options. (line 47) 46758 * std <2>: Other Builtins. (line 22) 46759 * std <3>: Standards. (line 16) 46760 * std: Non-bugs. (line 107) 46761 * std=: Preprocessor Options. 46762 (line 326) 46763 * sub_library: Darwin Options. (line 199) 46764 * sub_umbrella: Darwin Options. (line 199) 46765 * symbolic: Link Options. (line 172) 46766 * sysroot: Directory Options. (line 97) 46767 * T: Link Options. (line 178) 46768 * target-help <1>: Overall Options. (line 230) 46769 * target-help: Preprocessor Options. 46770 (line 656) 46771 * threads <1>: HPPA Options. (line 205) 46772 * threads: Solaris 2 Options. (line 25) 46773 * time: Debugging Options. (line 1089) 46774 * tno-android-cc: GNU/Linux Options. (line 31) 46775 * tno-android-ld: GNU/Linux Options. (line 35) 46776 * traditional <1>: C Dialect Options. (line 284) 46777 * traditional: Incompatibilities. (line 6) 46778 * traditional-cpp <1>: Preprocessor Options. 46779 (line 634) 46780 * traditional-cpp: C Dialect Options. (line 284) 46781 * trigraphs <1>: C Dialect Options. (line 268) 46782 * trigraphs: Preprocessor Options. 46783 (line 638) 46784 * twolevel_namespace: Darwin Options. (line 199) 46785 * u: Link Options. (line 211) 46786 * U: Preprocessor Options. 46787 (line 57) 46788 * umbrella: Darwin Options. (line 199) 46789 * undef: Preprocessor Options. 46790 (line 61) 46791 * undefined: Darwin Options. (line 199) 46792 * unexported_symbols_list: Darwin Options. (line 199) 46793 * v <1>: Overall Options. (line 203) 46794 * v: Preprocessor Options. 46795 (line 660) 46796 * version <1>: Preprocessor Options. 46797 (line 673) 46798 * version: Overall Options. (line 351) 46799 * W: Incompatibilities. (line 64) 46800 * w: Preprocessor Options. 46801 (line 159) 46802 * W: Warning Options. (line 1385) 46803 * w: Warning Options. (line 25) 46804 * Wa: Assembler Options. (line 9) 46805 * Wabi: C++ Dialect Options. 46806 (line 336) 46807 * Waddress: Warning Options. (line 1214) 46808 * Waggregate-return: Warning Options. (line 1232) 46809 * Wall <1>: Standard Libraries. (line 6) 46810 * Wall <2>: Preprocessor Options. 46811 (line 81) 46812 * Wall: Warning Options. (line 118) 46813 * Warray-bounds: Warning Options. (line 877) 46814 * Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 46815 (line 157) 46816 * Wattributes: Warning Options. (line 1237) 46817 * Wbad-function-cast: Warning Options. (line 1100) 46818 * Wbuiltin-macro-redefined: Warning Options. (line 1243) 46819 * Wcast-align: Warning Options. (line 1131) 46820 * Wcast-qual: Warning Options. (line 1115) 46821 * Wchar-subscripts: Warning Options. (line 207) 46822 * Wclobbered: Warning Options. (line 1151) 46823 * Wcomment <1>: Warning Options. (line 212) 46824 * Wcomment: Preprocessor Options. 46825 (line 89) 46826 * Wcomments: Preprocessor Options. 46827 (line 89) 46828 * Wconversion: Warning Options. (line 1155) 46829 * Wconversion-null: Warning Options. (line 1173) 46830 * Wcoverage-mismatch: Language Independent Options. 46831 (line 42) 46832 * Wctor-dtor-privacy: C++ Dialect Options. 46833 (line 446) 46834 * Wdeclaration-after-statement: Warning Options. (line 1009) 46835 * Wdeprecated: Warning Options. (line 1372) 46836 * Wdeprecated-declarations: Warning Options. (line 1376) 46837 * Wdisabled-optimization: Warning Options. (line 1511) 46838 * Wdiv-by-zero: Warning Options. (line 882) 46839 * Wdouble-promotion: Warning Options. (line 222) 46840 * weak_reference_mismatches: Darwin Options. (line 199) 46841 * Weffc++: C++ Dialect Options. 46842 (line 479) 46843 * Wempty-body: Warning Options. (line 1181) 46844 * Wendif-labels <1>: Preprocessor Options. 46845 (line 136) 46846 * Wendif-labels: Warning Options. (line 1019) 46847 * Wenum-compare: Warning Options. (line 1185) 46848 * Werror <1>: Preprocessor Options. 46849 (line 149) 46850 * Werror: Warning Options. (line 28) 46851 * Werror=: Warning Options. (line 31) 46852 * Wextra: Warning Options. (line 1286) 46853 * Wfatal-errors: Warning Options. (line 48) 46854 * Wfloat-equal: Warning Options. (line 909) 46855 * Wformat <1>: Warning Options. (line 1304) 46856 * Wformat: Function Attributes. 46857 (line 420) 46858 * Wformat-contains-nul: Warning Options. (line 279) 46859 * Wformat-extra-args: Warning Options. (line 283) 46860 * Wformat-nonliteral <1>: Warning Options. (line 301) 46861 * Wformat-nonliteral: Function Attributes. 46862 (line 485) 46863 * Wformat-security: Warning Options. (line 306) 46864 * Wformat-y2k: Warning Options. (line 275) 46865 * Wformat-zero-length: Warning Options. (line 297) 46866 * Wformat=2: Warning Options. (line 317) 46867 * Wframe-larger-than: Warning Options. (line 1065) 46868 * whatsloaded: Darwin Options. (line 199) 46869 * whyload: Darwin Options. (line 199) 46870 * Wignored-qualifiers: Warning Options. (line 356) 46871 * Wimplicit: Warning Options. (line 352) 46872 * Wimplicit-function-declaration: Warning Options. (line 346) 46873 * Wimplicit-int: Warning Options. (line 342) 46874 * Winit-self: Warning Options. (line 329) 46875 * Winline <1>: Inline. (line 63) 46876 * Winline: Warning Options. (line 1442) 46877 * Wint-to-pointer-cast: Warning Options. (line 1469) 46878 * Winvalid-offsetof: Warning Options. (line 1455) 46879 * Winvalid-pch: Warning Options. (line 1486) 46880 * Wjump-misses-init: Warning Options. (line 1190) 46881 * Wl: Link Options. (line 203) 46882 * Wlarger-than-LEN: Warning Options. (line 1062) 46883 * Wlarger-than=LEN: Warning Options. (line 1062) 46884 * Wlogical-op: Warning Options. (line 1227) 46885 * Wlong-long: Warning Options. (line 1490) 46886 * Wmain: Warning Options. (line 367) 46887 * Wmaybe-uninitialized: Warning Options. (line 711) 46888 * Wmissing-braces: Warning Options. (line 374) 46889 * Wmissing-declarations: Warning Options. (line 1278) 46890 * Wmissing-field-initializers: Warning Options. (line 1286) 46891 * Wmissing-format-attribute: Warning Options. (line 1304) 46892 * Wmissing-include-dirs: Warning Options. (line 384) 46893 * Wmissing-parameter-type: Warning Options. (line 1264) 46894 * Wmissing-prototypes: Warning Options. (line 1272) 46895 * Wmultichar: Warning Options. (line 1323) 46896 * Wnested-externs: Warning Options. (line 1439) 46897 * Wno-abi: C++ Dialect Options. 46898 (line 336) 46899 * Wno-address: Warning Options. (line 1214) 46900 * Wno-aggregate-return: Warning Options. (line 1232) 46901 * Wno-all: Warning Options. (line 118) 46902 * Wno-array-bounds: Warning Options. (line 877) 46903 * Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 46904 (line 157) 46905 * Wno-attributes: Warning Options. (line 1237) 46906 * Wno-bad-function-cast: Warning Options. (line 1100) 46907 * Wno-builtin-macro-redefined: Warning Options. (line 1243) 46908 * Wno-cast-align: Warning Options. (line 1131) 46909 * Wno-cast-qual: Warning Options. (line 1115) 46910 * Wno-char-subscripts: Warning Options. (line 207) 46911 * Wno-clobbered: Warning Options. (line 1151) 46912 * Wno-comment: Warning Options. (line 212) 46913 * Wno-conversion: Warning Options. (line 1155) 46914 * Wno-conversion-null: Warning Options. (line 1173) 46915 * Wno-ctor-dtor-privacy: C++ Dialect Options. 46916 (line 446) 46917 * Wno-declaration-after-statement: Warning Options. (line 1009) 46918 * Wno-deprecated: Warning Options. (line 1372) 46919 * Wno-deprecated-declarations: Warning Options. (line 1376) 46920 * Wno-disabled-optimization: Warning Options. (line 1511) 46921 * Wno-div-by-zero: Warning Options. (line 882) 46922 * Wno-double-promotion: Warning Options. (line 222) 46923 * Wno-effc++: C++ Dialect Options. 46924 (line 479) 46925 * Wno-empty-body: Warning Options. (line 1181) 46926 * Wno-endif-labels: Warning Options. (line 1019) 46927 * Wno-enum-compare: Warning Options. (line 1185) 46928 * Wno-error: Warning Options. (line 28) 46929 * Wno-error=: Warning Options. (line 31) 46930 * Wno-extra: Warning Options. (line 1286) 46931 * Wno-fatal-errors: Warning Options. (line 48) 46932 * Wno-float-equal: Warning Options. (line 909) 46933 * Wno-format: Warning Options. (line 240) 46934 * Wno-format-contains-nul: Warning Options. (line 279) 46935 * Wno-format-extra-args: Warning Options. (line 283) 46936 * Wno-format-nonliteral: Warning Options. (line 301) 46937 * Wno-format-security: Warning Options. (line 306) 46938 * Wno-format-y2k: Warning Options. (line 275) 46939 * Wno-format-zero-length: Warning Options. (line 297) 46940 * Wno-format=2: Warning Options. (line 317) 46941 * Wno-ignored-qualifiers: Warning Options. (line 356) 46942 * Wno-implicit: Warning Options. (line 352) 46943 * Wno-implicit-function-declaration: Warning Options. (line 346) 46944 * Wno-implicit-int: Warning Options. (line 342) 46945 * Wno-init-self: Warning Options. (line 329) 46946 * Wno-inline: Warning Options. (line 1442) 46947 * Wno-int-to-pointer-cast: Warning Options. (line 1469) 46948 * Wno-invalid-offsetof: Warning Options. (line 1455) 46949 * Wno-invalid-pch: Warning Options. (line 1486) 46950 * Wno-jump-misses-init: Warning Options. (line 1190) 46951 * Wno-logical-op: Warning Options. (line 1227) 46952 * Wno-long-long: Warning Options. (line 1490) 46953 * Wno-main: Warning Options. (line 367) 46954 * Wno-maybe-uninitialized: Warning Options. (line 711) 46955 * Wno-missing-braces: Warning Options. (line 374) 46956 * Wno-missing-declarations: Warning Options. (line 1278) 46957 * Wno-missing-field-initializers: Warning Options. (line 1286) 46958 * Wno-missing-format-attribute: Warning Options. (line 1304) 46959 * Wno-missing-include-dirs: Warning Options. (line 384) 46960 * Wno-missing-parameter-type: Warning Options. (line 1264) 46961 * Wno-missing-prototypes: Warning Options. (line 1272) 46962 * Wno-mudflap: Warning Options. (line 1531) 46963 * Wno-multichar: Warning Options. (line 1323) 46964 * Wno-nested-externs: Warning Options. (line 1439) 46965 * Wno-noexcept: C++ Dialect Options. 46966 (line 451) 46967 * Wno-non-template-friend: C++ Dialect Options. 46968 (line 516) 46969 * Wno-non-virtual-dtor: C++ Dialect Options. 46970 (line 457) 46971 * Wno-nonnull: Warning Options. (line 322) 46972 * Wno-old-style-cast: C++ Dialect Options. 46973 (line 532) 46974 * Wno-old-style-declaration: Warning Options. (line 1254) 46975 * Wno-old-style-definition: Warning Options. (line 1260) 46976 * Wno-overflow: Warning Options. (line 1382) 46977 * Wno-overlength-strings: Warning Options. (line 1535) 46978 * Wno-overloaded-virtual: C++ Dialect Options. 46979 (line 538) 46980 * Wno-override-init: Warning Options. (line 1385) 46981 * Wno-packed: Warning Options. (line 1393) 46982 * Wno-packed-bitfield-compat: Warning Options. (line 1410) 46983 * Wno-padded: Warning Options. (line 1427) 46984 * Wno-parentheses: Warning Options. (line 387) 46985 * Wno-pedantic-ms-format: Warning Options. (line 1080) 46986 * Wno-pmf-conversions <1>: Bound member functions. 46987 (line 35) 46988 * Wno-pmf-conversions: C++ Dialect Options. 46989 (line 557) 46990 * Wno-pointer-arith: Warning Options. (line 1086) 46991 * Wno-pointer-sign: Warning Options. (line 1520) 46992 * Wno-pointer-to-int-cast: Warning Options. (line 1482) 46993 * Wno-pragmas: Warning Options. (line 762) 46994 * Wno-protocol: Objective-C and Objective-C++ Dialect Options. 46995 (line 161) 46996 * Wno-real-conversion: Warning Options. (line 1177) 46997 * Wno-redundant-decls: Warning Options. (line 1434) 46998 * Wno-reorder: C++ Dialect Options. 46999 (line 463) 47000 * Wno-return-type: Warning Options. (line 527) 47001 * Wno-ripa-opt-mismatch: Warning Options. (line 542) 47002 * Wno-selector: Objective-C and Objective-C++ Dialect Options. 47003 (line 171) 47004 * Wno-self-assign: Warning Options. (line 483) 47005 * Wno-self-assign-non-pod: Warning Options. (line 506) 47006 * Wno-sequence-point: Warning Options. (line 437) 47007 * Wno-shadow: Warning Options. (line 1023) 47008 * Wno-shadow-compatible-local: Warning Options. (line 1034) 47009 * Wno-shadow-local: Warning Options. (line 1030) 47010 * Wno-sign-compare: Warning Options. (line 1201) 47011 * Wno-sign-conversion: Warning Options. (line 1208) 47012 * Wno-sign-promo: C++ Dialect Options. 47013 (line 561) 47014 * Wno-stack-protector: Warning Options. (line 1526) 47015 * Wno-strict-aliasing: Warning Options. (line 767) 47016 * Wno-strict-aliasing=n: Warning Options. (line 775) 47017 * Wno-strict-null-sentinel: C++ Dialect Options. 47018 (line 509) 47019 * Wno-strict-overflow: Warning Options. (line 808) 47020 * Wno-strict-prototypes: Warning Options. (line 1248) 47021 * Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 47022 (line 183) 47023 * Wno-suggest-attribute=: Warning Options. (line 859) 47024 * Wno-suggest-attribute=const: Warning Options. (line 865) 47025 * Wno-suggest-attribute=noreturn: Warning Options. (line 865) 47026 * Wno-suggest-attribute=pure: Warning Options. (line 865) 47027 * Wno-switch: Warning Options. (line 550) 47028 * Wno-switch-default: Warning Options. (line 558) 47029 * Wno-switch-enum: Warning Options. (line 561) 47030 * Wno-sync-nand: Warning Options. (line 570) 47031 * Wno-system-headers: Warning Options. (line 887) 47032 * Wno-thread-safety: Warning Options. (line 575) 47033 * Wno-traditional: Warning Options. (line 924) 47034 * Wno-traditional-conversion: Warning Options. (line 1001) 47035 * Wno-trampolines: Warning Options. (line 898) 47036 * Wno-trigraphs: Warning Options. (line 611) 47037 * Wno-type-limits: Warning Options. (line 1093) 47038 * Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 47039 (line 191) 47040 * Wno-undef: Warning Options. (line 1016) 47041 * Wno-uninitialized: Warning Options. (line 688) 47042 * Wno-unknown-pragmas: Warning Options. (line 755) 47043 * Wno-unsafe-loop-optimizations: Warning Options. (line 1074) 47044 * Wno-unused: Warning Options. (line 681) 47045 * Wno-unused-but-set-parameter: Warning Options. (line 616) 47046 * Wno-unused-but-set-variable: Warning Options. (line 625) 47047 * Wno-unused-function: Warning Options. (line 635) 47048 * Wno-unused-label: Warning Options. (line 640) 47049 * Wno-unused-parameter: Warning Options. (line 647) 47050 * Wno-unused-result: Warning Options. (line 654) 47051 * Wno-unused-value: Warning Options. (line 671) 47052 * Wno-unused-variable: Warning Options. (line 659) 47053 * Wno-variadic-macros: Warning Options. (line 1495) 47054 * Wno-vla: Warning Options. (line 1501) 47055 * Wno-volatile-register-var: Warning Options. (line 1505) 47056 * Wno-write-strings: Warning Options. (line 1137) 47057 * Wnoexcept: C++ Dialect Options. 47058 (line 451) 47059 * Wnon-template-friend: C++ Dialect Options. 47060 (line 516) 47061 * Wnon-virtual-dtor: C++ Dialect Options. 47062 (line 457) 47063 * Wnonnull: Warning Options. (line 322) 47064 * Wnormalized=: Warning Options. (line 1329) 47065 * Wold-style-cast: C++ Dialect Options. 47066 (line 532) 47067 * Wold-style-declaration: Warning Options. (line 1254) 47068 * Wold-style-definition: Warning Options. (line 1260) 47069 * Woverflow: Warning Options. (line 1382) 47070 * Woverlength-strings: Warning Options. (line 1535) 47071 * Woverloaded-virtual: C++ Dialect Options. 47072 (line 538) 47073 * Woverride-init: Warning Options. (line 1385) 47074 * Wp: Preprocessor Options. 47075 (line 14) 47076 * Wpacked: Warning Options. (line 1393) 47077 * Wpacked-bitfield-compat: Warning Options. (line 1410) 47078 * Wpadded: Warning Options. (line 1427) 47079 * Wparentheses: Warning Options. (line 387) 47080 * Wpedantic-ms-format: Warning Options. (line 1080) 47081 * Wpmf-conversions: C++ Dialect Options. 47082 (line 557) 47083 * Wpointer-arith <1>: Pointer Arith. (line 13) 47084 * Wpointer-arith: Warning Options. (line 1086) 47085 * Wpointer-sign: Warning Options. (line 1520) 47086 * Wpointer-to-int-cast: Warning Options. (line 1482) 47087 * Wpragmas: Warning Options. (line 762) 47088 * Wprotocol: Objective-C and Objective-C++ Dialect Options. 47089 (line 161) 47090 * wrapper: Overall Options. (line 354) 47091 * Wreal-conversion: Warning Options. (line 1177) 47092 * Wredundant-decls: Warning Options. (line 1434) 47093 * Wreorder: C++ Dialect Options. 47094 (line 463) 47095 * Wreturn-type: Warning Options. (line 527) 47096 * Wripa-opt-mismatch: Warning Options. (line 542) 47097 * Wselector: Objective-C and Objective-C++ Dialect Options. 47098 (line 171) 47099 * Wself-assign: Warning Options. (line 483) 47100 * Wself-assign-non-pod: Warning Options. (line 506) 47101 * Wsequence-point: Warning Options. (line 437) 47102 * Wshadow: Warning Options. (line 1023) 47103 * Wshadow-compatible-local: Warning Options. (line 1034) 47104 * Wshadow-local: Warning Options. (line 1030) 47105 * Wsign-compare: Warning Options. (line 1201) 47106 * Wsign-conversion: Warning Options. (line 1208) 47107 * Wsign-promo: C++ Dialect Options. 47108 (line 561) 47109 * Wstack-protector: Warning Options. (line 1526) 47110 * Wstrict-aliasing: Warning Options. (line 767) 47111 * Wstrict-aliasing=n: Warning Options. (line 775) 47112 * Wstrict-null-sentinel: C++ Dialect Options. 47113 (line 509) 47114 * Wstrict-overflow: Warning Options. (line 808) 47115 * Wstrict-prototypes: Warning Options. (line 1248) 47116 * Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 47117 (line 183) 47118 * Wsuggest-attribute=: Warning Options. (line 859) 47119 * Wsuggest-attribute=const: Warning Options. (line 865) 47120 * Wsuggest-attribute=noreturn: Warning Options. (line 865) 47121 * Wsuggest-attribute=pure: Warning Options. (line 865) 47122 * Wswitch: Warning Options. (line 550) 47123 * Wswitch-default: Warning Options. (line 558) 47124 * Wswitch-enum: Warning Options. (line 561) 47125 * Wsync-nand: Warning Options. (line 570) 47126 * Wsystem-headers <1>: Preprocessor Options. 47127 (line 153) 47128 * Wsystem-headers: Warning Options. (line 887) 47129 * Wthread-safety: Warning Options. (line 575) 47130 * Wtraditional <1>: Warning Options. (line 924) 47131 * Wtraditional: Preprocessor Options. 47132 (line 106) 47133 * Wtraditional-conversion: Warning Options. (line 1001) 47134 * Wtrampolines: Warning Options. (line 898) 47135 * Wtrigraphs <1>: Preprocessor Options. 47136 (line 94) 47137 * Wtrigraphs: Warning Options. (line 611) 47138 * Wtype-limits: Warning Options. (line 1093) 47139 * Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 47140 (line 191) 47141 * Wundef <1>: Preprocessor Options. 47142 (line 112) 47143 * Wundef: Warning Options. (line 1016) 47144 * Wuninitialized: Warning Options. (line 688) 47145 * Wunknown-pragmas: Warning Options. (line 755) 47146 * Wunsafe-loop-optimizations: Warning Options. (line 1074) 47147 * Wunsuffixed-float-constants: Warning Options. (line 1550) 47148 * Wunused: Warning Options. (line 681) 47149 * Wunused-but-set-parameter: Warning Options. (line 616) 47150 * Wunused-but-set-variable: Warning Options. (line 625) 47151 * Wunused-function: Warning Options. (line 635) 47152 * Wunused-label: Warning Options. (line 640) 47153 * Wunused-macros: Preprocessor Options. 47154 (line 117) 47155 * Wunused-parameter: Warning Options. (line 647) 47156 * Wunused-result: Warning Options. (line 654) 47157 * Wunused-value: Warning Options. (line 671) 47158 * Wunused-variable: Warning Options. (line 659) 47159 * Wvariadic-macros: Warning Options. (line 1495) 47160 * Wvla: Warning Options. (line 1501) 47161 * Wvolatile-register-var: Warning Options. (line 1505) 47162 * Wwrite-strings: Warning Options. (line 1137) 47163 * x <1>: Preprocessor Options. 47164 (line 310) 47165 * x: Overall Options. (line 126) 47166 * Xassembler: Assembler Options. (line 13) 47167 * Xbind-lazy: VxWorks Options. (line 26) 47168 * Xbind-now: VxWorks Options. (line 30) 47169 * Xlinker: Link Options. (line 184) 47170 * Xpreprocessor: Preprocessor Options. 47171 (line 25) 47172 * Ym: System V Options. (line 26) 47173 * YP: System V Options. (line 22) 47174 47175 47176 File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 47177 47178 Keyword Index 47179 ************* 47180 47181 [index] 47182 * Menu: 47183 47184 * ! in constraint: Multi-Alternative. (line 33) 47185 * # in constraint: Modifiers. (line 57) 47186 * #pragma: Pragmas. (line 6) 47187 * #pragma implementation: C++ Interface. (line 39) 47188 * #pragma implementation, implied: C++ Interface. (line 46) 47189 * #pragma interface: C++ Interface. (line 20) 47190 * #pragma, reason for not using: Function Attributes. 47191 (line 1767) 47192 * $: Dollar Signs. (line 6) 47193 * % in constraint: Modifiers. (line 45) 47194 * %include: Spec Files. (line 27) 47195 * %include_noerr: Spec Files. (line 31) 47196 * %rename: Spec Files. (line 35) 47197 * & in constraint: Modifiers. (line 25) 47198 * ': Incompatibilities. (line 116) 47199 * * in constraint: Modifiers. (line 62) 47200 * + in constraint: Modifiers. (line 12) 47201 * -lgcc, use with -nodefaultlibs: Link Options. (line 82) 47202 * -lgcc, use with -nostdlib: Link Options. (line 82) 47203 * -nodefaultlibs and unresolved references: Link Options. (line 82) 47204 * -nostdlib and unresolved references: Link Options. (line 82) 47205 * .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 47206 (line 703) 47207 * //: C++ Comments. (line 6) 47208 * 0 in constraint: Simple Constraints. (line 127) 47209 * < in constraint: Simple Constraints. (line 48) 47210 * = in constraint: Modifiers. (line 8) 47211 * > in constraint: Simple Constraints. (line 61) 47212 * ? in constraint: Multi-Alternative. (line 27) 47213 * ?: extensions: Conditionals. (line 6) 47214 * ?: side effect: Conditionals. (line 20) 47215 * _ in variables in macros: Typeof. (line 46) 47216 * __builtin___clear_cache: Other Builtins. (line 329) 47217 * __builtin___fprintf_chk: Object Size Checking. 47218 (line 6) 47219 * __builtin___memcpy_chk: Object Size Checking. 47220 (line 6) 47221 * __builtin___memmove_chk: Object Size Checking. 47222 (line 6) 47223 * __builtin___mempcpy_chk: Object Size Checking. 47224 (line 6) 47225 * __builtin___memset_chk: Object Size Checking. 47226 (line 6) 47227 * __builtin___printf_chk: Object Size Checking. 47228 (line 6) 47229 * __builtin___snprintf_chk: Object Size Checking. 47230 (line 6) 47231 * __builtin___sprintf_chk: Object Size Checking. 47232 (line 6) 47233 * __builtin___stpcpy_chk: Object Size Checking. 47234 (line 6) 47235 * __builtin___strcat_chk: Object Size Checking. 47236 (line 6) 47237 * __builtin___strcpy_chk: Object Size Checking. 47238 (line 6) 47239 * __builtin___strncat_chk: Object Size Checking. 47240 (line 6) 47241 * __builtin___strncpy_chk: Object Size Checking. 47242 (line 6) 47243 * __builtin___vfprintf_chk: Object Size Checking. 47244 (line 6) 47245 * __builtin___vprintf_chk: Object Size Checking. 47246 (line 6) 47247 * __builtin___vsnprintf_chk: Object Size Checking. 47248 (line 6) 47249 * __builtin___vsprintf_chk: Object Size Checking. 47250 (line 6) 47251 * __builtin_apply: Constructing Calls. (line 31) 47252 * __builtin_apply_args: Constructing Calls. (line 20) 47253 * __builtin_bswap32: Other Builtins. (line 548) 47254 * __builtin_bswap64: Other Builtins. (line 553) 47255 * __builtin_choose_expr: Other Builtins. (line 157) 47256 * __builtin_clz: Other Builtins. (line 481) 47257 * __builtin_clzl: Other Builtins. (line 499) 47258 * __builtin_clzll: Other Builtins. (line 519) 47259 * __builtin_constant_p: Other Builtins. (line 197) 47260 * __builtin_ctz: Other Builtins. (line 485) 47261 * __builtin_ctzl: Other Builtins. (line 503) 47262 * __builtin_ctzll: Other Builtins. (line 523) 47263 * __builtin_expect: Other Builtins. (line 247) 47264 * __builtin_extract_return_address: Return Address. (line 37) 47265 * __builtin_ffs: Other Builtins. (line 477) 47266 * __builtin_ffsl: Other Builtins. (line 495) 47267 * __builtin_ffsll: Other Builtins. (line 515) 47268 * __builtin_fpclassify: Other Builtins. (line 393) 47269 * __builtin_frame_address: Return Address. (line 51) 47270 * __builtin_frob_return_address: Return Address. (line 46) 47271 * __builtin_huge_val: Other Builtins. (line 380) 47272 * __builtin_huge_valf: Other Builtins. (line 385) 47273 * __builtin_huge_vall: Other Builtins. (line 388) 47274 * __builtin_huge_valq: X86 Built-in Functions. 47275 (line 51) 47276 * __builtin_inf: Other Builtins. (line 403) 47277 * __builtin_infd128: Other Builtins. (line 413) 47278 * __builtin_infd32: Other Builtins. (line 407) 47279 * __builtin_infd64: Other Builtins. (line 410) 47280 * __builtin_inff: Other Builtins. (line 417) 47281 * __builtin_infl: Other Builtins. (line 422) 47282 * __builtin_infq: X86 Built-in Functions. 47283 (line 47) 47284 * __builtin_isfinite: Other Builtins. (line 6) 47285 * __builtin_isgreater: Other Builtins. (line 6) 47286 * __builtin_isgreaterequal: Other Builtins. (line 6) 47287 * __builtin_isinf_sign: Other Builtins. (line 426) 47288 * __builtin_isless: Other Builtins. (line 6) 47289 * __builtin_islessequal: Other Builtins. (line 6) 47290 * __builtin_islessgreater: Other Builtins. (line 6) 47291 * __builtin_isnormal: Other Builtins. (line 6) 47292 * __builtin_isunordered: Other Builtins. (line 6) 47293 * __builtin_nan: Other Builtins. (line 433) 47294 * __builtin_nand128: Other Builtins. (line 455) 47295 * __builtin_nand32: Other Builtins. (line 449) 47296 * __builtin_nand64: Other Builtins. (line 452) 47297 * __builtin_nanf: Other Builtins. (line 459) 47298 * __builtin_nanl: Other Builtins. (line 462) 47299 * __builtin_nans: Other Builtins. (line 466) 47300 * __builtin_nansf: Other Builtins. (line 470) 47301 * __builtin_nansl: Other Builtins. (line 473) 47302 * __builtin_object_size: Object Size Checking. 47303 (line 11) 47304 * __builtin_offsetof: Offsetof. (line 6) 47305 * __builtin_parity: Other Builtins. (line 492) 47306 * __builtin_parityl: Other Builtins. (line 511) 47307 * __builtin_parityll: Other Builtins. (line 531) 47308 * __builtin_popcount: Other Builtins. (line 489) 47309 * __builtin_popcountl: Other Builtins. (line 507) 47310 * __builtin_popcountll: Other Builtins. (line 527) 47311 * __builtin_powi: Other Builtins. (line 535) 47312 * __builtin_powif: Other Builtins. (line 540) 47313 * __builtin_powil: Other Builtins. (line 544) 47314 * __builtin_prefetch: Other Builtins. (line 341) 47315 * __builtin_return: Constructing Calls. (line 48) 47316 * __builtin_return_address: Return Address. (line 11) 47317 * __builtin_rx_brk: RX Built-in Functions. 47318 (line 11) 47319 * __builtin_rx_clrpsw: RX Built-in Functions. 47320 (line 14) 47321 * __builtin_rx_int: RX Built-in Functions. 47322 (line 18) 47323 * __builtin_rx_machi: RX Built-in Functions. 47324 (line 22) 47325 * __builtin_rx_maclo: RX Built-in Functions. 47326 (line 27) 47327 * __builtin_rx_mulhi: RX Built-in Functions. 47328 (line 32) 47329 * __builtin_rx_mullo: RX Built-in Functions. 47330 (line 37) 47331 * __builtin_rx_mvfachi: RX Built-in Functions. 47332 (line 42) 47333 * __builtin_rx_mvfacmi: RX Built-in Functions. 47334 (line 46) 47335 * __builtin_rx_mvfc: RX Built-in Functions. 47336 (line 50) 47337 * __builtin_rx_mvtachi: RX Built-in Functions. 47338 (line 54) 47339 * __builtin_rx_mvtaclo: RX Built-in Functions. 47340 (line 58) 47341 * __builtin_rx_mvtc: RX Built-in Functions. 47342 (line 62) 47343 * __builtin_rx_mvtipl: RX Built-in Functions. 47344 (line 66) 47345 * __builtin_rx_racw: RX Built-in Functions. 47346 (line 70) 47347 * __builtin_rx_revw: RX Built-in Functions. 47348 (line 74) 47349 * __builtin_rx_rmpa: RX Built-in Functions. 47350 (line 79) 47351 * __builtin_rx_round: RX Built-in Functions. 47352 (line 83) 47353 * __builtin_rx_sat: RX Built-in Functions. 47354 (line 88) 47355 * __builtin_rx_setpsw: RX Built-in Functions. 47356 (line 92) 47357 * __builtin_rx_wait: RX Built-in Functions. 47358 (line 96) 47359 * __builtin_trap: Other Builtins. (line 271) 47360 * __builtin_types_compatible_p: Other Builtins. (line 111) 47361 * __builtin_unreachable: Other Builtins. (line 278) 47362 * __builtin_va_arg_pack: Constructing Calls. (line 53) 47363 * __builtin_va_arg_pack_len: Constructing Calls. (line 76) 47364 * __complex__ keyword: Complex. (line 6) 47365 * __declspec(dllexport): Function Attributes. 47366 (line 259) 47367 * __declspec(dllimport): Function Attributes. 47368 (line 294) 47369 * __extension__: Alternate Keywords. (line 30) 47370 * __float128 data type: Floating Types. (line 6) 47371 * __float80 data type: Floating Types. (line 6) 47372 * __fp16 data type: Half-Precision. (line 6) 47373 * __func__ identifier: Function Names. (line 6) 47374 * __FUNCTION__ identifier: Function Names. (line 6) 47375 * __imag__ keyword: Complex. (line 27) 47376 * __int128 data types: __int128. (line 6) 47377 * __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 47378 * __real__ keyword: Complex. (line 27) 47379 * __STDC_HOSTED__: Standards. (line 13) 47380 * __sync_add_and_fetch: Atomic Builtins. (line 61) 47381 * __sync_and_and_fetch: Atomic Builtins. (line 61) 47382 * __sync_bool_compare_and_swap: Atomic Builtins. (line 73) 47383 * __sync_fetch_and_add: Atomic Builtins. (line 45) 47384 * __sync_fetch_and_and: Atomic Builtins. (line 45) 47385 * __sync_fetch_and_nand: Atomic Builtins. (line 45) 47386 * __sync_fetch_and_or: Atomic Builtins. (line 45) 47387 * __sync_fetch_and_sub: Atomic Builtins. (line 45) 47388 * __sync_fetch_and_xor: Atomic Builtins. (line 45) 47389 * __sync_lock_release: Atomic Builtins. (line 103) 47390 * __sync_lock_test_and_set: Atomic Builtins. (line 85) 47391 * __sync_nand_and_fetch: Atomic Builtins. (line 61) 47392 * __sync_or_and_fetch: Atomic Builtins. (line 61) 47393 * __sync_sub_and_fetch: Atomic Builtins. (line 61) 47394 * __sync_synchronize: Atomic Builtins. (line 82) 47395 * __sync_val_compare_and_swap: Atomic Builtins. (line 73) 47396 * __sync_xor_and_fetch: Atomic Builtins. (line 61) 47397 * __thread: Thread-Local. (line 6) 47398 * _Accum data type: Fixed-Point. (line 6) 47399 * _Complex keyword: Complex. (line 6) 47400 * _Decimal128 data type: Decimal Float. (line 6) 47401 * _Decimal32 data type: Decimal Float. (line 6) 47402 * _Decimal64 data type: Decimal Float. (line 6) 47403 * _Exit: Other Builtins. (line 6) 47404 * _exit: Other Builtins. (line 6) 47405 * _Fract data type: Fixed-Point. (line 6) 47406 * _Sat data type: Fixed-Point. (line 6) 47407 * ABI: Compatibility. (line 6) 47408 * abort: Other Builtins. (line 6) 47409 * abs: Other Builtins. (line 6) 47410 * accessing volatiles <1>: Volatiles. (line 6) 47411 * accessing volatiles: C++ Volatiles. (line 6) 47412 * acos: Other Builtins. (line 6) 47413 * acosf: Other Builtins. (line 6) 47414 * acosh: Other Builtins. (line 6) 47415 * acoshf: Other Builtins. (line 6) 47416 * acoshl: Other Builtins. (line 6) 47417 * acosl: Other Builtins. (line 6) 47418 * Ada: G++ and GCC. (line 6) 47419 * additional floating types: Floating Types. (line 6) 47420 * address constraints: Simple Constraints. (line 154) 47421 * address of a label: Labels as Values. (line 6) 47422 * address_operand: Simple Constraints. (line 158) 47423 * alias attribute: Function Attributes. 47424 (line 36) 47425 * aligned attribute <1>: Variable Attributes. 47426 (line 23) 47427 * aligned attribute <2>: Type Attributes. (line 31) 47428 * aligned attribute: Function Attributes. 47429 (line 49) 47430 * alignment: Alignment. (line 6) 47431 * alloc_size attribute: Function Attributes. 47432 (line 69) 47433 * alloca: Other Builtins. (line 6) 47434 * alloca vs variable-length arrays: Variable Length. (line 26) 47435 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 47436 (line 888) 47437 * alternate keywords: Alternate Keywords. (line 6) 47438 * always_inline function attribute: Function Attributes. 47439 (line 90) 47440 * AMD x86-64 Options: i386 and x86-64 Options. 47441 (line 6) 47442 * AMD1: Standards. (line 13) 47443 * ANSI C: Standards. (line 13) 47444 * ANSI C standard: Standards. (line 13) 47445 * ANSI C89: Standards. (line 13) 47446 * ANSI support: C Dialect Options. (line 10) 47447 * ANSI X3.159-1989: Standards. (line 13) 47448 * apostrophes: Incompatibilities. (line 116) 47449 * application binary interface: Compatibility. (line 6) 47450 * ARC Options: ARC Options. (line 6) 47451 * ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 47452 (line 6) 47453 * ARM options: ARM Options. (line 6) 47454 * arrays of length zero: Zero Length. (line 6) 47455 * arrays of variable length: Variable Length. (line 6) 47456 * arrays, non-lvalue: Subscripting. (line 6) 47457 * artificial function attribute: Function Attributes. 47458 (line 133) 47459 * asin: Other Builtins. (line 6) 47460 * asinf: Other Builtins. (line 6) 47461 * asinh: Other Builtins. (line 6) 47462 * asinhf: Other Builtins. (line 6) 47463 * asinhl: Other Builtins. (line 6) 47464 * asinl: Other Builtins. (line 6) 47465 * asm constraints: Constraints. (line 6) 47466 * asm expressions: Extended Asm. (line 6) 47467 * assembler instructions: Extended Asm. (line 6) 47468 * assembler names for identifiers: Asm Labels. (line 6) 47469 * assembly code, invalid: Bug Criteria. (line 12) 47470 * atan: Other Builtins. (line 6) 47471 * atan2: Other Builtins. (line 6) 47472 * atan2f: Other Builtins. (line 6) 47473 * atan2l: Other Builtins. (line 6) 47474 * atanf: Other Builtins. (line 6) 47475 * atanh: Other Builtins. (line 6) 47476 * atanhf: Other Builtins. (line 6) 47477 * atanhl: Other Builtins. (line 6) 47478 * atanl: Other Builtins. (line 6) 47479 * attribute of types: Type Attributes. (line 6) 47480 * attribute of variables: Variable Attributes. 47481 (line 6) 47482 * attribute syntax: Attribute Syntax. (line 6) 47483 * autoincrement/decrement addressing: Simple Constraints. (line 30) 47484 * automatic inline for C++ member fns: Inline. (line 71) 47485 * AVR Options: AVR Options. (line 6) 47486 * Backwards Compatibility: Backwards Compatibility. 47487 (line 6) 47488 * base class members: Name lookup. (line 6) 47489 * bcmp: Other Builtins. (line 6) 47490 * below100 attribute: Variable Attributes. 47491 (line 562) 47492 * binary compatibility: Compatibility. (line 6) 47493 * Binary constants using the 0b prefix: Binary constants. (line 6) 47494 * Blackfin Options: Blackfin Options. (line 6) 47495 * bound pointer to member function: Bound member functions. 47496 (line 6) 47497 * bounds checking: Optimize Options. (line 393) 47498 * bug criteria: Bug Criteria. (line 6) 47499 * bugs: Bugs. (line 6) 47500 * bugs, known: Trouble. (line 6) 47501 * built-in functions <1>: Other Builtins. (line 6) 47502 * built-in functions: C Dialect Options. (line 184) 47503 * bzero: Other Builtins. (line 6) 47504 * C compilation options: Invoking GCC. (line 17) 47505 * C intermediate output, nonexistent: G++ and GCC. (line 35) 47506 * C language extensions: C Extensions. (line 6) 47507 * C language, traditional: C Dialect Options. (line 282) 47508 * C standard: Standards. (line 13) 47509 * C standards: Standards. (line 13) 47510 * C++: G++ and GCC. (line 30) 47511 * c++: Invoking G++. (line 14) 47512 * C++ comments: C++ Comments. (line 6) 47513 * C++ compilation options: Invoking GCC. (line 23) 47514 * C++ interface and implementation headers: C++ Interface. (line 6) 47515 * C++ language extensions: C++ Extensions. (line 6) 47516 * C++ member fns, automatically inline: Inline. (line 71) 47517 * C++ misunderstandings: C++ Misunderstandings. 47518 (line 6) 47519 * C++ options, command line: C++ Dialect Options. 47520 (line 6) 47521 * C++ pragmas, effect on inlining: C++ Interface. (line 66) 47522 * C++ source file suffixes: Invoking G++. (line 6) 47523 * C++ static data, declaring and defining: Static Definitions. 47524 (line 6) 47525 * C1X: Standards. (line 13) 47526 * C89: Standards. (line 13) 47527 * C90: Standards. (line 13) 47528 * C94: Standards. (line 13) 47529 * C95: Standards. (line 13) 47530 * C99: Standards. (line 13) 47531 * C9X: Standards. (line 13) 47532 * C_INCLUDE_PATH: Environment Variables. 47533 (line 127) 47534 * cabs: Other Builtins. (line 6) 47535 * cabsf: Other Builtins. (line 6) 47536 * cabsl: Other Builtins. (line 6) 47537 * cacos: Other Builtins. (line 6) 47538 * cacosf: Other Builtins. (line 6) 47539 * cacosh: Other Builtins. (line 6) 47540 * cacoshf: Other Builtins. (line 6) 47541 * cacoshl: Other Builtins. (line 6) 47542 * cacosl: Other Builtins. (line 6) 47543 * callee_pop_aggregate_return attribute: Function Attributes. 47544 (line 847) 47545 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 47546 (line 532) 47547 * calloc: Other Builtins. (line 6) 47548 * carg: Other Builtins. (line 6) 47549 * cargf: Other Builtins. (line 6) 47550 * cargl: Other Builtins. (line 6) 47551 * case labels in initializers: Designated Inits. (line 6) 47552 * case ranges: Case Ranges. (line 6) 47553 * casin: Other Builtins. (line 6) 47554 * casinf: Other Builtins. (line 6) 47555 * casinh: Other Builtins. (line 6) 47556 * casinhf: Other Builtins. (line 6) 47557 * casinhl: Other Builtins. (line 6) 47558 * casinl: Other Builtins. (line 6) 47559 * cast to a union: Cast to Union. (line 6) 47560 * catan: Other Builtins. (line 6) 47561 * catanf: Other Builtins. (line 6) 47562 * catanh: Other Builtins. (line 6) 47563 * catanhf: Other Builtins. (line 6) 47564 * catanhl: Other Builtins. (line 6) 47565 * catanl: Other Builtins. (line 6) 47566 * cbrt: Other Builtins. (line 6) 47567 * cbrtf: Other Builtins. (line 6) 47568 * cbrtl: Other Builtins. (line 6) 47569 * ccos: Other Builtins. (line 6) 47570 * ccosf: Other Builtins. (line 6) 47571 * ccosh: Other Builtins. (line 6) 47572 * ccoshf: Other Builtins. (line 6) 47573 * ccoshl: Other Builtins. (line 6) 47574 * ccosl: Other Builtins. (line 6) 47575 * ceil: Other Builtins. (line 6) 47576 * ceilf: Other Builtins. (line 6) 47577 * ceill: Other Builtins. (line 6) 47578 * cexp: Other Builtins. (line 6) 47579 * cexpf: Other Builtins. (line 6) 47580 * cexpl: Other Builtins. (line 6) 47581 * character set, execution: Preprocessor Options. 47582 (line 508) 47583 * character set, input: Preprocessor Options. 47584 (line 521) 47585 * character set, input normalization: Warning Options. (line 1329) 47586 * character set, wide execution: Preprocessor Options. 47587 (line 513) 47588 * cimag: Other Builtins. (line 6) 47589 * cimagf: Other Builtins. (line 6) 47590 * cimagl: Other Builtins. (line 6) 47591 * cleanup attribute: Variable Attributes. 47592 (line 89) 47593 * clog: Other Builtins. (line 6) 47594 * clogf: Other Builtins. (line 6) 47595 * clogl: Other Builtins. (line 6) 47596 * COBOL: G++ and GCC. (line 23) 47597 * code generation conventions: Code Gen Options. (line 6) 47598 * code, mixed with declarations: Mixed Declarations. (line 6) 47599 * cold function attribute: Function Attributes. 47600 (line 1098) 47601 * command options: Invoking GCC. (line 6) 47602 * comments, C++ style: C++ Comments. (line 6) 47603 * common attribute: Variable Attributes. 47604 (line 105) 47605 * comparison of signed and unsigned values, warning: Warning Options. 47606 (line 1201) 47607 * compiler bugs, reporting: Bug Reporting. (line 6) 47608 * compiler compared to C++ preprocessor: G++ and GCC. (line 35) 47609 * compiler options, C++: C++ Dialect Options. 47610 (line 6) 47611 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 47612 (line 6) 47613 * compiler version, specifying: Target Options. (line 6) 47614 * COMPILER_PATH: Environment Variables. 47615 (line 88) 47616 * complex conjugation: Complex. (line 34) 47617 * complex numbers: Complex. (line 6) 47618 * compound literals: Compound Literals. (line 6) 47619 * computed gotos: Labels as Values. (line 6) 47620 * conditional expressions, extensions: Conditionals. (line 6) 47621 * conflicting types: Disappointments. (line 21) 47622 * conj: Other Builtins. (line 6) 47623 * conjf: Other Builtins. (line 6) 47624 * conjl: Other Builtins. (line 6) 47625 * const applied to function: Function Attributes. 47626 (line 6) 47627 * const function attribute: Function Attributes. 47628 (line 183) 47629 * constants in constraints: Simple Constraints. (line 70) 47630 * constraint modifier characters: Modifiers. (line 6) 47631 * constraint, matching: Simple Constraints. (line 139) 47632 * constraints, asm: Constraints. (line 6) 47633 * constraints, machine specific: Machine Constraints. 47634 (line 6) 47635 * constructing calls: Constructing Calls. (line 6) 47636 * constructor expressions: Compound Literals. (line 6) 47637 * constructor function attribute: Function Attributes. 47638 (line 211) 47639 * contributors: Contributors. (line 6) 47640 * copysign: Other Builtins. (line 6) 47641 * copysignf: Other Builtins. (line 6) 47642 * copysignl: Other Builtins. (line 6) 47643 * core dump: Bug Criteria. (line 9) 47644 * cos: Other Builtins. (line 6) 47645 * cosf: Other Builtins. (line 6) 47646 * cosh: Other Builtins. (line 6) 47647 * coshf: Other Builtins. (line 6) 47648 * coshl: Other Builtins. (line 6) 47649 * cosl: Other Builtins. (line 6) 47650 * CPATH: Environment Variables. 47651 (line 126) 47652 * CPLUS_INCLUDE_PATH: Environment Variables. 47653 (line 128) 47654 * cpow: Other Builtins. (line 6) 47655 * cpowf: Other Builtins. (line 6) 47656 * cpowl: Other Builtins. (line 6) 47657 * cproj: Other Builtins. (line 6) 47658 * cprojf: Other Builtins. (line 6) 47659 * cprojl: Other Builtins. (line 6) 47660 * creal: Other Builtins. (line 6) 47661 * crealf: Other Builtins. (line 6) 47662 * creall: Other Builtins. (line 6) 47663 * CRIS Options: CRIS Options. (line 6) 47664 * cross compiling: Target Options. (line 6) 47665 * CRX Options: CRX Options. (line 6) 47666 * csin: Other Builtins. (line 6) 47667 * csinf: Other Builtins. (line 6) 47668 * csinh: Other Builtins. (line 6) 47669 * csinhf: Other Builtins. (line 6) 47670 * csinhl: Other Builtins. (line 6) 47671 * csinl: Other Builtins. (line 6) 47672 * csqrt: Other Builtins. (line 6) 47673 * csqrtf: Other Builtins. (line 6) 47674 * csqrtl: Other Builtins. (line 6) 47675 * ctan: Other Builtins. (line 6) 47676 * ctanf: Other Builtins. (line 6) 47677 * ctanh: Other Builtins. (line 6) 47678 * ctanhf: Other Builtins. (line 6) 47679 * ctanhl: Other Builtins. (line 6) 47680 * ctanl: Other Builtins. (line 6) 47681 * Darwin options: Darwin Options. (line 6) 47682 * dcgettext: Other Builtins. (line 6) 47683 * dd integer suffix: Decimal Float. (line 6) 47684 * DD integer suffix: Decimal Float. (line 6) 47685 * deallocating variable length arrays: Variable Length. (line 22) 47686 * debugging information options: Debugging Options. (line 6) 47687 * decimal floating types: Decimal Float. (line 6) 47688 * declaration scope: Incompatibilities. (line 80) 47689 * declarations inside expressions: Statement Exprs. (line 6) 47690 * declarations, mixed with code: Mixed Declarations. (line 6) 47691 * declaring attributes of functions: Function Attributes. 47692 (line 6) 47693 * declaring static data in C++: Static Definitions. (line 6) 47694 * defining static data in C++: Static Definitions. (line 6) 47695 * dependencies for make as output: Environment Variables. 47696 (line 170) 47697 * dependencies, make: Preprocessor Options. 47698 (line 173) 47699 * DEPENDENCIES_OUTPUT: Environment Variables. 47700 (line 153) 47701 * dependent name lookup: Name lookup. (line 6) 47702 * deprecated attribute: Variable Attributes. 47703 (line 114) 47704 * deprecated attribute.: Function Attributes. 47705 (line 234) 47706 * designated initializers: Designated Inits. (line 6) 47707 * designator lists: Designated Inits. (line 94) 47708 * designators: Designated Inits. (line 61) 47709 * destructor function attribute: Function Attributes. 47710 (line 211) 47711 * DF integer suffix: Decimal Float. (line 6) 47712 * df integer suffix: Decimal Float. (line 6) 47713 * dgettext: Other Builtins. (line 6) 47714 * diagnostic messages: Language Independent Options. 47715 (line 6) 47716 * dialect options: C Dialect Options. (line 6) 47717 * digits in constraint: Simple Constraints. (line 127) 47718 * directory options: Directory Options. (line 6) 47719 * disinterrupt attribute: Function Attributes. 47720 (line 254) 47721 * DL integer suffix: Decimal Float. (line 6) 47722 * dl integer suffix: Decimal Float. (line 6) 47723 * dollar signs in identifier names: Dollar Signs. (line 6) 47724 * double-word arithmetic: Long Long. (line 6) 47725 * downward funargs: Nested Functions. (line 6) 47726 * drem: Other Builtins. (line 6) 47727 * dremf: Other Builtins. (line 6) 47728 * dreml: Other Builtins. (line 6) 47729 * E in constraint: Simple Constraints. (line 89) 47730 * earlyclobber operand: Modifiers. (line 25) 47731 * eight bit data on the H8/300, H8/300H, and H8S: Function Attributes. 47732 (line 347) 47733 * empty structures: Empty Structures. (line 6) 47734 * environment variables: Environment Variables. 47735 (line 6) 47736 * erf: Other Builtins. (line 6) 47737 * erfc: Other Builtins. (line 6) 47738 * erfcf: Other Builtins. (line 6) 47739 * erfcl: Other Builtins. (line 6) 47740 * erff: Other Builtins. (line 6) 47741 * erfl: Other Builtins. (line 6) 47742 * error function attribute: Function Attributes. 47743 (line 152) 47744 * error messages: Warnings and Errors. 47745 (line 6) 47746 * escaped newlines: Escaped Newlines. (line 6) 47747 * exception handler functions on the Blackfin processor: Function Attributes. 47748 (line 357) 47749 * exclamation point: Multi-Alternative. (line 33) 47750 * exit: Other Builtins. (line 6) 47751 * exp: Other Builtins. (line 6) 47752 * exp10: Other Builtins. (line 6) 47753 * exp10f: Other Builtins. (line 6) 47754 * exp10l: Other Builtins. (line 6) 47755 * exp2: Other Builtins. (line 6) 47756 * exp2f: Other Builtins. (line 6) 47757 * exp2l: Other Builtins. (line 6) 47758 * expf: Other Builtins. (line 6) 47759 * expl: Other Builtins. (line 6) 47760 * explicit register variables: Explicit Reg Vars. (line 6) 47761 * expm1: Other Builtins. (line 6) 47762 * expm1f: Other Builtins. (line 6) 47763 * expm1l: Other Builtins. (line 6) 47764 * expressions containing statements: Statement Exprs. (line 6) 47765 * expressions, constructor: Compound Literals. (line 6) 47766 * extended asm: Extended Asm. (line 6) 47767 * extensible constraints: Simple Constraints. (line 163) 47768 * extensions, ?:: Conditionals. (line 6) 47769 * extensions, C language: C Extensions. (line 6) 47770 * extensions, C++ language: C++ Extensions. (line 6) 47771 * external declaration scope: Incompatibilities. (line 80) 47772 * externally_visible attribute.: Function Attributes. 47773 (line 363) 47774 * F in constraint: Simple Constraints. (line 94) 47775 * fabs: Other Builtins. (line 6) 47776 * fabsf: Other Builtins. (line 6) 47777 * fabsl: Other Builtins. (line 6) 47778 * fatal signal: Bug Criteria. (line 9) 47779 * fdim: Other Builtins. (line 6) 47780 * fdimf: Other Builtins. (line 6) 47781 * fdiml: Other Builtins. (line 6) 47782 * FDL, GNU Free Documentation License: GNU Free Documentation License. 47783 (line 6) 47784 * ffs: Other Builtins. (line 6) 47785 * file name suffix: Overall Options. (line 14) 47786 * file names: Link Options. (line 10) 47787 * fixed-point types: Fixed-Point. (line 6) 47788 * flatten function attribute: Function Attributes. 47789 (line 145) 47790 * flexible array members: Zero Length. (line 6) 47791 * float as function value type: Incompatibilities. (line 141) 47792 * floating point precision <1>: Disappointments. (line 68) 47793 * floating point precision: Optimize Options. (line 1883) 47794 * floor: Other Builtins. (line 6) 47795 * floorf: Other Builtins. (line 6) 47796 * floorl: Other Builtins. (line 6) 47797 * fma: Other Builtins. (line 6) 47798 * fmaf: Other Builtins. (line 6) 47799 * fmal: Other Builtins. (line 6) 47800 * fmax: Other Builtins. (line 6) 47801 * fmaxf: Other Builtins. (line 6) 47802 * fmaxl: Other Builtins. (line 6) 47803 * fmin: Other Builtins. (line 6) 47804 * fminf: Other Builtins. (line 6) 47805 * fminl: Other Builtins. (line 6) 47806 * fmod: Other Builtins. (line 6) 47807 * fmodf: Other Builtins. (line 6) 47808 * fmodl: Other Builtins. (line 6) 47809 * force_align_arg_pointer attribute: Function Attributes. 47810 (line 1140) 47811 * format function attribute: Function Attributes. 47812 (line 420) 47813 * format_arg function attribute: Function Attributes. 47814 (line 485) 47815 * Fortran: G++ and GCC. (line 6) 47816 * forwarding calls: Constructing Calls. (line 6) 47817 * fprintf: Other Builtins. (line 6) 47818 * fprintf_unlocked: Other Builtins. (line 6) 47819 * fputs: Other Builtins. (line 6) 47820 * fputs_unlocked: Other Builtins. (line 6) 47821 * FR30 Options: FR30 Options. (line 6) 47822 * freestanding environment: Standards. (line 13) 47823 * freestanding implementation: Standards. (line 13) 47824 * frexp: Other Builtins. (line 6) 47825 * frexpf: Other Builtins. (line 6) 47826 * frexpl: Other Builtins. (line 6) 47827 * FRV Options: FRV Options. (line 6) 47828 * fscanf: Other Builtins. (line 6) 47829 * fscanf, and constant strings: Incompatibilities. (line 17) 47830 * function addressability on the M32R/D: Function Attributes. 47831 (line 807) 47832 * function attributes: Function Attributes. 47833 (line 6) 47834 * function pointers, arithmetic: Pointer Arith. (line 6) 47835 * function prototype declarations: Function Prototypes. 47836 (line 6) 47837 * function without a prologue/epilogue code: Function Attributes. 47838 (line 865) 47839 * function, size of pointer to: Pointer Arith. (line 6) 47840 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 47841 (line 761) 47842 * functions in arbitrary sections: Function Attributes. 47843 (line 6) 47844 * functions that are dynamically resolved: Function Attributes. 47845 (line 6) 47846 * functions that are passed arguments in registers on the 386: Function Attributes. 47847 (line 6) 47848 * functions that behave like malloc: Function Attributes. 47849 (line 6) 47850 * functions that do not pop the argument stack on the 386: Function Attributes. 47851 (line 6) 47852 * functions that do pop the argument stack on the 386: Function Attributes. 47853 (line 177) 47854 * functions that have different compilation options on the 386: Function Attributes. 47855 (line 6) 47856 * functions that have different optimization options: Function Attributes. 47857 (line 6) 47858 * functions that have no side effects: Function Attributes. 47859 (line 6) 47860 * functions that never return: Function Attributes. 47861 (line 6) 47862 * functions that pop the argument stack on the 386: Function Attributes. 47863 (line 6) 47864 * functions that return more than once: Function Attributes. 47865 (line 6) 47866 * functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 47867 (line 878) 47868 * functions which handle memory bank switching: Function Attributes. 47869 (line 375) 47870 * functions with non-null pointer arguments: Function Attributes. 47871 (line 6) 47872 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 47873 (line 6) 47874 * G in constraint: Simple Constraints. (line 98) 47875 * g in constraint: Simple Constraints. (line 120) 47876 * g++: Invoking G++. (line 14) 47877 * G++: G++ and GCC. (line 30) 47878 * gamma: Other Builtins. (line 6) 47879 * gamma_r: Other Builtins. (line 6) 47880 * gammaf: Other Builtins. (line 6) 47881 * gammaf_r: Other Builtins. (line 6) 47882 * gammal: Other Builtins. (line 6) 47883 * gammal_r: Other Builtins. (line 6) 47884 * GCC: G++ and GCC. (line 6) 47885 * GCC command options: Invoking GCC. (line 6) 47886 * GCC_EXEC_PREFIX: Environment Variables. 47887 (line 52) 47888 * gcc_struct: Type Attributes. (line 319) 47889 * gcc_struct attribute: Variable Attributes. 47890 (line 419) 47891 * gcov: Debugging Options. (line 370) 47892 * gettext: Other Builtins. (line 6) 47893 * global offset table: Code Gen Options. (line 184) 47894 * global register after longjmp: Global Reg Vars. (line 66) 47895 * global register variables: Global Reg Vars. (line 6) 47896 * GNAT: G++ and GCC. (line 30) 47897 * GNU C Compiler: G++ and GCC. (line 6) 47898 * GNU Compiler Collection: G++ and GCC. (line 6) 47899 * gnu_inline function attribute: Function Attributes. 47900 (line 95) 47901 * Go: G++ and GCC. (line 6) 47902 * goto with computed label: Labels as Values. (line 6) 47903 * gprof: Debugging Options. (line 300) 47904 * grouping options: Invoking GCC. (line 26) 47905 * H in constraint: Simple Constraints. (line 98) 47906 * half-precision floating point: Half-Precision. (line 6) 47907 * hardware models and configurations, specifying: Submodel Options. 47908 (line 6) 47909 * hex floats: Hex Floats. (line 6) 47910 * hk fixed-suffix: Fixed-Point. (line 6) 47911 * HK fixed-suffix: Fixed-Point. (line 6) 47912 * hosted environment <1>: C Dialect Options. (line 225) 47913 * hosted environment: Standards. (line 13) 47914 * hosted implementation: Standards. (line 13) 47915 * hot function attribute: Function Attributes. 47916 (line 1085) 47917 * HPPA Options: HPPA Options. (line 6) 47918 * hr fixed-suffix: Fixed-Point. (line 6) 47919 * HR fixed-suffix: Fixed-Point. (line 6) 47920 * hypot: Other Builtins. (line 6) 47921 * hypotf: Other Builtins. (line 6) 47922 * hypotl: Other Builtins. (line 6) 47923 * i in constraint: Simple Constraints. (line 70) 47924 * I in constraint: Simple Constraints. (line 81) 47925 * i386 and x86-64 Windows Options: i386 and x86-64 Windows Options. 47926 (line 6) 47927 * i386 Options: i386 and x86-64 Options. 47928 (line 6) 47929 * IA-64 Options: IA-64 Options. (line 6) 47930 * IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 47931 (line 6) 47932 * identifier names, dollar signs in: Dollar Signs. (line 6) 47933 * identifiers, names in assembler code: Asm Labels. (line 6) 47934 * ifunc attribute: Function Attributes. 47935 (line 648) 47936 * ilogb: Other Builtins. (line 6) 47937 * ilogbf: Other Builtins. (line 6) 47938 * ilogbl: Other Builtins. (line 6) 47939 * imaxabs: Other Builtins. (line 6) 47940 * implementation-defined behavior, C language: C Implementation. 47941 (line 6) 47942 * implementation-defined behavior, C++ language: C++ Implementation. 47943 (line 6) 47944 * implied #pragma implementation: C++ Interface. (line 46) 47945 * incompatibilities of GCC: Incompatibilities. (line 6) 47946 * increment operators: Bug Criteria. (line 17) 47947 * index: Other Builtins. (line 6) 47948 * indirect calls on ARM: Function Attributes. 47949 (line 751) 47950 * indirect calls on MIPS: Function Attributes. 47951 (line 773) 47952 * init_priority attribute: C++ Attributes. (line 9) 47953 * initializations in expressions: Compound Literals. (line 6) 47954 * initializers with labeled elements: Designated Inits. (line 6) 47955 * initializers, non-constant: Initializers. (line 6) 47956 * inline automatic for C++ member fns: Inline. (line 71) 47957 * inline functions: Inline. (line 6) 47958 * inline functions, omission of: Inline. (line 51) 47959 * inlining and C++ pragmas: C++ Interface. (line 66) 47960 * installation trouble: Trouble. (line 6) 47961 * integrating function code: Inline. (line 6) 47962 * Intel 386 Options: i386 and x86-64 Options. 47963 (line 6) 47964 * interface and implementation headers, C++: C++ Interface. (line 6) 47965 * intermediate C version, nonexistent: G++ and GCC. (line 35) 47966 * interrupt handler functions: Function Attributes. 47967 (line 395) 47968 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 47969 (line 688) 47970 * interrupt service routines on ARM: Function Attributes. 47971 (line 703) 47972 * interrupt thread functions on fido: Function Attributes. 47973 (line 695) 47974 * introduction: Top. (line 6) 47975 * invalid assembly code: Bug Criteria. (line 12) 47976 * invalid input: Bug Criteria. (line 42) 47977 * invoking g++: Invoking G++. (line 22) 47978 * isalnum: Other Builtins. (line 6) 47979 * isalpha: Other Builtins. (line 6) 47980 * isascii: Other Builtins. (line 6) 47981 * isblank: Other Builtins. (line 6) 47982 * iscntrl: Other Builtins. (line 6) 47983 * isdigit: Other Builtins. (line 6) 47984 * isgraph: Other Builtins. (line 6) 47985 * islower: Other Builtins. (line 6) 47986 * ISO 9899: Standards. (line 13) 47987 * ISO C: Standards. (line 13) 47988 * ISO C standard: Standards. (line 13) 47989 * ISO C1X: Standards. (line 13) 47990 * ISO C90: Standards. (line 13) 47991 * ISO C94: Standards. (line 13) 47992 * ISO C95: Standards. (line 13) 47993 * ISO C99: Standards. (line 13) 47994 * ISO C9X: Standards. (line 13) 47995 * ISO support: C Dialect Options. (line 10) 47996 * ISO/IEC 9899: Standards. (line 13) 47997 * isprint: Other Builtins. (line 6) 47998 * ispunct: Other Builtins. (line 6) 47999 * isspace: Other Builtins. (line 6) 48000 * isupper: Other Builtins. (line 6) 48001 * iswalnum: Other Builtins. (line 6) 48002 * iswalpha: Other Builtins. (line 6) 48003 * iswblank: Other Builtins. (line 6) 48004 * iswcntrl: Other Builtins. (line 6) 48005 * iswdigit: Other Builtins. (line 6) 48006 * iswgraph: Other Builtins. (line 6) 48007 * iswlower: Other Builtins. (line 6) 48008 * iswprint: Other Builtins. (line 6) 48009 * iswpunct: Other Builtins. (line 6) 48010 * iswspace: Other Builtins. (line 6) 48011 * iswupper: Other Builtins. (line 6) 48012 * iswxdigit: Other Builtins. (line 6) 48013 * isxdigit: Other Builtins. (line 6) 48014 * j0: Other Builtins. (line 6) 48015 * j0f: Other Builtins. (line 6) 48016 * j0l: Other Builtins. (line 6) 48017 * j1: Other Builtins. (line 6) 48018 * j1f: Other Builtins. (line 6) 48019 * j1l: Other Builtins. (line 6) 48020 * Java: G++ and GCC. (line 6) 48021 * java_interface attribute: C++ Attributes. (line 29) 48022 * jn: Other Builtins. (line 6) 48023 * jnf: Other Builtins. (line 6) 48024 * jnl: Other Builtins. (line 6) 48025 * k fixed-suffix: Fixed-Point. (line 6) 48026 * K fixed-suffix: Fixed-Point. (line 6) 48027 * keep_interrupts_masked attribute: Function Attributes. 48028 (line 624) 48029 * keywords, alternate: Alternate Keywords. (line 6) 48030 * known causes of trouble: Trouble. (line 6) 48031 * l1_data variable attribute: Variable Attributes. 48032 (line 330) 48033 * l1_data_A variable attribute: Variable Attributes. 48034 (line 330) 48035 * l1_data_B variable attribute: Variable Attributes. 48036 (line 330) 48037 * l1_text function attribute: Function Attributes. 48038 (line 712) 48039 * l2 function attribute: Function Attributes. 48040 (line 718) 48041 * l2 variable attribute: Variable Attributes. 48042 (line 338) 48043 * labeled elements in initializers: Designated Inits. (line 6) 48044 * labels as values: Labels as Values. (line 6) 48045 * labs: Other Builtins. (line 6) 48046 * LANG: Environment Variables. 48047 (line 21) 48048 * language dialect options: C Dialect Options. (line 6) 48049 * LC_ALL: Environment Variables. 48050 (line 21) 48051 * LC_CTYPE: Environment Variables. 48052 (line 21) 48053 * LC_MESSAGES: Environment Variables. 48054 (line 21) 48055 * ldexp: Other Builtins. (line 6) 48056 * ldexpf: Other Builtins. (line 6) 48057 * ldexpl: Other Builtins. (line 6) 48058 * leaf function attribute: Function Attributes. 48059 (line 724) 48060 * length-zero arrays: Zero Length. (line 6) 48061 * lgamma: Other Builtins. (line 6) 48062 * lgamma_r: Other Builtins. (line 6) 48063 * lgammaf: Other Builtins. (line 6) 48064 * lgammaf_r: Other Builtins. (line 6) 48065 * lgammal: Other Builtins. (line 6) 48066 * lgammal_r: Other Builtins. (line 6) 48067 * Libraries: Link Options. (line 24) 48068 * LIBRARY_PATH: Environment Variables. 48069 (line 94) 48070 * link options: Link Options. (line 6) 48071 * linker script: Link Options. (line 178) 48072 * lk fixed-suffix: Fixed-Point. (line 6) 48073 * LK fixed-suffix: Fixed-Point. (line 6) 48074 * LL integer suffix: Long Long. (line 6) 48075 * llabs: Other Builtins. (line 6) 48076 * LLK fixed-suffix: Fixed-Point. (line 6) 48077 * llk fixed-suffix: Fixed-Point. (line 6) 48078 * llr fixed-suffix: Fixed-Point. (line 6) 48079 * LLR fixed-suffix: Fixed-Point. (line 6) 48080 * llrint: Other Builtins. (line 6) 48081 * llrintf: Other Builtins. (line 6) 48082 * llrintl: Other Builtins. (line 6) 48083 * llround: Other Builtins. (line 6) 48084 * llroundf: Other Builtins. (line 6) 48085 * llroundl: Other Builtins. (line 6) 48086 * LM32 options: LM32 Options. (line 6) 48087 * load address instruction: Simple Constraints. (line 154) 48088 * local labels: Local Labels. (line 6) 48089 * local variables in macros: Typeof. (line 46) 48090 * local variables, specifying registers: Local Reg Vars. (line 6) 48091 * locale: Environment Variables. 48092 (line 21) 48093 * locale definition: Environment Variables. 48094 (line 103) 48095 * log: Other Builtins. (line 6) 48096 * log10: Other Builtins. (line 6) 48097 * log10f: Other Builtins. (line 6) 48098 * log10l: Other Builtins. (line 6) 48099 * log1p: Other Builtins. (line 6) 48100 * log1pf: Other Builtins. (line 6) 48101 * log1pl: Other Builtins. (line 6) 48102 * log2: Other Builtins. (line 6) 48103 * log2f: Other Builtins. (line 6) 48104 * log2l: Other Builtins. (line 6) 48105 * logb: Other Builtins. (line 6) 48106 * logbf: Other Builtins. (line 6) 48107 * logbl: Other Builtins. (line 6) 48108 * logf: Other Builtins. (line 6) 48109 * logl: Other Builtins. (line 6) 48110 * long long data types: Long Long. (line 6) 48111 * longjmp: Global Reg Vars. (line 66) 48112 * longjmp incompatibilities: Incompatibilities. (line 39) 48113 * longjmp warnings: Warning Options. (line 738) 48114 * lr fixed-suffix: Fixed-Point. (line 6) 48115 * LR fixed-suffix: Fixed-Point. (line 6) 48116 * lrint: Other Builtins. (line 6) 48117 * lrintf: Other Builtins. (line 6) 48118 * lrintl: Other Builtins. (line 6) 48119 * lround: Other Builtins. (line 6) 48120 * lroundf: Other Builtins. (line 6) 48121 * lroundl: Other Builtins. (line 6) 48122 * m in constraint: Simple Constraints. (line 17) 48123 * M32C options: M32C Options. (line 6) 48124 * M32R/D options: M32R/D Options. (line 6) 48125 * M680x0 options: M680x0 Options. (line 6) 48126 * M68hc1x options: M68hc1x Options. (line 6) 48127 * machine dependent options: Submodel Options. (line 6) 48128 * machine specific constraints: Machine Constraints. 48129 (line 6) 48130 * macro with variable arguments: Variadic Macros. (line 6) 48131 * macros containing asm: Extended Asm. (line 242) 48132 * macros, inline alternative: Inline. (line 6) 48133 * macros, local labels: Local Labels. (line 6) 48134 * macros, local variables in: Typeof. (line 46) 48135 * macros, statements in expressions: Statement Exprs. (line 6) 48136 * macros, types of arguments: Typeof. (line 6) 48137 * make: Preprocessor Options. 48138 (line 173) 48139 * malloc: Other Builtins. (line 6) 48140 * malloc attribute: Function Attributes. 48141 (line 783) 48142 * matching constraint: Simple Constraints. (line 139) 48143 * MCore options: MCore Options. (line 6) 48144 * member fns, automatically inline: Inline. (line 71) 48145 * memchr: Other Builtins. (line 6) 48146 * memcmp: Other Builtins. (line 6) 48147 * memcpy: Other Builtins. (line 6) 48148 * memory references in constraints: Simple Constraints. (line 17) 48149 * mempcpy: Other Builtins. (line 6) 48150 * memset: Other Builtins. (line 6) 48151 * MeP options: MeP Options. (line 6) 48152 * Mercury: G++ and GCC. (line 23) 48153 * message formatting: Language Independent Options. 48154 (line 6) 48155 * messages, warning: Warning Options. (line 6) 48156 * messages, warning and error: Warnings and Errors. 48157 (line 6) 48158 * MicroBlaze Options: MicroBlaze Options. (line 6) 48159 * middle-operands, omitted: Conditionals. (line 6) 48160 * MIPS options: MIPS Options. (line 6) 48161 * mips16 attribute: Function Attributes. 48162 (line 793) 48163 * misunderstandings in C++: C++ Misunderstandings. 48164 (line 6) 48165 * mixed declarations and code: Mixed Declarations. (line 6) 48166 * mktemp, and constant strings: Incompatibilities. (line 13) 48167 * MMIX Options: MMIX Options. (line 6) 48168 * MN10300 options: MN10300 Options. (line 6) 48169 * mode attribute: Variable Attributes. 48170 (line 134) 48171 * modf: Other Builtins. (line 6) 48172 * modff: Other Builtins. (line 6) 48173 * modfl: Other Builtins. (line 6) 48174 * modifiers in constraints: Modifiers. (line 6) 48175 * ms_abi attribute: Function Attributes. 48176 (line 835) 48177 * ms_hook_prologue attribute: Function Attributes. 48178 (line 859) 48179 * ms_struct: Type Attributes. (line 319) 48180 * ms_struct attribute: Variable Attributes. 48181 (line 419) 48182 * mudflap: Optimize Options. (line 393) 48183 * multiple alternative constraints: Multi-Alternative. (line 6) 48184 * multiprecision arithmetic: Long Long. (line 6) 48185 * n in constraint: Simple Constraints. (line 75) 48186 * named address spaces: Named Address Spaces. 48187 (line 6) 48188 * names used in assembler code: Asm Labels. (line 6) 48189 * naming convention, implementation headers: C++ Interface. (line 46) 48190 * nearbyint: Other Builtins. (line 6) 48191 * nearbyintf: Other Builtins. (line 6) 48192 * nearbyintl: Other Builtins. (line 6) 48193 * nested functions: Nested Functions. (line 6) 48194 * newlines (escaped): Escaped Newlines. (line 6) 48195 * nextafter: Other Builtins. (line 6) 48196 * nextafterf: Other Builtins. (line 6) 48197 * nextafterl: Other Builtins. (line 6) 48198 * nexttoward: Other Builtins. (line 6) 48199 * nexttowardf: Other Builtins. (line 6) 48200 * nexttowardl: Other Builtins. (line 6) 48201 * NFC: Warning Options. (line 1329) 48202 * NFKC: Warning Options. (line 1329) 48203 * NMI handler functions on the Blackfin processor: Function Attributes. 48204 (line 893) 48205 * no_instrument_function function attribute: Function Attributes. 48206 (line 899) 48207 * no_split_stack function attribute: Function Attributes. 48208 (line 904) 48209 * noclone function attribute: Function Attributes. 48210 (line 920) 48211 * nocommon attribute: Variable Attributes. 48212 (line 105) 48213 * noinline function attribute: Function Attributes. 48214 (line 910) 48215 * nomips16 attribute: Function Attributes. 48216 (line 793) 48217 * non-constant initializers: Initializers. (line 6) 48218 * non-static inline function: Inline. (line 85) 48219 * nonnull function attribute: Function Attributes. 48220 (line 926) 48221 * noreturn function attribute: Function Attributes. 48222 (line 953) 48223 * nothrow function attribute: Function Attributes. 48224 (line 995) 48225 * o in constraint: Simple Constraints. (line 23) 48226 * OBJC_INCLUDE_PATH: Environment Variables. 48227 (line 129) 48228 * Objective-C <1>: G++ and GCC. (line 6) 48229 * Objective-C: Standards. (line 157) 48230 * Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options. 48231 (line 6) 48232 * Objective-C++ <1>: Standards. (line 157) 48233 * Objective-C++: G++ and GCC. (line 6) 48234 * offsettable address: Simple Constraints. (line 23) 48235 * old-style function definitions: Function Prototypes. 48236 (line 6) 48237 * omitted middle-operands: Conditionals. (line 6) 48238 * open coding: Inline. (line 6) 48239 * OpenMP parallel: C Dialect Options. (line 235) 48240 * operand constraints, asm: Constraints. (line 6) 48241 * optimize function attribute: Function Attributes. 48242 (line 1003) 48243 * optimize options: Optimize Options. (line 6) 48244 * options to control diagnostics formatting: Language Independent Options. 48245 (line 6) 48246 * options to control warnings: Warning Options. (line 6) 48247 * options, C++: C++ Dialect Options. 48248 (line 6) 48249 * options, code generation: Code Gen Options. (line 6) 48250 * options, debugging: Debugging Options. (line 6) 48251 * options, dialect: C Dialect Options. (line 6) 48252 * options, directory search: Directory Options. (line 6) 48253 * options, GCC command: Invoking GCC. (line 6) 48254 * options, grouping: Invoking GCC. (line 26) 48255 * options, linking: Link Options. (line 6) 48256 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 48257 (line 6) 48258 * options, optimization: Optimize Options. (line 6) 48259 * options, order: Invoking GCC. (line 30) 48260 * options, preprocessor: Preprocessor Options. 48261 (line 6) 48262 * order of evaluation, side effects: Non-bugs. (line 196) 48263 * order of options: Invoking GCC. (line 30) 48264 * OS_main AVR function attribute: Function Attributes. 48265 (line 1020) 48266 * OS_task AVR function attribute: Function Attributes. 48267 (line 1020) 48268 * other register constraints: Simple Constraints. (line 163) 48269 * output file option: Overall Options. (line 191) 48270 * overloaded virtual function, warning: C++ Dialect Options. 48271 (line 538) 48272 * p in constraint: Simple Constraints. (line 154) 48273 * packed attribute: Variable Attributes. 48274 (line 145) 48275 * parameter forward declaration: Variable Length. (line 59) 48276 * Pascal: G++ and GCC. (line 23) 48277 * pcs function attribute: Function Attributes. 48278 (line 1045) 48279 * PDP-11 Options: PDP-11 Options. (line 6) 48280 * PIC: Code Gen Options. (line 184) 48281 * picoChip options: picoChip Options. (line 6) 48282 * pmf: Bound member functions. 48283 (line 6) 48284 * pointer arguments: Function Attributes. 48285 (line 188) 48286 * pointer to member function: Bound member functions. 48287 (line 6) 48288 * portions of temporary objects, pointers to: Temporaries. (line 6) 48289 * pow: Other Builtins. (line 6) 48290 * pow10: Other Builtins. (line 6) 48291 * pow10f: Other Builtins. (line 6) 48292 * pow10l: Other Builtins. (line 6) 48293 * PowerPC options: PowerPC Options. (line 6) 48294 * powf: Other Builtins. (line 6) 48295 * powl: Other Builtins. (line 6) 48296 * pragma GCC optimize: Function Specific Option Pragmas. 48297 (line 21) 48298 * pragma GCC pop_options: Function Specific Option Pragmas. 48299 (line 34) 48300 * pragma GCC push_options: Function Specific Option Pragmas. 48301 (line 34) 48302 * pragma GCC reset_options: Function Specific Option Pragmas. 48303 (line 44) 48304 * pragma GCC target: Function Specific Option Pragmas. 48305 (line 7) 48306 * pragma, address: M32C Pragmas. (line 15) 48307 * pragma, align: Solaris Pragmas. (line 11) 48308 * pragma, call: MeP Pragmas. (line 48) 48309 * pragma, coprocessor available: MeP Pragmas. (line 13) 48310 * pragma, coprocessor call_saved: MeP Pragmas. (line 20) 48311 * pragma, coprocessor subclass: MeP Pragmas. (line 28) 48312 * pragma, custom io_volatile: MeP Pragmas. (line 7) 48313 * pragma, diagnostic: Diagnostic Pragmas. (line 14) 48314 * pragma, disinterrupt: MeP Pragmas. (line 38) 48315 * pragma, extern_prefix: Symbol-Renaming Pragmas. 48316 (line 20) 48317 * pragma, fini: Solaris Pragmas. (line 19) 48318 * pragma, init: Solaris Pragmas. (line 24) 48319 * pragma, long_calls: ARM Pragmas. (line 11) 48320 * pragma, long_calls_off: ARM Pragmas. (line 17) 48321 * pragma, longcall: RS/6000 and PowerPC Pragmas. 48322 (line 14) 48323 * pragma, mark: Darwin Pragmas. (line 11) 48324 * pragma, memregs: M32C Pragmas. (line 7) 48325 * pragma, no_long_calls: ARM Pragmas. (line 14) 48326 * pragma, options align: Darwin Pragmas. (line 14) 48327 * pragma, pop_macro: Push/Pop Macro Pragmas. 48328 (line 15) 48329 * pragma, push_macro: Push/Pop Macro Pragmas. 48330 (line 11) 48331 * pragma, reason for not using: Function Attributes. 48332 (line 1767) 48333 * pragma, redefine_extname: Symbol-Renaming Pragmas. 48334 (line 14) 48335 * pragma, segment: Darwin Pragmas. (line 21) 48336 * pragma, unused: Darwin Pragmas. (line 24) 48337 * pragma, visibility: Visibility Pragmas. (line 8) 48338 * pragma, weak: Weak Pragmas. (line 10) 48339 * pragmas: Pragmas. (line 6) 48340 * pragmas in C++, effect on inlining: C++ Interface. (line 66) 48341 * pragmas, interface and implementation: C++ Interface. (line 6) 48342 * pragmas, warning of unknown: Warning Options. (line 755) 48343 * precompiled headers: Precompiled Headers. 48344 (line 6) 48345 * preprocessing numbers: Incompatibilities. (line 173) 48346 * preprocessing tokens: Incompatibilities. (line 173) 48347 * preprocessor options: Preprocessor Options. 48348 (line 6) 48349 * printf: Other Builtins. (line 6) 48350 * printf_unlocked: Other Builtins. (line 6) 48351 * prof: Debugging Options. (line 294) 48352 * progmem AVR variable attribute: Variable Attributes. 48353 (line 314) 48354 * promotion of formal parameters: Function Prototypes. 48355 (line 6) 48356 * pure function attribute: Function Attributes. 48357 (line 1063) 48358 * push address instruction: Simple Constraints. (line 154) 48359 * putchar: Other Builtins. (line 6) 48360 * puts: Other Builtins. (line 6) 48361 * q floating point suffix: Floating Types. (line 6) 48362 * Q floating point suffix: Floating Types. (line 6) 48363 * qsort, and global register variables: Global Reg Vars. (line 42) 48364 * question mark: Multi-Alternative. (line 27) 48365 * r fixed-suffix: Fixed-Point. (line 6) 48366 * R fixed-suffix: Fixed-Point. (line 6) 48367 * r in constraint: Simple Constraints. (line 66) 48368 * ranges in case statements: Case Ranges. (line 6) 48369 * read-only strings: Incompatibilities. (line 9) 48370 * register variable after longjmp: Global Reg Vars. (line 66) 48371 * registers: Extended Asm. (line 6) 48372 * registers for local variables: Local Reg Vars. (line 6) 48373 * registers in constraints: Simple Constraints. (line 66) 48374 * registers, global allocation: Explicit Reg Vars. (line 6) 48375 * registers, global variables in: Global Reg Vars. (line 6) 48376 * regparm attribute: Function Attributes. 48377 (line 1116) 48378 * relocation truncated to fit (ColdFire): M680x0 Options. (line 328) 48379 * relocation truncated to fit (MIPS): MIPS Options. (line 199) 48380 * remainder: Other Builtins. (line 6) 48381 * remainderf: Other Builtins. (line 6) 48382 * remainderl: Other Builtins. (line 6) 48383 * remquo: Other Builtins. (line 6) 48384 * remquof: Other Builtins. (line 6) 48385 * remquol: Other Builtins. (line 6) 48386 * reordering, warning: C++ Dialect Options. 48387 (line 463) 48388 * reporting bugs: Bugs. (line 6) 48389 * resbank attribute: Function Attributes. 48390 (line 1148) 48391 * rest argument (in macro): Variadic Macros. (line 6) 48392 * restricted pointers: Restricted Pointers. 48393 (line 6) 48394 * restricted references: Restricted Pointers. 48395 (line 6) 48396 * restricted this pointer: Restricted Pointers. 48397 (line 6) 48398 * returns_twice attribute: Function Attributes. 48399 (line 1162) 48400 * rindex: Other Builtins. (line 6) 48401 * rint: Other Builtins. (line 6) 48402 * rintf: Other Builtins. (line 6) 48403 * rintl: Other Builtins. (line 6) 48404 * round: Other Builtins. (line 6) 48405 * roundf: Other Builtins. (line 6) 48406 * roundl: Other Builtins. (line 6) 48407 * RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 48408 (line 6) 48409 * RTTI: Vague Linkage. (line 43) 48410 * run-time options: Code Gen Options. (line 6) 48411 * RX Options: RX Options. (line 6) 48412 * s in constraint: Simple Constraints. (line 102) 48413 * S/390 and zSeries Options: S/390 and zSeries Options. 48414 (line 6) 48415 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 48416 (line 1171) 48417 * save volatile registers on the MicroBlaze: Function Attributes. 48418 (line 1176) 48419 * scalb: Other Builtins. (line 6) 48420 * scalbf: Other Builtins. (line 6) 48421 * scalbl: Other Builtins. (line 6) 48422 * scalbln: Other Builtins. (line 6) 48423 * scalblnf: Other Builtins. (line 6) 48424 * scalbn: Other Builtins. (line 6) 48425 * scalbnf: Other Builtins. (line 6) 48426 * scanf, and constant strings: Incompatibilities. (line 17) 48427 * scanfnl: Other Builtins. (line 6) 48428 * scope of a variable length array: Variable Length. (line 22) 48429 * scope of declaration: Disappointments. (line 21) 48430 * scope of external declarations: Incompatibilities. (line 80) 48431 * Score Options: Score Options. (line 6) 48432 * search path: Directory Options. (line 6) 48433 * section function attribute: Function Attributes. 48434 (line 1184) 48435 * section variable attribute: Variable Attributes. 48436 (line 166) 48437 * sentinel function attribute: Function Attributes. 48438 (line 1200) 48439 * setjmp: Global Reg Vars. (line 66) 48440 * setjmp incompatibilities: Incompatibilities. (line 39) 48441 * shared strings: Incompatibilities. (line 9) 48442 * shared variable attribute: Variable Attributes. 48443 (line 211) 48444 * side effect in ?:: Conditionals. (line 20) 48445 * side effects, macro argument: Statement Exprs. (line 35) 48446 * side effects, order of evaluation: Non-bugs. (line 196) 48447 * signal handler functions on the AVR processors: Function Attributes. 48448 (line 1231) 48449 * signbit: Other Builtins. (line 6) 48450 * signbitd128: Other Builtins. (line 6) 48451 * signbitd32: Other Builtins. (line 6) 48452 * signbitd64: Other Builtins. (line 6) 48453 * signbitf: Other Builtins. (line 6) 48454 * signbitl: Other Builtins. (line 6) 48455 * signed and unsigned values, comparison warning: Warning Options. 48456 (line 1201) 48457 * significand: Other Builtins. (line 6) 48458 * significandf: Other Builtins. (line 6) 48459 * significandl: Other Builtins. (line 6) 48460 * simple constraints: Simple Constraints. (line 6) 48461 * sin: Other Builtins. (line 6) 48462 * sincos: Other Builtins. (line 6) 48463 * sincosf: Other Builtins. (line 6) 48464 * sincosl: Other Builtins. (line 6) 48465 * sinf: Other Builtins. (line 6) 48466 * sinh: Other Builtins. (line 6) 48467 * sinhf: Other Builtins. (line 6) 48468 * sinhl: Other Builtins. (line 6) 48469 * sinl: Other Builtins. (line 6) 48470 * sizeof: Typeof. (line 6) 48471 * smaller data references: M32R/D Options. (line 57) 48472 * smaller data references (PowerPC): RS/6000 and PowerPC Options. 48473 (line 703) 48474 * snprintf: Other Builtins. (line 6) 48475 * Solaris 2 options: Solaris 2 Options. (line 6) 48476 * SPARC options: SPARC Options. (line 6) 48477 * Spec Files: Spec Files. (line 6) 48478 * specified registers: Explicit Reg Vars. (line 6) 48479 * specifying compiler version and target machine: Target Options. 48480 (line 6) 48481 * specifying hardware config: Submodel Options. (line 6) 48482 * specifying machine version: Target Options. (line 6) 48483 * specifying registers for local variables: Local Reg Vars. (line 6) 48484 * speed of compilation: Precompiled Headers. 48485 (line 6) 48486 * sprintf: Other Builtins. (line 6) 48487 * SPU options: SPU Options. (line 6) 48488 * sqrt: Other Builtins. (line 6) 48489 * sqrtf: Other Builtins. (line 6) 48490 * sqrtl: Other Builtins. (line 6) 48491 * sscanf: Other Builtins. (line 6) 48492 * sscanf, and constant strings: Incompatibilities. (line 17) 48493 * sseregparm attribute: Function Attributes. 48494 (line 1133) 48495 * statements inside expressions: Statement Exprs. (line 6) 48496 * static data in C++, declaring and defining: Static Definitions. 48497 (line 6) 48498 * stpcpy: Other Builtins. (line 6) 48499 * stpncpy: Other Builtins. (line 6) 48500 * strcasecmp: Other Builtins. (line 6) 48501 * strcat: Other Builtins. (line 6) 48502 * strchr: Other Builtins. (line 6) 48503 * strcmp: Other Builtins. (line 6) 48504 * strcpy: Other Builtins. (line 6) 48505 * strcspn: Other Builtins. (line 6) 48506 * strdup: Other Builtins. (line 6) 48507 * strfmon: Other Builtins. (line 6) 48508 * strftime: Other Builtins. (line 6) 48509 * string constants: Incompatibilities. (line 9) 48510 * strlen: Other Builtins. (line 6) 48511 * strncasecmp: Other Builtins. (line 6) 48512 * strncat: Other Builtins. (line 6) 48513 * strncmp: Other Builtins. (line 6) 48514 * strncpy: Other Builtins. (line 6) 48515 * strndup: Other Builtins. (line 6) 48516 * strpbrk: Other Builtins. (line 6) 48517 * strrchr: Other Builtins. (line 6) 48518 * strspn: Other Builtins. (line 6) 48519 * strstr: Other Builtins. (line 6) 48520 * struct: Unnamed Fields. (line 6) 48521 * structures: Incompatibilities. (line 146) 48522 * structures, constructor expression: Compound Literals. (line 6) 48523 * submodel options: Submodel Options. (line 6) 48524 * subscripting: Subscripting. (line 6) 48525 * subscripting and function values: Subscripting. (line 6) 48526 * suffixes for C++ source: Invoking G++. (line 6) 48527 * SUNPRO_DEPENDENCIES: Environment Variables. 48528 (line 169) 48529 * suppressing warnings: Warning Options. (line 6) 48530 * surprises in C++: C++ Misunderstandings. 48531 (line 6) 48532 * syntax checking: Warning Options. (line 13) 48533 * syscall_linkage attribute: Function Attributes. 48534 (line 1253) 48535 * system headers, warnings from: Warning Options. (line 887) 48536 * sysv_abi attribute: Function Attributes. 48537 (line 835) 48538 * tan: Other Builtins. (line 6) 48539 * tanf: Other Builtins. (line 6) 48540 * tanh: Other Builtins. (line 6) 48541 * tanhf: Other Builtins. (line 6) 48542 * tanhl: Other Builtins. (line 6) 48543 * tanl: Other Builtins. (line 6) 48544 * target function attribute: Function Attributes. 48545 (line 1260) 48546 * target machine, specifying: Target Options. (line 6) 48547 * target options: Target Options. (line 6) 48548 * target("abm") attribute: Function Attributes. 48549 (line 1287) 48550 * target("aes") attribute: Function Attributes. 48551 (line 1292) 48552 * target("align-stringops") attribute: Function Attributes. 48553 (line 1382) 48554 * target("altivec") attribute: Function Attributes. 48555 (line 1408) 48556 * target("arch=ARCH") attribute: Function Attributes. 48557 (line 1391) 48558 * target("avoid-indexed-addresses") attribute: Function Attributes. 48559 (line 1528) 48560 * target("cld") attribute: Function Attributes. 48561 (line 1353) 48562 * target("cmpb") attribute: Function Attributes. 48563 (line 1414) 48564 * target("cpu=CPU") attribute: Function Attributes. 48565 (line 1543) 48566 * target("dlmzb") attribute: Function Attributes. 48567 (line 1420) 48568 * target("fancy-math-387") attribute: Function Attributes. 48569 (line 1357) 48570 * target("fma4") attribute: Function Attributes. 48571 (line 1337) 48572 * target("fpmath=FPMATH") attribute: Function Attributes. 48573 (line 1399) 48574 * target("fprnd") attribute: Function Attributes. 48575 (line 1427) 48576 * target("friz") attribute: Function Attributes. 48577 (line 1519) 48578 * target("fused-madd") attribute: Function Attributes. 48579 (line 1362) 48580 * target("hard-dfp") attribute: Function Attributes. 48581 (line 1433) 48582 * target("ieee-fp") attribute: Function Attributes. 48583 (line 1367) 48584 * target("inline-all-stringops") attribute: Function Attributes. 48585 (line 1372) 48586 * target("inline-stringops-dynamically") attribute: Function Attributes. 48587 (line 1376) 48588 * target("isel") attribute: Function Attributes. 48589 (line 1438) 48590 * target("longcall") attribute: Function Attributes. 48591 (line 1538) 48592 * target("lwp") attribute: Function Attributes. 48593 (line 1345) 48594 * target("mfcrf") attribute: Function Attributes. 48595 (line 1442) 48596 * target("mfpgpr") attribute: Function Attributes. 48597 (line 1449) 48598 * target("mmx") attribute: Function Attributes. 48599 (line 1296) 48600 * target("mulhw") attribute: Function Attributes. 48601 (line 1456) 48602 * target("multiple") attribute: Function Attributes. 48603 (line 1463) 48604 * target("paired") attribute: Function Attributes. 48605 (line 1533) 48606 * target("pclmul") attribute: Function Attributes. 48607 (line 1300) 48608 * target("popcnt") attribute: Function Attributes. 48609 (line 1304) 48610 * target("popcntb") attribute: Function Attributes. 48611 (line 1474) 48612 * target("popcntd") attribute: Function Attributes. 48613 (line 1481) 48614 * target("powerpc-gfxopt") attribute: Function Attributes. 48615 (line 1487) 48616 * target("powerpc-gpopt") attribute: Function Attributes. 48617 (line 1493) 48618 * target("recip") attribute: Function Attributes. 48619 (line 1386) 48620 * target("recip-precision") attribute: Function Attributes. 48621 (line 1499) 48622 * target("sse") attribute: Function Attributes. 48623 (line 1308) 48624 * target("sse2") attribute: Function Attributes. 48625 (line 1312) 48626 * target("sse3") attribute: Function Attributes. 48627 (line 1316) 48628 * target("sse4") attribute: Function Attributes. 48629 (line 1320) 48630 * target("sse4.1") attribute: Function Attributes. 48631 (line 1325) 48632 * target("sse4.2") attribute: Function Attributes. 48633 (line 1329) 48634 * target("sse4a") attribute: Function Attributes. 48635 (line 1333) 48636 * target("ssse3") attribute: Function Attributes. 48637 (line 1349) 48638 * target("string") attribute: Function Attributes. 48639 (line 1505) 48640 * target("tune=TUNE") attribute: Function Attributes. 48641 (line 1395) 48642 * target("update") attribute: Function Attributes. 48643 (line 1468) 48644 * target("vsx") attribute: Function Attributes. 48645 (line 1511) 48646 * target("xop") attribute: Function Attributes. 48647 (line 1341) 48648 * TC1: Standards. (line 13) 48649 * TC2: Standards. (line 13) 48650 * TC3: Standards. (line 13) 48651 * Technical Corrigenda: Standards. (line 13) 48652 * Technical Corrigendum 1: Standards. (line 13) 48653 * Technical Corrigendum 2: Standards. (line 13) 48654 * Technical Corrigendum 3: Standards. (line 13) 48655 * template instantiation: Template Instantiation. 48656 (line 6) 48657 * temporaries, lifetime of: Temporaries. (line 6) 48658 * tgamma: Other Builtins. (line 6) 48659 * tgammaf: Other Builtins. (line 6) 48660 * tgammal: Other Builtins. (line 6) 48661 * Thread-Local Storage: Thread-Local. (line 6) 48662 * thunks: Nested Functions. (line 6) 48663 * tiny data section on the H8/300H and H8S: Function Attributes. 48664 (line 1572) 48665 * TLS: Thread-Local. (line 6) 48666 * tls_model attribute: Variable Attributes. 48667 (line 235) 48668 * TMPDIR: Environment Variables. 48669 (line 45) 48670 * toascii: Other Builtins. (line 6) 48671 * tolower: Other Builtins. (line 6) 48672 * toupper: Other Builtins. (line 6) 48673 * towlower: Other Builtins. (line 6) 48674 * towupper: Other Builtins. (line 6) 48675 * traditional C language: C Dialect Options. (line 282) 48676 * trunc: Other Builtins. (line 6) 48677 * truncf: Other Builtins. (line 6) 48678 * truncl: Other Builtins. (line 6) 48679 * two-stage name lookup: Name lookup. (line 6) 48680 * type alignment: Alignment. (line 6) 48681 * type attributes: Type Attributes. (line 6) 48682 * type_info: Vague Linkage. (line 43) 48683 * typedef names as function parameters: Incompatibilities. (line 97) 48684 * typeof: Typeof. (line 6) 48685 * UHK fixed-suffix: Fixed-Point. (line 6) 48686 * uhk fixed-suffix: Fixed-Point. (line 6) 48687 * UHR fixed-suffix: Fixed-Point. (line 6) 48688 * uhr fixed-suffix: Fixed-Point. (line 6) 48689 * UK fixed-suffix: Fixed-Point. (line 6) 48690 * uk fixed-suffix: Fixed-Point. (line 6) 48691 * ulk fixed-suffix: Fixed-Point. (line 6) 48692 * ULK fixed-suffix: Fixed-Point. (line 6) 48693 * ULL integer suffix: Long Long. (line 6) 48694 * ullk fixed-suffix: Fixed-Point. (line 6) 48695 * ULLK fixed-suffix: Fixed-Point. (line 6) 48696 * ULLR fixed-suffix: Fixed-Point. (line 6) 48697 * ullr fixed-suffix: Fixed-Point. (line 6) 48698 * ulr fixed-suffix: Fixed-Point. (line 6) 48699 * ULR fixed-suffix: Fixed-Point. (line 6) 48700 * undefined behavior: Bug Criteria. (line 17) 48701 * undefined function value: Bug Criteria. (line 17) 48702 * underscores in variables in macros: Typeof. (line 46) 48703 * union: Unnamed Fields. (line 6) 48704 * union, casting to a: Cast to Union. (line 6) 48705 * unions: Incompatibilities. (line 146) 48706 * unknown pragmas, warning: Warning Options. (line 755) 48707 * unresolved references and -nodefaultlibs: Link Options. (line 82) 48708 * unresolved references and -nostdlib: Link Options. (line 82) 48709 * unused attribute.: Function Attributes. 48710 (line 1584) 48711 * UR fixed-suffix: Fixed-Point. (line 6) 48712 * ur fixed-suffix: Fixed-Point. (line 6) 48713 * use_debug_exception_return attribute: Function Attributes. 48714 (line 629) 48715 * use_shadow_register_set attribute: Function Attributes. 48716 (line 620) 48717 * used attribute.: Function Attributes. 48718 (line 1589) 48719 * User stack pointer in interrupts on the Blackfin: Function Attributes. 48720 (line 707) 48721 * V in constraint: Simple Constraints. (line 43) 48722 * V850 Options: V850 Options. (line 6) 48723 * vague linkage: Vague Linkage. (line 6) 48724 * value after longjmp: Global Reg Vars. (line 66) 48725 * variable addressability on the IA-64: Function Attributes. 48726 (line 807) 48727 * variable addressability on the M32R/D: Variable Attributes. 48728 (line 348) 48729 * variable alignment: Alignment. (line 6) 48730 * variable attributes: Variable Attributes. 48731 (line 6) 48732 * variable number of arguments: Variadic Macros. (line 6) 48733 * variable-length array scope: Variable Length. (line 22) 48734 * variable-length arrays: Variable Length. (line 6) 48735 * variables in specified registers: Explicit Reg Vars. (line 6) 48736 * variables, local, in macros: Typeof. (line 46) 48737 * variadic macros: Variadic Macros. (line 6) 48738 * VAX options: VAX Options. (line 6) 48739 * version_id attribute: Function Attributes. 48740 (line 1595) 48741 * vfprintf: Other Builtins. (line 6) 48742 * vfscanf: Other Builtins. (line 6) 48743 * visibility attribute: Function Attributes. 48744 (line 1605) 48745 * VLAs: Variable Length. (line 6) 48746 * vliw attribute: Function Attributes. 48747 (line 1699) 48748 * void pointers, arithmetic: Pointer Arith. (line 6) 48749 * void, size of pointer to: Pointer Arith. (line 6) 48750 * volatile access <1>: Volatiles. (line 6) 48751 * volatile access: C++ Volatiles. (line 6) 48752 * volatile applied to function: Function Attributes. 48753 (line 6) 48754 * volatile read <1>: C++ Volatiles. (line 6) 48755 * volatile read: Volatiles. (line 6) 48756 * volatile write <1>: Volatiles. (line 6) 48757 * volatile write: C++ Volatiles. (line 6) 48758 * vprintf: Other Builtins. (line 6) 48759 * vscanf: Other Builtins. (line 6) 48760 * vsnprintf: Other Builtins. (line 6) 48761 * vsprintf: Other Builtins. (line 6) 48762 * vsscanf: Other Builtins. (line 6) 48763 * vtable: Vague Linkage. (line 28) 48764 * VxWorks Options: VxWorks Options. (line 6) 48765 * w floating point suffix: Floating Types. (line 6) 48766 * W floating point suffix: Floating Types. (line 6) 48767 * warn_unused_result attribute: Function Attributes. 48768 (line 1705) 48769 * warning for comparison of signed and unsigned values: Warning Options. 48770 (line 1201) 48771 * warning for overloaded virtual function: C++ Dialect Options. 48772 (line 538) 48773 * warning for reordering of member initializers: C++ Dialect Options. 48774 (line 463) 48775 * warning for unknown pragmas: Warning Options. (line 755) 48776 * warning function attribute: Function Attributes. 48777 (line 165) 48778 * warning messages: Warning Options. (line 6) 48779 * warnings from system headers: Warning Options. (line 887) 48780 * warnings vs errors: Warnings and Errors. 48781 (line 6) 48782 * weak attribute: Function Attributes. 48783 (line 1722) 48784 * weakref attribute: Function Attributes. 48785 (line 1731) 48786 * whitespace: Incompatibilities. (line 112) 48787 * X in constraint: Simple Constraints. (line 124) 48788 * X3.159-1989: Standards. (line 13) 48789 * x86-64 Options: i386 and x86-64 Options. 48790 (line 6) 48791 * x86-64 options: x86-64 Options. (line 6) 48792 * Xstormy16 Options: Xstormy16 Options. (line 6) 48793 * Xtensa Options: Xtensa Options. (line 6) 48794 * y0: Other Builtins. (line 6) 48795 * y0f: Other Builtins. (line 6) 48796 * y0l: Other Builtins. (line 6) 48797 * y1: Other Builtins. (line 6) 48798 * y1f: Other Builtins. (line 6) 48799 * y1l: Other Builtins. (line 6) 48800 * yn: Other Builtins. (line 6) 48801 * ynf: Other Builtins. (line 6) 48802 * ynl: Other Builtins. (line 6) 48803 * zero-length arrays: Zero Length. (line 6) 48804 * zero-size structures: Empty Structures. (line 6) 48805 * zSeries options: zSeries Options. (line 6) 48806 48807 48808 48809 Tag Table: 48810 Node: Top2126 48811 Node: G++ and GCC3899 48812 Node: Standards5968 48813 Node: Invoking GCC18135 48814 Node: Option Summary21886 48815 Node: Overall Options59772 48816 Node: Invoking G++74513 48817 Node: C Dialect Options76036 48818 Node: C++ Dialect Options91116 48819 Node: Objective-C and Objective-C++ Dialect Options116116 48820 Node: Language Independent Options126655 48821 Node: Warning Options129579 48822 Node: Debugging Options198962 48823 Node: Optimize Options249766 48824 Ref: Type-punning305804 48825 Node: Preprocessor Options385215 48826 Ref: Wtrigraphs389313 48827 Ref: dashMF394061 48828 Ref: fdollars-in-identifiers404905 48829 Node: Assembler Options413466 48830 Node: Link Options414268 48831 Ref: Link Options-Footnote-1424626 48832 Node: Directory Options424960 48833 Node: Spec Files431249 48834 Node: Target Options453227 48835 Node: Submodel Options453626 48836 Node: ARC Options455245 48837 Node: ARM Options456435 48838 Node: AVR Options470166 48839 Node: Blackfin Options475744 48840 Node: CRIS Options483692 48841 Node: CRX Options487433 48842 Node: Darwin Options487858 48843 Node: DEC Alpha Options495350 48844 Node: DEC Alpha/VMS Options507266 48845 Node: FR30 Options507840 48846 Node: FRV Options508415 48847 Node: GNU/Linux Options515132 48848 Node: H8/300 Options516393 48849 Node: HPPA Options517460 48850 Node: i386 and x86-64 Options526960 48851 Node: i386 and x86-64 Windows Options558120 48852 Node: IA-64 Options560668 48853 Node: IA-64/VMS Options568686 48854 Node: LM32 Options569241 48855 Node: M32C Options569770 48856 Node: M32R/D Options571060 48857 Node: M680x0 Options574647 48858 Node: M68hc1x Options588654 48859 Node: MCore Options590223 48860 Node: MeP Options591730 48861 Node: MicroBlaze Options595703 48862 Node: MIPS Options598274 48863 Node: MMIX Options626194 48864 Node: MN10300 Options628676 48865 Node: PDP-11 Options630884 48866 Node: picoChip Options632578 48867 Node: PowerPC Options634777 48868 Node: RS/6000 and PowerPC Options635013 48869 Node: RX Options671755 48870 Node: S/390 and zSeries Options677327 48871 Node: Score Options685258 48872 Node: SH Options686086 48873 Node: Solaris 2 Options697225 48874 Node: SPARC Options698745 48875 Node: SPU Options708563 48876 Node: System V Options713567 48877 Node: V850 Options714390 48878 Node: VAX Options717969 48879 Node: VxWorks Options718517 48880 Node: x86-64 Options719672 48881 Node: Xstormy16 Options719890 48882 Node: Xtensa Options720179 48883 Node: zSeries Options724513 48884 Node: Code Gen Options724709 48885 Node: Environment Variables751140 48886 Node: Precompiled Headers759036 48887 Node: C Implementation765235 48888 Node: Translation implementation766898 48889 Node: Environment implementation767472 48890 Node: Identifiers implementation768022 48891 Node: Characters implementation769076 48892 Node: Integers implementation771882 48893 Node: Floating point implementation773707 48894 Node: Arrays and pointers implementation776636 48895 Ref: Arrays and pointers implementation-Footnote-1778071 48896 Node: Hints implementation778195 48897 Node: Structures unions enumerations and bit-fields implementation779661 48898 Node: Qualifiers implementation781647 48899 Node: Declarators implementation783419 48900 Node: Statements implementation783761 48901 Node: Preprocessing directives implementation784088 48902 Node: Library functions implementation786193 48903 Node: Architecture implementation786833 48904 Node: Locale-specific behavior implementation787536 48905 Node: C++ Implementation787841 48906 Node: Conditionally-supported behavior789121 48907 Node: Exception handling789631 48908 Node: C Extensions790040 48909 Node: Statement Exprs794875 48910 Node: Local Labels799388 48911 Node: Labels as Values802367 48912 Ref: Labels as Values-Footnote-1804776 48913 Node: Nested Functions804959 48914 Node: Constructing Calls808892 48915 Node: Typeof813623 48916 Node: Conditionals816938 48917 Node: __int128817829 48918 Node: Long Long818349 48919 Node: Complex819851 48920 Node: Floating Types822422 48921 Node: Half-Precision823560 48922 Node: Decimal Float825742 48923 Node: Hex Floats827609 48924 Node: Fixed-Point828650 48925 Node: Named Address Spaces831944 48926 Node: Zero Length833243 48927 Node: Empty Structures836530 48928 Node: Variable Length836946 48929 Node: Variadic Macros839599 48930 Node: Escaped Newlines841981 48931 Node: Subscripting842820 48932 Node: Pointer Arith843543 48933 Node: Initializers844111 48934 Node: Compound Literals844607 48935 Node: Designated Inits846782 48936 Node: Case Ranges850437 48937 Node: Cast to Union851120 48938 Node: Mixed Declarations852216 48939 Node: Function Attributes852722 48940 Node: Attribute Syntax933882 48941 Node: Function Prototypes944328 48942 Node: C++ Comments946109 48943 Node: Dollar Signs946628 48944 Node: Character Escapes947093 48945 Node: Variable Attributes947387 48946 Ref: MeP Variable Attributes962713 48947 Ref: i386 Variable Attributes964674 48948 Node: Type Attributes970367 48949 Ref: MeP Type Attributes984108 48950 Ref: i386 Type Attributes984382 48951 Ref: PowerPC Type Attributes985222 48952 Ref: SPU Type Attributes986084 48953 Node: Alignment986375 48954 Node: Inline987749 48955 Node: Volatiles992733 48956 Node: Extended Asm995628 48957 Ref: Example of asm with clobbered asm reg1001717 48958 Ref: Extended asm with goto1011484 48959 Node: Constraints1019219 48960 Node: Simple Constraints1020303 48961 Node: Multi-Alternative1027624 48962 Node: Modifiers1029341 48963 Node: Machine Constraints1032235 48964 Node: Asm Labels1070879 48965 Node: Explicit Reg Vars1072555 48966 Node: Global Reg Vars1074163 48967 Node: Local Reg Vars1078713 48968 Node: Alternate Keywords1081154 48969 Node: Incomplete Enums1082640 48970 Node: Function Names1083397 48971 Node: Return Address1085559 48972 Node: Vector Extensions1089112 48973 Node: Offsetof1093518 48974 Node: Atomic Builtins1094332 48975 Node: Object Size Checking1099710 48976 Node: Other Builtins1105138 48977 Node: Target Builtins1131818 48978 Node: Alpha Built-in Functions1132742 48979 Node: ARM iWMMXt Built-in Functions1135741 48980 Node: ARM NEON Intrinsics1142460 48981 Node: Blackfin Built-in Functions1348660 48982 Node: FR-V Built-in Functions1349274 48983 Node: Argument Types1350133 48984 Node: Directly-mapped Integer Functions1351889 48985 Node: Directly-mapped Media Functions1352971 48986 Node: Raw read/write Functions1360003 48987 Node: Other Built-in Functions1360915 48988 Node: X86 Built-in Functions1362104 48989 Node: MIPS DSP Built-in Functions1407240 48990 Node: MIPS Paired-Single Support1419687 48991 Node: MIPS Loongson Built-in Functions1421188 48992 Node: Paired-Single Arithmetic1427706 48993 Node: Paired-Single Built-in Functions1428652 48994 Node: MIPS-3D Built-in Functions1431322 48995 Node: picoChip Built-in Functions1436697 48996 Node: Other MIPS Built-in Functions1438063 48997 Node: PowerPC AltiVec/VSX Built-in Functions1438587 48998 Node: RX Built-in Functions1549245 48999 Node: SPARC VIS Built-in Functions1553255 49000 Node: SPU Built-in Functions1554934 49001 Node: Target Format Checks1556716 49002 Node: Solaris Format Checks1557148 49003 Node: Darwin Format Checks1557574 49004 Node: Pragmas1558401 49005 Node: ARM Pragmas1559111 49006 Node: M32C Pragmas1559714 49007 Node: MeP Pragmas1560788 49008 Node: RS/6000 and PowerPC Pragmas1562857 49009 Node: Darwin Pragmas1563598 49010 Node: Solaris Pragmas1564665 49011 Node: Symbol-Renaming Pragmas1565826 49012 Node: Structure-Packing Pragmas1568460 49013 Node: Weak Pragmas1570110 49014 Node: Diagnostic Pragmas1570844 49015 Node: Visibility Pragmas1573872 49016 Node: Push/Pop Macro Pragmas1574624 49017 Node: Function Specific Option Pragmas1575597 49018 Node: Unnamed Fields1577861 49019 Node: Thread-Local1580099 49020 Node: C99 Thread-Local Edits1582206 49021 Node: C++98 Thread-Local Edits1584218 49022 Node: Binary constants1587663 49023 Node: C++ Extensions1588334 49024 Node: C++ Volatiles1589982 49025 Node: Restricted Pointers1592342 49026 Node: Vague Linkage1593940 49027 Node: C++ Interface1597602 49028 Ref: C++ Interface-Footnote-11601899 49029 Node: Template Instantiation1602036 49030 Node: Bound member functions1609048 49031 Node: C++ Attributes1610591 49032 Node: Namespace Association1612249 49033 Node: Type Traits1613663 49034 Node: Java Exceptions1620018 49035 Node: Deprecated Features1621415 49036 Node: Backwards Compatibility1624380 49037 Node: Objective-C1625738 49038 Node: GNU Objective-C runtime API1626347 49039 Node: Modern GNU Objective-C runtime API1627354 49040 Node: Traditional GNU Objective-C runtime API1629791 49041 Node: Executing code before main1631413 49042 Node: What you can and what you cannot do in +load1634151 49043 Node: Type encoding1636541 49044 Node: Legacy type encoding1641617 49045 Node: @encode1642708 49046 Node: Method signatures1643249 49047 Node: Garbage Collection1645244 49048 Node: Constant string objects1647878 49049 Node: compatibility_alias1650386 49050 Node: Exceptions1651108 49051 Node: Synchronization1653819 49052 Node: Fast enumeration1655003 49053 Node: Using fast enumeration1655315 49054 Node: c99-like fast enumeration syntax1656526 49055 Node: Fast enumeration details1657229 49056 Node: Fast enumeration protocol1659570 49057 Node: Messaging with the GNU Objective-C runtime1662722 49058 Node: Dynamically registering methods1664093 49059 Node: Forwarding hook1665784 49060 Node: Compatibility1668823 49061 Node: Gcov1675390 49062 Node: Gcov Intro1675923 49063 Node: Invoking Gcov1678641 49064 Node: Gcov and Optimization1691607 49065 Node: Gcov Data Files1694262 49066 Node: Cross-profiling1695402 49067 Node: Trouble1697253 49068 Node: Actual Bugs1698738 49069 Node: Cross-Compiler Problems1699194 49070 Node: Interoperation1699608 49071 Node: Incompatibilities1706745 49072 Node: Fixed Headers1714896 49073 Node: Standard Libraries1716559 49074 Node: Disappointments1717931 49075 Node: C++ Misunderstandings1722289 49076 Node: Static Definitions1723100 49077 Node: Name lookup1724153 49078 Ref: Name lookup-Footnote-11728931 49079 Node: Temporaries1729118 49080 Node: Copy Assignment1731094 49081 Node: Non-bugs1732901 49082 Node: Warnings and Errors1743408 49083 Node: Bugs1745172 49084 Node: Bug Criteria1745736 49085 Node: Bug Reporting1747946 49086 Node: Service1748167 49087 Node: Contributing1748986 49088 Node: Funding1749726 49089 Node: GNU Project1752215 49090 Node: Copying1752861 49091 Node: GNU Free Documentation License1790389 49092 Node: Contributors1815526 49093 Node: Option Index1852395 49094 Node: Keyword Index2032776 49095 49096 End Tag Table 49097