1 This is doc/gcc.info, produced by makeinfo version 4.13 from 2 /tmp/build-mingw64-toolchain-digit/src/gcc-4.8.3/gcc/doc/gcc.texi. 3 4 Copyright (C) 1988-2013 Free Software Foundation, Inc. 5 6 Permission is granted to copy, distribute and/or modify this document 7 under the terms of the GNU Free Documentation License, Version 1.3 or 8 any later version published by the Free Software Foundation; with the 9 Invariant Sections being "Funding Free Software", the Front-Cover Texts 10 being (a) (see below), and with the Back-Cover Texts being (b) (see 11 below). A copy of the license is included in the section entitled "GNU 12 Free Documentation License". 13 14 (a) The FSF's Front-Cover Text is: 15 16 A GNU Manual 17 18 (b) The FSF's Back-Cover Text is: 19 20 You have freedom to copy and modify this GNU Manual, like GNU 21 software. Copies published by the Free Software Foundation raise 22 funds for GNU development. 23 24 INFO-DIR-SECTION Software development 25 START-INFO-DIR-ENTRY 26 * gcc: (gcc). The GNU Compiler Collection. 27 * g++: (gcc). The GNU C++ compiler. 28 * gcov: (gcc) Gcov. `gcov'--a test coverage program. 29 END-INFO-DIR-ENTRY 30 This file documents the use of the GNU compilers. 31 32 Copyright (C) 1988-2013 Free Software Foundation, Inc. 33 34 Permission is granted to copy, distribute and/or modify this document 35 under the terms of the GNU Free Documentation License, Version 1.3 or 36 any later version published by the Free Software Foundation; with the 37 Invariant Sections being "Funding Free Software", the Front-Cover Texts 38 being (a) (see below), and with the Back-Cover Texts being (b) (see 39 below). A copy of the license is included in the section entitled "GNU 40 Free Documentation License". 41 42 (a) The FSF's Front-Cover Text is: 43 44 A GNU Manual 45 46 (b) The FSF's Back-Cover Text is: 47 48 You have freedom to copy and modify this GNU Manual, like GNU 49 software. Copies published by the Free Software Foundation raise 50 funds for GNU development. 51 52 53 54 File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 55 56 Introduction 57 ************ 58 59 This manual documents how to use the GNU compilers, as well as their 60 features and incompatibilities, and how to report bugs. It corresponds 61 to the compilers (GCC) version 4.8.3. The internals of the GNU 62 compilers, including how to port them to new targets and some 63 information about how to write front ends for new languages, are 64 documented in a separate manual. *Note Introduction: (gccint)Top. 65 66 * Menu: 67 68 * G++ and GCC:: You can compile C or C++ programs. 69 * Standards:: Language standards supported by GCC. 70 * Invoking GCC:: Command options supported by `gcc'. 71 * C Implementation:: How GCC implements the ISO C specification. 72 * C++ Implementation:: How GCC implements the ISO C++ specification. 73 * C Extensions:: GNU extensions to the C language family. 74 * C++ Extensions:: GNU extensions to the C++ language. 75 * Objective-C:: GNU Objective-C runtime features. 76 * Compatibility:: Binary Compatibility 77 * Gcov:: `gcov'---a test coverage program. 78 * Trouble:: If you have trouble using GCC. 79 * Bugs:: How, why and where to report bugs. 80 * Service:: How to find suppliers of support for GCC. 81 * Contributing:: How to contribute to testing and developing GCC. 82 83 * Funding:: How to help assure funding for free software. 84 * GNU Project:: The GNU Project and GNU/Linux. 85 86 * Copying:: GNU General Public License says 87 how you can copy and share GCC. 88 * GNU Free Documentation License:: How you can copy and share this manual. 89 * Contributors:: People who have contributed to GCC. 90 91 * Option Index:: Index to command line options. 92 * Keyword Index:: Index of concepts and symbol names. 93 94 95 File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top 96 97 1 Programming Languages Supported by GCC 98 **************************************** 99 100 GCC stands for "GNU Compiler Collection". GCC is an integrated 101 distribution of compilers for several major programming languages. 102 These languages currently include C, C++, Objective-C, Objective-C++, 103 Java, Fortran, Ada, and Go. 104 105 The abbreviation "GCC" has multiple meanings in common use. The 106 current official meaning is "GNU Compiler Collection", which refers 107 generically to the complete suite of tools. The name historically stood 108 for "GNU C Compiler", and this usage is still common when the emphasis 109 is on compiling C programs. Finally, the name is also used when 110 speaking of the "language-independent" component of GCC: code shared 111 among the compilers for all supported languages. 112 113 The language-independent component of GCC includes the majority of the 114 optimizers, as well as the "back ends" that generate machine code for 115 various processors. 116 117 The part of a compiler that is specific to a particular language is 118 called the "front end". In addition to the front ends that are 119 integrated components of GCC, there are several other front ends that 120 are maintained separately. These support languages such as Pascal, 121 Mercury, and COBOL. To use these, they must be built together with GCC 122 proper. 123 124 Most of the compilers for languages other than C have their own names. 125 The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 126 talk about compiling one of those languages, we might refer to that 127 compiler by its own name, or as GCC. Either is correct. 128 129 Historically, compilers for many languages, including C++ and Fortran, 130 have been implemented as "preprocessors" which emit another high level 131 language such as C. None of the compilers included in GCC are 132 implemented this way; they all generate machine code directly. This 133 sort of preprocessor should not be confused with the "C preprocessor", 134 which is an integral feature of the C, C++, Objective-C and 135 Objective-C++ languages. 136 137 138 File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 139 140 2 Language Standards Supported by GCC 141 ************************************* 142 143 For each language compiled by GCC for which there is a standard, GCC 144 attempts to follow one or more versions of that standard, possibly with 145 some exceptions, and possibly with some extensions. 146 147 2.1 C language 148 ============== 149 150 GCC supports three versions of the C standard, although support for the 151 most recent version is not yet complete. 152 153 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 154 published in 1990. This standard was ratified as an ISO standard 155 (ISO/IEC 9899:1990) later in 1990. There were no technical differences 156 between these publications, although the sections of the ANSI standard 157 were renumbered and became clauses in the ISO standard. This standard, 158 in both its forms, is commonly known as "C89", or occasionally as 159 "C90", from the dates of ratification. The ANSI standard, but not the 160 ISO standard, also came with a Rationale document. To select this 161 standard in GCC, use one of the options `-ansi', `-std=c90' or 162 `-std=iso9899:1990'; to obtain all the diagnostics required by the 163 standard, you should also specify `-pedantic' (or `-pedantic-errors' if 164 you want them to be errors rather than warnings). *Note Options 165 Controlling C Dialect: C Dialect Options. 166 167 Errors in the 1990 ISO C standard were corrected in two Technical 168 Corrigenda published in 1994 and 1996. GCC does not support the 169 uncorrected version. 170 171 An amendment to the 1990 standard was published in 1995. This 172 amendment added digraphs and `__STDC_VERSION__' to the language, but 173 otherwise concerned the library. This amendment is commonly known as 174 "AMD1"; the amended standard is sometimes known as "C94" or "C95". To 175 select this standard in GCC, use the option `-std=iso9899:199409' 176 (with, as for other standard versions, `-pedantic' to receive all 177 required diagnostics). 178 179 A new edition of the ISO C standard was published in 1999 as ISO/IEC 180 9899:1999, and is commonly known as "C99". GCC has incomplete support 181 for this standard version; see `http://gcc.gnu.org/c99status.html' for 182 details. To select this standard, use `-std=c99' or 183 `-std=iso9899:1999'. (While in development, drafts of this standard 184 version were referred to as "C9X".) 185 186 Errors in the 1999 ISO C standard were corrected in three Technical 187 Corrigenda published in 2001, 2004 and 2007. GCC does not support the 188 uncorrected version. 189 190 A fourth version of the C standard, known as "C11", was published in 191 2011 as ISO/IEC 9899:2011. GCC has limited incomplete support for 192 parts of this standard, enabled with `-std=c11' or `-std=iso9899:2011'. 193 (While in development, drafts of this standard version were referred to 194 as "C1X".) 195 196 By default, GCC provides some extensions to the C language that on 197 rare occasions conflict with the C standard. *Note Extensions to the C 198 Language Family: C Extensions. Use of the `-std' options listed above 199 will disable these extensions where they conflict with the C standard 200 version selected. You may also select an extended version of the C 201 language explicitly with `-std=gnu90' (for C90 with GNU extensions), 202 `-std=gnu99' (for C99 with GNU extensions) or `-std=gnu11' (for C11 203 with GNU extensions). The default, if no C language dialect options 204 are given, is `-std=gnu90'; this will change to `-std=gnu99' or 205 `-std=gnu11' in some future release when the C99 or C11 support is 206 complete. Some features that are part of the C99 standard are accepted 207 as extensions in C90 mode, and some features that are part of the C11 208 standard are accepted as extensions in C90 and C99 modes. 209 210 The ISO C standard defines (in clause 4) two classes of conforming 211 implementation. A "conforming hosted implementation" supports the 212 whole standard including all the library facilities; a "conforming 213 freestanding implementation" is only required to provide certain 214 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>', 215 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; since C99, 216 also those in `<stdbool.h>' and `<stdint.h>'; and since C11, also those 217 in `<stdalign.h>' and `<stdnoreturn.h>'. In addition, complex types, 218 added in C99, are not required for freestanding implementations. The 219 standard also defines two environments for programs, a "freestanding 220 environment", required of all implementations and which may not have 221 library facilities beyond those required of freestanding 222 implementations, where the handling of program startup and termination 223 are implementation-defined, and a "hosted environment", which is not 224 required, in which all the library facilities are provided and startup 225 is through a function `int main (void)' or `int main (int, char *[])'. 226 An OS kernel would be a freestanding environment; a program using the 227 facilities of an operating system would normally be in a hosted 228 implementation. 229 230 GCC aims towards being usable as a conforming freestanding 231 implementation, or as the compiler for a conforming hosted 232 implementation. By default, it will act as the compiler for a hosted 233 implementation, defining `__STDC_HOSTED__' as `1' and presuming that 234 when the names of ISO C functions are used, they have the semantics 235 defined in the standard. To make it act as a conforming freestanding 236 implementation for a freestanding environment, use the option 237 `-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 238 make assumptions about the meanings of function names from the standard 239 library, with exceptions noted below. To build an OS kernel, you may 240 well still need to make your own arrangements for linking and startup. 241 *Note Options Controlling C Dialect: C Dialect Options. 242 243 GCC does not provide the library facilities required only of hosted 244 implementations, nor yet all the facilities required by C99 of 245 freestanding implementations; to use the facilities of a hosted 246 environment, you will need to find them elsewhere (for example, in the 247 GNU C library). *Note Standard Libraries: Standard Libraries. 248 249 Most of the compiler support routines used by GCC are present in 250 `libgcc', but there are a few exceptions. GCC requires the 251 freestanding environment provide `memcpy', `memmove', `memset' and 252 `memcmp'. Finally, if `__builtin_trap' is used, and the target does 253 not implement the `trap' pattern, then GCC will emit a call to `abort'. 254 255 For references to Technical Corrigenda, Rationale documents and 256 information concerning the history of C that is available online, see 257 `http://gcc.gnu.org/readings.html' 258 259 2.2 C++ language 260 ================ 261 262 GCC supports the original ISO C++ standard (1998) and contains 263 experimental support for the second ISO C++ standard (2011). 264 265 The original ISO C++ standard was published as the ISO standard 266 (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 267 2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and 268 C++03, respectively. GCC implements the majority of C++98 (`export' is 269 a notable exception) and most of the changes in C++03. To select this 270 standard in GCC, use one of the options `-ansi', `-std=c++98', or 271 `-std=c++03'; to obtain all the diagnostics required by the standard, 272 you should also specify `-pedantic' (or `-pedantic-errors' if you want 273 them to be errors rather than warnings). 274 275 A revised ISO C++ standard was published in 2011 as ISO/IEC 276 14882:2011, and is referred to as C++11; before its publication it was 277 commonly referred to as C++0x. C++11 contains several changes to the 278 C++ language, most of which have been implemented in an experimental 279 C++11 mode in GCC. For information regarding the C++11 features 280 available in the experimental C++11 mode, see 281 `http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in 282 GCC, use the option `-std=c++11'; 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 More information about the C++ standards is available on the ISO C++ 287 committee's web site at `http://www.open-std.org/jtc1/sc22/wg21/'. 288 289 By default, GCC provides some extensions to the C++ language; *Note 290 Options Controlling C++ Dialect: C++ Dialect Options. Use of the 291 `-std' option listed above will disable these extensions. You may also 292 select an extended version of the C++ language explicitly with 293 `-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++11' (for 294 C++11 with GNU extensions). The default, if no C++ language dialect 295 options are given, is `-std=gnu++98'. 296 297 2.3 Objective-C and Objective-C++ languages 298 =========================================== 299 300 GCC supports "traditional" Objective-C (also known as "Objective-C 301 1.0") and contains support for the Objective-C exception and 302 synchronization syntax. It has also support for a number of 303 "Objective-C 2.0" language extensions, including properties, fast 304 enumeration (only for Objective-C), method attributes and the @optional 305 and @required keywords in protocols. GCC supports Objective-C++ and 306 features available in Objective-C are also available in Objective-C++. 307 308 GCC by default uses the GNU Objective-C runtime library, which is part 309 of GCC and is not the same as the Apple/NeXT Objective-C runtime 310 library used on Apple systems. There are a number of differences 311 documented in this manual. The options `-fgnu-runtime' and 312 `-fnext-runtime' allow you to switch between producing output that 313 works with the GNU Objective-C runtime library and output that works 314 with the Apple/NeXT Objective-C runtime library. 315 316 There is no formal written standard for Objective-C or Objective-C++. 317 The authoritative manual on traditional Objective-C (1.0) is 318 "Object-Oriented Programming and the Objective-C Language", available 319 at a number of web sites: 320 * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf' 321 is the original NeXTstep document; 322 323 * `http://objc.toodarkpark.net' is the same document in another 324 format; 325 326 * 327 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 328 has an updated version but make sure you search for "Object 329 Oriented Programming and the Objective-C Programming Language 1.0", 330 not documentation on the newer "Objective-C 2.0" language 331 332 The Objective-C exception and synchronization syntax (that is, the 333 keywords @try, @throw, @catch, @finally and @synchronized) is supported 334 by GCC and is enabled with the option `-fobjc-exceptions'. The syntax 335 is briefly documented in this manual and in the Objective-C 2.0 manuals 336 from Apple. 337 338 The Objective-C 2.0 language extensions and features are automatically 339 enabled; they include properties (via the @property, @synthesize and 340 @dynamic keywords), fast enumeration (not available in Objective-C++), 341 attributes for methods (such as deprecated, noreturn, sentinel, 342 format), the unused attribute for method arguments, the @package 343 keyword for instance variables and the @optional and @required keywords 344 in protocols. You can disable all these Objective-C 2.0 language 345 extensions with the option `-fobjc-std=objc1', which causes the 346 compiler to recognize the same Objective-C language syntax recognized 347 by GCC 4.0, and to produce an error if one of the new features is used. 348 349 GCC has currently no support for non-fragile instance variables. 350 351 The authoritative manual on Objective-C 2.0 is available from Apple: 352 * 353 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 354 355 For more information concerning the history of Objective-C that is 356 available online, see `http://gcc.gnu.org/readings.html' 357 358 2.4 Go language 359 =============== 360 361 As of the GCC 4.7.1 release, GCC supports the Go 1 language standard, 362 described at `http://golang.org/doc/go1.html'. 363 364 2.5 References for other languages 365 ================================== 366 367 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 368 conformance and compatibility of the Ada compiler. 369 370 *Note Standards: (gfortran)Standards, for details of standards 371 supported by GNU Fortran. 372 373 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 374 details of compatibility between `gcj' and the Java Platform. 375 376 377 File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 378 379 3 GCC Command Options 380 ********************* 381 382 When you invoke GCC, it normally does preprocessing, compilation, 383 assembly and linking. The "overall options" allow you to stop this 384 process at an intermediate stage. For example, the `-c' option says 385 not to run the linker. Then the output consists of object files output 386 by the assembler. 387 388 Other options are passed on to one stage of processing. Some options 389 control the preprocessor and others the compiler itself. Yet other 390 options control the assembler and linker; most of these are not 391 documented here, since you rarely need to use any of them. 392 393 Most of the command-line options that you can use with GCC are useful 394 for C programs; when an option is only useful with another language 395 (usually C++), the explanation says so explicitly. If the description 396 for a particular option does not mention a source language, you can use 397 that option with all supported languages. 398 399 *Note Compiling C++ Programs: Invoking G++, for a summary of special 400 options for compiling C++ programs. 401 402 The `gcc' program accepts options and file names as operands. Many 403 options have multi-letter names; therefore multiple single-letter 404 options may _not_ be grouped: `-dv' is very different from `-d -v'. 405 406 You can mix options and other arguments. For the most part, the order 407 you use doesn't matter. Order does matter when you use several options 408 of the same kind; for example, if you specify `-L' more than once, the 409 directories are searched in the order specified. Also, the placement 410 of the `-l' option is significant. 411 412 Many options have long names starting with `-f' or with `-W'--for 413 example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 414 have both positive and negative forms; the negative form of `-ffoo' is 415 `-fno-foo'. This manual documents only one of these two forms, 416 whichever one is not the default. 417 418 *Note Option Index::, for an index to GCC's options. 419 420 * Menu: 421 422 * Option Summary:: Brief list of all options, without explanations. 423 * Overall Options:: Controlling the kind of output: 424 an executable, object files, assembler files, 425 or preprocessed source. 426 * Invoking G++:: Compiling C++ programs. 427 * C Dialect Options:: Controlling the variant of C language compiled. 428 * C++ Dialect Options:: Variations on C++. 429 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 430 and Objective-C++. 431 * Language Independent Options:: Controlling how diagnostics should be 432 formatted. 433 * Warning Options:: How picky should the compiler be? 434 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 435 * Optimize Options:: How much optimization? 436 * Preprocessor Options:: Controlling header files and macro definitions. 437 Also, getting dependency information for Make. 438 * Assembler Options:: Passing options to the assembler. 439 * Link Options:: Specifying libraries and so on. 440 * Directory Options:: Where to find header files and libraries. 441 Where to find the compiler executable files. 442 * Spec Files:: How to pass switches to sub-processes. 443 * Target Options:: Running a cross-compiler, or an old version of GCC. 444 * Submodel Options:: Specifying minor hardware or convention variations, 445 such as 68010 vs 68020. 446 * Code Gen Options:: Specifying conventions for function calls, data layout 447 and register usage. 448 * Environment Variables:: Env vars that affect GCC. 449 * Precompiled Headers:: Compiling a header once, and using it many times. 450 451 452 File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 453 454 3.1 Option Summary 455 ================== 456 457 Here is a summary of all the options, grouped by type. Explanations are 458 in the following sections. 459 460 _Overall Options_ 461 *Note Options Controlling the Kind of Output: Overall Options. 462 -c -S -E -o FILE -no-canonical-prefixes 463 -pipe -pass-exit-codes 464 -x LANGUAGE -v -### --help[=CLASS[,...]] --target-help 465 --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG 466 -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE 467 468 _C Language Options_ 469 *Note Options Controlling C Dialect: C Dialect Options. 470 -ansi -std=STANDARD -fgnu89-inline 471 -aux-info FILENAME -fallow-parameterless-variadic-functions 472 -fno-asm -fno-builtin -fno-builtin-FUNCTION 473 -fhosted -ffreestanding -fopenmp -fms-extensions -fplan9-extensions 474 -trigraphs -traditional -traditional-cpp 475 -fallow-single-precision -fcond-mismatch -flax-vector-conversions 476 -fsigned-bitfields -fsigned-char 477 -funsigned-bitfields -funsigned-char 478 479 _C++ Language Options_ 480 *Note Options Controlling C++ Dialect: C++ Dialect Options. 481 -fabi-version=N -fno-access-control -fcheck-new 482 -fconstexpr-depth=N -ffriend-injection 483 -fno-elide-constructors 484 -fno-enforce-eh-specs 485 -ffor-scope -fno-for-scope -fno-gnu-keywords 486 -fno-implicit-templates 487 -fno-implicit-inline-templates 488 -fno-implement-inlines -fms-extensions 489 -fno-nonansi-builtins -fnothrow-opt -fno-operator-names 490 -fno-optional-diags -fpermissive 491 -fno-pretty-templates 492 -frepo -fno-rtti -fstats -ftemplate-backtrace-limit=N 493 -ftemplate-depth=N 494 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 495 -fno-default-inline -fvisibility-inlines-hidden 496 -fvisibility-ms-compat 497 -fext-numeric-literals 498 -Wabi -Wconversion-null -Wctor-dtor-privacy 499 -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing 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 -fno-diagnostics-show-caret 533 534 _Warning Options_ 535 *Note Options to Request or Suppress Warnings: Warning Options. 536 -fsyntax-only -fmax-errors=N -Wpedantic 537 -pedantic-errors 538 -w -Wextra -Wall -Waddress -Waggregate-return 539 -Waggressive-loop-optimizations -Warray-bounds 540 -Wno-attributes -Wno-builtin-macro-redefined 541 -Wc++-compat -Wc++11-compat -Wcast-align -Wcast-qual 542 -Wchar-subscripts -Wclobbered -Wcomment 543 -Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated 544 -Wno-deprecated-declarations -Wdisabled-optimization 545 -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare 546 -Wno-endif-labels -Werror -Werror=* 547 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 548 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral 549 -Wformat-security -Wformat-y2k 550 -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init 551 -Wignored-qualifiers 552 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 553 -Winit-self -Winline -Wmaybe-uninitialized 554 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 555 -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations 556 -Wlogical-op -Wlong-long 557 -Wmain -Wmaybe-uninitialized -Wmissing-braces -Wmissing-field-initializers 558 -Wmissing-include-dirs 559 -Wno-mudflap 560 -Wno-multichar -Wnonnull -Wno-overflow 561 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded 562 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format 563 -Wpointer-arith -Wno-pointer-to-int-cast 564 -Wredundant-decls -Wno-return-local-addr 565 -Wreturn-type -Wsequence-point -Wshadow 566 -Wsign-compare -Wsign-conversion -Wsizeof-pointer-memaccess 567 -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing 568 -Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=N 569 -Wsuggest-attribute=[pure|const|noreturn|format] 570 -Wmissing-format-attribute 571 -Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand 572 -Wsystem-headers -Wtrampolines -Wtrigraphs -Wtype-limits -Wundef 573 -Wuninitialized -Wunknown-pragmas -Wno-pragmas 574 -Wunsuffixed-float-constants -Wunused -Wunused-function 575 -Wunused-label -Wunused-local-typedefs -Wunused-parameter 576 -Wno-unused-result -Wunused-value -Wunused-variable 577 -Wunused-but-set-parameter -Wunused-but-set-variable 578 -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance 579 -Wvla -Wvolatile-register-var -Wwrite-strings -Wzero-as-null-pointer-constant 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 -fsanitize=STYLE 592 -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST 593 -fdisable-ipa-PASS_NAME 594 -fdisable-rtl-PASS_NAME 595 -fdisable-rtl-PASS-NAME=RANGE-LIST 596 -fdisable-tree-PASS_NAME 597 -fdisable-tree-PASS-NAME=RANGE-LIST 598 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links 599 -fdump-translation-unit[-N] 600 -fdump-class-hierarchy[-N] 601 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline 602 -fdump-passes 603 -fdump-statistics 604 -fdump-tree-all 605 -fdump-tree-original[-N] 606 -fdump-tree-optimized[-N] 607 -fdump-tree-cfg -fdump-tree-alias 608 -fdump-tree-ch 609 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 610 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 611 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N] 612 -fdump-tree-dom[-N] 613 -fdump-tree-dse[-N] 614 -fdump-tree-phiprop[-N] 615 -fdump-tree-phiopt[-N] 616 -fdump-tree-forwprop[-N] 617 -fdump-tree-copyrename[-N] 618 -fdump-tree-nrv -fdump-tree-vect 619 -fdump-tree-sink 620 -fdump-tree-sra[-N] 621 -fdump-tree-forwprop[-N] 622 -fdump-tree-fre[-N] 623 -fdump-tree-vrp[-N] 624 -ftree-vectorizer-verbose=N 625 -fdump-tree-storeccp[-N] 626 -fdump-final-insns=FILE 627 -fcompare-debug[=OPTS] -fcompare-debug-second 628 -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types 629 -feliminate-unused-debug-symbols -femit-class-debug-always 630 -fenable-KIND-PASS 631 -fenable-KIND-PASS=RANGE-LIST 632 -fdebug-types-section -fmem-report-wpa 633 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 634 -fopt-info 635 -fopt-info-OPTIONS[=FILE] 636 -frandom-seed=STRING -fsched-verbose=N 637 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose 638 -fstack-usage -ftest-coverage -ftime-report -fvar-tracking 639 -fvar-tracking-assignments -fvar-tracking-assignments-toggle 640 -g -gLEVEL -gtoggle -gcoff -gdwarf-VERSION 641 -ggdb -grecord-gcc-switches -gno-record-gcc-switches 642 -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf 643 -gvms -gxcoff -gxcoff+ 644 -fno-merge-debug-strings -fno-dwarf2-cfi-asm 645 -fdebug-prefix-map=OLD=NEW 646 -femit-struct-debug-baseonly -femit-struct-debug-reduced 647 -femit-struct-debug-detailed[=SPEC-LIST] 648 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 649 -print-multi-directory -print-multi-lib -print-multi-os-directory 650 -print-prog-name=PROGRAM -print-search-dirs -Q 651 -print-sysroot -print-sysroot-headers-suffix 652 -save-temps -save-temps=cwd -save-temps=obj -time[=FILE] 653 654 _Optimization Options_ 655 *Note Options that Control Optimization: Optimize Options. 656 -faggressive-loop-optimizations -falign-functions[=N] 657 -falign-jumps[=N] 658 -falign-labels[=N] -falign-loops[=N] 659 -fassociative-math -fauto-inc-dec -fbranch-probabilities 660 -fbranch-target-load-optimize -fbranch-target-load-optimize2 661 -fbtr-bb-exclusive -fcaller-saves 662 -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack 663 -fcompare-elim -fcprop-registers -fcrossjumping 664 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules 665 -fcx-limited-range 666 -fdata-sections -fdce -fdelayed-branch 667 -fdelete-null-pointer-checks -fdevirtualize -fdse 668 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects 669 -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE 670 -fforward-propagate -ffp-contract=STYLE -ffunction-sections 671 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity 672 -fgcse-sm -fhoist-adjacent-loads -fif-conversion 673 -fif-conversion2 -findirect-inlining 674 -finline-functions -finline-functions-called-once -finline-limit=N 675 -finline-small-functions -fipa-cp -fipa-cp-clone 676 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference 677 -fira-algorithm=ALGORITHM 678 -fira-region=REGION -fira-hoist-pressure 679 -fira-loop-pressure -fno-ira-share-save-slots 680 -fno-ira-share-spill-slots -fira-verbose=N 681 -fivopts -fkeep-inline-functions -fkeep-static-consts 682 -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize 683 -floop-parallelize-all -flto -flto-compression-level 684 -flto-partition=ALG -flto-report -fmerge-all-constants 685 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves 686 -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg 687 -fno-default-inline 688 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 689 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 690 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 691 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 692 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls 693 -fpartial-inlining -fpeel-loops -fpredictive-commoning 694 -fprefetch-loop-arrays -fprofile-report 695 -fprofile-correction -fprofile-dir=PATH -fprofile-generate 696 -fprofile-generate=PATH 697 -fprofile-use -fprofile-use=PATH -fprofile-values 698 -freciprocal-math -free -fregmove -frename-registers -freorder-blocks 699 -freorder-blocks-and-partition -freorder-functions 700 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 701 -frounding-math -fsched2-use-superblocks -fsched-pressure 702 -fsched-spec-load -fsched-spec-load-dangerous 703 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 704 -fsched-group-heuristic -fsched-critical-path-heuristic 705 -fsched-spec-insn-heuristic -fsched-rank-heuristic 706 -fsched-last-insn-heuristic -fsched-dep-count-heuristic 707 -fschedule-insns -fschedule-insns2 -fsection-anchors 708 -fselective-scheduling -fselective-scheduling2 709 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops 710 -fshrink-wrap -fsignaling-nans -fsingle-precision-constant 711 -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector 712 -fstack-protector-all -fstrict-aliasing -fstrict-overflow 713 -fthread-jumps -ftracer -ftree-bit-ccp 714 -ftree-builtin-call-dce -ftree-ccp -ftree-ch 715 -ftree-coalesce-inline-vars -ftree-coalesce-vars -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-partial-pre -ftree-pta 722 -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra 723 -ftree-switch-conversion -ftree-tail-merge 724 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp 725 -funit-at-a-time -funroll-all-loops -funroll-loops 726 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops 727 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb 728 -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin 729 --param NAME=VALUE 730 -O -O0 -O1 -O2 -O3 -Os -Ofast -Og 731 732 _Preprocessor Options_ 733 *Note Options Controlling the Preprocessor: Preprocessor Options. 734 -AQUESTION=ANSWER 735 -A-QUESTION[=ANSWER] 736 -C -dD -dI -dM -dN 737 -DMACRO[=DEFN] -E -H 738 -idirafter DIR 739 -include FILE -imacros FILE 740 -iprefix FILE -iwithprefix DIR 741 -iwithprefixbefore DIR -isystem DIR 742 -imultilib DIR -isysroot DIR 743 -M -MM -MF -MG -MP -MQ -MT -nostdinc 744 -P -fdebug-cpp -ftrack-macro-expansion -fworking-directory 745 -remap -trigraphs -undef -UMACRO 746 -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp 747 748 _Assembler Option_ 749 *Note Passing Options to the Assembler: Assembler Options. 750 -Wa,OPTION -Xassembler OPTION 751 752 _Linker Options_ 753 *Note Options for Linking: Link Options. 754 OBJECT-FILE-NAME -lLIBRARY 755 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 756 -s -static -static-libgcc -static-libstdc++ 757 -static-libasan -static-libtsan 758 -shared -shared-libgcc -symbolic 759 -T SCRIPT -Wl,OPTION -Xlinker OPTION 760 -u SYMBOL 761 762 _Directory Options_ 763 *Note Options for Directory Search: Directory Options. 764 -BPREFIX -IDIR -iplugindir=DIR 765 -iquoteDIR -LDIR -specs=FILE -I- 766 --sysroot=DIR --no-sysroot-suffix 767 768 _Machine Dependent Options_ 769 *Note Hardware Models and Configurations: Submodel Options. 770 771 _AArch64 Options_ 772 -mbig-endian -mlittle-endian 773 -mgeneral-regs-only 774 -mcmodel=tiny -mcmodel=small -mcmodel=large 775 -mstrict-align 776 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 777 -mtls-dialect=desc -mtls-dialect=traditional 778 -march=NAME -mcpu=NAME -mtune=NAME 779 780 _Adapteva Epiphany Options_ 781 -mhalf-reg-file -mprefer-short-insn-regs 782 -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf 783 -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM 784 -mround-nearest -mlong-calls -mshort-calls -msmall16 785 -mfp-mode=MODE -mvect-double -max-vect-align=NUM 786 -msplit-vecmove-early -m1reg-REG 787 788 _ARM Options_ 789 -mapcs-frame -mno-apcs-frame 790 -mabi=NAME 791 -mapcs-stack-check -mno-apcs-stack-check 792 -mapcs-float -mno-apcs-float 793 -mapcs-reentrant -mno-apcs-reentrant 794 -msched-prolog -mno-sched-prolog 795 -mlittle-endian -mbig-endian -mwords-little-endian 796 -mfloat-abi=NAME 797 -mfp16-format=NAME 798 -mthumb-interwork -mno-thumb-interwork 799 -mcpu=NAME -march=NAME -mfpu=NAME 800 -mstructure-size-boundary=N 801 -mabort-on-noreturn 802 -mlong-calls -mno-long-calls 803 -msingle-pic-base -mno-single-pic-base 804 -mpic-register=REG 805 -mnop-fun-dllimport 806 -mpoke-function-name 807 -mthumb -marm 808 -mtpcs-frame -mtpcs-leaf-frame 809 -mcaller-super-interworking -mcallee-super-interworking 810 -mtp=NAME -mtls-dialect=DIALECT 811 -mword-relocations 812 -mfix-cortex-m3-ldrd 813 -munaligned-access 814 815 _AVR Options_ 816 -mmcu=MCU -maccumulate-args -mbranch-cost=COST 817 -mcall-prologues -mint8 -mno-interrupts -mrelax 818 -mstrict-X -mtiny-stack -Waddr-space-convert 819 820 _Blackfin Options_ 821 -mcpu=CPU[-SIREVISION] 822 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 823 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 824 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 825 -mno-id-shared-library -mshared-library-id=N 826 -mleaf-id-shared-library -mno-leaf-id-shared-library 827 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 828 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 829 -micplb 830 831 _C6X Options_ 832 -mbig-endian -mlittle-endian -march=CPU 833 -msim -msdata=SDATA-TYPE 834 835 _CRIS Options_ 836 -mcpu=CPU -march=CPU -mtune=CPU 837 -mmax-stack-frame=N -melinux-stacksize=N 838 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 839 -mstack-align -mdata-align -mconst-align 840 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 841 -melf -maout -melinux -mlinux -sim -sim2 842 -mmul-bug-workaround -mno-mul-bug-workaround 843 844 _CR16 Options_ 845 -mmac 846 -mcr16cplus -mcr16c 847 -msim -mint32 -mbit-ops 848 -mdata-model=MODEL 849 850 _Darwin Options_ 851 -all_load -allowable_client -arch -arch_errors_fatal 852 -arch_only -bind_at_load -bundle -bundle_loader 853 -client_name -compatibility_version -current_version 854 -dead_strip 855 -dependency-file -dylib_file -dylinker_install_name 856 -dynamic -dynamiclib -exported_symbols_list 857 -filelist -flat_namespace -force_cpusubtype_ALL 858 -force_flat_namespace -headerpad_max_install_names 859 -iframework 860 -image_base -init -install_name -keep_private_externs 861 -multi_module -multiply_defined -multiply_defined_unused 862 -noall_load -no_dead_strip_inits_and_terms 863 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 864 -pagezero_size -prebind -prebind_all_twolevel_modules 865 -private_bundle -read_only_relocs -sectalign 866 -sectobjectsymbols -whyload -seg1addr 867 -sectcreate -sectobjectsymbols -sectorder 868 -segaddr -segs_read_only_addr -segs_read_write_addr 869 -seg_addr_table -seg_addr_table_filename -seglinkedit 870 -segprot -segs_read_only_addr -segs_read_write_addr 871 -single_module -static -sub_library -sub_umbrella 872 -twolevel_namespace -umbrella -undefined 873 -unexported_symbols_list -weak_reference_mismatches 874 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 875 -mkernel -mone-byte-bool 876 877 _DEC Alpha Options_ 878 -mno-fp-regs -msoft-float 879 -mieee -mieee-with-inexact -mieee-conformant 880 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 881 -mtrap-precision=MODE -mbuild-constants 882 -mcpu=CPU-TYPE -mtune=CPU-TYPE 883 -mbwx -mmax -mfix -mcix 884 -mfloat-vax -mfloat-ieee 885 -mexplicit-relocs -msmall-data -mlarge-data 886 -msmall-text -mlarge-text 887 -mmemory-latency=TIME 888 889 _FR30 Options_ 890 -msmall-model -mno-lsim 891 892 _FRV Options_ 893 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 894 -mhard-float -msoft-float 895 -malloc-cc -mfixed-cc -mdword -mno-dword 896 -mdouble -mno-double 897 -mmedia -mno-media -mmuladd -mno-muladd 898 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 899 -mlinked-fp -mlong-calls -malign-labels 900 -mlibrary-pic -macc-4 -macc-8 901 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 902 -moptimize-membar -mno-optimize-membar 903 -mscc -mno-scc -mcond-exec -mno-cond-exec 904 -mvliw-branch -mno-vliw-branch 905 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 906 -mno-nested-cond-exec -mtomcat-stats 907 -mTLS -mtls 908 -mcpu=CPU 909 910 _GNU/Linux Options_ 911 -mglibc -muclibc -mbionic -mandroid 912 -tno-android-cc -tno-android-ld 913 914 _H8/300 Options_ 915 -mrelax -mh -ms -mn -mexr -mno-exr -mint32 -malign-300 916 917 _HPPA Options_ 918 -march=ARCHITECTURE-TYPE 919 -mbig-switch -mdisable-fpregs -mdisable-indexing 920 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 921 -mfixed-range=REGISTER-RANGE 922 -mjump-in-delay -mlinker-opt -mlong-calls 923 -mlong-load-store -mno-big-switch -mno-disable-fpregs 924 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 925 -mno-jump-in-delay -mno-long-load-store 926 -mno-portable-runtime -mno-soft-float 927 -mno-space-regs -msoft-float -mpa-risc-1-0 928 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 929 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 930 -munix=UNIX-STD -nolibdld -static -threads 931 932 _i386 and x86-64 Options_ 933 -mtune=CPU-TYPE -march=CPU-TYPE 934 -mfpmath=UNIT 935 -masm=DIALECT -mno-fancy-math-387 936 -mno-fp-ret-in-387 -msoft-float 937 -mno-wide-multiply -mrtd -malign-double 938 -mpreferred-stack-boundary=NUM 939 -mincoming-stack-boundary=NUM 940 -mcld -mcx16 -msahf -mmovbe -mcrc32 941 -mrecip -mrecip=OPT 942 -mvzeroupper -mprefer-avx128 943 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 944 -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma 945 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt 946 -mbmi2 -mrtm -mlwp -mthreads 947 -mno-align-stringops -minline-all-stringops 948 -minline-stringops-dynamically -mstringop-strategy=ALG 949 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 950 -m96bit-long-double -mlong-double-64 -mlong-double-80 951 -mregparm=NUM -msseregparm 952 -mveclibabi=TYPE -mvect8-ret-in-mem 953 -mpc32 -mpc64 -mpc80 -mstackrealign 954 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 955 -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE 956 -m32 -m64 -mx32 -mlarge-data-threshold=NUM 957 -msse2avx -mfentry -m8bit-idiv 958 -mavx256-split-unaligned-load -mavx256-split-unaligned-store 959 960 _i386 and x86-64 Windows Options_ 961 -mconsole -mcygwin -mno-cygwin -mdll 962 -mnop-fun-dllimport -mthread 963 -municode -mwin32 -mwindows -fno-set-stack-executable 964 965 _IA-64 Options_ 966 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 967 -mvolatile-asm-stop -mregister-names -msdata -mno-sdata 968 -mconstant-gp -mauto-pic -mfused-madd 969 -minline-float-divide-min-latency 970 -minline-float-divide-max-throughput 971 -mno-inline-float-divide 972 -minline-int-divide-min-latency 973 -minline-int-divide-max-throughput 974 -mno-inline-int-divide 975 -minline-sqrt-min-latency -minline-sqrt-max-throughput 976 -mno-inline-sqrt 977 -mdwarf2-asm -mearly-stop-bits 978 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 979 -mtune=CPU-TYPE -milp32 -mlp64 980 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec 981 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 982 -msched-spec-ldc -msched-spec-control-ldc 983 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns 984 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path 985 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost 986 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS 987 988 _LM32 Options_ 989 -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled 990 -msign-extend-enabled -muser-enabled 991 992 _M32R/D Options_ 993 -m32r2 -m32rx -m32r 994 -mdebug 995 -malign-loops -mno-align-loops 996 -missue-rate=NUMBER 997 -mbranch-cost=NUMBER 998 -mmodel=CODE-SIZE-MODEL-TYPE 999 -msdata=SDATA-TYPE 1000 -mno-flush-func -mflush-func=NAME 1001 -mno-flush-trap -mflush-trap=NUMBER 1002 -G NUM 1003 1004 _M32C Options_ 1005 -mcpu=CPU -msim -memregs=NUMBER 1006 1007 _M680x0 Options_ 1008 -march=ARCH -mcpu=CPU -mtune=TUNE 1009 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 1010 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 1011 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 1012 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 1013 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 1014 -malign-int -mstrict-align -msep-data -mno-sep-data 1015 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 1016 -mxgot -mno-xgot 1017 1018 _MCore Options_ 1019 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 1020 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 1021 -m4byte-functions -mno-4byte-functions -mcallgraph-data 1022 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 1023 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 1024 1025 _MeP Options_ 1026 -mabsdiff -mall-opts -maverage -mbased=N -mbitops 1027 -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2 1028 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax 1029 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf 1030 -mtiny=N 1031 1032 _MicroBlaze Options_ 1033 -msoft-float -mhard-float -msmall-divides -mcpu=CPU 1034 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift 1035 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss 1036 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt 1037 -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL 1038 1039 _MIPS Options_ 1040 -EL -EB -march=ARCH -mtune=ARCH 1041 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 1042 -mips64 -mips64r2 1043 -mips16 -mno-mips16 -mflip-mips16 1044 -minterlink-mips16 -mno-interlink-mips16 1045 -mabi=ABI -mabicalls -mno-abicalls 1046 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 1047 -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float 1048 -mno-float -msingle-float -mdouble-float 1049 -mdsp -mno-dsp -mdspr2 -mno-dspr2 1050 -mmcu -mmno-mcu 1051 -mfpu=FPU-TYPE 1052 -msmartmips -mno-smartmips 1053 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 1054 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 1055 -mlong64 -mlong32 -msym32 -mno-sym32 1056 -GNUM -mlocal-sdata -mno-local-sdata 1057 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 1058 -membedded-data -mno-embedded-data 1059 -muninit-const-in-rodata -mno-uninit-const-in-rodata 1060 -mcode-readable=SETTING 1061 -msplit-addresses -mno-split-addresses 1062 -mexplicit-relocs -mno-explicit-relocs 1063 -mcheck-zero-division -mno-check-zero-division 1064 -mdivide-traps -mdivide-breaks 1065 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 1066 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 1067 -mfix-24k -mno-fix-24k 1068 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 1069 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 1070 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 1071 -mflush-func=FUNC -mno-flush-func 1072 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 1073 -mfp-exceptions -mno-fp-exceptions 1074 -mvr4130-align -mno-vr4130-align -msynci -mno-synci 1075 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address 1076 1077 _MMIX Options_ 1078 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 1079 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 1080 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 1081 -mno-base-addresses -msingle-exit -mno-single-exit 1082 1083 _MN10300 Options_ 1084 -mmult-bug -mno-mult-bug 1085 -mno-am33 -mam33 -mam33-2 -mam34 1086 -mtune=CPU-TYPE 1087 -mreturn-pointer-on-d0 1088 -mno-crt0 -mrelax -mliw -msetlb 1089 1090 _Moxie Options_ 1091 -meb -mel -mno-crt0 1092 1093 _PDP-11 Options_ 1094 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 1095 -mbcopy -mbcopy-builtin -mint32 -mno-int16 1096 -mint16 -mno-int32 -mfloat32 -mno-float64 1097 -mfloat64 -mno-float32 -mabshi -mno-abshi 1098 -mbranch-expensive -mbranch-cheap 1099 -munix-asm -mdec-asm 1100 1101 _picoChip Options_ 1102 -mae=AE_TYPE -mvliw-lookahead=N 1103 -msymbol-as-address -mno-inefficient-warnings 1104 1105 _PowerPC Options_ See RS/6000 and PowerPC Options. 1106 1107 _RL78 Options_ 1108 -msim -mmul=none -mmul=g13 -mmul=rl78 1109 1110 _RS/6000 and PowerPC Options_ 1111 -mcpu=CPU-TYPE 1112 -mtune=CPU-TYPE 1113 -mcmodel=CODE-MODEL 1114 -mpowerpc64 1115 -maltivec -mno-altivec 1116 -mpowerpc-gpopt -mno-powerpc-gpopt 1117 -mpowerpc-gfxopt -mno-powerpc-gfxopt 1118 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd 1119 -mfprnd -mno-fprnd 1120 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 1121 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 1122 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 1123 -malign-power -malign-natural 1124 -msoft-float -mhard-float -mmultiple -mno-multiple 1125 -msingle-float -mdouble-float -msimple-fpu 1126 -mstring -mno-string -mupdate -mno-update 1127 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 1128 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 1129 -mstrict-align -mno-strict-align -mrelocatable 1130 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 1131 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 1132 -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base 1133 -mprioritize-restricted-insns=PRIORITY 1134 -msched-costly-dep=DEPENDENCE_TYPE 1135 -minsert-sched-nops=SCHEME 1136 -mcall-sysv -mcall-netbsd 1137 -maix-struct-return -msvr4-struct-return 1138 -mabi=ABI-TYPE -msecure-plt -mbss-plt 1139 -mblock-move-inline-limit=NUM 1140 -misel -mno-isel 1141 -misel=yes -misel=no 1142 -mspe -mno-spe 1143 -mspe=yes -mspe=no 1144 -mpaired 1145 -mgen-cell-microcode -mwarn-cell-microcode 1146 -mvrsave -mno-vrsave 1147 -mmulhw -mno-mulhw 1148 -mdlmzb -mno-dlmzb 1149 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 1150 -mprototype -mno-prototype 1151 -msim -mmvme -mads -myellowknife -memb -msdata 1152 -msdata=OPT -mvxworks -G NUM -pthread 1153 -mrecip -mrecip=OPT -mno-recip -mrecip-precision 1154 -mno-recip-precision 1155 -mveclibabi=TYPE -mfriz -mno-friz 1156 -mpointers-to-nested-functions -mno-pointers-to-nested-functions 1157 -msave-toc-indirect -mno-save-toc-indirect 1158 -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector 1159 -mcrypto -mno-crypto -mdirect-move -mno-direct-move 1160 -mquad-memory -mno-quad-memory 1161 -mquad-memory-atomic -mno-quad-memory-atomic 1162 -mcompat-align-parm -mno-compat-align-parm 1163 1164 _RX Options_ 1165 -m64bit-doubles -m32bit-doubles -fpu -nofpu 1166 -mcpu= 1167 -mbig-endian-data -mlittle-endian-data 1168 -msmall-data 1169 -msim -mno-sim 1170 -mas100-syntax -mno-as100-syntax 1171 -mrelax 1172 -mmax-constant-size= 1173 -mint-register= 1174 -mpid 1175 -mno-warn-multiple-fast-interrupts 1176 -msave-acc-in-interrupts 1177 1178 _S/390 and zSeries Options_ 1179 -mtune=CPU-TYPE -march=CPU-TYPE 1180 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 1181 -mlong-double-64 -mlong-double-128 1182 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 1183 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 1184 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 1185 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 1186 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 1187 -mhotpatch[=HALFWORDS] -mno-hotpatch 1188 1189 _Score Options_ 1190 -meb -mel 1191 -mnhwloop 1192 -muls 1193 -mmac 1194 -mscore5 -mscore5u -mscore7 -mscore7d 1195 1196 _SH Options_ 1197 -m1 -m2 -m2e 1198 -m2a-nofpu -m2a-single-only -m2a-single -m2a 1199 -m3 -m3e 1200 -m4-nofpu -m4-single-only -m4-single -m4 1201 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1202 -m5-64media -m5-64media-nofpu 1203 -m5-32media -m5-32media-nofpu 1204 -m5-compact -m5-compact-nofpu 1205 -mb -ml -mdalign -mrelax 1206 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1207 -mieee -mno-ieee -mbitops -misize -minline-ic_invalidate -mpadstruct 1208 -mspace -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1209 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1210 -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1211 -maccumulate-outgoing-args -minvalid-symbols 1212 -matomic-model=ATOMIC-MODEL 1213 -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch -mcbranchdi -mcmpeqdi 1214 -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra 1215 -mpretend-cmove -mtas 1216 1217 _Solaris 2 Options_ 1218 -mimpure-text -mno-impure-text 1219 -pthreads -pthread 1220 1221 _SPARC Options_ 1222 -mcpu=CPU-TYPE 1223 -mtune=CPU-TYPE 1224 -mcmodel=CODE-MODEL 1225 -mmemory-model=MEM-MODEL 1226 -m32 -m64 -mapp-regs -mno-app-regs 1227 -mfaster-structs -mno-faster-structs -mflat -mno-flat 1228 -mfpu -mno-fpu -mhard-float -msoft-float 1229 -mhard-quad-float -msoft-quad-float 1230 -mstack-bias -mno-stack-bias 1231 -munaligned-doubles -mno-unaligned-doubles 1232 -muser-mode -mno-user-mode 1233 -mv8plus -mno-v8plus -mvis -mno-vis 1234 -mvis2 -mno-vis2 -mvis3 -mno-vis3 1235 -mcbcond -mno-cbcond 1236 -mfmaf -mno-fmaf -mpopc -mno-popc 1237 -mfix-at697f -mfix-ut699 1238 1239 _SPU Options_ 1240 -mwarn-reloc -merror-reloc 1241 -msafe-dma -munsafe-dma 1242 -mbranch-hints 1243 -msmall-mem -mlarge-mem -mstdmain 1244 -mfixed-range=REGISTER-RANGE 1245 -mea32 -mea64 1246 -maddress-space-conversion -mno-address-space-conversion 1247 -mcache-size=CACHE-SIZE 1248 -matomic-updates -mno-atomic-updates 1249 1250 _System V Options_ 1251 -Qy -Qn -YP,PATHS -Ym,DIR 1252 1253 _TILE-Gx Options_ 1254 -mcpu=CPU -m32 -m64 -mcmodel=CODE-MODEL 1255 1256 _TILEPro Options_ 1257 -mcpu=CPU -m32 1258 1259 _V850 Options_ 1260 -mlong-calls -mno-long-calls -mep -mno-ep 1261 -mprolog-function -mno-prolog-function -mspace 1262 -mtda=N -msda=N -mzda=N 1263 -mapp-regs -mno-app-regs 1264 -mdisable-callt -mno-disable-callt 1265 -mv850e2v3 -mv850e2 -mv850e1 -mv850es 1266 -mv850e -mv850 -mv850e3v5 1267 -mloop 1268 -mrelax 1269 -mlong-jumps 1270 -msoft-float 1271 -mhard-float 1272 -mgcc-abi 1273 -mrh850-abi 1274 -mbig-switch 1275 1276 _VAX Options_ 1277 -mg -mgnu -munix 1278 1279 _VMS Options_ 1280 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 1281 -mpointer-size=SIZE 1282 1283 _VxWorks Options_ 1284 -mrtp -non-static -Bstatic -Bdynamic 1285 -Xbind-lazy -Xbind-now 1286 1287 _x86-64 Options_ See i386 and x86-64 Options. 1288 1289 _Xstormy16 Options_ 1290 -msim 1291 1292 _Xtensa Options_ 1293 -mconst16 -mno-const16 1294 -mfused-madd -mno-fused-madd 1295 -mforce-no-pic 1296 -mserialize-volatile -mno-serialize-volatile 1297 -mtext-section-literals -mno-text-section-literals 1298 -mtarget-align -mno-target-align 1299 -mlongcalls -mno-longcalls 1300 1301 _zSeries Options_ See S/390 and zSeries Options. 1302 1303 _Code Generation Options_ 1304 *Note Options for Code Generation Conventions: Code Gen Options. 1305 -fcall-saved-REG -fcall-used-REG 1306 -ffixed-REG -fexceptions 1307 -fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables 1308 -fasynchronous-unwind-tables 1309 -finhibit-size-directive -finstrument-functions 1310 -finstrument-functions-exclude-function-list=SYM,SYM,... 1311 -finstrument-functions-exclude-file-list=FILE,FILE,... 1312 -fno-common -fno-ident 1313 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1314 -fno-jump-tables 1315 -frecord-gcc-switches 1316 -freg-struct-return -fshort-enums 1317 -fshort-double -fshort-wchar 1318 -fverbose-asm -fpack-struct[=N] -fstack-check 1319 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1320 -fno-stack-limit -fsplit-stack 1321 -fleading-underscore -ftls-model=MODEL 1322 -fstack-reuse=REUSE_LEVEL 1323 -ftrapv -fwrapv -fbounds-check 1324 -fvisibility -fstrict-volatile-bitfields -fsync-libcalls 1325 1326 1327 * Menu: 1328 1329 * Overall Options:: Controlling the kind of output: 1330 an executable, object files, assembler files, 1331 or preprocessed source. 1332 * C Dialect Options:: Controlling the variant of C language compiled. 1333 * C++ Dialect Options:: Variations on C++. 1334 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 1335 and Objective-C++. 1336 * Language Independent Options:: Controlling how diagnostics should be 1337 formatted. 1338 * Warning Options:: How picky should the compiler be? 1339 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 1340 * Optimize Options:: How much optimization? 1341 * Preprocessor Options:: Controlling header files and macro definitions. 1342 Also, getting dependency information for Make. 1343 * Assembler Options:: Passing options to the assembler. 1344 * Link Options:: Specifying libraries and so on. 1345 * Directory Options:: Where to find header files and libraries. 1346 Where to find the compiler executable files. 1347 * Spec Files:: How to pass switches to sub-processes. 1348 * Target Options:: Running a cross-compiler, or an old version of GCC. 1349 1350 1351 File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1352 1353 3.2 Options Controlling the Kind of Output 1354 ========================================== 1355 1356 Compilation can involve up to four stages: preprocessing, compilation 1357 proper, assembly and linking, always in that order. GCC is capable of 1358 preprocessing and compiling several files either into several assembler 1359 input files, or into one assembler input file; then each assembler 1360 input file produces an object file, and linking combines all the object 1361 files (those newly compiled, and those specified as input) into an 1362 executable file. 1363 1364 For any given input file, the file name suffix determines what kind of 1365 compilation is done: 1366 1367 `FILE.c' 1368 C source code that must be preprocessed. 1369 1370 `FILE.i' 1371 C source code that should not be preprocessed. 1372 1373 `FILE.ii' 1374 C++ source code that should not be preprocessed. 1375 1376 `FILE.m' 1377 Objective-C source code. Note that you must link with the 1378 `libobjc' library to make an Objective-C program work. 1379 1380 `FILE.mi' 1381 Objective-C source code that should not be preprocessed. 1382 1383 `FILE.mm' 1384 `FILE.M' 1385 Objective-C++ source code. Note that you must link with the 1386 `libobjc' library to make an Objective-C++ program work. Note 1387 that `.M' refers to a literal capital M. 1388 1389 `FILE.mii' 1390 Objective-C++ source code that should not be preprocessed. 1391 1392 `FILE.h' 1393 C, C++, Objective-C or Objective-C++ header file to be turned into 1394 a precompiled header (default), or C, C++ header file to be turned 1395 into an Ada spec (via the `-fdump-ada-spec' switch). 1396 1397 `FILE.cc' 1398 `FILE.cp' 1399 `FILE.cxx' 1400 `FILE.cpp' 1401 `FILE.CPP' 1402 `FILE.c++' 1403 `FILE.C' 1404 C++ source code that must be preprocessed. Note that in `.cxx', 1405 the last two letters must both be literally `x'. Likewise, `.C' 1406 refers to a literal capital C. 1407 1408 `FILE.mm' 1409 `FILE.M' 1410 Objective-C++ source code that must be preprocessed. 1411 1412 `FILE.mii' 1413 Objective-C++ source code that should not be preprocessed. 1414 1415 `FILE.hh' 1416 `FILE.H' 1417 `FILE.hp' 1418 `FILE.hxx' 1419 `FILE.hpp' 1420 `FILE.HPP' 1421 `FILE.h++' 1422 `FILE.tcc' 1423 C++ header file to be turned into a precompiled header or Ada spec. 1424 1425 `FILE.f' 1426 `FILE.for' 1427 `FILE.ftn' 1428 Fixed form Fortran source code that should not be preprocessed. 1429 1430 `FILE.F' 1431 `FILE.FOR' 1432 `FILE.fpp' 1433 `FILE.FPP' 1434 `FILE.FTN' 1435 Fixed form Fortran source code that must be preprocessed (with the 1436 traditional preprocessor). 1437 1438 `FILE.f90' 1439 `FILE.f95' 1440 `FILE.f03' 1441 `FILE.f08' 1442 Free form Fortran source code that should not be preprocessed. 1443 1444 `FILE.F90' 1445 `FILE.F95' 1446 `FILE.F03' 1447 `FILE.F08' 1448 Free form Fortran source code that must be preprocessed (with the 1449 traditional preprocessor). 1450 1451 `FILE.go' 1452 Go source code. 1453 1454 `FILE.ads' 1455 Ada source code file that contains a library unit declaration (a 1456 declaration of a package, subprogram, or generic, or a generic 1457 instantiation), or a library unit renaming declaration (a package, 1458 generic, or subprogram renaming declaration). Such files are also 1459 called "specs". 1460 1461 `FILE.adb' 1462 Ada source code file containing a library unit body (a subprogram 1463 or package body). Such files are also called "bodies". 1464 1465 `FILE.s' 1466 Assembler code. 1467 1468 `FILE.S' 1469 `FILE.sx' 1470 Assembler code that must be preprocessed. 1471 1472 `OTHER' 1473 An object file to be fed straight into linking. Any file name 1474 with no recognized suffix is treated this way. 1475 1476 You can specify the input language explicitly with the `-x' option: 1477 1478 `-x LANGUAGE' 1479 Specify explicitly the LANGUAGE for the following input files 1480 (rather than letting the compiler choose a default based on the 1481 file name suffix). This option applies to all following input 1482 files until the next `-x' option. Possible values for LANGUAGE 1483 are: 1484 c c-header cpp-output 1485 c++ c++-header c++-cpp-output 1486 objective-c objective-c-header objective-c-cpp-output 1487 objective-c++ objective-c++-header objective-c++-cpp-output 1488 assembler assembler-with-cpp 1489 ada 1490 f77 f77-cpp-input f95 f95-cpp-input 1491 go 1492 java 1493 1494 `-x none' 1495 Turn off any specification of a language, so that subsequent files 1496 are handled according to their file name suffixes (as they are if 1497 `-x' has not been used at all). 1498 1499 `-pass-exit-codes' 1500 Normally the `gcc' program exits with the code of 1 if any phase 1501 of the compiler returns a non-success return code. If you specify 1502 `-pass-exit-codes', the `gcc' program instead returns with the 1503 numerically highest error produced by any phase returning an error 1504 indication. The C, C++, and Fortran front ends return 4 if an 1505 internal compiler error is encountered. 1506 1507 If you only want some of the stages of compilation, you can use `-x' 1508 (or filename suffixes) to tell `gcc' where to start, and one of the 1509 options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1510 some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1511 do nothing at all. 1512 1513 `-c' 1514 Compile or assemble the source files, but do not link. The linking 1515 stage simply is not done. The ultimate output is in the form of an 1516 object file for each source file. 1517 1518 By default, the object file name for a source file is made by 1519 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1520 1521 Unrecognized input files, not requiring compilation or assembly, 1522 are ignored. 1523 1524 `-S' 1525 Stop after the stage of compilation proper; do not assemble. The 1526 output is in the form of an assembler code file for each 1527 non-assembler input file specified. 1528 1529 By default, the assembler file name for a source file is made by 1530 replacing the suffix `.c', `.i', etc., with `.s'. 1531 1532 Input files that don't require compilation are ignored. 1533 1534 `-E' 1535 Stop after the preprocessing stage; do not run the compiler 1536 proper. The output is in the form of preprocessed source code, 1537 which is sent to the standard output. 1538 1539 Input files that don't require preprocessing are ignored. 1540 1541 `-o FILE' 1542 Place output in file FILE. This applies to whatever sort of 1543 output is being produced, whether it be an executable file, an 1544 object file, an assembler file or preprocessed C code. 1545 1546 If `-o' is not specified, the default is to put an executable file 1547 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1548 assembler file in `SOURCE.s', a precompiled header file in 1549 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1550 output. 1551 1552 `-v' 1553 Print (on standard error output) the commands executed to run the 1554 stages of compilation. Also print the version number of the 1555 compiler driver program and of the preprocessor and the compiler 1556 proper. 1557 1558 `-###' 1559 Like `-v' except the commands are not executed and arguments are 1560 quoted unless they contain only alphanumeric characters or `./-_'. 1561 This is useful for shell scripts to capture the driver-generated 1562 command lines. 1563 1564 `-pipe' 1565 Use pipes rather than temporary files for communication between the 1566 various stages of compilation. This fails to work on some systems 1567 where the assembler is unable to read from a pipe; but the GNU 1568 assembler has no trouble. 1569 1570 `--help' 1571 Print (on the standard output) a description of the command-line 1572 options understood by `gcc'. If the `-v' option is also specified 1573 then `--help' is also passed on to the various processes invoked 1574 by `gcc', so that they can display the command-line options they 1575 accept. If the `-Wextra' option has also been specified (prior to 1576 the `--help' option), then command-line options that have no 1577 documentation associated with them are also displayed. 1578 1579 `--target-help' 1580 Print (on the standard output) a description of target-specific 1581 command-line options for each tool. For some targets extra 1582 target-specific information may also be printed. 1583 1584 `--help={CLASS|[^]QUALIFIER}[,...]' 1585 Print (on the standard output) a description of the command-line 1586 options understood by the compiler that fit into all specified 1587 classes and qualifiers. These are the supported classes: 1588 1589 `optimizers' 1590 Display all of the optimization options supported by the 1591 compiler. 1592 1593 `warnings' 1594 Display all of the options controlling warning messages 1595 produced by the compiler. 1596 1597 `target' 1598 Display target-specific options. Unlike the `--target-help' 1599 option however, target-specific options of the linker and 1600 assembler are not displayed. This is because those tools do 1601 not currently support the extended `--help=' syntax. 1602 1603 `params' 1604 Display the values recognized by the `--param' option. 1605 1606 LANGUAGE 1607 Display the options supported for LANGUAGE, where LANGUAGE is 1608 the name of one of the languages supported in this version of 1609 GCC. 1610 1611 `common' 1612 Display the options that are common to all languages. 1613 1614 These are the supported qualifiers: 1615 1616 `undocumented' 1617 Display only those options that are undocumented. 1618 1619 `joined' 1620 Display options taking an argument that appears after an equal 1621 sign in the same continuous piece of text, such as: 1622 `--help=target'. 1623 1624 `separate' 1625 Display options taking an argument that appears as a separate 1626 word following the original option, such as: `-o output-file'. 1627 1628 Thus for example to display all the undocumented target-specific 1629 switches supported by the compiler, use: 1630 1631 --help=target,undocumented 1632 1633 The sense of a qualifier can be inverted by prefixing it with the 1634 `^' character, so for example to display all binary warning 1635 options (i.e., ones that are either on or off and that do not take 1636 an argument) that have a description, use: 1637 1638 --help=warnings,^joined,^undocumented 1639 1640 The argument to `--help=' should not consist solely of inverted 1641 qualifiers. 1642 1643 Combining several classes is possible, although this usually 1644 restricts the output so much that there is nothing to display. One 1645 case where it does work, however, is when one of the classes is 1646 TARGET. For example, to display all the target-specific 1647 optimization options, use: 1648 1649 --help=target,optimizers 1650 1651 The `--help=' option can be repeated on the command line. Each 1652 successive use displays its requested class of options, skipping 1653 those that have already been displayed. 1654 1655 If the `-Q' option appears on the command line before the 1656 `--help=' option, then the descriptive text displayed by `--help=' 1657 is changed. Instead of describing the displayed options, an 1658 indication is given as to whether the option is enabled, disabled 1659 or set to a specific value (assuming that the compiler knows this 1660 at the point where the `--help=' option is used). 1661 1662 Here is a truncated example from the ARM port of `gcc': 1663 1664 % gcc -Q -mabi=2 --help=target -c 1665 The following options are target specific: 1666 -mabi= 2 1667 -mabort-on-noreturn [disabled] 1668 -mapcs [disabled] 1669 1670 The output is sensitive to the effects of previous command-line 1671 options, so for example it is possible to find out which 1672 optimizations are enabled at `-O2' by using: 1673 1674 -Q -O2 --help=optimizers 1675 1676 Alternatively you can discover which binary optimizations are 1677 enabled by `-O3' by using: 1678 1679 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1680 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1681 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1682 1683 `-no-canonical-prefixes' 1684 Do not expand any symbolic links, resolve references to `/../' or 1685 `/./', or make the path absolute when generating a relative prefix. 1686 1687 `--version' 1688 Display the version number and copyrights of the invoked GCC. 1689 1690 `-wrapper' 1691 Invoke all subcommands under a wrapper program. The name of the 1692 wrapper program and its parameters are passed as a comma separated 1693 list. 1694 1695 gcc -c t.c -wrapper gdb,--args 1696 1697 This invokes all subprograms of `gcc' under `gdb --args', thus the 1698 invocation of `cc1' is `gdb --args cc1 ...'. 1699 1700 `-fplugin=NAME.so' 1701 Load the plugin code in file NAME.so, assumed to be a shared 1702 object to be dlopen'd by the compiler. The base name of the 1703 shared object file is used to identify the plugin for the purposes 1704 of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below). 1705 Each plugin should define the callback functions specified in the 1706 Plugins API. 1707 1708 `-fplugin-arg-NAME-KEY=VALUE' 1709 Define an argument called KEY with a value of VALUE for the plugin 1710 called NAME. 1711 1712 `-fdump-ada-spec[-slim]' 1713 For C and C++ source and include files, generate corresponding Ada 1714 specs. *Note Generating Ada Bindings for C and C++ headers: 1715 (gnat_ugn)Generating Ada Bindings for C and C++ headers, which 1716 provides detailed documentation on this feature. 1717 1718 `-fada-spec-parent=UNIT' 1719 In conjunction with `-fdump-ada-spec[-slim]' above, generate Ada 1720 specs as child units of parent UNIT. 1721 1722 `-fdump-go-spec=FILE' 1723 For input files in any language, generate corresponding Go 1724 declarations in FILE. This generates Go `const', `type', `var', 1725 and `func' declarations which may be a useful way to start writing 1726 a Go interface to code written in some other language. 1727 1728 `@FILE' 1729 Read command-line options from FILE. The options read are 1730 inserted in place of the original @FILE option. If FILE does not 1731 exist, or cannot be read, then the option will be treated 1732 literally, and not removed. 1733 1734 Options in FILE are separated by whitespace. A whitespace 1735 character may be included in an option by surrounding the entire 1736 option in either single or double quotes. Any character 1737 (including a backslash) may be included by prefixing the character 1738 to be included with a backslash. The FILE may itself contain 1739 additional @FILE options; any such options will be processed 1740 recursively. 1741 1742 1743 File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1744 1745 3.3 Compiling C++ Programs 1746 ========================== 1747 1748 C++ source files conventionally use one of the suffixes `.C', `.cc', 1749 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1750 `.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and 1751 preprocessed C++ files use the suffix `.ii'. GCC recognizes files with 1752 these names and compiles them as C++ programs even if you call the 1753 compiler the same way as for compiling C programs (usually with the 1754 name `gcc'). 1755 1756 However, the use of `gcc' does not add the C++ library. `g++' is a 1757 program that calls GCC and automatically specifies linking against the 1758 C++ library. It treats `.c', `.h' and `.i' files as C++ source files 1759 instead of C source files unless `-x' is used. This program is also 1760 useful when precompiling a C header file with a `.h' extension for use 1761 in C++ compilations. On many systems, `g++' is also installed with the 1762 name `c++'. 1763 1764 When you compile C++ programs, you may specify many of the same 1765 command-line options that you use for compiling programs in any 1766 language; or command-line options meaningful for C and related 1767 languages; or options that are meaningful only for C++ programs. *Note 1768 Options Controlling C Dialect: C Dialect Options, for explanations of 1769 options for languages related to C. *Note Options Controlling C++ 1770 Dialect: C++ Dialect Options, for explanations of options that are 1771 meaningful only for C++ programs. 1772 1773 1774 File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1775 1776 3.4 Options Controlling C Dialect 1777 ================================= 1778 1779 The following options control the dialect of C (or languages derived 1780 from C, such as C++, Objective-C and Objective-C++) that the compiler 1781 accepts: 1782 1783 `-ansi' 1784 In C mode, this is equivalent to `-std=c90'. In C++ mode, it is 1785 equivalent to `-std=c++98'. 1786 1787 This turns off certain features of GCC that are incompatible with 1788 ISO C90 (when compiling C code), or of standard C++ (when 1789 compiling C++ code), such as the `asm' and `typeof' keywords, and 1790 predefined macros such as `unix' and `vax' that identify the type 1791 of system you are using. It also enables the undesirable and 1792 rarely used ISO trigraph feature. For the C compiler, it disables 1793 recognition of C++ style `//' comments as well as the `inline' 1794 keyword. 1795 1796 The alternate keywords `__asm__', `__extension__', `__inline__' 1797 and `__typeof__' continue to work despite `-ansi'. You would not 1798 want to use them in an ISO C program, of course, but it is useful 1799 to put them in header files that might be included in compilations 1800 done with `-ansi'. Alternate predefined macros such as `__unix__' 1801 and `__vax__' are also available, with or without `-ansi'. 1802 1803 The `-ansi' option does not cause non-ISO programs to be rejected 1804 gratuitously. For that, `-Wpedantic' is required in addition to 1805 `-ansi'. *Note Warning Options::. 1806 1807 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1808 is used. Some header files may notice this macro and refrain from 1809 declaring certain functions or defining certain macros that the 1810 ISO standard doesn't call for; this is to avoid interfering with 1811 any programs that might use these names for other things. 1812 1813 Functions that are normally built in but do not have semantics 1814 defined by ISO C (such as `alloca' and `ffs') are not built-in 1815 functions when `-ansi' is used. *Note Other built-in functions 1816 provided by GCC: Other Builtins, for details of the functions 1817 affected. 1818 1819 `-std=' 1820 Determine the language standard. *Note Language Standards 1821 Supported by GCC: Standards, for details of these standard 1822 versions. This option is currently only supported when compiling 1823 C or C++. 1824 1825 The compiler can accept several base standards, such as `c90' or 1826 `c++98', and GNU dialects of those standards, such as `gnu90' or 1827 `gnu++98'. When a base standard is specified, the compiler 1828 accepts all programs following that standard plus those using GNU 1829 extensions that do not contradict it. For example, `-std=c90' 1830 turns off certain features of GCC that are incompatible with ISO 1831 C90, such as the `asm' and `typeof' keywords, but not other GNU 1832 extensions that do not have a meaning in ISO C90, such as omitting 1833 the middle term of a `?:' expression. On the other hand, when a 1834 GNU dialect of a standard is specified, all features supported by 1835 the compiler are enabled, even when those features change the 1836 meaning of the base standard. As a result, some strict-conforming 1837 programs may be rejected. The particular standard is used by 1838 `-Wpedantic' to identify which features are GNU extensions given 1839 that version of the standard. For example `-std=gnu90 -Wpedantic' 1840 warns about C++ style `//' comments, while `-std=gnu99 -Wpedantic' 1841 does not. 1842 1843 A value for this option must be provided; possible values are 1844 1845 `c90' 1846 `c89' 1847 `iso9899:1990' 1848 Support all ISO C90 programs (certain GNU extensions that 1849 conflict with ISO C90 are disabled). Same as `-ansi' for C 1850 code. 1851 1852 `iso9899:199409' 1853 ISO C90 as modified in amendment 1. 1854 1855 `c99' 1856 `c9x' 1857 `iso9899:1999' 1858 `iso9899:199x' 1859 ISO C99. Note that this standard is not yet fully supported; 1860 see `http://gcc.gnu.org/c99status.html' for more information. 1861 The names `c9x' and `iso9899:199x' are deprecated. 1862 1863 `c11' 1864 `c1x' 1865 `iso9899:2011' 1866 ISO C11, the 2011 revision of the ISO C standard. Support is 1867 incomplete and experimental. The name `c1x' is deprecated. 1868 1869 `gnu90' 1870 `gnu89' 1871 GNU dialect of ISO C90 (including some C99 features). This is 1872 the default for C code. 1873 1874 `gnu99' 1875 `gnu9x' 1876 GNU dialect of ISO C99. When ISO C99 is fully implemented in 1877 GCC, this will become the default. The name `gnu9x' is 1878 deprecated. 1879 1880 `gnu11' 1881 `gnu1x' 1882 GNU dialect of ISO C11. Support is incomplete and 1883 experimental. The name `gnu1x' is deprecated. 1884 1885 `c++98' 1886 `c++03' 1887 The 1998 ISO C++ standard plus the 2003 technical corrigendum 1888 and some additional defect reports. Same as `-ansi' for C++ 1889 code. 1890 1891 `gnu++98' 1892 `gnu++03' 1893 GNU dialect of `-std=c++98'. This is the default for C++ 1894 code. 1895 1896 `c++11' 1897 `c++0x' 1898 The 2011 ISO C++ standard plus amendments. Support for C++11 1899 is still experimental, and may change in incompatible ways in 1900 future releases. The name `c++0x' is deprecated. 1901 1902 `gnu++11' 1903 `gnu++0x' 1904 GNU dialect of `-std=c++11'. Support for C++11 is still 1905 experimental, and may change in incompatible ways in future 1906 releases. The name `gnu++0x' is deprecated. 1907 1908 `c++1y' 1909 The next revision of the ISO C++ standard, tentatively 1910 planned for 2017. Support is highly experimental, and will 1911 almost certainly change in incompatible ways in future 1912 releases. 1913 1914 `gnu++1y' 1915 GNU dialect of `-std=c++1y'. Support is highly experimental, 1916 and will almost certainly change in incompatible ways in 1917 future releases. 1918 1919 `-fgnu89-inline' 1920 The option `-fgnu89-inline' tells GCC to use the traditional GNU 1921 semantics for `inline' functions when in C99 mode. *Note An 1922 Inline Function is As Fast As a Macro: Inline. This option is 1923 accepted and ignored by GCC versions 4.1.3 up to but not including 1924 4.3. In GCC versions 4.3 and later it changes the behavior of GCC 1925 in C99 mode. Using this option is roughly equivalent to adding the 1926 `gnu_inline' function attribute to all inline functions (*note 1927 Function Attributes::). 1928 1929 The option `-fno-gnu89-inline' explicitly tells GCC to use the C99 1930 semantics for `inline' when in C99 or gnu99 mode (i.e., it 1931 specifies the default behavior). This option was first supported 1932 in GCC 4.3. This option is not supported in `-std=c90' or 1933 `-std=gnu90' mode. 1934 1935 The preprocessor macros `__GNUC_GNU_INLINE__' and 1936 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 1937 effect for `inline' functions. *Note Common Predefined Macros: 1938 (cpp)Common Predefined Macros. 1939 1940 `-aux-info FILENAME' 1941 Output to the given filename prototyped declarations for all 1942 functions declared and/or defined in a translation unit, including 1943 those in header files. This option is silently ignored in any 1944 language other than C. 1945 1946 Besides declarations, the file indicates, in comments, the origin 1947 of each declaration (source file and line), whether the 1948 declaration was implicit, prototyped or unprototyped (`I', `N' for 1949 new or `O' for old, respectively, in the first character after the 1950 line number and the colon), and whether it came from a declaration 1951 or a definition (`C' or `F', respectively, in the following 1952 character). In the case of function definitions, a K&R-style list 1953 of arguments followed by their declarations is also provided, 1954 inside comments, after the declaration. 1955 1956 `-fallow-parameterless-variadic-functions' 1957 Accept variadic functions without named parameters. 1958 1959 Although it is possible to define such a function, this is not very 1960 useful as it is not possible to read the arguments. This is only 1961 supported for C as this construct is allowed by C++. 1962 1963 `-fno-asm' 1964 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1965 code can use these words as identifiers. You can use the keywords 1966 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1967 `-fno-asm'. 1968 1969 In C++, this switch only affects the `typeof' keyword, since `asm' 1970 and `inline' are standard keywords. You may want to use the 1971 `-fno-gnu-keywords' flag instead, which has the same effect. In 1972 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1973 the `asm' and `typeof' keywords, since `inline' is a standard 1974 keyword in ISO C99. 1975 1976 `-fno-builtin' 1977 `-fno-builtin-FUNCTION' 1978 Don't recognize built-in functions that do not begin with 1979 `__builtin_' as prefix. *Note Other built-in functions provided 1980 by GCC: Other Builtins, for details of the functions affected, 1981 including those which are not built-in functions when `-ansi' or 1982 `-std' options for strict ISO C conformance are used because they 1983 do not have an ISO standard meaning. 1984 1985 GCC normally generates special code to handle certain built-in 1986 functions more efficiently; for instance, calls to `alloca' may 1987 become single instructions which adjust the stack directly, and 1988 calls to `memcpy' may become inline copy loops. The resulting 1989 code is often both smaller and faster, but since the function 1990 calls no longer appear as such, you cannot set a breakpoint on 1991 those calls, nor can you change the behavior of the functions by 1992 linking with a different library. In addition, when a function is 1993 recognized as a built-in function, GCC may use information about 1994 that function to warn about problems with calls to that function, 1995 or to generate more efficient code, even if the resulting code 1996 still contains calls to that function. For example, warnings are 1997 given with `-Wformat' for bad calls to `printf' when `printf' is 1998 built in and `strlen' is known not to modify global memory. 1999 2000 With the `-fno-builtin-FUNCTION' option only the built-in function 2001 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 2002 If a function is named that is not built-in in this version of 2003 GCC, this option is ignored. There is no corresponding 2004 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 2005 functions selectively when using `-fno-builtin' or 2006 `-ffreestanding', you may define macros such as: 2007 2008 #define abs(n) __builtin_abs ((n)) 2009 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 2010 2011 `-fhosted' 2012 Assert that compilation targets a hosted environment. This implies 2013 `-fbuiltin'. A hosted environment is one in which the entire 2014 standard library is available, and in which `main' has a return 2015 type of `int'. Examples are nearly everything except a kernel. 2016 This is equivalent to `-fno-freestanding'. 2017 2018 `-ffreestanding' 2019 Assert that compilation targets a freestanding environment. This 2020 implies `-fno-builtin'. A freestanding environment is one in 2021 which the standard library may not exist, and program startup may 2022 not necessarily be at `main'. The most obvious example is an OS 2023 kernel. This is equivalent to `-fno-hosted'. 2024 2025 *Note Language Standards Supported by GCC: Standards, for details 2026 of freestanding and hosted environments. 2027 2028 `-fopenmp' 2029 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 2030 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 2031 generates parallel code according to the OpenMP Application 2032 Program Interface v3.0 `http://www.openmp.org/'. This option 2033 implies `-pthread', and thus is only supported on targets that 2034 have support for `-pthread'. 2035 2036 `-fgnu-tm' 2037 When the option `-fgnu-tm' is specified, the compiler generates 2038 code for the Linux variant of Intel's current Transactional Memory 2039 ABI specification document (Revision 1.1, May 6 2009). This is an 2040 experimental feature whose interface may change in future versions 2041 of GCC, as the official specification changes. Please note that 2042 not all architectures are supported for this feature. 2043 2044 For more information on GCC's support for transactional memory, 2045 *Note The GNU Transactional Memory Library: (libitm)Enabling 2046 libitm. 2047 2048 Note that the transactional memory feature is not supported with 2049 non-call exceptions (`-fnon-call-exceptions'). 2050 2051 `-fms-extensions' 2052 Accept some non-standard constructs used in Microsoft header files. 2053 2054 In C++ code, this allows member names in structures to be similar 2055 to previous types declarations. 2056 2057 typedef int UOW; 2058 struct ABC { 2059 UOW UOW; 2060 }; 2061 2062 Some cases of unnamed fields in structures and unions are only 2063 accepted with this option. *Note Unnamed struct/union fields 2064 within structs/unions: Unnamed Fields, for details. 2065 2066 `-fplan9-extensions' 2067 Accept some non-standard constructs used in Plan 9 code. 2068 2069 This enables `-fms-extensions', permits passing pointers to 2070 structures with anonymous fields to functions that expect pointers 2071 to elements of the type of the field, and permits referring to 2072 anonymous fields declared using a typedef. *Note Unnamed 2073 struct/union fields within structs/unions: Unnamed Fields, for 2074 details. This is only supported for C, not C++. 2075 2076 `-trigraphs' 2077 Support ISO C trigraphs. The `-ansi' option (and `-std' options 2078 for strict ISO C conformance) implies `-trigraphs'. 2079 2080 `-traditional' 2081 `-traditional-cpp' 2082 Formerly, these options caused GCC to attempt to emulate a 2083 pre-standard C compiler. They are now only supported with the 2084 `-E' switch. The preprocessor continues to support a pre-standard 2085 mode. See the GNU CPP manual for details. 2086 2087 `-fcond-mismatch' 2088 Allow conditional expressions with mismatched types in the second 2089 and third arguments. The value of such an expression is void. 2090 This option is not supported for C++. 2091 2092 `-flax-vector-conversions' 2093 Allow implicit conversions between vectors with differing numbers 2094 of elements and/or incompatible element types. This option should 2095 not be used for new code. 2096 2097 `-funsigned-char' 2098 Let the type `char' be unsigned, like `unsigned char'. 2099 2100 Each kind of machine has a default for what `char' should be. It 2101 is either like `unsigned char' by default or like `signed char' by 2102 default. 2103 2104 Ideally, a portable program should always use `signed char' or 2105 `unsigned char' when it depends on the signedness of an object. 2106 But many programs have been written to use plain `char' and expect 2107 it to be signed, or expect it to be unsigned, depending on the 2108 machines they were written for. This option, and its inverse, let 2109 you make such a program work with the opposite default. 2110 2111 The type `char' is always a distinct type from each of `signed 2112 char' or `unsigned char', even though its behavior is always just 2113 like one of those two. 2114 2115 `-fsigned-char' 2116 Let the type `char' be signed, like `signed char'. 2117 2118 Note that this is equivalent to `-fno-unsigned-char', which is the 2119 negative form of `-funsigned-char'. Likewise, the option 2120 `-fno-signed-char' is equivalent to `-funsigned-char'. 2121 2122 `-fsigned-bitfields' 2123 `-funsigned-bitfields' 2124 `-fno-signed-bitfields' 2125 `-fno-unsigned-bitfields' 2126 These options control whether a bit-field is signed or unsigned, 2127 when the declaration does not use either `signed' or `unsigned'. 2128 By default, such a bit-field is signed, because this is 2129 consistent: the basic integer types such as `int' are signed types. 2130 2131 2132 File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 2133 2134 3.5 Options Controlling C++ Dialect 2135 =================================== 2136 2137 This section describes the command-line options that are only meaningful 2138 for C++ programs. You can also use most of the GNU compiler options 2139 regardless of what language your program is in. For example, you might 2140 compile a file `firstClass.C' like this: 2141 2142 g++ -g -frepo -O -c firstClass.C 2143 2144 In this example, only `-frepo' is an option meant only for C++ 2145 programs; you can use the other options with any language supported by 2146 GCC. 2147 2148 Here is a list of options that are _only_ for compiling C++ programs: 2149 2150 `-fabi-version=N' 2151 Use version N of the C++ ABI. The default is version 2. 2152 2153 Version 0 refers to the version conforming most closely to the C++ 2154 ABI specification. Therefore, the ABI obtained using version 0 2155 will change in different versions of G++ as ABI bugs are fixed. 2156 2157 Version 1 is the version of the C++ ABI that first appeared in G++ 2158 3.2. 2159 2160 Version 2 is the version of the C++ ABI that first appeared in G++ 2161 3.4. 2162 2163 Version 3 corrects an error in mangling a constant address as a 2164 template argument. 2165 2166 Version 4, which first appeared in G++ 4.5, implements a standard 2167 mangling for vector types. 2168 2169 Version 5, which first appeared in G++ 4.6, corrects the mangling 2170 of attribute const/volatile on function pointer types, decltype of 2171 a plain decl, and use of a function parameter in the declaration of 2172 another parameter. 2173 2174 Version 6, which first appeared in G++ 4.7, corrects the promotion 2175 behavior of C++11 scoped enums and the mangling of template 2176 argument packs, const/static_cast, prefix ++ and -, and a class 2177 scope function used as a template argument. 2178 2179 See also `-Wabi'. 2180 2181 `-fno-access-control' 2182 Turn off all access checking. This switch is mainly useful for 2183 working around bugs in the access control code. 2184 2185 `-fcheck-new' 2186 Check that the pointer returned by `operator new' is non-null 2187 before attempting to modify the storage allocated. This check is 2188 normally unnecessary because the C++ standard specifies that 2189 `operator new' only returns `0' if it is declared `throw()', in 2190 which case the compiler always checks the return value even 2191 without this option. In all other cases, when `operator new' has 2192 a non-empty exception specification, memory exhaustion is 2193 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 2194 2195 `-fconstexpr-depth=N' 2196 Set the maximum nested evaluation depth for C++11 constexpr 2197 functions to N. A limit is needed to detect endless recursion 2198 during constant expression evaluation. The minimum specified by 2199 the standard is 512. 2200 2201 `-fdeduce-init-list' 2202 Enable deduction of a template type parameter as 2203 `std::initializer_list' from a brace-enclosed initializer list, 2204 i.e. 2205 2206 template <class T> auto forward(T t) -> decltype (realfn (t)) 2207 { 2208 return realfn (t); 2209 } 2210 2211 void f() 2212 { 2213 forward({1,2}); // call forward<std::initializer_list<int>> 2214 } 2215 2216 This deduction was implemented as a possible extension to the 2217 originally proposed semantics for the C++11 standard, but was not 2218 part of the final standard, so it is disabled by default. This 2219 option is deprecated, and may be removed in a future version of 2220 G++. 2221 2222 `-ffriend-injection' 2223 Inject friend functions into the enclosing namespace, so that they 2224 are visible outside the scope of the class in which they are 2225 declared. Friend functions were documented to work this way in 2226 the old Annotated C++ Reference Manual, and versions of G++ before 2227 4.1 always worked that way. However, in ISO C++ a friend function 2228 that is not declared in an enclosing scope can only be found using 2229 argument dependent lookup. This option causes friends to be 2230 injected as they were in earlier releases. 2231 2232 This option is for compatibility, and may be removed in a future 2233 release of G++. 2234 2235 `-fno-elide-constructors' 2236 The C++ standard allows an implementation to omit creating a 2237 temporary that is only used to initialize another object of the 2238 same type. Specifying this option disables that optimization, and 2239 forces G++ to call the copy constructor in all cases. 2240 2241 `-fno-enforce-eh-specs' 2242 Don't generate code to check for violation of exception 2243 specifications at run time. This option violates the C++ 2244 standard, but may be useful for reducing code size in production 2245 builds, much like defining `NDEBUG'. This does not give user code 2246 permission to throw exceptions in violation of the exception 2247 specifications; the compiler still optimizes based on the 2248 specifications, so throwing an unexpected exception results in 2249 undefined behavior at run time. 2250 2251 `-fextern-tls-init' 2252 `-fno-extern-tls-init' 2253 The C++11 and OpenMP standards allow `thread_local' and 2254 `threadprivate' variables to have dynamic (runtime) 2255 initialization. To support this, any use of such a variable goes 2256 through a wrapper function that performs any necessary 2257 initialization. When the use and definition of the variable are 2258 in the same translation unit, this overhead can be optimized away, 2259 but when the use is in a different translation unit there is 2260 significant overhead even if the variable doesn't actually need 2261 dynamic initialization. If the programmer can be sure that no use 2262 of the variable in a non-defining TU needs to trigger dynamic 2263 initialization (either because the variable is statically 2264 initialized, or a use of the variable in the defining TU will be 2265 executed before any uses in another TU), they can avoid this 2266 overhead with the `-fno-extern-tls-init' option. 2267 2268 On targets that support symbol aliases, the default is 2269 `-fextern-tls-init'. On targets that do not support symbol 2270 aliases, the default is `-fno-extern-tls-init'. 2271 2272 `-ffor-scope' 2273 `-fno-for-scope' 2274 If `-ffor-scope' is specified, the scope of variables declared in 2275 a for-init-statement is limited to the `for' loop itself, as 2276 specified by the C++ standard. If `-fno-for-scope' is specified, 2277 the scope of variables declared in a for-init-statement extends to 2278 the end of the enclosing scope, as was the case in old versions of 2279 G++, and other (traditional) implementations of C++. 2280 2281 If neither flag is given, the default is to follow the standard, 2282 but to allow and give a warning for old-style code that would 2283 otherwise be invalid, or have different behavior. 2284 2285 `-fno-gnu-keywords' 2286 Do not recognize `typeof' as a keyword, so that code can use this 2287 word as an identifier. You can use the keyword `__typeof__' 2288 instead. `-ansi' implies `-fno-gnu-keywords'. 2289 2290 `-fno-implicit-templates' 2291 Never emit code for non-inline templates that are instantiated 2292 implicitly (i.e. by use); only emit code for explicit 2293 instantiations. *Note Template Instantiation::, for more 2294 information. 2295 2296 `-fno-implicit-inline-templates' 2297 Don't emit code for implicit instantiations of inline templates, 2298 either. The default is to handle inlines differently so that 2299 compiles with and without optimization need the same set of 2300 explicit instantiations. 2301 2302 `-fno-implement-inlines' 2303 To save space, do not emit out-of-line copies of inline functions 2304 controlled by `#pragma implementation'. This causes linker errors 2305 if these functions are not inlined everywhere they are called. 2306 2307 `-fms-extensions' 2308 Disable Wpedantic warnings about constructs used in MFC, such as 2309 implicit int and getting a pointer to member function via 2310 non-standard syntax. 2311 2312 `-fno-nonansi-builtins' 2313 Disable built-in declarations of functions that are not mandated by 2314 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 2315 `bzero', `conjf', and other related functions. 2316 2317 `-fnothrow-opt' 2318 Treat a `throw()' exception specification as if it were a 2319 `noexcept' specification to reduce or eliminate the text size 2320 overhead relative to a function with no exception specification. 2321 If the function has local variables of types with non-trivial 2322 destructors, the exception specification actually makes the 2323 function smaller because the EH cleanups for those variables can be 2324 optimized away. The semantic effect is that an exception thrown 2325 out of a function with such an exception specification results in 2326 a call to `terminate' rather than `unexpected'. 2327 2328 `-fno-operator-names' 2329 Do not treat the operator name keywords `and', `bitand', `bitor', 2330 `compl', `not', `or' and `xor' as synonyms as keywords. 2331 2332 `-fno-optional-diags' 2333 Disable diagnostics that the standard says a compiler does not 2334 need to issue. Currently, the only such diagnostic issued by G++ 2335 is the one for a name having multiple meanings within a class. 2336 2337 `-fpermissive' 2338 Downgrade some diagnostics about nonconformant code from errors to 2339 warnings. Thus, using `-fpermissive' allows some nonconforming 2340 code to compile. 2341 2342 `-fno-pretty-templates' 2343 When an error message refers to a specialization of a function 2344 template, the compiler normally prints the signature of the 2345 template followed by the template arguments and any typedefs or 2346 typenames in the signature (e.g. `void f(T) [with T = int]' rather 2347 than `void f(int)') so that it's clear which template is involved. 2348 When an error message refers to a specialization of a class 2349 template, the compiler omits any template arguments that match the 2350 default template arguments for that template. If either of these 2351 behaviors make it harder to understand the error message rather 2352 than easier, you can use `-fno-pretty-templates' to disable them. 2353 2354 `-frepo' 2355 Enable automatic template instantiation at link time. This option 2356 also implies `-fno-implicit-templates'. *Note Template 2357 Instantiation::, for more information. 2358 2359 `-fno-rtti' 2360 Disable generation of information about every class with virtual 2361 functions for use by the C++ run-time type identification features 2362 (`dynamic_cast' and `typeid'). If you don't use those parts of 2363 the language, you can save some space by using this flag. Note 2364 that exception handling uses the same information, but G++ 2365 generates it as needed. The `dynamic_cast' operator can still be 2366 used for casts that do not require run-time type information, i.e. 2367 casts to `void *' or to unambiguous base classes. 2368 2369 `-fstats' 2370 Emit statistics about front-end processing at the end of the 2371 compilation. This information is generally only useful to the G++ 2372 development team. 2373 2374 `-fstrict-enums' 2375 Allow the compiler to optimize using the assumption that a value of 2376 enumerated type can only be one of the values of the enumeration 2377 (as defined in the C++ standard; basically, a value that can be 2378 represented in the minimum number of bits needed to represent all 2379 the enumerators). This assumption may not be valid if the program 2380 uses a cast to convert an arbitrary integer value to the 2381 enumerated type. 2382 2383 `-ftemplate-backtrace-limit=N' 2384 Set the maximum number of template instantiation notes for a single 2385 warning or error to N. The default value is 10. 2386 2387 `-ftemplate-depth=N' 2388 Set the maximum instantiation depth for template classes to N. A 2389 limit on the template instantiation depth is needed to detect 2390 endless recursions during template class instantiation. ANSI/ISO 2391 C++ conforming programs must not rely on a maximum depth greater 2392 than 17 (changed to 1024 in C++11). The default value is 900, as 2393 the compiler can run out of stack space before hitting 1024 in 2394 some situations. 2395 2396 `-fno-threadsafe-statics' 2397 Do not emit the extra code to use the routines specified in the C++ 2398 ABI for thread-safe initialization of local statics. You can use 2399 this option to reduce code size slightly in code that doesn't need 2400 to be thread-safe. 2401 2402 `-fuse-cxa-atexit' 2403 Register destructors for objects with static storage duration with 2404 the `__cxa_atexit' function rather than the `atexit' function. 2405 This option is required for fully standards-compliant handling of 2406 static destructors, but only works if your C library supports 2407 `__cxa_atexit'. 2408 2409 `-fno-use-cxa-get-exception-ptr' 2410 Don't use the `__cxa_get_exception_ptr' runtime routine. This 2411 causes `std::uncaught_exception' to be incorrect, but is necessary 2412 if the runtime routine is not available. 2413 2414 `-fvisibility-inlines-hidden' 2415 This switch declares that the user does not attempt to compare 2416 pointers to inline functions or methods where the addresses of the 2417 two functions are taken in different shared objects. 2418 2419 The effect of this is that GCC may, effectively, mark inline 2420 methods with `__attribute__ ((visibility ("hidden")))' so that 2421 they do not appear in the export table of a DSO and do not require 2422 a PLT indirection when used within the DSO. Enabling this option 2423 can have a dramatic effect on load and link times of a DSO as it 2424 massively reduces the size of the dynamic export table when the 2425 library makes heavy use of templates. 2426 2427 The behavior of this switch is not quite the same as marking the 2428 methods as hidden directly, because it does not affect static 2429 variables local to the function or cause the compiler to deduce 2430 that the function is defined in only one shared object. 2431 2432 You may mark a method as having a visibility explicitly to negate 2433 the effect of the switch for that method. For example, if you do 2434 want to compare pointers to a particular inline method, you might 2435 mark it as having default visibility. Marking the enclosing class 2436 with explicit visibility has no effect. 2437 2438 Explicitly instantiated inline methods are unaffected by this 2439 option as their linkage might otherwise cross a shared library 2440 boundary. *Note Template Instantiation::. 2441 2442 `-fvisibility-ms-compat' 2443 This flag attempts to use visibility settings to make GCC's C++ 2444 linkage model compatible with that of Microsoft Visual Studio. 2445 2446 The flag makes these changes to GCC's linkage model: 2447 2448 1. It sets the default visibility to `hidden', like 2449 `-fvisibility=hidden'. 2450 2451 2. Types, but not their members, are not hidden by default. 2452 2453 3. The One Definition Rule is relaxed for types without explicit 2454 visibility specifications that are defined in more than one 2455 shared object: those declarations are permitted if they are 2456 permitted when this option is not used. 2457 2458 In new code it is better to use `-fvisibility=hidden' and export 2459 those classes that are intended to be externally visible. 2460 Unfortunately it is possible for code to rely, perhaps 2461 accidentally, on the Visual Studio behavior. 2462 2463 Among the consequences of these changes are that static data 2464 members of the same type with the same name but defined in 2465 different shared objects are different, so changing one does not 2466 change the other; and that pointers to function members defined in 2467 different shared objects may not compare equal. When this flag is 2468 given, it is a violation of the ODR to define types with the same 2469 name differently. 2470 2471 `-fno-weak' 2472 Do not use weak symbol support, even if it is provided by the 2473 linker. By default, G++ uses weak symbols if they are available. 2474 This option exists only for testing, and should not be used by 2475 end-users; it results in inferior code and has no benefits. This 2476 option may be removed in a future release of G++. 2477 2478 `-nostdinc++' 2479 Do not search for header files in the standard directories 2480 specific to C++, but do still search the other standard 2481 directories. (This option is used when building the C++ library.) 2482 2483 In addition, these optimization, warning, and code generation options 2484 have meanings only for C++ programs: 2485 2486 `-fno-default-inline' 2487 Do not assume `inline' for functions defined inside a class scope. 2488 *Note Options That Control Optimization: Optimize Options. Note 2489 that these functions have linkage like inline functions; they just 2490 aren't inlined by default. 2491 2492 `-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2493 Warn when G++ generates code that is probably not compatible with 2494 the vendor-neutral C++ ABI. Although an effort has been made to 2495 warn about all such cases, there are probably some cases that are 2496 not warned about, even though G++ is generating incompatible code. 2497 There may also be cases where warnings are emitted even though the 2498 code that is generated is compatible. 2499 2500 You should rewrite your code to avoid these warnings if you are 2501 concerned about the fact that code generated by G++ may not be 2502 binary compatible with code generated by other compilers. 2503 2504 The known incompatibilities in `-fabi-version=2' (the default) 2505 include: 2506 2507 * A template with a non-type template parameter of reference 2508 type is mangled incorrectly: 2509 extern int N; 2510 template <int &> struct S {}; 2511 void n (S<N>) {2} 2512 2513 This is fixed in `-fabi-version=3'. 2514 2515 * SIMD vector types declared using `__attribute 2516 ((vector_size))' are mangled in a non-standard way that does 2517 not allow for overloading of functions taking vectors of 2518 different sizes. 2519 2520 The mangling is changed in `-fabi-version=4'. 2521 2522 The known incompatibilities in `-fabi-version=1' include: 2523 2524 * Incorrect handling of tail-padding for bit-fields. G++ may 2525 attempt to pack data into the same byte as a base class. For 2526 example: 2527 2528 struct A { virtual void f(); int f1 : 1; }; 2529 struct B : public A { int f2 : 1; }; 2530 2531 In this case, G++ places `B::f2' into the same byte as 2532 `A::f1'; other compilers do not. You can avoid this problem 2533 by explicitly padding `A' so that its size is a multiple of 2534 the byte size on your platform; that causes G++ and other 2535 compilers to lay out `B' identically. 2536 2537 * Incorrect handling of tail-padding for virtual bases. G++ 2538 does not use tail padding when laying out virtual bases. For 2539 example: 2540 2541 struct A { virtual void f(); char c1; }; 2542 struct B { B(); char c2; }; 2543 struct C : public A, public virtual B {}; 2544 2545 In this case, G++ does not place `B' into the tail-padding for 2546 `A'; other compilers do. You can avoid this problem by 2547 explicitly padding `A' so that its size is a multiple of its 2548 alignment (ignoring virtual base classes); that causes G++ 2549 and other compilers to lay out `C' identically. 2550 2551 * Incorrect handling of bit-fields with declared widths greater 2552 than that of their underlying types, when the bit-fields 2553 appear in a union. For example: 2554 2555 union U { int i : 4096; }; 2556 2557 Assuming that an `int' does not have 4096 bits, G++ makes the 2558 union too small by the number of bits in an `int'. 2559 2560 * Empty classes can be placed at incorrect offsets. For 2561 example: 2562 2563 struct A {}; 2564 2565 struct B { 2566 A a; 2567 virtual void f (); 2568 }; 2569 2570 struct C : public B, public A {}; 2571 2572 G++ places the `A' base class of `C' at a nonzero offset; it 2573 should be placed at offset zero. G++ mistakenly believes 2574 that the `A' data member of `B' is already at offset zero. 2575 2576 * Names of template functions whose types involve `typename' or 2577 template template parameters can be mangled incorrectly. 2578 2579 template <typename Q> 2580 void f(typename Q::X) {} 2581 2582 template <template <typename> class Q> 2583 void f(typename Q<int>::X) {} 2584 2585 Instantiations of these templates may be mangled incorrectly. 2586 2587 2588 It also warns about psABI-related changes. The known psABI 2589 changes at this point include: 2590 2591 * For SysV/x86-64, unions with `long double' members are passed 2592 in memory as specified in psABI. For example: 2593 2594 union U { 2595 long double ld; 2596 int i; 2597 }; 2598 2599 `union U' is always passed in memory. 2600 2601 2602 `-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2603 Warn when a class seems unusable because all the constructors or 2604 destructors in that class are private, and it has neither friends 2605 nor public static member functions. Also warn if there are no 2606 non-private methods, and there's at least one private member 2607 function that isn't a constructor or destructor. 2608 2609 `-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)' 2610 Warn when `delete' is used to destroy an instance of a class that 2611 has virtual functions and non-virtual destructor. It is unsafe to 2612 delete an instance of a derived class through a pointer to a base 2613 class if the base class does not have a virtual destructor. This 2614 warning is enabled by `-Wall'. 2615 2616 `-Wliteral-suffix (C++ and Objective-C++ only)' 2617 Warn when a string or character literal is followed by a ud-suffix 2618 which does not begin with an underscore. As a conforming 2619 extension, GCC treats such suffixes as separate preprocessing 2620 tokens in order to maintain backwards compatibility with code that 2621 uses formatting macros from `<inttypes.h>'. For example: 2622 2623 #define __STDC_FORMAT_MACROS 2624 #include <inttypes.h> 2625 #include <stdio.h> 2626 2627 int main() { 2628 int64_t i64 = 123; 2629 printf("My int64: %"PRId64"\n", i64); 2630 } 2631 2632 In this case, `PRId64' is treated as a separate preprocessing 2633 token. 2634 2635 This warning is enabled by default. 2636 2637 `-Wnarrowing (C++ and Objective-C++ only)' 2638 Warn when a narrowing conversion prohibited by C++11 occurs within 2639 `{ }', e.g. 2640 2641 int i = { 2.2 }; // error: narrowing from double to int 2642 2643 This flag is included in `-Wall' and `-Wc++11-compat'. 2644 2645 With `-std=c++11', `-Wno-narrowing' suppresses the diagnostic 2646 required by the standard. Note that this does not affect the 2647 meaning of well-formed code; narrowing conversions are still 2648 considered ill-formed in SFINAE context. 2649 2650 `-Wnoexcept (C++ and Objective-C++ only)' 2651 Warn when a noexcept-expression evaluates to false because of a 2652 call to a function that does not have a non-throwing exception 2653 specification (i.e. `throw()' or `noexcept') but is known by the 2654 compiler to never throw an exception. 2655 2656 `-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2657 Warn when a class has virtual functions and an accessible 2658 non-virtual destructor, in which case it is possible but unsafe to 2659 delete an instance of a derived class through a pointer to the 2660 base class. This warning is also enabled if `-Weffc++' is 2661 specified. 2662 2663 `-Wreorder (C++ and Objective-C++ only)' 2664 Warn when the order of member initializers given in the code does 2665 not match the order in which they must be executed. For instance: 2666 2667 struct A { 2668 int i; 2669 int j; 2670 A(): j (0), i (1) { } 2671 }; 2672 2673 The compiler rearranges the member initializers for `i' and `j' to 2674 match the declaration order of the members, emitting a warning to 2675 that effect. This warning is enabled by `-Wall'. 2676 2677 `-fext-numeric-literals (C++ and Objective-C++ only)' 2678 Accept imaginary, fixed-point, or machine-defined literal number 2679 suffixes as GNU extensions. When this option is turned off these 2680 suffixes are treated as C++11 user-defined literal numeric 2681 suffixes. This is on by default for all pre-C++11 dialects and 2682 all GNU dialects: `-std=c++98', `-std=gnu++98', `-std=gnu++11', 2683 `-std=gnu++1y'. This option is off by default for ISO C++11 2684 onwards (`-std=c++11', ...). 2685 2686 The following `-W...' options are not affected by `-Wall'. 2687 2688 `-Weffc++ (C++ and Objective-C++ only)' 2689 Warn about violations of the following style guidelines from Scott 2690 Meyers' `Effective C++, Second Edition' book: 2691 2692 * Item 11: Define a copy constructor and an assignment 2693 operator for classes with dynamically-allocated memory. 2694 2695 * Item 12: Prefer initialization to assignment in constructors. 2696 2697 * Item 14: Make destructors virtual in base classes. 2698 2699 * Item 15: Have `operator=' return a reference to `*this'. 2700 2701 * Item 23: Don't try to return a reference when you must 2702 return an object. 2703 2704 2705 Also warn about violations of the following style guidelines from 2706 Scott Meyers' `More Effective C++' book: 2707 2708 * Item 6: Distinguish between prefix and postfix forms of 2709 increment and decrement operators. 2710 2711 * Item 7: Never overload `&&', `||', or `,'. 2712 2713 2714 When selecting this option, be aware that the standard library 2715 headers do not obey all of these guidelines; use `grep -v' to 2716 filter out those warnings. 2717 2718 `-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2719 Warn about the use of an uncasted `NULL' as sentinel. When 2720 compiling only with GCC this is a valid sentinel, as `NULL' is 2721 defined to `__null'. Although it is a null pointer constant 2722 rather than a null pointer, it is guaranteed to be of the same 2723 size as a pointer. But this use is not portable across different 2724 compilers. 2725 2726 `-Wno-non-template-friend (C++ and Objective-C++ only)' 2727 Disable warnings when non-templatized friend functions are declared 2728 within a template. Since the advent of explicit template 2729 specification support in G++, if the name of the friend is an 2730 unqualified-id (i.e., `friend foo(int)'), the C++ language 2731 specification demands that the friend declare or define an 2732 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2733 implemented explicit specification, unqualified-ids could be 2734 interpreted as a particular specialization of a templatized 2735 function. Because this non-conforming behavior is no longer the 2736 default behavior for G++, `-Wnon-template-friend' allows the 2737 compiler to check existing code for potential trouble spots and is 2738 on by default. This new compiler behavior can be turned off with 2739 `-Wno-non-template-friend', which keeps the conformant compiler 2740 code but disables the helpful warning. 2741 2742 `-Wold-style-cast (C++ and Objective-C++ only)' 2743 Warn if an old-style (C-style) cast to a non-void type is used 2744 within a C++ program. The new-style casts (`dynamic_cast', 2745 `static_cast', `reinterpret_cast', and `const_cast') are less 2746 vulnerable to unintended effects and much easier to search for. 2747 2748 `-Woverloaded-virtual (C++ and Objective-C++ only)' 2749 Warn when a function declaration hides virtual functions from a 2750 base class. For example, in: 2751 2752 struct A { 2753 virtual void f(); 2754 }; 2755 2756 struct B: public A { 2757 void f(int); 2758 }; 2759 2760 the `A' class version of `f' is hidden in `B', and code like: 2761 2762 B* b; 2763 b->f(); 2764 2765 fails to compile. 2766 2767 `-Wno-pmf-conversions (C++ and Objective-C++ only)' 2768 Disable the diagnostic for converting a bound pointer to member 2769 function to a plain pointer. 2770 2771 `-Wsign-promo (C++ and Objective-C++ only)' 2772 Warn when overload resolution chooses a promotion from unsigned or 2773 enumerated type to a signed type, over a conversion to an unsigned 2774 type of the same size. Previous versions of G++ tried to preserve 2775 unsignedness, but the standard mandates the current behavior. 2776 2777 2778 File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2779 2780 3.6 Options Controlling Objective-C and Objective-C++ Dialects 2781 ============================================================== 2782 2783 (NOTE: This manual does not describe the Objective-C and Objective-C++ 2784 languages themselves. *Note Language Standards Supported by GCC: 2785 Standards, for references.) 2786 2787 This section describes the command-line options that are only 2788 meaningful for Objective-C and Objective-C++ programs. You can also 2789 use most of the language-independent GNU compiler options. For 2790 example, you might compile a file `some_class.m' like this: 2791 2792 gcc -g -fgnu-runtime -O -c some_class.m 2793 2794 In this example, `-fgnu-runtime' is an option meant only for 2795 Objective-C and Objective-C++ programs; you can use the other options 2796 with any language supported by GCC. 2797 2798 Note that since Objective-C is an extension of the C language, 2799 Objective-C compilations may also use options specific to the C 2800 front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2801 compilations may use C++-specific options (e.g., `-Wabi'). 2802 2803 Here is a list of options that are _only_ for compiling Objective-C 2804 and Objective-C++ programs: 2805 2806 `-fconstant-string-class=CLASS-NAME' 2807 Use CLASS-NAME as the name of the class to instantiate for each 2808 literal string specified with the syntax `@"..."'. The default 2809 class name is `NXConstantString' if the GNU runtime is being used, 2810 and `NSConstantString' if the NeXT runtime is being used (see 2811 below). The `-fconstant-cfstrings' option, if also present, 2812 overrides the `-fconstant-string-class' setting and cause `@"..."' 2813 literals to be laid out as constant CoreFoundation strings. 2814 2815 `-fgnu-runtime' 2816 Generate object code compatible with the standard GNU Objective-C 2817 runtime. This is the default for most types of systems. 2818 2819 `-fnext-runtime' 2820 Generate output compatible with the NeXT runtime. This is the 2821 default for NeXT-based systems, including Darwin and Mac OS X. 2822 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 2823 option is used. 2824 2825 `-fno-nil-receivers' 2826 Assume that all Objective-C message dispatches (`[receiver 2827 message:arg]') in this translation unit ensure that the receiver is 2828 not `nil'. This allows for more efficient entry points in the 2829 runtime to be used. This option is only available in conjunction 2830 with the NeXT runtime and ABI version 0 or 1. 2831 2832 `-fobjc-abi-version=N' 2833 Use version N of the Objective-C ABI for the selected runtime. 2834 This option is currently supported only for the NeXT runtime. In 2835 that case, Version 0 is the traditional (32-bit) ABI without 2836 support for properties and other Objective-C 2.0 additions. 2837 Version 1 is the traditional (32-bit) ABI with support for 2838 properties and other Objective-C 2.0 additions. Version 2 is the 2839 modern (64-bit) ABI. If nothing is specified, the default is 2840 Version 0 on 32-bit target machines, and Version 2 on 64-bit 2841 target machines. 2842 2843 `-fobjc-call-cxx-cdtors' 2844 For each Objective-C class, check if any of its instance variables 2845 is a C++ object with a non-trivial default constructor. If so, 2846 synthesize a special `- (id) .cxx_construct' instance method which 2847 runs non-trivial default constructors on any such instance 2848 variables, in order, and then return `self'. Similarly, check if 2849 any instance variable is a C++ object with a non-trivial 2850 destructor, and if so, synthesize a special `- (void) 2851 .cxx_destruct' method which runs all such default destructors, in 2852 reverse order. 2853 2854 The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods 2855 thusly generated only operate on instance variables declared in 2856 the current Objective-C class, and not those inherited from 2857 superclasses. It is the responsibility of the Objective-C runtime 2858 to invoke all such methods in an object's inheritance hierarchy. 2859 The `- (id) .cxx_construct' methods are invoked by the runtime 2860 immediately after a new object instance is allocated; the `- 2861 (void) .cxx_destruct' methods are invoked immediately before the 2862 runtime deallocates an object instance. 2863 2864 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2865 later has support for invoking the `- (id) .cxx_construct' and `- 2866 (void) .cxx_destruct' methods. 2867 2868 `-fobjc-direct-dispatch' 2869 Allow fast jumps to the message dispatcher. On Darwin this is 2870 accomplished via the comm page. 2871 2872 `-fobjc-exceptions' 2873 Enable syntactic support for structured exception handling in 2874 Objective-C, similar to what is offered by C++ and Java. This 2875 option is required to use the Objective-C keywords `@try', 2876 `@throw', `@catch', `@finally' and `@synchronized'. This option 2877 is available with both the GNU runtime and the NeXT runtime (but 2878 not available in conjunction with the NeXT runtime on Mac OS X 2879 10.2 and earlier). 2880 2881 `-fobjc-gc' 2882 Enable garbage collection (GC) in Objective-C and Objective-C++ 2883 programs. This option is only available with the NeXT runtime; the 2884 GNU runtime has a different garbage collection implementation that 2885 does not require special compiler flags. 2886 2887 `-fobjc-nilcheck' 2888 For the NeXT runtime with version 2 of the ABI, check for a nil 2889 receiver in method invocations before doing the actual method call. 2890 This is the default and can be disabled using 2891 `-fno-objc-nilcheck'. Class methods and super calls are never 2892 checked for nil in this way no matter what this flag is set to. 2893 Currently this flag does nothing when the GNU runtime, or an older 2894 version of the NeXT runtime ABI, is used. 2895 2896 `-fobjc-std=objc1' 2897 Conform to the language syntax of Objective-C 1.0, the language 2898 recognized by GCC 4.0. This only affects the Objective-C 2899 additions to the C/C++ language; it does not affect conformance to 2900 C/C++ standards, which is controlled by the separate C/C++ dialect 2901 option flags. When this option is used with the Objective-C or 2902 Objective-C++ compiler, any Objective-C syntax that is not 2903 recognized by GCC 4.0 is rejected. This is useful if you need to 2904 make sure that your Objective-C code can be compiled with older 2905 versions of GCC. 2906 2907 `-freplace-objc-classes' 2908 Emit a special marker instructing `ld(1)' not to statically link in 2909 the resulting object file, and allow `dyld(1)' to load it in at 2910 run time instead. This is used in conjunction with the 2911 Fix-and-Continue debugging mode, where the object file in question 2912 may be recompiled and dynamically reloaded in the course of 2913 program execution, without the need to restart the program itself. 2914 Currently, Fix-and-Continue functionality is only available in 2915 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2916 2917 `-fzero-link' 2918 When compiling for the NeXT runtime, the compiler ordinarily 2919 replaces calls to `objc_getClass("...")' (when the name of the 2920 class is known at compile time) with static class references that 2921 get initialized at load time, which improves run-time performance. 2922 Specifying the `-fzero-link' flag suppresses this behavior and 2923 causes calls to `objc_getClass("...")' to be retained. This is 2924 useful in Zero-Link debugging mode, since it allows for individual 2925 class implementations to be modified during program execution. 2926 The GNU runtime currently always retains calls to 2927 `objc_get_class("...")' regardless of command-line options. 2928 2929 `-gen-decls' 2930 Dump interface declarations for all classes seen in the source 2931 file to a file named `SOURCENAME.decl'. 2932 2933 `-Wassign-intercept (Objective-C and Objective-C++ only)' 2934 Warn whenever an Objective-C assignment is being intercepted by the 2935 garbage collector. 2936 2937 `-Wno-protocol (Objective-C and Objective-C++ only)' 2938 If a class is declared to implement a protocol, a warning is 2939 issued for every method in the protocol that is not implemented by 2940 the class. The default behavior is to issue a warning for every 2941 method not explicitly implemented in the class, even if a method 2942 implementation is inherited from the superclass. If you use the 2943 `-Wno-protocol' option, then methods inherited from the superclass 2944 are considered to be implemented, and no warning is issued for 2945 them. 2946 2947 `-Wselector (Objective-C and Objective-C++ only)' 2948 Warn if multiple methods of different types for the same selector 2949 are found during compilation. The check is performed on the list 2950 of methods in the final stage of compilation. Additionally, a 2951 check is performed for each selector appearing in a 2952 `@selector(...)' expression, and a corresponding method for that 2953 selector has been found during compilation. Because these checks 2954 scan the method table only at the end of compilation, these 2955 warnings are not produced if the final stage of compilation is not 2956 reached, for example because an error is found during compilation, 2957 or because the `-fsyntax-only' option is being used. 2958 2959 `-Wstrict-selector-match (Objective-C and Objective-C++ only)' 2960 Warn if multiple methods with differing argument and/or return 2961 types are found for a given selector when attempting to send a 2962 message using this selector to a receiver of type `id' or `Class'. 2963 When this flag is off (which is the default behavior), the 2964 compiler omits such warnings if any differences found are confined 2965 to types that share the same size and alignment. 2966 2967 `-Wundeclared-selector (Objective-C and Objective-C++ only)' 2968 Warn if a `@selector(...)' expression referring to an undeclared 2969 selector is found. A selector is considered undeclared if no 2970 method with that name has been declared before the 2971 `@selector(...)' expression, either explicitly in an `@interface' 2972 or `@protocol' declaration, or implicitly in an `@implementation' 2973 section. This option always performs its checks as soon as a 2974 `@selector(...)' expression is found, while `-Wselector' only 2975 performs its checks in the final stage of compilation. This also 2976 enforces the coding style convention that methods and selectors 2977 must be declared before being used. 2978 2979 `-print-objc-runtime-info' 2980 Generate C header describing the largest structure that is passed 2981 by value, if any. 2982 2983 2984 2985 File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2986 2987 3.7 Options to Control Diagnostic Messages Formatting 2988 ===================================================== 2989 2990 Traditionally, diagnostic messages have been formatted irrespective of 2991 the output device's aspect (e.g. its width, ...). You can use the 2992 options described below to control the formatting algorithm for 2993 diagnostic messages, e.g. how many characters per line, how often 2994 source location information should be reported. Note that some 2995 language front ends may not honor these options. 2996 2997 `-fmessage-length=N' 2998 Try to format error messages so that they fit on lines of about N 2999 characters. The default is 72 characters for `g++' and 0 for the 3000 rest of the front ends supported by GCC. If N is zero, then no 3001 line-wrapping is done; each error message appears on a single line. 3002 3003 `-fdiagnostics-show-location=once' 3004 Only meaningful in line-wrapping mode. Instructs the diagnostic 3005 messages reporter to emit source location information _once_; that 3006 is, in case the message is too long to fit on a single physical 3007 line and has to be wrapped, the source location won't be emitted 3008 (as prefix) again, over and over, in subsequent continuation 3009 lines. This is the default behavior. 3010 3011 `-fdiagnostics-show-location=every-line' 3012 Only meaningful in line-wrapping mode. Instructs the diagnostic 3013 messages reporter to emit the same source location information (as 3014 prefix) for physical lines that result from the process of breaking 3015 a message which is too long to fit on a single line. 3016 3017 `-fno-diagnostics-show-option' 3018 By default, each diagnostic emitted includes text indicating the 3019 command-line option that directly controls the diagnostic (if such 3020 an option is known to the diagnostic machinery). Specifying the 3021 `-fno-diagnostics-show-option' flag suppresses that behavior. 3022 3023 `-fno-diagnostics-show-caret' 3024 By default, each diagnostic emitted includes the original source 3025 line and a caret '^' indicating the column. This option 3026 suppresses this information. 3027 3028 3029 3030 File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 3031 3032 3.8 Options to Request or Suppress Warnings 3033 =========================================== 3034 3035 Warnings are diagnostic messages that report constructions that are not 3036 inherently erroneous but that are risky or suggest there may have been 3037 an error. 3038 3039 The following language-independent options do not enable specific 3040 warnings but control the kinds of diagnostics produced by GCC. 3041 3042 `-fsyntax-only' 3043 Check the code for syntax errors, but don't do anything beyond 3044 that. 3045 3046 `-fmax-errors=N' 3047 Limits the maximum number of error messages to N, at which point 3048 GCC bails out rather than attempting to continue processing the 3049 source code. If N is 0 (the default), there is no limit on the 3050 number of error messages produced. If `-Wfatal-errors' is also 3051 specified, then `-Wfatal-errors' takes precedence over this option. 3052 3053 `-w' 3054 Inhibit all warning messages. 3055 3056 `-Werror' 3057 Make all warnings into errors. 3058 3059 `-Werror=' 3060 Make the specified warning into an error. The specifier for a 3061 warning is appended; for example `-Werror=switch' turns the 3062 warnings controlled by `-Wswitch' into errors. This switch takes a 3063 negative form, to be used to negate `-Werror' for specific 3064 warnings; for example `-Wno-error=switch' makes `-Wswitch' 3065 warnings not be errors, even when `-Werror' is in effect. 3066 3067 The warning message for each controllable warning includes the 3068 option that controls the warning. That option can then be used 3069 with `-Werror=' and `-Wno-error=' as described above. (Printing 3070 of the option in the warning message can be disabled using the 3071 `-fno-diagnostics-show-option' flag.) 3072 3073 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 3074 However, `-Wno-error='FOO does not imply anything. 3075 3076 `-Wfatal-errors' 3077 This option causes the compiler to abort compilation on the first 3078 error occurred rather than trying to keep going and printing 3079 further error messages. 3080 3081 3082 You can request many specific warnings with options beginning with 3083 `-W', for example `-Wimplicit' to request warnings on implicit 3084 declarations. Each of these specific warning options also has a 3085 negative form beginning `-Wno-' to turn off warnings; for example, 3086 `-Wno-implicit'. This manual lists only one of the two forms, 3087 whichever is not the default. For further language-specific options 3088 also refer to *note C++ Dialect Options:: and *note Objective-C and 3089 Objective-C++ Dialect Options::. 3090 3091 When an unrecognized warning option is requested (e.g., 3092 `-Wunknown-warning'), GCC emits a diagnostic stating that the option is 3093 not recognized. However, if the `-Wno-' form is used, the behavior is 3094 slightly different: no diagnostic is produced for 3095 `-Wno-unknown-warning' unless other diagnostics are being produced. 3096 This allows the use of new `-Wno-' options with old compilers, but if 3097 something goes wrong, the compiler warns that an unrecognized option is 3098 present. 3099 3100 `-Wpedantic' 3101 `-pedantic' 3102 Issue all the warnings demanded by strict ISO C and ISO C++; 3103 reject all programs that use forbidden extensions, and some other 3104 programs that do not follow ISO C and ISO C++. For ISO C, follows 3105 the version of the ISO C standard specified by any `-std' option 3106 used. 3107 3108 Valid ISO C and ISO C++ programs should compile properly with or 3109 without this option (though a rare few require `-ansi' or a `-std' 3110 option specifying the required version of ISO C). However, 3111 without this option, certain GNU extensions and traditional C and 3112 C++ features are supported as well. With this option, they are 3113 rejected. 3114 3115 `-Wpedantic' does not cause warning messages for use of the 3116 alternate keywords whose names begin and end with `__'. Pedantic 3117 warnings are also disabled in the expression that follows 3118 `__extension__'. However, only system header files should use 3119 these escape routes; application programs should avoid them. 3120 *Note Alternate Keywords::. 3121 3122 Some users try to use `-Wpedantic' to check programs for strict ISO 3123 C conformance. They soon find that it does not do quite what they 3124 want: it finds some non-ISO practices, but not all--only those for 3125 which ISO C _requires_ a diagnostic, and some others for which 3126 diagnostics have been added. 3127 3128 A feature to report any failure to conform to ISO C might be 3129 useful in some instances, but would require considerable 3130 additional work and would be quite different from `-Wpedantic'. 3131 We don't have plans to support such a feature in the near future. 3132 3133 Where the standard specified with `-std' represents a GNU extended 3134 dialect of C, such as `gnu90' or `gnu99', there is a corresponding 3135 "base standard", the version of ISO C on which the GNU extended 3136 dialect is based. Warnings from `-Wpedantic' are given where they 3137 are required by the base standard. (It does not make sense for 3138 such warnings to be given only for features not in the specified 3139 GNU C dialect, since by definition the GNU dialects of C include 3140 all features the compiler supports with the given option, and 3141 there would be nothing to warn about.) 3142 3143 `-pedantic-errors' 3144 Like `-Wpedantic', except that errors are produced rather than 3145 warnings. 3146 3147 `-Wall' 3148 This enables all the warnings about constructions that some users 3149 consider questionable, and that are easy to avoid (or modify to 3150 prevent the warning), even in conjunction with macros. This also 3151 enables some language-specific warnings described in *note C++ 3152 Dialect Options:: and *note Objective-C and Objective-C++ Dialect 3153 Options::. 3154 3155 `-Wall' turns on the following warning flags: 3156 3157 -Waddress 3158 -Warray-bounds (only with `-O2') 3159 -Wc++11-compat 3160 -Wchar-subscripts 3161 -Wenum-compare (in C/ObjC; this is on by default in C++) 3162 -Wimplicit-int (C and Objective-C only) 3163 -Wimplicit-function-declaration (C and Objective-C only) 3164 -Wcomment 3165 -Wformat 3166 -Wmain (only for C/ObjC and unless `-ffreestanding') 3167 -Wmaybe-uninitialized 3168 -Wmissing-braces (only for C/ObjC) 3169 -Wnonnull 3170 -Wparentheses 3171 -Wpointer-sign 3172 -Wreorder 3173 -Wreturn-type 3174 -Wsequence-point 3175 -Wsign-compare (only in C++) 3176 -Wstrict-aliasing 3177 -Wstrict-overflow=1 3178 -Wswitch 3179 -Wtrigraphs 3180 -Wuninitialized 3181 -Wunknown-pragmas 3182 -Wunused-function 3183 -Wunused-label 3184 -Wunused-value 3185 -Wunused-variable 3186 -Wvolatile-register-var 3187 3188 Note that some warning flags are not implied by `-Wall'. Some of 3189 them warn about constructions that users generally do not consider 3190 questionable, but which occasionally you might wish to check for; 3191 others warn about constructions that are necessary or hard to 3192 avoid in some cases, and there is no simple way to modify the code 3193 to suppress the warning. Some of them are enabled by `-Wextra' but 3194 many of them must be enabled individually. 3195 3196 `-Wextra' 3197 This enables some extra warning flags that are not enabled by 3198 `-Wall'. (This option used to be called `-W'. The older name is 3199 still supported, but the newer name is more descriptive.) 3200 3201 -Wclobbered 3202 -Wempty-body 3203 -Wignored-qualifiers 3204 -Wmissing-field-initializers 3205 -Wmissing-parameter-type (C only) 3206 -Wold-style-declaration (C only) 3207 -Woverride-init 3208 -Wsign-compare 3209 -Wtype-limits 3210 -Wuninitialized 3211 -Wunused-parameter (only with `-Wunused' or `-Wall') 3212 -Wunused-but-set-parameter (only with `-Wunused' or `-Wall') 3213 3214 The option `-Wextra' also prints warning messages for the 3215 following cases: 3216 3217 * A pointer is compared against integer zero with `<', `<=', 3218 `>', or `>='. 3219 3220 * (C++ only) An enumerator and a non-enumerator both appear in a 3221 conditional expression. 3222 3223 * (C++ only) Ambiguous virtual bases. 3224 3225 * (C++ only) Subscripting an array that has been declared 3226 `register'. 3227 3228 * (C++ only) Taking the address of a variable that has been 3229 declared `register'. 3230 3231 * (C++ only) A base class is not initialized in a derived 3232 class's copy constructor. 3233 3234 3235 `-Wchar-subscripts' 3236 Warn if an array subscript has type `char'. This is a common cause 3237 of error, as programmers often forget that this type is signed on 3238 some machines. This warning is enabled by `-Wall'. 3239 3240 `-Wcomment' 3241 Warn whenever a comment-start sequence `/*' appears in a `/*' 3242 comment, or whenever a Backslash-Newline appears in a `//' comment. 3243 This warning is enabled by `-Wall'. 3244 3245 `-Wno-coverage-mismatch' 3246 Warn if feedback profiles do not match when using the 3247 `-fprofile-use' option. If a source file is changed between 3248 compiling with `-fprofile-gen' and with `-fprofile-use', the files 3249 with the profile feedback can fail to match the source file and 3250 GCC cannot use the profile feedback information. By default, this 3251 warning is enabled and is treated as an error. 3252 `-Wno-coverage-mismatch' can be used to disable the warning or 3253 `-Wno-error=coverage-mismatch' can be used to disable the error. 3254 Disabling the error for this warning can result in poorly 3255 optimized code and is useful only in the case of very minor 3256 changes such as bug fixes to an existing code-base. Completely 3257 disabling the warning is not recommended. 3258 3259 `-Wno-cpp' 3260 (C, Objective-C, C++, Objective-C++ and Fortran only) 3261 3262 Suppress warning messages emitted by `#warning' directives. 3263 3264 `-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)' 3265 Give a warning when a value of type `float' is implicitly promoted 3266 to `double'. CPUs with a 32-bit "single-precision" floating-point 3267 unit implement `float' in hardware, but emulate `double' in 3268 software. On such a machine, doing computations using `double' 3269 values is much more expensive because of the overhead required for 3270 software emulation. 3271 3272 It is easy to accidentally do computations with `double' because 3273 floating-point literals are implicitly of type `double'. For 3274 example, in: 3275 float area(float radius) 3276 { 3277 return 3.14159 * radius * radius; 3278 } 3279 the compiler performs the entire computation with `double' because 3280 the floating-point literal is a `double'. 3281 3282 `-Wformat' 3283 `-Wformat=N' 3284 Check calls to `printf' and `scanf', etc., to make sure that the 3285 arguments supplied have types appropriate to the format string 3286 specified, and that the conversions specified in the format string 3287 make sense. This includes standard functions, and others 3288 specified by format attributes (*note Function Attributes::), in 3289 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 3290 extension, not in the C standard) families (or other 3291 target-specific families). Which functions are checked without 3292 format attributes having been specified depends on the standard 3293 version selected, and such checks of functions without the 3294 attribute specified are disabled by `-ffreestanding' or 3295 `-fno-builtin'. 3296 3297 The formats are checked against the format features supported by 3298 GNU libc version 2.2. These include all ISO C90 and C99 features, 3299 as well as features from the Single Unix Specification and some 3300 BSD and GNU extensions. Other library implementations may not 3301 support all these features; GCC does not support warning about 3302 features that go beyond a particular library's limitations. 3303 However, if `-Wpedantic' is used with `-Wformat', warnings are 3304 given about format features not in the selected standard version 3305 (but not for `strfmon' formats, since those are not in any version 3306 of the C standard). *Note Options Controlling C Dialect: C 3307 Dialect Options. 3308 3309 `-Wformat=1' 3310 `-Wformat' 3311 Option `-Wformat' is equivalent to `-Wformat=1', and 3312 `-Wno-format' is equivalent to `-Wformat=0'. Since 3313 `-Wformat' also checks for null format arguments for several 3314 functions, `-Wformat' also implies `-Wnonnull'. Some aspects 3315 of this level of format checking can be disabled by the 3316 options: `-Wno-format-contains-nul', 3317 `-Wno-format-extra-args', and `-Wno-format-zero-length'. 3318 `-Wformat' is enabled by `-Wall'. 3319 3320 `-Wno-format-contains-nul' 3321 If `-Wformat' is specified, do not warn about format strings 3322 that contain NUL bytes. 3323 3324 `-Wno-format-extra-args' 3325 If `-Wformat' is specified, do not warn about excess 3326 arguments to a `printf' or `scanf' format function. The C 3327 standard specifies that such arguments are ignored. 3328 3329 Where the unused arguments lie between used arguments that are 3330 specified with `$' operand number specifications, normally 3331 warnings are still given, since the implementation could not 3332 know what type to pass to `va_arg' to skip the unused 3333 arguments. However, in the case of `scanf' formats, this 3334 option suppresses the warning if the unused arguments are all 3335 pointers, since the Single Unix Specification says that such 3336 unused arguments are allowed. 3337 3338 `-Wno-format-zero-length' 3339 If `-Wformat' is specified, do not warn about zero-length 3340 formats. The C standard specifies that zero-length formats 3341 are allowed. 3342 3343 `-Wformat=2' 3344 Enable `-Wformat' plus additional format checks. Currently 3345 equivalent to `-Wformat -Wformat-nonliteral -Wformat-security 3346 -Wformat-y2k'. 3347 3348 `-Wformat-nonliteral' 3349 If `-Wformat' is specified, also warn if the format string is 3350 not a string literal and so cannot be checked, unless the 3351 format function takes its format arguments as a `va_list'. 3352 3353 `-Wformat-security' 3354 If `-Wformat' is specified, also warn about uses of format 3355 functions that represent possible security problems. At 3356 present, this warns about calls to `printf' and `scanf' 3357 functions where the format string is not a string literal and 3358 there are no format arguments, as in `printf (foo);'. This 3359 may be a security hole if the format string came from 3360 untrusted input and contains `%n'. (This is currently a 3361 subset of what `-Wformat-nonliteral' warns about, but in 3362 future warnings may be added to `-Wformat-security' that are 3363 not included in `-Wformat-nonliteral'.) 3364 3365 `-Wformat-y2k' 3366 If `-Wformat' is specified, also warn about `strftime' 3367 formats that may yield only a two-digit year. 3368 3369 `-Wnonnull' 3370 Warn about passing a null pointer for arguments marked as 3371 requiring a non-null value by the `nonnull' function attribute. 3372 3373 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 3374 disabled with the `-Wno-nonnull' option. 3375 3376 `-Winit-self (C, C++, Objective-C and Objective-C++ only)' 3377 Warn about uninitialized variables that are initialized with 3378 themselves. Note this option can only be used with the 3379 `-Wuninitialized' option. 3380 3381 For example, GCC warns about `i' being uninitialized in the 3382 following snippet only when `-Winit-self' has been specified: 3383 int f() 3384 { 3385 int i = i; 3386 return i; 3387 } 3388 3389 This warning is enabled by `-Wall' in C++. 3390 3391 `-Wimplicit-int (C and Objective-C only)' 3392 Warn when a declaration does not specify a type. This warning is 3393 enabled by `-Wall'. 3394 3395 `-Wimplicit-function-declaration (C and Objective-C only)' 3396 Give a warning whenever a function is used before being declared. 3397 In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled 3398 by default and it is made into an error by `-pedantic-errors'. 3399 This warning is also enabled by `-Wall'. 3400 3401 `-Wimplicit (C and Objective-C only)' 3402 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 3403 This warning is enabled by `-Wall'. 3404 3405 `-Wignored-qualifiers (C and C++ only)' 3406 Warn if the return type of a function has a type qualifier such as 3407 `const'. For ISO C such a type qualifier has no effect, since the 3408 value returned by a function is not an lvalue. For C++, the 3409 warning is only emitted for scalar types or `void'. ISO C 3410 prohibits qualified `void' return types on function definitions, 3411 so such return types always receive a warning even without this 3412 option. 3413 3414 This warning is also enabled by `-Wextra'. 3415 3416 `-Wmain' 3417 Warn if the type of `main' is suspicious. `main' should be a 3418 function with external linkage, returning int, taking either zero 3419 arguments, two, or three arguments of appropriate types. This 3420 warning is enabled by default in C++ and is enabled by either 3421 `-Wall' or `-Wpedantic'. 3422 3423 `-Wmissing-braces' 3424 Warn if an aggregate or union initializer is not fully bracketed. 3425 In the following example, the initializer for `a' is not fully 3426 bracketed, but that for `b' is fully bracketed. This warning is 3427 enabled by `-Wall' in C. 3428 3429 int a[2][2] = { 0, 1, 2, 3 }; 3430 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 3431 3432 This warning is enabled by `-Wall'. 3433 3434 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 3435 Warn if a user-supplied include directory does not exist. 3436 3437 `-Wparentheses' 3438 Warn if parentheses are omitted in certain contexts, such as when 3439 there is an assignment in a context where a truth value is 3440 expected, or when operators are nested whose precedence people 3441 often get confused about. 3442 3443 Also warn if a comparison like `x<=y<=z' appears; this is 3444 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 3445 interpretation from that of ordinary mathematical notation. 3446 3447 Also warn about constructions where there may be confusion to which 3448 `if' statement an `else' branch belongs. Here is an example of 3449 such a case: 3450 3451 { 3452 if (a) 3453 if (b) 3454 foo (); 3455 else 3456 bar (); 3457 } 3458 3459 In C/C++, every `else' branch belongs to the innermost possible 3460 `if' statement, which in this example is `if (b)'. This is often 3461 not what the programmer expected, as illustrated in the above 3462 example by indentation the programmer chose. When there is the 3463 potential for this confusion, GCC issues a warning when this flag 3464 is specified. To eliminate the warning, add explicit braces around 3465 the innermost `if' statement so there is no way the `else' can 3466 belong to the enclosing `if'. The resulting code looks like this: 3467 3468 { 3469 if (a) 3470 { 3471 if (b) 3472 foo (); 3473 else 3474 bar (); 3475 } 3476 } 3477 3478 Also warn for dangerous uses of the GNU extension to `?:' with 3479 omitted middle operand. When the condition in the `?': operator is 3480 a boolean expression, the omitted value is always 1. Often 3481 programmers expect it to be a value computed inside the 3482 conditional expression instead. 3483 3484 This warning is enabled by `-Wall'. 3485 3486 `-Wsequence-point' 3487 Warn about code that may have undefined semantics because of 3488 violations of sequence point rules in the C and C++ standards. 3489 3490 The C and C++ standards define the order in which expressions in a 3491 C/C++ program are evaluated in terms of "sequence points", which 3492 represent a partial ordering between the execution of parts of the 3493 program: those executed before the sequence point, and those 3494 executed after it. These occur after the evaluation of a full 3495 expression (one which is not part of a larger expression), after 3496 the evaluation of the first operand of a `&&', `||', `? :' or `,' 3497 (comma) operator, before a function is called (but after the 3498 evaluation of its arguments and the expression denoting the called 3499 function), and in certain other places. Other than as expressed 3500 by the sequence point rules, the order of evaluation of 3501 subexpressions of an expression is not specified. All these rules 3502 describe only a partial order rather than a total order, since, 3503 for example, if two functions are called within one expression 3504 with no sequence point between them, the order in which the 3505 functions are called is not specified. However, the standards 3506 committee have ruled that function calls do not overlap. 3507 3508 It is not specified when between sequence points modifications to 3509 the values of objects take effect. Programs whose behavior 3510 depends on this have undefined behavior; the C and C++ standards 3511 specify that "Between the previous and next sequence point an 3512 object shall have its stored value modified at most once by the 3513 evaluation of an expression. Furthermore, the prior value shall 3514 be read only to determine the value to be stored.". If a program 3515 breaks these rules, the results on any particular implementation 3516 are entirely unpredictable. 3517 3518 Examples of code with undefined behavior are `a = a++;', `a[n] = 3519 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 3520 diagnosed by this option, and it may give an occasional false 3521 positive result, but in general it has been found fairly effective 3522 at detecting this sort of problem in programs. 3523 3524 The standard is worded confusingly, therefore there is some debate 3525 over the precise meaning of the sequence point rules in subtle 3526 cases. Links to discussions of the problem, including proposed 3527 formal definitions, may be found on the GCC readings page, at 3528 `http://gcc.gnu.org/readings.html'. 3529 3530 This warning is enabled by `-Wall' for C and C++. 3531 3532 `-Wno-return-local-addr' 3533 Do not warn about returning a pointer (or in C++, a reference) to a 3534 variable that goes out of scope after the function returns. 3535 3536 `-Wreturn-type' 3537 Warn whenever a function is defined with a return type that 3538 defaults to `int'. Also warn about any `return' statement with no 3539 return value in a function whose return type is not `void' 3540 (falling off the end of the function body is considered returning 3541 without a value), and about a `return' statement with an 3542 expression in a function whose return type is `void'. 3543 3544 For C++, a function without return type always produces a 3545 diagnostic message, even when `-Wno-return-type' is specified. 3546 The only exceptions are `main' and functions defined in system 3547 headers. 3548 3549 This warning is enabled by `-Wall'. 3550 3551 `-Wswitch' 3552 Warn whenever a `switch' statement has an index of enumerated type 3553 and lacks a `case' for one or more of the named codes of that 3554 enumeration. (The presence of a `default' label prevents this 3555 warning.) `case' labels outside the enumeration range also 3556 provoke warnings when this option is used (even if there is a 3557 `default' label). This warning is enabled by `-Wall'. 3558 3559 `-Wswitch-default' 3560 Warn whenever a `switch' statement does not have a `default' case. 3561 3562 `-Wswitch-enum' 3563 Warn whenever a `switch' statement has an index of enumerated type 3564 and lacks a `case' for one or more of the named codes of that 3565 enumeration. `case' labels outside the enumeration range also 3566 provoke warnings when this option is used. The only difference 3567 between `-Wswitch' and this option is that this option gives a 3568 warning about an omitted enumeration code even if there is a 3569 `default' label. 3570 3571 `-Wsync-nand (C and C++ only)' 3572 Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch' 3573 built-in functions are used. These functions changed semantics in 3574 GCC 4.4. 3575 3576 `-Wtrigraphs' 3577 Warn if any trigraphs are encountered that might change the 3578 meaning of the program (trigraphs within comments are not warned 3579 about). This warning is enabled by `-Wall'. 3580 3581 `-Wunused-but-set-parameter' 3582 Warn whenever a function parameter is assigned to, but otherwise 3583 unused (aside from its declaration). 3584 3585 To suppress this warning use the `unused' attribute (*note 3586 Variable Attributes::). 3587 3588 This warning is also enabled by `-Wunused' together with `-Wextra'. 3589 3590 `-Wunused-but-set-variable' 3591 Warn whenever a local variable is assigned to, but otherwise unused 3592 (aside from its declaration). This warning is enabled by `-Wall'. 3593 3594 To suppress this warning use the `unused' attribute (*note 3595 Variable Attributes::). 3596 3597 This warning is also enabled by `-Wunused', which is enabled by 3598 `-Wall'. 3599 3600 `-Wunused-function' 3601 Warn whenever a static function is declared but not defined or a 3602 non-inline static function is unused. This warning is enabled by 3603 `-Wall'. 3604 3605 `-Wunused-label' 3606 Warn whenever a label is declared but not used. This warning is 3607 enabled by `-Wall'. 3608 3609 To suppress this warning use the `unused' attribute (*note 3610 Variable Attributes::). 3611 3612 `-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)' 3613 Warn when a typedef locally defined in a function is not used. 3614 This warning is enabled by `-Wall'. 3615 3616 `-Wunused-parameter' 3617 Warn whenever a function parameter is unused aside from its 3618 declaration. 3619 3620 To suppress this warning use the `unused' attribute (*note 3621 Variable Attributes::). 3622 3623 `-Wno-unused-result' 3624 Do not warn if a caller of a function marked with attribute 3625 `warn_unused_result' (*note Function Attributes::) does not use 3626 its return value. The default is `-Wunused-result'. 3627 3628 `-Wunused-variable' 3629 Warn whenever a local variable or non-constant static variable is 3630 unused aside from its declaration. This warning is enabled by 3631 `-Wall'. 3632 3633 To suppress this warning use the `unused' attribute (*note 3634 Variable Attributes::). 3635 3636 `-Wunused-value' 3637 Warn whenever a statement computes a result that is explicitly not 3638 used. To suppress this warning cast the unused expression to 3639 `void'. This includes an expression-statement or the left-hand 3640 side of a comma expression that contains no side effects. For 3641 example, an expression such as `x[i,j]' causes a warning, while 3642 `x[(void)i,j]' does not. 3643 3644 This warning is enabled by `-Wall'. 3645 3646 `-Wunused' 3647 All the above `-Wunused' options combined. 3648 3649 In order to get a warning about an unused function parameter, you 3650 must either specify `-Wextra -Wunused' (note that `-Wall' implies 3651 `-Wunused'), or separately specify `-Wunused-parameter'. 3652 3653 `-Wuninitialized' 3654 Warn if an automatic variable is used without first being 3655 initialized or if a variable may be clobbered by a `setjmp' call. 3656 In C++, warn if a non-static reference or non-static `const' member 3657 appears in a class without constructors. 3658 3659 If you want to warn about code that uses the uninitialized value 3660 of the variable in its own initializer, use the `-Winit-self' 3661 option. 3662 3663 These warnings occur for individual uninitialized or clobbered 3664 elements of structure, union or array variables as well as for 3665 variables that are uninitialized or clobbered as a whole. They do 3666 not occur for variables or elements declared `volatile'. Because 3667 these warnings depend on optimization, the exact variables or 3668 elements for which there are warnings depends on the precise 3669 optimization options and version of GCC used. 3670 3671 Note that there may be no warning about a variable that is used 3672 only to compute a value that itself is never used, because such 3673 computations may be deleted by data flow analysis before the 3674 warnings are printed. 3675 3676 `-Wmaybe-uninitialized' 3677 For an automatic variable, if there exists a path from the function 3678 entry to a use of the variable that is initialized, but there exist 3679 some other paths for which the variable is not initialized, the 3680 compiler emits a warning if it cannot prove the uninitialized 3681 paths are not executed at run time. These warnings are made 3682 optional because GCC is not smart enough to see all the reasons 3683 why the code might be correct in spite of appearing to have an 3684 error. Here is one example of how this can happen: 3685 3686 { 3687 int x; 3688 switch (y) 3689 { 3690 case 1: x = 1; 3691 break; 3692 case 2: x = 4; 3693 break; 3694 case 3: x = 5; 3695 } 3696 foo (x); 3697 } 3698 3699 If the value of `y' is always 1, 2 or 3, then `x' is always 3700 initialized, but GCC doesn't know this. To suppress the warning, 3701 you need to provide a default case with assert(0) or similar code. 3702 3703 This option also warns when a non-volatile automatic variable 3704 might be changed by a call to `longjmp'. These warnings as well 3705 are possible only in optimizing compilation. 3706 3707 The compiler sees only the calls to `setjmp'. It cannot know 3708 where `longjmp' will be called; in fact, a signal handler could 3709 call it at any point in the code. As a result, you may get a 3710 warning even when there is in fact no problem because `longjmp' 3711 cannot in fact be called at the place that would cause a problem. 3712 3713 Some spurious warnings can be avoided if you declare all the 3714 functions you use that never return as `noreturn'. *Note Function 3715 Attributes::. 3716 3717 This warning is enabled by `-Wall' or `-Wextra'. 3718 3719 `-Wunknown-pragmas' 3720 Warn when a `#pragma' directive is encountered that is not 3721 understood by GCC. If this command-line option is used, warnings 3722 are even issued for unknown pragmas in system header files. This 3723 is not the case if the warnings are only enabled by the `-Wall' 3724 command-line option. 3725 3726 `-Wno-pragmas' 3727 Do not warn about misuses of pragmas, such as incorrect parameters, 3728 invalid syntax, or conflicts between pragmas. See also 3729 `-Wunknown-pragmas'. 3730 3731 `-Wstrict-aliasing' 3732 This option is only active when `-fstrict-aliasing' is active. It 3733 warns about code that might break the strict aliasing rules that 3734 the compiler is using for optimization. The warning does not 3735 catch all cases, but does attempt to catch the more common 3736 pitfalls. It is included in `-Wall'. It is equivalent to 3737 `-Wstrict-aliasing=3' 3738 3739 `-Wstrict-aliasing=n' 3740 This option is only active when `-fstrict-aliasing' is active. It 3741 warns about code that might break the strict aliasing rules that 3742 the compiler is using for optimization. Higher levels correspond 3743 to higher accuracy (fewer false positives). Higher levels also 3744 correspond to more effort, similar to the way `-O' works. 3745 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=3'. 3746 3747 Level 1: Most aggressive, quick, least accurate. Possibly useful 3748 when higher levels do not warn but `-fstrict-aliasing' still 3749 breaks the code, as it has very few false negatives. However, it 3750 has many false positives. Warns for all pointer conversions 3751 between possibly incompatible types, even if never dereferenced. 3752 Runs in the front end only. 3753 3754 Level 2: Aggressive, quick, not too precise. May still have many 3755 false positives (not as many as level 1 though), and few false 3756 negatives (but possibly more than level 1). Unlike level 1, it 3757 only warns when an address is taken. Warns about incomplete 3758 types. Runs in the front end only. 3759 3760 Level 3 (default for `-Wstrict-aliasing'): Should have very few 3761 false positives and few false negatives. Slightly slower than 3762 levels 1 or 2 when optimization is enabled. Takes care of the 3763 common pun+dereference pattern in the front end: 3764 `*(int*)&some_float'. If optimization is enabled, it also runs in 3765 the back end, where it deals with multiple statement cases using 3766 flow-sensitive points-to information. Only warns when the 3767 converted pointer is dereferenced. Does not warn about incomplete 3768 types. 3769 3770 `-Wstrict-overflow' 3771 `-Wstrict-overflow=N' 3772 This option is only active when `-fstrict-overflow' is active. It 3773 warns about cases where the compiler optimizes based on the 3774 assumption that signed overflow does not occur. Note that it does 3775 not warn about all cases where the code might overflow: it only 3776 warns about cases where the compiler implements some optimization. 3777 Thus this warning depends on the optimization level. 3778 3779 An optimization that assumes that signed overflow does not occur is 3780 perfectly safe if the values of the variables involved are such 3781 that overflow never does, in fact, occur. Therefore this warning 3782 can easily give a false positive: a warning about code that is not 3783 actually a problem. To help focus on important issues, several 3784 warning levels are defined. No warnings are issued for the use of 3785 undefined signed overflow when estimating how many iterations a 3786 loop requires, in particular when determining whether a loop will 3787 be executed at all. 3788 3789 `-Wstrict-overflow=1' 3790 Warn about cases that are both questionable and easy to 3791 avoid. For example, with `-fstrict-overflow', the compiler 3792 simplifies `x + 1 > x' to `1'. This level of 3793 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 3794 not, and must be explicitly requested. 3795 3796 `-Wstrict-overflow=2' 3797 Also warn about other cases where a comparison is simplified 3798 to a constant. For example: `abs (x) >= 0'. This can only be 3799 simplified when `-fstrict-overflow' is in effect, because 3800 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 3801 zero. `-Wstrict-overflow' (with no level) is the same as 3802 `-Wstrict-overflow=2'. 3803 3804 `-Wstrict-overflow=3' 3805 Also warn about other cases where a comparison is simplified. 3806 For example: `x + 1 > 1' is simplified to `x > 0'. 3807 3808 `-Wstrict-overflow=4' 3809 Also warn about other simplifications not covered by the 3810 above cases. For example: `(x * 10) / 5' is simplified to `x 3811 * 2'. 3812 3813 `-Wstrict-overflow=5' 3814 Also warn about cases where the compiler reduces the 3815 magnitude of a constant involved in a comparison. For 3816 example: `x + 2 > y' is simplified to `x + 1 >= y'. This is 3817 reported only at the highest warning level because this 3818 simplification applies to many comparisons, so this warning 3819 level gives a very large number of false positives. 3820 3821 `-Wsuggest-attribute=[pure|const|noreturn|format]' 3822 Warn for cases where adding an attribute may be beneficial. The 3823 attributes currently supported are listed below. 3824 3825 `-Wsuggest-attribute=pure' 3826 `-Wsuggest-attribute=const' 3827 `-Wsuggest-attribute=noreturn' 3828 Warn about functions that might be candidates for attributes 3829 `pure', `const' or `noreturn'. The compiler only warns for 3830 functions visible in other compilation units or (in the case 3831 of `pure' and `const') if it cannot prove that the function 3832 returns normally. A function returns normally if it doesn't 3833 contain an infinite loop or return abnormally by throwing, 3834 calling `abort()' or trapping. This analysis requires option 3835 `-fipa-pure-const', which is enabled by default at `-O' and 3836 higher. Higher optimization levels improve the accuracy of 3837 the analysis. 3838 3839 `-Wsuggest-attribute=format' 3840 `-Wmissing-format-attribute' 3841 Warn about function pointers that might be candidates for 3842 `format' attributes. Note these are only possible 3843 candidates, not absolute ones. GCC guesses that function 3844 pointers with `format' attributes that are used in 3845 assignment, initialization, parameter passing or return 3846 statements should have a corresponding `format' attribute in 3847 the resulting type. I.e. the left-hand side of the 3848 assignment or initialization, the type of the parameter 3849 variable, or the return type of the containing function 3850 respectively should also have a `format' attribute to avoid 3851 the warning. 3852 3853 GCC also warns about function definitions that might be 3854 candidates for `format' attributes. Again, these are only 3855 possible candidates. GCC guesses that `format' attributes 3856 might be appropriate for any function that calls a function 3857 like `vprintf' or `vscanf', but this might not always be the 3858 case, and some functions for which `format' attributes are 3859 appropriate may not be detected. 3860 3861 `-Warray-bounds' 3862 This option is only active when `-ftree-vrp' is active (default 3863 for `-O2' and above). It warns about subscripts to arrays that are 3864 always out of bounds. This warning is enabled by `-Wall'. 3865 3866 `-Wno-div-by-zero' 3867 Do not warn about compile-time integer division by zero. 3868 Floating-point division by zero is not warned about, as it can be 3869 a legitimate way of obtaining infinities and NaNs. 3870 3871 `-Wsystem-headers' 3872 Print warning messages for constructs found in system header files. 3873 Warnings from system headers are normally suppressed, on the 3874 assumption that they usually do not indicate real problems and 3875 would only make the compiler output harder to read. Using this 3876 command-line option tells GCC to emit warnings from system headers 3877 as if they occurred in user code. However, note that using 3878 `-Wall' in conjunction with this option does _not_ warn about 3879 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 3880 must also be used. 3881 3882 `-Wtrampolines' 3883 Warn about trampolines generated for pointers to nested functions. 3884 3885 A trampoline is a small piece of data or code that is created at 3886 run time on the stack when the address of a nested function is 3887 taken, and is used to call the nested function indirectly. For 3888 some targets, it is made up of data only and thus requires no 3889 special treatment. But, for most targets, it is made up of code 3890 and thus requires the stack to be made executable in order for 3891 the program to work properly. 3892 3893 `-Wfloat-equal' 3894 Warn if floating-point values are used in equality comparisons. 3895 3896 The idea behind this is that sometimes it is convenient (for the 3897 programmer) to consider floating-point values as approximations to 3898 infinitely precise real numbers. If you are doing this, then you 3899 need to compute (by analyzing the code, or in some other way) the 3900 maximum or likely maximum error that the computation introduces, 3901 and allow for it when performing comparisons (and when producing 3902 output, but that's a different problem). In particular, instead 3903 of testing for equality, you should check to see whether the two 3904 values have ranges that overlap; and this is done with the 3905 relational operators, so equality comparisons are probably 3906 mistaken. 3907 3908 `-Wtraditional (C and Objective-C only)' 3909 Warn about certain constructs that behave differently in 3910 traditional and ISO C. Also warn about ISO C constructs that have 3911 no traditional C equivalent, and/or problematic constructs that 3912 should be avoided. 3913 3914 * Macro parameters that appear within string literals in the 3915 macro body. In traditional C macro replacement takes place 3916 within string literals, but in ISO C it does not. 3917 3918 * In traditional C, some preprocessor directives did not exist. 3919 Traditional preprocessors only considered a line to be a 3920 directive if the `#' appeared in column 1 on the line. 3921 Therefore `-Wtraditional' warns about directives that 3922 traditional C understands but ignores because the `#' does 3923 not appear as the first character on the line. It also 3924 suggests you hide directives like `#pragma' not understood by 3925 traditional C by indenting them. Some traditional 3926 implementations do not recognize `#elif', so this option 3927 suggests avoiding it altogether. 3928 3929 * A function-like macro that appears without arguments. 3930 3931 * The unary plus operator. 3932 3933 * The `U' integer constant suffix, or the `F' or `L' 3934 floating-point constant suffixes. (Traditional C does 3935 support the `L' suffix on integer constants.) Note, these 3936 suffixes appear in macros defined in the system headers of 3937 most modern systems, e.g. the `_MIN'/`_MAX' macros in 3938 `<limits.h>'. Use of these macros in user code might 3939 normally lead to spurious warnings, however GCC's integrated 3940 preprocessor has enough context to avoid warning in these 3941 cases. 3942 3943 * A function declared external in one block and then used after 3944 the end of the block. 3945 3946 * A `switch' statement has an operand of type `long'. 3947 3948 * A non-`static' function declaration follows a `static' one. 3949 This construct is not accepted by some traditional C 3950 compilers. 3951 3952 * The ISO type of an integer constant has a different width or 3953 signedness from its traditional type. This warning is only 3954 issued if the base of the constant is ten. I.e. hexadecimal 3955 or octal values, which typically represent bit patterns, are 3956 not warned about. 3957 3958 * Usage of ISO string concatenation is detected. 3959 3960 * Initialization of automatic aggregates. 3961 3962 * Identifier conflicts with labels. Traditional C lacks a 3963 separate namespace for labels. 3964 3965 * Initialization of unions. If the initializer is zero, the 3966 warning is omitted. This is done under the assumption that 3967 the zero initializer in user code appears conditioned on e.g. 3968 `__STDC__' to avoid missing initializer warnings and relies 3969 on default initialization to zero in the traditional C case. 3970 3971 * Conversions by prototypes between fixed/floating-point values 3972 and vice versa. The absence of these prototypes when 3973 compiling with traditional C causes serious problems. This 3974 is a subset of the possible conversion warnings; for the full 3975 set use `-Wtraditional-conversion'. 3976 3977 * Use of ISO C style function definitions. This warning 3978 intentionally is _not_ issued for prototype declarations or 3979 variadic functions because these ISO C features appear in 3980 your code when using libiberty's traditional C compatibility 3981 macros, `PARAMS' and `VPARAMS'. This warning is also 3982 bypassed for nested functions because that feature is already 3983 a GCC extension and thus not relevant to traditional C 3984 compatibility. 3985 3986 `-Wtraditional-conversion (C and Objective-C only)' 3987 Warn if a prototype causes a type conversion that is different 3988 from what would happen to the same argument in the absence of a 3989 prototype. This includes conversions of fixed point to floating 3990 and vice versa, and conversions changing the width or signedness 3991 of a fixed-point argument except when the same as the default 3992 promotion. 3993 3994 `-Wdeclaration-after-statement (C and Objective-C only)' 3995 Warn when a declaration is found after a statement in a block. 3996 This construct, known from C++, was introduced with ISO C99 and is 3997 by default allowed in GCC. It is not supported by ISO C90 and was 3998 not supported by GCC versions before GCC 3.0. *Note Mixed 3999 Declarations::. 4000 4001 `-Wundef' 4002 Warn if an undefined identifier is evaluated in an `#if' directive. 4003 4004 `-Wno-endif-labels' 4005 Do not warn whenever an `#else' or an `#endif' are followed by 4006 text. 4007 4008 `-Wshadow' 4009 Warn whenever a local variable or type declaration shadows another 4010 variable, parameter, type, or class member (in C++), or whenever a 4011 built-in function is shadowed. Note that in C++, the compiler 4012 warns if a local variable shadows an explicit typedef, but not if 4013 it shadows a struct/class/enum. 4014 4015 `-Wlarger-than=LEN' 4016 Warn whenever an object of larger than LEN bytes is defined. 4017 4018 `-Wframe-larger-than=LEN' 4019 Warn if the size of a function frame is larger than LEN bytes. 4020 The computation done to determine the stack frame size is 4021 approximate and not conservative. The actual requirements may be 4022 somewhat greater than LEN even if you do not get a warning. In 4023 addition, any space allocated via `alloca', variable-length 4024 arrays, or related constructs is not included by the compiler when 4025 determining whether or not to issue a warning. 4026 4027 `-Wno-free-nonheap-object' 4028 Do not warn when attempting to free an object that was not 4029 allocated on the heap. 4030 4031 `-Wstack-usage=LEN' 4032 Warn if the stack usage of a function might be larger than LEN 4033 bytes. The computation done to determine the stack usage is 4034 conservative. Any space allocated via `alloca', variable-length 4035 arrays, or related constructs is included by the compiler when 4036 determining whether or not to issue a warning. 4037 4038 The message is in keeping with the output of `-fstack-usage'. 4039 4040 * If the stack usage is fully static but exceeds the specified 4041 amount, it's: 4042 4043 warning: stack usage is 1120 bytes 4044 4045 * If the stack usage is (partly) dynamic but bounded, it's: 4046 4047 warning: stack usage might be 1648 bytes 4048 4049 * If the stack usage is (partly) dynamic and not bounded, it's: 4050 4051 warning: stack usage might be unbounded 4052 4053 `-Wunsafe-loop-optimizations' 4054 Warn if the loop cannot be optimized because the compiler cannot 4055 assume anything on the bounds of the loop indices. With 4056 `-funsafe-loop-optimizations' warn if the compiler makes such 4057 assumptions. 4058 4059 `-Wno-pedantic-ms-format (MinGW targets only)' 4060 When used in combination with `-Wformat' and `-pedantic' without 4061 GNU extensions, this option disables the warnings about non-ISO 4062 `printf' / `scanf' format width specifiers `I32', `I64', and `I' 4063 used on Windows targets, which depend on the MS runtime. 4064 4065 `-Wpointer-arith' 4066 Warn about anything that depends on the "size of" a function type 4067 or of `void'. GNU C assigns these types a size of 1, for 4068 convenience in calculations with `void *' pointers and pointers to 4069 functions. In C++, warn also when an arithmetic operation involves 4070 `NULL'. This warning is also enabled by `-Wpedantic'. 4071 4072 `-Wtype-limits' 4073 Warn if a comparison is always true or always false due to the 4074 limited range of the data type, but do not warn for constant 4075 expressions. For example, warn if an unsigned variable is 4076 compared against zero with `<' or `>='. This warning is also 4077 enabled by `-Wextra'. 4078 4079 `-Wbad-function-cast (C and Objective-C only)' 4080 Warn whenever a function call is cast to a non-matching type. For 4081 example, warn if `int malloc()' is cast to `anything *'. 4082 4083 `-Wc++-compat (C and Objective-C only)' 4084 Warn about ISO C constructs that are outside of the common subset 4085 of ISO C and ISO C++, e.g. request for implicit conversion from 4086 `void *' to a pointer to non-`void' type. 4087 4088 `-Wc++11-compat (C++ and Objective-C++ only)' 4089 Warn about C++ constructs whose meaning differs between ISO C++ 4090 1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are 4091 keywords in ISO C++ 2011. This warning turns on `-Wnarrowing' and 4092 is enabled by `-Wall'. 4093 4094 `-Wcast-qual' 4095 Warn whenever a pointer is cast so as to remove a type qualifier 4096 from the target type. For example, warn if a `const char *' is 4097 cast to an ordinary `char *'. 4098 4099 Also warn when making a cast that introduces a type qualifier in an 4100 unsafe way. For example, casting `char **' to `const char **' is 4101 unsafe, as in this example: 4102 4103 /* p is char ** value. */ 4104 const char **q = (const char **) p; 4105 /* Assignment of readonly string to const char * is OK. */ 4106 *q = "string"; 4107 /* Now char** pointer points to read-only memory. */ 4108 **p = 'b'; 4109 4110 `-Wcast-align' 4111 Warn whenever a pointer is cast such that the required alignment 4112 of the target is increased. For example, warn if a `char *' is 4113 cast to an `int *' on machines where integers can only be accessed 4114 at two- or four-byte boundaries. 4115 4116 `-Wwrite-strings' 4117 When compiling C, give string constants the type `const 4118 char[LENGTH]' so that copying the address of one into a 4119 non-`const' `char *' pointer produces a warning. These warnings 4120 help you find at compile time code that can try to write into a 4121 string constant, but only if you have been very careful about 4122 using `const' in declarations and prototypes. Otherwise, it is 4123 just a nuisance. This is why we did not make `-Wall' request these 4124 warnings. 4125 4126 When compiling C++, warn about the deprecated conversion from 4127 string literals to `char *'. This warning is enabled by default 4128 for C++ programs. 4129 4130 `-Wclobbered' 4131 Warn for variables that might be changed by `longjmp' or `vfork'. 4132 This warning is also enabled by `-Wextra'. 4133 4134 `-Wconversion' 4135 Warn for implicit conversions that may alter a value. This includes 4136 conversions between real and integer, like `abs (x)' when `x' is 4137 `double'; conversions between signed and unsigned, like `unsigned 4138 ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'. 4139 Do not warn for explicit casts like `abs ((int) x)' and `ui = 4140 (unsigned) -1', or if the value is not changed by the conversion 4141 like in `abs (2.0)'. Warnings about conversions between signed 4142 and unsigned integers can be disabled by using 4143 `-Wno-sign-conversion'. 4144 4145 For C++, also warn for confusing overload resolution for 4146 user-defined conversions; and conversions that never use a type 4147 conversion operator: conversions to `void', the same type, a base 4148 class or a reference to them. Warnings about conversions between 4149 signed and unsigned integers are disabled by default in C++ unless 4150 `-Wsign-conversion' is explicitly enabled. 4151 4152 `-Wno-conversion-null (C++ and Objective-C++ only)' 4153 Do not warn for conversions between `NULL' and non-pointer types. 4154 `-Wconversion-null' is enabled by default. 4155 4156 `-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)' 4157 Warn when a literal '0' is used as null pointer constant. This can 4158 be useful to facilitate the conversion to `nullptr' in C++11. 4159 4160 `-Wuseless-cast (C++ and Objective-C++ only)' 4161 Warn when an expression is casted to its own type. 4162 4163 `-Wempty-body' 4164 Warn if an empty body occurs in an `if', `else' or `do while' 4165 statement. This warning is also enabled by `-Wextra'. 4166 4167 `-Wenum-compare' 4168 Warn about a comparison between values of different enumerated 4169 types. In C++ enumeral mismatches in conditional expressions are 4170 also diagnosed and the warning is enabled by default. In C this 4171 warning is enabled by `-Wall'. 4172 4173 `-Wjump-misses-init (C, Objective-C only)' 4174 Warn if a `goto' statement or a `switch' statement jumps forward 4175 across the initialization of a variable, or jumps backward to a 4176 label after the variable has been initialized. This only warns 4177 about variables that are initialized when they are declared. This 4178 warning is only supported for C and Objective-C; in C++ this sort 4179 of branch is an error in any case. 4180 4181 `-Wjump-misses-init' is included in `-Wc++-compat'. It can be 4182 disabled with the `-Wno-jump-misses-init' option. 4183 4184 `-Wsign-compare' 4185 Warn when a comparison between signed and unsigned values could 4186 produce an incorrect result when the signed value is converted to 4187 unsigned. This warning is also enabled by `-Wextra'; to get the 4188 other warnings of `-Wextra' without this warning, use `-Wextra 4189 -Wno-sign-compare'. 4190 4191 `-Wsign-conversion' 4192 Warn for implicit conversions that may change the sign of an 4193 integer value, like assigning a signed integer expression to an 4194 unsigned integer variable. An explicit cast silences the warning. 4195 In C, this option is enabled also by `-Wconversion'. 4196 4197 `-Wsizeof-pointer-memaccess' 4198 Warn for suspicious length parameters to certain string and memory 4199 built-in functions if the argument uses `sizeof'. This warning 4200 warns e.g. about `memset (ptr, 0, sizeof (ptr));' if `ptr' is not 4201 an array, but a pointer, and suggests a possible fix, or about 4202 `memcpy (&foo, ptr, sizeof (&foo));'. This warning is enabled by 4203 `-Wall'. 4204 4205 `-Waddress' 4206 Warn about suspicious uses of memory addresses. These include using 4207 the address of a function in a conditional expression, such as 4208 `void func(void); if (func)', and comparisons against the memory 4209 address of a string literal, such as `if (x == "abc")'. Such uses 4210 typically indicate a programmer error: the address of a function 4211 always evaluates to true, so their use in a conditional usually 4212 indicate that the programmer forgot the parentheses in a function 4213 call; and comparisons against string literals result in unspecified 4214 behavior and are not portable in C, so they usually indicate that 4215 the programmer intended to use `strcmp'. This warning is enabled 4216 by `-Wall'. 4217 4218 `-Wlogical-op' 4219 Warn about suspicious uses of logical operators in expressions. 4220 This includes using logical operators in contexts where a bit-wise 4221 operator is likely to be expected. 4222 4223 `-Waggregate-return' 4224 Warn if any functions that return structures or unions are defined 4225 or called. (In languages where you can return an array, this also 4226 elicits a warning.) 4227 4228 `-Wno-aggressive-loop-optimizations' 4229 Warn if in a loop with constant number of iterations the compiler 4230 detects undefined behavior in some statement during one or more of 4231 the iterations. 4232 4233 `-Wno-attributes' 4234 Do not warn if an unexpected `__attribute__' is used, such as 4235 unrecognized attributes, function attributes applied to variables, 4236 etc. This does not stop errors for incorrect use of supported 4237 attributes. 4238 4239 `-Wno-builtin-macro-redefined' 4240 Do not warn if certain built-in macros are redefined. This 4241 suppresses warnings for redefinition of `__TIMESTAMP__', 4242 `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'. 4243 4244 `-Wstrict-prototypes (C and Objective-C only)' 4245 Warn if a function is declared or defined without specifying the 4246 argument types. (An old-style function definition is permitted 4247 without a warning if preceded by a declaration that specifies the 4248 argument types.) 4249 4250 `-Wold-style-declaration (C and Objective-C only)' 4251 Warn for obsolescent usages, according to the C Standard, in a 4252 declaration. For example, warn if storage-class specifiers like 4253 `static' are not the first things in a declaration. This warning 4254 is also enabled by `-Wextra'. 4255 4256 `-Wold-style-definition (C and Objective-C only)' 4257 Warn if an old-style function definition is used. A warning is 4258 given even if there is a previous prototype. 4259 4260 `-Wmissing-parameter-type (C and Objective-C only)' 4261 A function parameter is declared without a type specifier in 4262 K&R-style functions: 4263 4264 void foo(bar) { } 4265 4266 This warning is also enabled by `-Wextra'. 4267 4268 `-Wmissing-prototypes (C and Objective-C only)' 4269 Warn if a global function is defined without a previous prototype 4270 declaration. This warning is issued even if the definition itself 4271 provides a prototype. Use this option to detect global functions 4272 that do not have a matching prototype declaration in a header file. 4273 This option is not valid for C++ because all function declarations 4274 provide prototypes and a non-matching declaration will declare an 4275 overload rather than conflict with an earlier declaration. Use 4276 `-Wmissing-declarations' to detect missing declarations in C++. 4277 4278 `-Wmissing-declarations' 4279 Warn if a global function is defined without a previous 4280 declaration. Do so even if the definition itself provides a 4281 prototype. Use this option to detect global functions that are 4282 not declared in header files. In C, no warnings are issued for 4283 functions with previous non-prototype declarations; use 4284 `-Wmissing-prototype' to detect missing prototypes. In C++, no 4285 warnings are issued for function templates, or for inline 4286 functions, or for functions in anonymous namespaces. 4287 4288 `-Wmissing-field-initializers' 4289 Warn if a structure's initializer has some fields missing. For 4290 example, the following code causes such a warning, because `x.h' 4291 is implicitly zero: 4292 4293 struct s { int f, g, h; }; 4294 struct s x = { 3, 4 }; 4295 4296 This option does not warn about designated initializers, so the 4297 following modification does not trigger a warning: 4298 4299 struct s { int f, g, h; }; 4300 struct s x = { .f = 3, .g = 4 }; 4301 4302 This warning is included in `-Wextra'. To get other `-Wextra' 4303 warnings without this one, use `-Wextra 4304 -Wno-missing-field-initializers'. 4305 4306 `-Wno-multichar' 4307 Do not warn if a multicharacter constant (`'FOOF'') is used. 4308 Usually they indicate a typo in the user's code, as they have 4309 implementation-defined values, and should not be used in portable 4310 code. 4311 4312 `-Wnormalized=<none|id|nfc|nfkc>' 4313 In ISO C and ISO C++, two identifiers are different if they are 4314 different sequences of characters. However, sometimes when 4315 characters outside the basic ASCII character set are used, you can 4316 have two different character sequences that look the same. To 4317 avoid confusion, the ISO 10646 standard sets out some 4318 "normalization rules" which when applied ensure that two sequences 4319 that look the same are turned into the same sequence. GCC can 4320 warn you if you are using identifiers that have not been 4321 normalized; this option controls that warning. 4322 4323 There are four levels of warning supported by GCC. The default is 4324 `-Wnormalized=nfc', which warns about any identifier that is not 4325 in the ISO 10646 "C" normalized form, "NFC". NFC is the 4326 recommended form for most uses. 4327 4328 Unfortunately, there are some characters allowed in identifiers by 4329 ISO C and ISO C++ that, when turned into NFC, are not allowed in 4330 identifiers. That is, there's no way to use these symbols in 4331 portable ISO C or C++ and have all your identifiers in NFC. 4332 `-Wnormalized=id' suppresses the warning for these characters. It 4333 is hoped that future versions of the standards involved will 4334 correct this, which is why this option is not the default. 4335 4336 You can switch the warning off for all characters by writing 4337 `-Wnormalized=none'. You should only do this if you are using 4338 some other normalization scheme (like "D"), because otherwise you 4339 can easily create bugs that are literally impossible to see. 4340 4341 Some characters in ISO 10646 have distinct meanings but look 4342 identical in some fonts or display methodologies, especially once 4343 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 4344 LATIN SMALL LETTER N", displays just like a regular `n' that has 4345 been placed in a superscript. ISO 10646 defines the "NFKC" 4346 normalization scheme to convert all these into a standard form as 4347 well, and GCC warns if your code is not in NFKC if you use 4348 `-Wnormalized=nfkc'. This warning is comparable to warning about 4349 every identifier that contains the letter O because it might be 4350 confused with the digit 0, and so is not the default, but may be 4351 useful as a local coding convention if the programming environment 4352 cannot be fixed to display these characters distinctly. 4353 4354 `-Wno-deprecated' 4355 Do not warn about usage of deprecated features. *Note Deprecated 4356 Features::. 4357 4358 `-Wno-deprecated-declarations' 4359 Do not warn about uses of functions (*note Function Attributes::), 4360 variables (*note Variable Attributes::), and types (*note Type 4361 Attributes::) marked as deprecated by using the `deprecated' 4362 attribute. 4363 4364 `-Wno-overflow' 4365 Do not warn about compile-time overflow in constant expressions. 4366 4367 `-Woverride-init (C and Objective-C only)' 4368 Warn if an initialized field without side effects is overridden 4369 when using designated initializers (*note Designated Initializers: 4370 Designated Inits.). 4371 4372 This warning is included in `-Wextra'. To get other `-Wextra' 4373 warnings without this one, use `-Wextra -Wno-override-init'. 4374 4375 `-Wpacked' 4376 Warn if a structure is given the packed attribute, but the packed 4377 attribute has no effect on the layout or size of the structure. 4378 Such structures may be mis-aligned for little benefit. For 4379 instance, in this code, the variable `f.x' in `struct bar' is 4380 misaligned even though `struct bar' does not itself have the 4381 packed attribute: 4382 4383 struct foo { 4384 int x; 4385 char a, b, c, d; 4386 } __attribute__((packed)); 4387 struct bar { 4388 char z; 4389 struct foo f; 4390 }; 4391 4392 `-Wpacked-bitfield-compat' 4393 The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute 4394 on bit-fields of type `char'. This has been fixed in GCC 4.4 but 4395 the change can lead to differences in the structure layout. GCC 4396 informs you when the offset of such a field has changed in GCC 4.4. 4397 For example there is no longer a 4-bit padding between field `a' 4398 and `b' in this structure: 4399 4400 struct foo 4401 { 4402 char a:4; 4403 char b:8; 4404 } __attribute__ ((packed)); 4405 4406 This warning is enabled by default. Use 4407 `-Wno-packed-bitfield-compat' to disable this warning. 4408 4409 `-Wpadded' 4410 Warn if padding is included in a structure, either to align an 4411 element of the structure or to align the whole structure. 4412 Sometimes when this happens it is possible to rearrange the fields 4413 of the structure to reduce the padding and so make the structure 4414 smaller. 4415 4416 `-Wredundant-decls' 4417 Warn if anything is declared more than once in the same scope, 4418 even in cases where multiple declaration is valid and changes 4419 nothing. 4420 4421 `-Wnested-externs (C and Objective-C only)' 4422 Warn if an `extern' declaration is encountered within a function. 4423 4424 `-Wno-inherited-variadic-ctor' 4425 Suppress warnings about use of C++11 inheriting constructors when 4426 the base class inherited from has a C variadic constructor; the 4427 warning is on by default because the ellipsis is not inherited. 4428 4429 `-Winline' 4430 Warn if a function that is declared as inline cannot be inlined. 4431 Even with this option, the compiler does not warn about failures to 4432 inline functions declared in system headers. 4433 4434 The compiler uses a variety of heuristics to determine whether or 4435 not to inline a function. For example, the compiler takes into 4436 account the size of the function being inlined and the amount of 4437 inlining that has already been done in the current function. 4438 Therefore, seemingly insignificant changes in the source program 4439 can cause the warnings produced by `-Winline' to appear or 4440 disappear. 4441 4442 `-Wno-invalid-offsetof (C++ and Objective-C++ only)' 4443 Suppress warnings from applying the `offsetof' macro to a non-POD 4444 type. According to the 1998 ISO C++ standard, applying `offsetof' 4445 to a non-POD type is undefined. In existing C++ implementations, 4446 however, `offsetof' typically gives meaningful results even when 4447 applied to certain kinds of non-POD types (such as a simple 4448 `struct' that fails to be a POD type only by virtue of having a 4449 constructor). This flag is for users who are aware that they are 4450 writing nonportable code and who have deliberately chosen to 4451 ignore the warning about it. 4452 4453 The restrictions on `offsetof' may be relaxed in a future version 4454 of the C++ standard. 4455 4456 `-Wno-int-to-pointer-cast' 4457 Suppress warnings from casts to pointer type of an integer of a 4458 different size. In C++, casting to a pointer type of smaller size 4459 is an error. `Wint-to-pointer-cast' is enabled by default. 4460 4461 `-Wno-pointer-to-int-cast (C and Objective-C only)' 4462 Suppress warnings from casts from a pointer to an integer type of a 4463 different size. 4464 4465 `-Winvalid-pch' 4466 Warn if a precompiled header (*note Precompiled Headers::) is 4467 found in the search path but can't be used. 4468 4469 `-Wlong-long' 4470 Warn if `long long' type is used. This is enabled by either 4471 `-Wpedantic' or `-Wtraditional' in ISO C90 and C++98 modes. To 4472 inhibit the warning messages, use `-Wno-long-long'. 4473 4474 `-Wvariadic-macros' 4475 Warn if variadic macros are used in pedantic ISO C90 mode, or the 4476 GNU alternate syntax when in pedantic ISO C99 mode. This is 4477 default. To inhibit the warning messages, use 4478 `-Wno-variadic-macros'. 4479 4480 `-Wvarargs' 4481 Warn upon questionable usage of the macros used to handle variable 4482 arguments like `va_start'. This is default. To inhibit the 4483 warning messages, use `-Wno-varargs'. 4484 4485 `-Wvector-operation-performance' 4486 Warn if vector operation is not implemented via SIMD capabilities 4487 of the architecture. Mainly useful for the performance tuning. 4488 Vector operation can be implemented `piecewise', which means that 4489 the scalar operation is performed on every vector element; `in 4490 parallel', which means that the vector operation is implemented 4491 using scalars of wider type, which normally is more performance 4492 efficient; and `as a single scalar', which means that vector fits 4493 into a scalar type. 4494 4495 `-Wno-virtual-move-assign' 4496 Suppress warnings about inheriting from a virtual base with a 4497 non-trivial C++11 move assignment operator. This is dangerous 4498 because if the virtual base is reachable along more than one path, 4499 it will be moved multiple times, which can mean both objects end 4500 up in the moved-from state. If the move assignment operator is 4501 written to avoid moving from a moved-from object, this warning can 4502 be disabled. 4503 4504 `-Wvla' 4505 Warn if variable length array is used in the code. `-Wno-vla' 4506 prevents the `-Wpedantic' warning of the variable length array. 4507 4508 `-Wvolatile-register-var' 4509 Warn if a register variable is declared volatile. The volatile 4510 modifier does not inhibit all optimizations that may eliminate 4511 reads and/or writes to register variables. This warning is 4512 enabled by `-Wall'. 4513 4514 `-Wdisabled-optimization' 4515 Warn if a requested optimization pass is disabled. This warning 4516 does not generally indicate that there is anything wrong with your 4517 code; it merely indicates that GCC's optimizers are unable to 4518 handle the code effectively. Often, the problem is that your code 4519 is too big or too complex; GCC refuses to optimize programs when 4520 the optimization itself is likely to take inordinate amounts of 4521 time. 4522 4523 `-Wpointer-sign (C and Objective-C only)' 4524 Warn for pointer argument passing or assignment with different 4525 signedness. This option is only supported for C and Objective-C. 4526 It is implied by `-Wall' and by `-Wpedantic', which can be 4527 disabled with `-Wno-pointer-sign'. 4528 4529 `-Wstack-protector' 4530 This option is only active when `-fstack-protector' is active. It 4531 warns about functions that are not protected against stack 4532 smashing. 4533 4534 `-Wno-mudflap' 4535 Suppress warnings about constructs that cannot be instrumented by 4536 `-fmudflap'. 4537 4538 `-Woverlength-strings' 4539 Warn about string constants that are longer than the "minimum 4540 maximum" length specified in the C standard. Modern compilers 4541 generally allow string constants that are much longer than the 4542 standard's minimum limit, but very portable programs should avoid 4543 using longer strings. 4544 4545 The limit applies _after_ string constant concatenation, and does 4546 not count the trailing NUL. In C90, the limit was 509 characters; 4547 in C99, it was raised to 4095. C++98 does not specify a normative 4548 minimum maximum, so we do not diagnose overlength strings in C++. 4549 4550 This option is implied by `-Wpedantic', and can be disabled with 4551 `-Wno-overlength-strings'. 4552 4553 `-Wunsuffixed-float-constants (C and Objective-C only)' 4554 Issue a warning for any floating constant that does not have a 4555 suffix. When used together with `-Wsystem-headers' it warns about 4556 such constants in system header files. This can be useful when 4557 preparing code to use with the `FLOAT_CONST_DECIMAL64' pragma from 4558 the decimal floating-point extension to C99. 4559 4560 4561 File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 4562 4563 3.9 Options for Debugging Your Program or GCC 4564 ============================================= 4565 4566 GCC has various special options that are used for debugging either your 4567 program or GCC: 4568 4569 `-g' 4570 Produce debugging information in the operating system's native 4571 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 4572 debugging information. 4573 4574 On most systems that use stabs format, `-g' enables use of extra 4575 debugging information that only GDB can use; this extra information 4576 makes debugging work better in GDB but probably makes other 4577 debuggers crash or refuse to read the program. If you want to 4578 control for certain whether to generate the extra information, use 4579 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 4580 below). 4581 4582 GCC allows you to use `-g' with `-O'. The shortcuts taken by 4583 optimized code may occasionally produce surprising results: some 4584 variables you declared may not exist at all; flow of control may 4585 briefly move where you did not expect it; some statements may not 4586 be executed because they compute constant results or their values 4587 are already at hand; some statements may execute in different 4588 places because they have been moved out of loops. 4589 4590 Nevertheless it proves possible to debug optimized output. This 4591 makes it reasonable to use the optimizer for programs that might 4592 have bugs. 4593 4594 The following options are useful when GCC is generated with the 4595 capability for more than one debugging format. 4596 4597 `-gsplit-dwarf' 4598 Separate as much dwarf debugging information as possible into a 4599 separate output file with the extension .dwo. This option allows 4600 the build system to avoid linking files with debug information. To 4601 be useful, this option requires a debugger capable of reading .dwo 4602 files. 4603 4604 `-ggdb' 4605 Produce debugging information for use by GDB. This means to use 4606 the most expressive format available (DWARF 2, stabs, or the 4607 native format if neither of those are supported), including GDB 4608 extensions if at all possible. 4609 4610 `-gpubnames' 4611 Generate dwarf .debug_pubnames and .debug_pubtypes sections. 4612 4613 `-gstabs' 4614 Produce debugging information in stabs format (if that is 4615 supported), without GDB extensions. This is the format used by 4616 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 4617 systems this option produces stabs debugging output that is not 4618 understood by DBX or SDB. On System V Release 4 systems this 4619 option requires the GNU assembler. 4620 4621 `-feliminate-unused-debug-symbols' 4622 Produce debugging information in stabs format (if that is 4623 supported), for only symbols that are actually used. 4624 4625 `-femit-class-debug-always' 4626 Instead of emitting debugging information for a C++ class in only 4627 one object file, emit it in all object files using the class. 4628 This option should be used only with debuggers that are unable to 4629 handle the way GCC normally emits debugging information for 4630 classes because using this option increases the size of debugging 4631 information by as much as a factor of two. 4632 4633 `-fdebug-types-section' 4634 When using DWARF Version 4 or higher, type DIEs can be put into 4635 their own `.debug_types' section instead of making them part of the 4636 `.debug_info' section. It is more efficient to put them in a 4637 separate comdat sections since the linker can then remove 4638 duplicates. But not all DWARF consumers support `.debug_types' 4639 sections yet and on some objects `.debug_types' produces larger 4640 instead of smaller debugging information. 4641 4642 `-gstabs+' 4643 Produce debugging information in stabs format (if that is 4644 supported), using GNU extensions understood only by the GNU 4645 debugger (GDB). The use of these extensions is likely to make 4646 other debuggers crash or refuse to read the program. 4647 4648 `-gcoff' 4649 Produce debugging information in COFF format (if that is 4650 supported). This is the format used by SDB on most System V 4651 systems prior to System V Release 4. 4652 4653 `-gxcoff' 4654 Produce debugging information in XCOFF format (if that is 4655 supported). This is the format used by the DBX debugger on IBM 4656 RS/6000 systems. 4657 4658 `-gxcoff+' 4659 Produce debugging information in XCOFF format (if that is 4660 supported), using GNU extensions understood only by the GNU 4661 debugger (GDB). The use of these extensions is likely to make 4662 other debuggers crash or refuse to read the program, and may cause 4663 assemblers other than the GNU assembler (GAS) to fail with an 4664 error. 4665 4666 `-gdwarf-VERSION' 4667 Produce debugging information in DWARF format (if that is 4668 supported). The value of VERSION may be either 2, 3 or 4; the 4669 default version for most targets is 4. 4670 4671 Note that with DWARF Version 2, some ports require and always use 4672 some non-conflicting DWARF 3 extensions in the unwind tables. 4673 4674 Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for 4675 maximum benefit. 4676 4677 `-grecord-gcc-switches' 4678 This switch causes the command-line options used to invoke the 4679 compiler that may affect code generation to be appended to the 4680 DW_AT_producer attribute in DWARF debugging information. The 4681 options are concatenated with spaces separating them from each 4682 other and from the compiler version. See also 4683 `-frecord-gcc-switches' for another way of storing compiler 4684 options into the object file. This is the default. 4685 4686 `-gno-record-gcc-switches' 4687 Disallow appending command-line options to the DW_AT_producer 4688 attribute in DWARF debugging information. 4689 4690 `-gstrict-dwarf' 4691 Disallow using extensions of later DWARF standard version than 4692 selected with `-gdwarf-VERSION'. On most targets using 4693 non-conflicting DWARF extensions from later standard versions is 4694 allowed. 4695 4696 `-gno-strict-dwarf' 4697 Allow using extensions of later DWARF standard version than 4698 selected with `-gdwarf-VERSION'. 4699 4700 `-gvms' 4701 Produce debugging information in Alpha/VMS debug format (if that is 4702 supported). This is the format used by DEBUG on Alpha/VMS systems. 4703 4704 `-gLEVEL' 4705 `-ggdbLEVEL' 4706 `-gstabsLEVEL' 4707 `-gcoffLEVEL' 4708 `-gxcoffLEVEL' 4709 `-gvmsLEVEL' 4710 Request debugging information and also use LEVEL to specify how 4711 much information. The default level is 2. 4712 4713 Level 0 produces no debug information at all. Thus, `-g0' negates 4714 `-g'. 4715 4716 Level 1 produces minimal information, enough for making backtraces 4717 in parts of the program that you don't plan to debug. This 4718 includes descriptions of functions and external variables, but no 4719 information about local variables and no line numbers. 4720 4721 Level 3 includes extra information, such as all the macro 4722 definitions present in the program. Some debuggers support macro 4723 expansion when you use `-g3'. 4724 4725 `-gdwarf-2' does not accept a concatenated debug level, because 4726 GCC used to support an option `-gdwarf' that meant to generate 4727 debug information in version 1 of the DWARF format (which is very 4728 different from version 2), and it would have been too confusing. 4729 That debug format is long obsolete, but the option cannot be 4730 changed now. Instead use an additional `-gLEVEL' option to change 4731 the debug level for DWARF. 4732 4733 `-gtoggle' 4734 Turn off generation of debug info, if leaving out this option 4735 generates it, or turn it on at level 2 otherwise. The position of 4736 this argument in the command line does not matter; it takes effect 4737 after all other options are processed, and it does so only once, 4738 no matter how many times it is given. This is mainly intended to 4739 be used with `-fcompare-debug'. 4740 4741 `-fsanitize=address' 4742 Enable AddressSanitizer, a fast memory error detector. Memory 4743 access instructions will be instrumented to detect out-of-bounds 4744 and use-after-free bugs. See 4745 `http://code.google.com/p/address-sanitizer/' for more details. 4746 4747 `-fsanitize=thread' 4748 Enable ThreadSanitizer, a fast data race detector. Memory access 4749 instructions will be instrumented to detect data race bugs. See 4750 `http://code.google.com/p/data-race-test/wiki/ThreadSanitizer' for 4751 more details. 4752 4753 `-fdump-final-insns[=FILE]' 4754 Dump the final internal representation (RTL) to FILE. If the 4755 optional argument is omitted (or if FILE is `.'), the name of the 4756 dump file is determined by appending `.gkd' to the compilation 4757 output file name. 4758 4759 `-fcompare-debug[=OPTS]' 4760 If no error occurs during compilation, run the compiler a second 4761 time, adding OPTS and `-fcompare-debug-second' to the arguments 4762 passed to the second compilation. Dump the final internal 4763 representation in both compilations, and print an error if they 4764 differ. 4765 4766 If the equal sign is omitted, the default `-gtoggle' is used. 4767 4768 The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty 4769 and nonzero, implicitly enables `-fcompare-debug'. If 4770 `GCC_COMPARE_DEBUG' is defined to a string starting with a dash, 4771 then it is used for OPTS, otherwise the default `-gtoggle' is used. 4772 4773 `-fcompare-debug=', with the equal sign but without OPTS, is 4774 equivalent to `-fno-compare-debug', which disables the dumping of 4775 the final representation and the second compilation, preventing 4776 even `GCC_COMPARE_DEBUG' from taking effect. 4777 4778 To verify full coverage during `-fcompare-debug' testing, set 4779 `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which 4780 GCC rejects as an invalid option in any actual compilation (rather 4781 than preprocessing, assembly or linking). To get just a warning, 4782 setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not 4783 overridden' will do. 4784 4785 `-fcompare-debug-second' 4786 This option is implicitly passed to the compiler for the second 4787 compilation requested by `-fcompare-debug', along with options to 4788 silence warnings, and omitting other options that would cause 4789 side-effect compiler outputs to files or to the standard output. 4790 Dump files and preserved temporary files are renamed so as to 4791 contain the `.gk' additional extension during the second 4792 compilation, to avoid overwriting those generated by the first. 4793 4794 When this option is passed to the compiler driver, it causes the 4795 _first_ compilation to be skipped, which makes it useful for little 4796 other than debugging the compiler proper. 4797 4798 `-feliminate-dwarf2-dups' 4799 Compress DWARF 2 debugging information by eliminating duplicated 4800 information about each symbol. This option only makes sense when 4801 generating DWARF 2 debugging information with `-gdwarf-2'. 4802 4803 `-femit-struct-debug-baseonly' 4804 Emit debug information for struct-like types only when the base 4805 name of the compilation source file matches the base name of file 4806 in which the struct is defined. 4807 4808 This option substantially reduces the size of debugging 4809 information, but at significant potential loss in type information 4810 to the debugger. See `-femit-struct-debug-reduced' for a less 4811 aggressive option. See `-femit-struct-debug-detailed' for more 4812 detailed control. 4813 4814 This option works only with DWARF 2. 4815 4816 `-femit-struct-debug-reduced' 4817 Emit debug information for struct-like types only when the base 4818 name of the compilation source file matches the base name of file 4819 in which the type is defined, unless the struct is a template or 4820 defined in a system header. 4821 4822 This option significantly reduces the size of debugging 4823 information, with some potential loss in type information to the 4824 debugger. See `-femit-struct-debug-baseonly' for a more 4825 aggressive option. See `-femit-struct-debug-detailed' for more 4826 detailed control. 4827 4828 This option works only with DWARF 2. 4829 4830 `-femit-struct-debug-detailed[=SPEC-LIST]' 4831 Specify the struct-like types for which the compiler generates 4832 debug information. The intent is to reduce duplicate struct debug 4833 information between different object files within the same program. 4834 4835 This option is a detailed version of `-femit-struct-debug-reduced' 4836 and `-femit-struct-debug-baseonly', which serves for most needs. 4837 4838 A specification has the syntax 4839 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 4840 4841 The optional first word limits the specification to structs that 4842 are used directly (`dir:') or used indirectly (`ind:'). A struct 4843 type is used directly when it is the type of a variable, member. 4844 Indirect uses arise through pointers to structs. That is, when 4845 use of an incomplete struct is valid, the use is indirect. An 4846 example is `struct one direct; struct two * indirect;'. 4847 4848 The optional second word limits the specification to ordinary 4849 structs (`ord:') or generic structs (`gen:'). Generic structs are 4850 a bit complicated to explain. For C++, these are non-explicit 4851 specializations of template classes, or non-template classes 4852 within the above. Other programming languages have generics, but 4853 `-femit-struct-debug-detailed' does not yet implement them. 4854 4855 The third word specifies the source files for those structs for 4856 which the compiler should emit debug information. The values 4857 `none' and `any' have the normal meaning. The value `base' means 4858 that the base of name of the file in which the type declaration 4859 appears must match the base of the name of the main compilation 4860 file. In practice, this means that when compiling `foo.c', debug 4861 information is generated for types declared in that file and 4862 `foo.h', but not other header files. The value `sys' means those 4863 types satisfying `base' or declared in system or compiler headers. 4864 4865 You may need to experiment to determine the best settings for your 4866 application. 4867 4868 The default is `-femit-struct-debug-detailed=all'. 4869 4870 This option works only with DWARF 2. 4871 4872 `-fno-merge-debug-strings' 4873 Direct the linker to not merge together strings in the debugging 4874 information that are identical in different object files. Merging 4875 is not supported by all assemblers or linkers. Merging decreases 4876 the size of the debug information in the output file at the cost 4877 of increasing link processing time. Merging is enabled by default. 4878 4879 `-fdebug-prefix-map=OLD=NEW' 4880 When compiling files in directory `OLD', record debugging 4881 information describing them as in `NEW' instead. 4882 4883 `-fno-dwarf2-cfi-asm' 4884 Emit DWARF 2 unwind info as compiler generated `.eh_frame' section 4885 instead of using GAS `.cfi_*' directives. 4886 4887 `-p' 4888 Generate extra code to write profile information suitable for the 4889 analysis program `prof'. You must use this option when compiling 4890 the source files you want data about, and you must also use it when 4891 linking. 4892 4893 `-pg' 4894 Generate extra code to write profile information suitable for the 4895 analysis program `gprof'. You must use this option when compiling 4896 the source files you want data about, and you must also use it when 4897 linking. 4898 4899 `-Q' 4900 Makes the compiler print out each function name as it is compiled, 4901 and print some statistics about each pass when it finishes. 4902 4903 `-ftime-report' 4904 Makes the compiler print some statistics about the time consumed 4905 by each pass when it finishes. 4906 4907 `-fmem-report' 4908 Makes the compiler print some statistics about permanent memory 4909 allocation when it finishes. 4910 4911 `-fmem-report-wpa' 4912 Makes the compiler print some statistics about permanent memory 4913 allocation for the WPA phase only. 4914 4915 `-fpre-ipa-mem-report' 4916 4917 `-fpost-ipa-mem-report' 4918 Makes the compiler print some statistics about permanent memory 4919 allocation before or after interprocedural optimization. 4920 4921 `-fprofile-report' 4922 Makes the compiler print some statistics about consistency of the 4923 (estimated) profile and effect of individual passes. 4924 4925 `-fstack-usage' 4926 Makes the compiler output stack usage information for the program, 4927 on a per-function basis. The filename for the dump is made by 4928 appending `.su' to the AUXNAME. AUXNAME is generated from the 4929 name of the output file, if explicitly specified and it is not an 4930 executable, otherwise it is the basename of the source file. An 4931 entry is made up of three fields: 4932 4933 * The name of the function. 4934 4935 * A number of bytes. 4936 4937 * One or more qualifiers: `static', `dynamic', `bounded'. 4938 4939 The qualifier `static' means that the function manipulates the 4940 stack statically: a fixed number of bytes are allocated for the 4941 frame on function entry and released on function exit; no stack 4942 adjustments are otherwise made in the function. The second field 4943 is this fixed number of bytes. 4944 4945 The qualifier `dynamic' means that the function manipulates the 4946 stack dynamically: in addition to the static allocation described 4947 above, stack adjustments are made in the body of the function, for 4948 example to push/pop arguments around function calls. If the 4949 qualifier `bounded' is also present, the amount of these 4950 adjustments is bounded at compile time and the second field is an 4951 upper bound of the total amount of stack used by the function. If 4952 it is not present, the amount of these adjustments is not bounded 4953 at compile time and the second field only represents the bounded 4954 part. 4955 4956 `-fprofile-arcs' 4957 Add code so that program flow "arcs" are instrumented. During 4958 execution the program records how many times each branch and call 4959 is executed and how many times it is taken or returns. When the 4960 compiled program exits it saves this data to a file called 4961 `AUXNAME.gcda' for each source file. The data may be used for 4962 profile-directed optimizations (`-fbranch-probabilities'), or for 4963 test coverage analysis (`-ftest-coverage'). Each object file's 4964 AUXNAME is generated from the name of the output file, if 4965 explicitly specified and it is not the final executable, otherwise 4966 it is the basename of the source file. In both cases any suffix 4967 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 4968 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 4969 *Note Cross-profiling::. 4970 4971 `--coverage' 4972 This option is used to compile and link code instrumented for 4973 coverage analysis. The option is a synonym for `-fprofile-arcs' 4974 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 4975 See the documentation for those options for more details. 4976 4977 * Compile the source files with `-fprofile-arcs' plus 4978 optimization and code generation options. For test coverage 4979 analysis, use the additional `-ftest-coverage' option. You 4980 do not need to profile every source file in a program. 4981 4982 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 4983 latter implies the former). 4984 4985 * Run the program on a representative workload to generate the 4986 arc profile information. This may be repeated any number of 4987 times. You can run concurrent instances of your program, and 4988 provided that the file system supports locking, the data 4989 files will be correctly updated. Also `fork' calls are 4990 detected and correctly handled (double counting will not 4991 happen). 4992 4993 * For profile-directed optimizations, compile the source files 4994 again with the same optimization and code generation options 4995 plus `-fbranch-probabilities' (*note Options that Control 4996 Optimization: Optimize Options.). 4997 4998 * For test coverage analysis, use `gcov' to produce human 4999 readable information from the `.gcno' and `.gcda' files. 5000 Refer to the `gcov' documentation for further information. 5001 5002 5003 With `-fprofile-arcs', for each function of your program GCC 5004 creates a program flow graph, then finds a spanning tree for the 5005 graph. Only arcs that are not on the spanning tree have to be 5006 instrumented: the compiler adds code to count the number of times 5007 that these arcs are executed. When an arc is the only exit or 5008 only entrance to a block, the instrumentation code can be added to 5009 the block; otherwise, a new basic block must be created to hold 5010 the instrumentation code. 5011 5012 `-ftest-coverage' 5013 Produce a notes file that the `gcov' code-coverage utility (*note 5014 `gcov'--a Test Coverage Program: Gcov.) can use to show program 5015 coverage. Each source file's note file is called `AUXNAME.gcno'. 5016 Refer to the `-fprofile-arcs' option above for a description of 5017 AUXNAME and instructions on how to generate test coverage data. 5018 Coverage data matches the source files more closely if you do not 5019 optimize. 5020 5021 `-fdbg-cnt-list' 5022 Print the name and the counter upper bound for all debug counters. 5023 5024 `-fdbg-cnt=COUNTER-VALUE-LIST' 5025 Set the internal debug counter upper bound. COUNTER-VALUE-LIST is 5026 a comma-separated list of NAME:VALUE pairs which sets the upper 5027 bound of each debug counter NAME to VALUE. All debug counters 5028 have the initial upper bound of `UINT_MAX'; thus `dbg_cnt()' 5029 returns true always unless the upper bound is set by this option. 5030 For example, with `-fdbg-cnt=dce:10,tail_call:0', `dbg_cnt(dce)' 5031 returns true only for first 10 invocations. 5032 5033 `-fenable-KIND-PASS' 5034 `-fdisable-KIND-PASS=RANGE-LIST' 5035 This is a set of options that are used to explicitly disable/enable 5036 optimization passes. These options are intended for use for 5037 debugging GCC. Compiler users should use regular options for 5038 enabling/disabling passes instead. 5039 5040 `-fdisable-ipa-PASS' 5041 Disable IPA pass PASS. PASS is the pass name. If the same 5042 pass is statically invoked in the compiler multiple times, 5043 the pass name should be appended with a sequential number 5044 starting from 1. 5045 5046 `-fdisable-rtl-PASS' 5047 `-fdisable-rtl-PASS=RANGE-LIST' 5048 Disable RTL pass PASS. PASS is the pass name. If the same 5049 pass is statically invoked in the compiler multiple times, 5050 the pass name should be appended with a sequential number 5051 starting from 1. RANGE-LIST is a comma-separated list of 5052 function ranges or assembler names. Each range is a number 5053 pair separated by a colon. The range is inclusive in both 5054 ends. If the range is trivial, the number pair can be 5055 simplified as a single number. If the function's call graph 5056 node's UID falls within one of the specified ranges, the PASS 5057 is disabled for that function. The UID is shown in the 5058 function header of a dump file, and the pass names can be 5059 dumped by using option `-fdump-passes'. 5060 5061 `-fdisable-tree-PASS' 5062 `-fdisable-tree-PASS=RANGE-LIST' 5063 Disable tree pass PASS. See `-fdisable-rtl' for the 5064 description of option arguments. 5065 5066 `-fenable-ipa-PASS' 5067 Enable IPA pass PASS. PASS is the pass name. If the same 5068 pass is statically invoked in the compiler multiple times, 5069 the pass name should be appended with a sequential number 5070 starting from 1. 5071 5072 `-fenable-rtl-PASS' 5073 `-fenable-rtl-PASS=RANGE-LIST' 5074 Enable RTL pass PASS. See `-fdisable-rtl' for option argument 5075 description and examples. 5076 5077 `-fenable-tree-PASS' 5078 `-fenable-tree-PASS=RANGE-LIST' 5079 Enable tree pass PASS. See `-fdisable-rtl' for the 5080 description of option arguments. 5081 5082 5083 Here are some examples showing uses of these options. 5084 5085 5086 # disable ccp1 for all functions 5087 -fdisable-tree-ccp1 5088 # disable complete unroll for function whose cgraph node uid is 1 5089 -fenable-tree-cunroll=1 5090 # disable gcse2 for functions at the following ranges [1,1], 5091 # [300,400], and [400,1000] 5092 # disable gcse2 for functions foo and foo2 5093 -fdisable-rtl-gcse2=foo,foo2 5094 # disable early inlining 5095 -fdisable-tree-einline 5096 # disable ipa inlining 5097 -fdisable-ipa-inline 5098 # enable tree full unroll 5099 -fenable-tree-unroll 5100 5101 `-dLETTERS' 5102 `-fdump-rtl-PASS' 5103 `-fdump-rtl-PASS=FILENAME' 5104 Says to make debugging dumps during compilation at times specified 5105 by LETTERS. This is used for debugging the RTL-based passes of the 5106 compiler. The file names for most of the dumps are made by 5107 appending a pass number and a word to the DUMPNAME, and the files 5108 are created in the directory of the output file. In case of 5109 `=FILENAME' option, the dump is output on the given file instead 5110 of the pass numbered dump files. Note that the pass number is 5111 computed statically as passes get registered into the pass manager. 5112 Thus the numbering is not related to the dynamic order of 5113 execution of passes. In particular, a pass installed by a plugin 5114 could have a number over 200 even if it executed quite early. 5115 DUMPNAME is generated from the name of the output file, if 5116 explicitly specified and it is not an executable, otherwise it is 5117 the basename of the source file. These switches may have different 5118 effects when `-E' is used for preprocessing. 5119 5120 Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d' 5121 option LETTERS. Here are the possible letters for use in PASS and 5122 LETTERS, and their meanings: 5123 5124 `-fdump-rtl-alignments' 5125 Dump after branch alignments have been computed. 5126 5127 `-fdump-rtl-asmcons' 5128 Dump after fixing rtl statements that have unsatisfied in/out 5129 constraints. 5130 5131 `-fdump-rtl-auto_inc_dec' 5132 Dump after auto-inc-dec discovery. This pass is only run on 5133 architectures that have auto inc or auto dec instructions. 5134 5135 `-fdump-rtl-barriers' 5136 Dump after cleaning up the barrier instructions. 5137 5138 `-fdump-rtl-bbpart' 5139 Dump after partitioning hot and cold basic blocks. 5140 5141 `-fdump-rtl-bbro' 5142 Dump after block reordering. 5143 5144 `-fdump-rtl-btl1' 5145 `-fdump-rtl-btl2' 5146 `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after 5147 the two branch target load optimization passes. 5148 5149 `-fdump-rtl-bypass' 5150 Dump after jump bypassing and control flow optimizations. 5151 5152 `-fdump-rtl-combine' 5153 Dump after the RTL instruction combination pass. 5154 5155 `-fdump-rtl-compgotos' 5156 Dump after duplicating the computed gotos. 5157 5158 `-fdump-rtl-ce1' 5159 `-fdump-rtl-ce2' 5160 `-fdump-rtl-ce3' 5161 `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3' 5162 enable dumping after the three if conversion passes. 5163 5164 `-fdump-rtl-cprop_hardreg' 5165 Dump after hard register copy propagation. 5166 5167 `-fdump-rtl-csa' 5168 Dump after combining stack adjustments. 5169 5170 `-fdump-rtl-cse1' 5171 `-fdump-rtl-cse2' 5172 `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after 5173 the two common subexpression elimination passes. 5174 5175 `-fdump-rtl-dce' 5176 Dump after the standalone dead code elimination passes. 5177 5178 `-fdump-rtl-dbr' 5179 Dump after delayed branch scheduling. 5180 5181 `-fdump-rtl-dce1' 5182 `-fdump-rtl-dce2' 5183 `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after 5184 the two dead store elimination passes. 5185 5186 `-fdump-rtl-eh' 5187 Dump after finalization of EH handling code. 5188 5189 `-fdump-rtl-eh_ranges' 5190 Dump after conversion of EH handling range regions. 5191 5192 `-fdump-rtl-expand' 5193 Dump after RTL generation. 5194 5195 `-fdump-rtl-fwprop1' 5196 `-fdump-rtl-fwprop2' 5197 `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping 5198 after the two forward propagation passes. 5199 5200 `-fdump-rtl-gcse1' 5201 `-fdump-rtl-gcse2' 5202 `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping 5203 after global common subexpression elimination. 5204 5205 `-fdump-rtl-init-regs' 5206 Dump after the initialization of the registers. 5207 5208 `-fdump-rtl-initvals' 5209 Dump after the computation of the initial value sets. 5210 5211 `-fdump-rtl-into_cfglayout' 5212 Dump after converting to cfglayout mode. 5213 5214 `-fdump-rtl-ira' 5215 Dump after iterated register allocation. 5216 5217 `-fdump-rtl-jump' 5218 Dump after the second jump optimization. 5219 5220 `-fdump-rtl-loop2' 5221 `-fdump-rtl-loop2' enables dumping after the rtl loop 5222 optimization passes. 5223 5224 `-fdump-rtl-mach' 5225 Dump after performing the machine dependent reorganization 5226 pass, if that pass exists. 5227 5228 `-fdump-rtl-mode_sw' 5229 Dump after removing redundant mode switches. 5230 5231 `-fdump-rtl-rnreg' 5232 Dump after register renumbering. 5233 5234 `-fdump-rtl-outof_cfglayout' 5235 Dump after converting from cfglayout mode. 5236 5237 `-fdump-rtl-peephole2' 5238 Dump after the peephole pass. 5239 5240 `-fdump-rtl-postreload' 5241 Dump after post-reload optimizations. 5242 5243 `-fdump-rtl-pro_and_epilogue' 5244 Dump after generating the function prologues and epilogues. 5245 5246 `-fdump-rtl-regmove' 5247 Dump after the register move pass. 5248 5249 `-fdump-rtl-sched1' 5250 `-fdump-rtl-sched2' 5251 `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping 5252 after the basic block scheduling passes. 5253 5254 `-fdump-rtl-see' 5255 Dump after sign extension elimination. 5256 5257 `-fdump-rtl-seqabstr' 5258 Dump after common sequence discovery. 5259 5260 `-fdump-rtl-shorten' 5261 Dump after shortening branches. 5262 5263 `-fdump-rtl-sibling' 5264 Dump after sibling call optimizations. 5265 5266 `-fdump-rtl-split1' 5267 `-fdump-rtl-split2' 5268 `-fdump-rtl-split3' 5269 `-fdump-rtl-split4' 5270 `-fdump-rtl-split5' 5271 `-fdump-rtl-split1', `-fdump-rtl-split2', 5272 `-fdump-rtl-split3', `-fdump-rtl-split4' and 5273 `-fdump-rtl-split5' enable dumping after five rounds of 5274 instruction splitting. 5275 5276 `-fdump-rtl-sms' 5277 Dump after modulo scheduling. This pass is only run on some 5278 architectures. 5279 5280 `-fdump-rtl-stack' 5281 Dump after conversion from GCC's "flat register file" 5282 registers to the x87's stack-like registers. This pass is 5283 only run on x86 variants. 5284 5285 `-fdump-rtl-subreg1' 5286 `-fdump-rtl-subreg2' 5287 `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping 5288 after the two subreg expansion passes. 5289 5290 `-fdump-rtl-unshare' 5291 Dump after all rtl has been unshared. 5292 5293 `-fdump-rtl-vartrack' 5294 Dump after variable tracking. 5295 5296 `-fdump-rtl-vregs' 5297 Dump after converting virtual registers to hard registers. 5298 5299 `-fdump-rtl-web' 5300 Dump after live range splitting. 5301 5302 `-fdump-rtl-regclass' 5303 `-fdump-rtl-subregs_of_mode_init' 5304 `-fdump-rtl-subregs_of_mode_finish' 5305 `-fdump-rtl-dfinit' 5306 `-fdump-rtl-dfinish' 5307 These dumps are defined but always produce empty files. 5308 5309 `-da' 5310 `-fdump-rtl-all' 5311 Produce all the dumps listed above. 5312 5313 `-dA' 5314 Annotate the assembler output with miscellaneous debugging 5315 information. 5316 5317 `-dD' 5318 Dump all macro definitions, at the end of preprocessing, in 5319 addition to normal output. 5320 5321 `-dH' 5322 Produce a core dump whenever an error occurs. 5323 5324 `-dp' 5325 Annotate the assembler output with a comment indicating which 5326 pattern and alternative is used. The length of each 5327 instruction is also printed. 5328 5329 `-dP' 5330 Dump the RTL in the assembler output as a comment before each 5331 instruction. Also turns on `-dp' annotation. 5332 5333 `-dx' 5334 Just generate RTL for a function instead of compiling it. 5335 Usually used with `-fdump-rtl-expand'. 5336 5337 `-fdump-noaddr' 5338 When doing debugging dumps, suppress address output. This makes 5339 it more feasible to use diff on debugging dumps for compiler 5340 invocations with different compiler binaries and/or different text 5341 / bss / data / heap / stack / dso start locations. 5342 5343 `-fdump-unnumbered' 5344 When doing debugging dumps, suppress instruction numbers and 5345 address output. This makes it more feasible to use diff on 5346 debugging dumps for compiler invocations with different options, 5347 in particular with and without `-g'. 5348 5349 `-fdump-unnumbered-links' 5350 When doing debugging dumps (see `-d' option above), suppress 5351 instruction numbers for the links to the previous and next 5352 instructions in a sequence. 5353 5354 `-fdump-translation-unit (C++ only)' 5355 `-fdump-translation-unit-OPTIONS (C++ only)' 5356 Dump a representation of the tree structure for the entire 5357 translation unit to a file. The file name is made by appending 5358 `.tu' to the source file name, and the file is created in the same 5359 directory as the output file. If the `-OPTIONS' form is used, 5360 OPTIONS controls the details of the dump as described for the 5361 `-fdump-tree' options. 5362 5363 `-fdump-class-hierarchy (C++ only)' 5364 `-fdump-class-hierarchy-OPTIONS (C++ only)' 5365 Dump a representation of each class's hierarchy and virtual 5366 function table layout to a file. The file name is made by 5367 appending `.class' to the source file name, and the file is 5368 created in the same directory as the output file. If the 5369 `-OPTIONS' form is used, OPTIONS controls the details of the dump 5370 as described for the `-fdump-tree' options. 5371 5372 `-fdump-ipa-SWITCH' 5373 Control the dumping at various stages of inter-procedural analysis 5374 language tree to a file. The file name is generated by appending a 5375 switch specific suffix to the source file name, and the file is 5376 created in the same directory as the output file. The following 5377 dumps are possible: 5378 5379 `all' 5380 Enables all inter-procedural analysis dumps. 5381 5382 `cgraph' 5383 Dumps information about call-graph optimization, unused 5384 function removal, and inlining decisions. 5385 5386 `inline' 5387 Dump after function inlining. 5388 5389 5390 `-fdump-passes' 5391 Dump the list of optimization passes that are turned on and off by 5392 the current command-line options. 5393 5394 `-fdump-statistics-OPTION' 5395 Enable and control dumping of pass statistics in a separate file. 5396 The file name is generated by appending a suffix ending in 5397 `.statistics' to the source file name, and the file is created in 5398 the same directory as the output file. If the `-OPTION' form is 5399 used, `-stats' causes counters to be summed over the whole 5400 compilation unit while `-details' dumps every event as the passes 5401 generate them. The default with no option is to sum counters for 5402 each function compiled. 5403 5404 `-fdump-tree-SWITCH' 5405 `-fdump-tree-SWITCH-OPTIONS' 5406 `-fdump-tree-SWITCH-OPTIONS=FILENAME' 5407 Control the dumping at various stages of processing the 5408 intermediate language tree to a file. The file name is generated 5409 by appending a switch-specific suffix to the source file name, and 5410 the file is created in the same directory as the output file. In 5411 case of `=FILENAME' option, the dump is output on the given file 5412 instead of the auto named dump files. If the `-OPTIONS' form is 5413 used, OPTIONS is a list of `-' separated options which control the 5414 details of the dump. Not all options are applicable to all dumps; 5415 those that are not meaningful are ignored. The following options 5416 are available 5417 5418 `address' 5419 Print the address of each node. Usually this is not 5420 meaningful as it changes according to the environment and 5421 source file. Its primary use is for tying up a dump file 5422 with a debug environment. 5423 5424 `asmname' 5425 If `DECL_ASSEMBLER_NAME' has been set for a given decl, use 5426 that in the dump instead of `DECL_NAME'. Its primary use is 5427 ease of use working backward from mangled names in the 5428 assembly file. 5429 5430 `slim' 5431 When dumping front-end intermediate representations, inhibit 5432 dumping of members of a scope or body of a function merely 5433 because that scope has been reached. Only dump such items 5434 when they are directly reachable by some other path. 5435 5436 When dumping pretty-printed trees, this option inhibits 5437 dumping the bodies of control structures. 5438 5439 When dumping RTL, print the RTL in slim (condensed) form 5440 instead of the default LISP-like representation. 5441 5442 `raw' 5443 Print a raw representation of the tree. By default, trees are 5444 pretty-printed into a C-like representation. 5445 5446 `details' 5447 Enable more detailed dumps (not honored by every dump 5448 option). Also include information from the optimization 5449 passes. 5450 5451 `stats' 5452 Enable dumping various statistics about the pass (not honored 5453 by every dump option). 5454 5455 `blocks' 5456 Enable showing basic block boundaries (disabled in raw dumps). 5457 5458 `graph' 5459 For each of the other indicated dump files 5460 (`-fdump-rtl-PASS'), dump a representation of the control 5461 flow graph suitable for viewing with GraphViz to 5462 `FILE.PASSID.PASS.dot'. Each function in the file is 5463 pretty-printed as a subgraph, so that GraphViz can render them 5464 all in a single plot. 5465 5466 This option currently only works for RTL dumps, and the RTL 5467 is always dumped in slim form. 5468 5469 `vops' 5470 Enable showing virtual operands for every statement. 5471 5472 `lineno' 5473 Enable showing line numbers for statements. 5474 5475 `uid' 5476 Enable showing the unique ID (`DECL_UID') for each variable. 5477 5478 `verbose' 5479 Enable showing the tree dump for each statement. 5480 5481 `eh' 5482 Enable showing the EH region number holding each statement. 5483 5484 `scev' 5485 Enable showing scalar evolution analysis details. 5486 5487 `optimized' 5488 Enable showing optimization information (only available in 5489 certain passes). 5490 5491 `missed' 5492 Enable showing missed optimization information (only 5493 available in certain passes). 5494 5495 `notes' 5496 Enable other detailed optimization information (only 5497 available in certain passes). 5498 5499 `=FILENAME' 5500 Instead of an auto named dump file, output into the given file 5501 name. The file names `stdout' and `stderr' are treated 5502 specially and are considered already open standard streams. 5503 For example, 5504 5505 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump 5506 -fdump-tree-pre=stderr file.c 5507 5508 outputs vectorizer dump into `foo.dump', while the PRE dump is 5509 output on to `stderr'. If two conflicting dump filenames are 5510 given for the same pass, then the latter option overrides the 5511 earlier one. 5512 5513 `all' 5514 Turn on all options, except `raw', `slim', `verbose' and 5515 `lineno'. 5516 5517 `optall' 5518 Turn on all optimization options, i.e., `optimized', 5519 `missed', and `note'. 5520 5521 The following tree dumps are possible: 5522 `original' 5523 Dump before any tree based optimization, to `FILE.original'. 5524 5525 `optimized' 5526 Dump after all tree based optimization, to `FILE.optimized'. 5527 5528 `gimple' 5529 Dump each function before and after the gimplification pass 5530 to a file. The file name is made by appending `.gimple' to 5531 the source file name. 5532 5533 `cfg' 5534 Dump the control flow graph of each function to a file. The 5535 file name is made by appending `.cfg' to the source file name. 5536 5537 `ch' 5538 Dump each function after copying loop headers. The file name 5539 is made by appending `.ch' to the source file name. 5540 5541 `ssa' 5542 Dump SSA related information to a file. The file name is 5543 made by appending `.ssa' to the source file name. 5544 5545 `alias' 5546 Dump aliasing information for each function. The file name 5547 is made by appending `.alias' to the source file name. 5548 5549 `ccp' 5550 Dump each function after CCP. The file name is made by 5551 appending `.ccp' to the source file name. 5552 5553 `storeccp' 5554 Dump each function after STORE-CCP. The file name is made by 5555 appending `.storeccp' to the source file name. 5556 5557 `pre' 5558 Dump trees after partial redundancy elimination. The file 5559 name is made by appending `.pre' to the source file name. 5560 5561 `fre' 5562 Dump trees after full redundancy elimination. The file name 5563 is made by appending `.fre' to the source file name. 5564 5565 `copyprop' 5566 Dump trees after copy propagation. The file name is made by 5567 appending `.copyprop' to the source file name. 5568 5569 `store_copyprop' 5570 Dump trees after store copy-propagation. The file name is 5571 made by appending `.store_copyprop' to the source file name. 5572 5573 `dce' 5574 Dump each function after dead code elimination. The file 5575 name is made by appending `.dce' to the source file name. 5576 5577 `mudflap' 5578 Dump each function after adding mudflap instrumentation. The 5579 file name is made by appending `.mudflap' to the source file 5580 name. 5581 5582 `sra' 5583 Dump each function after performing scalar replacement of 5584 aggregates. The file name is made by appending `.sra' to the 5585 source file name. 5586 5587 `sink' 5588 Dump each function after performing code sinking. The file 5589 name is made by appending `.sink' to the source file name. 5590 5591 `dom' 5592 Dump each function after applying dominator tree 5593 optimizations. The file name is made by appending `.dom' to 5594 the source file name. 5595 5596 `dse' 5597 Dump each function after applying dead store elimination. 5598 The file name is made by appending `.dse' to the source file 5599 name. 5600 5601 `phiopt' 5602 Dump each function after optimizing PHI nodes into 5603 straightline code. The file name is made by appending 5604 `.phiopt' to the source file name. 5605 5606 `forwprop' 5607 Dump each function after forward propagating single use 5608 variables. The file name is made by appending `.forwprop' to 5609 the source file name. 5610 5611 `copyrename' 5612 Dump each function after applying the copy rename 5613 optimization. The file name is made by appending 5614 `.copyrename' to the source file name. 5615 5616 `nrv' 5617 Dump each function after applying the named return value 5618 optimization on generic trees. The file name is made by 5619 appending `.nrv' to the source file name. 5620 5621 `vect' 5622 Dump each function after applying vectorization of loops. 5623 The file name is made by appending `.vect' to the source file 5624 name. 5625 5626 `slp' 5627 Dump each function after applying vectorization of basic 5628 blocks. The file name is made by appending `.slp' to the 5629 source file name. 5630 5631 `vrp' 5632 Dump each function after Value Range Propagation (VRP). The 5633 file name is made by appending `.vrp' to the source file name. 5634 5635 `all' 5636 Enable all the available tree dumps with the flags provided 5637 in this option. 5638 5639 `-fopt-info' 5640 `-fopt-info-OPTIONS' 5641 `-fopt-info-OPTIONS=FILENAME' 5642 Controls optimization dumps from various optimization passes. If 5643 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 5644 options to select the dump details and optimizations. If OPTIONS 5645 is not specified, it defaults to `all' for details and `optall' 5646 for optimization groups. If the FILENAME is not specified, it 5647 defaults to `stderr'. Note that the output FILENAME will be 5648 overwritten in case of multiple translation units. If a combined 5649 output from multiple translation units is desired, `stderr' should 5650 be used instead. 5651 5652 The options can be divided into two groups, 1) options describing 5653 the verbosity of the dump, and 2) options describing which 5654 optimizations should be included. The options from both the groups 5655 can be freely mixed as they are non-overlapping. However, in case 5656 of any conflicts, the latter options override the earlier options 5657 on the command line. Though multiple -fopt-info options are 5658 accepted, only one of them can have `=filename'. If other 5659 filenames are provided then all but the first one are ignored. 5660 5661 The dump verbosity has the following options 5662 5663 `optimized' 5664 Print information when an optimization is successfully 5665 applied. It is up to a pass to decide which information is 5666 relevant. For example, the vectorizer passes print the source 5667 location of loops which got successfully vectorized. 5668 5669 `missed' 5670 Print information about missed optimizations. Individual 5671 passes control which information to include in the output. 5672 For example, 5673 5674 gcc -O2 -ftree-vectorize -fopt-info-vec-missed 5675 5676 will print information about missed optimization 5677 opportunities from vectorization passes on stderr. 5678 5679 `note' 5680 Print verbose information about optimizations, such as certain 5681 transformations, more detailed messages about decisions etc. 5682 5683 `all' 5684 Print detailed optimization information. This includes 5685 OPTIMIZED, MISSED, and NOTE. 5686 5687 The second set of options describes a group of optimizations and 5688 may include one or more of the following. 5689 5690 `ipa' 5691 Enable dumps from all interprocedural optimizations. 5692 5693 `loop' 5694 Enable dumps from all loop optimizations. 5695 5696 `inline' 5697 Enable dumps from all inlining optimizations. 5698 5699 `vec' 5700 Enable dumps from all vectorization optimizations. 5701 5702 For example, 5703 gcc -O3 -fopt-info-missed=missed.all 5704 5705 outputs missed optimization report from all the passes into 5706 `missed.all'. 5707 5708 As another example, 5709 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt 5710 5711 will output information about missed optimizations as well as 5712 optimized locations from all the inlining passes into `inline.txt'. 5713 5714 If the FILENAME is provided, then the dumps from all the 5715 applicable optimizations are concatenated into the `filename'. 5716 Otherwise the dump is output onto `stderr'. If OPTIONS is omitted, 5717 it defaults to `all-optall', which means dump all available 5718 optimization info from all the passes. In the following example, 5719 all optimization info is output on to `stderr'. 5720 5721 gcc -O3 -fopt-info 5722 5723 Note that `-fopt-info-vec-missed' behaves the same as 5724 `-fopt-info-missed-vec'. 5725 5726 As another example, consider 5727 5728 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt 5729 5730 Here the two output filenames `vec.miss' and `loop.opt' are in 5731 conflict since only one output file is allowed. In this case, only 5732 the first option takes effect and the subsequent options are 5733 ignored. Thus only the `vec.miss' is produced which cotaints dumps 5734 from the vectorizer about missed opportunities. 5735 5736 `-ftree-vectorizer-verbose=N' 5737 This option is deprecated and is implemented in terms of 5738 `-fopt-info'. Please use `-fopt-info-KIND' form instead, where 5739 KIND is one of the valid opt-info options. It prints additional 5740 optimization information. For N=0 no diagnostic information is 5741 reported. If N=1 the vectorizer reports each loop that got 5742 vectorized, and the total number of loops that got vectorized. If 5743 N=2 the vectorizer reports locations which could not be vectorized 5744 and the reasons for those. For any higher verbosity levels all the 5745 analysis and transformation information from the vectorizer is 5746 reported. 5747 5748 Note that the information output by `-ftree-vectorizer-verbose' 5749 option is sent to `stderr'. If the equivalent form 5750 `-fopt-info-OPTIONS=FILENAME' is used then the output is sent into 5751 FILENAME instead. 5752 5753 `-frandom-seed=STRING' 5754 This option provides a seed that GCC uses in place of random 5755 numbers in generating certain symbol names that have to be 5756 different in every compiled file. It is also used to place unique 5757 stamps in coverage data files and the object files that produce 5758 them. You can use the `-frandom-seed' option to produce 5759 reproducibly identical object files. 5760 5761 The STRING should be different for every file you compile. 5762 5763 `-fsched-verbose=N' 5764 On targets that use instruction scheduling, this option controls 5765 the amount of debugging output the scheduler prints. This 5766 information is written to standard error, unless 5767 `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which 5768 case it is output to the usual dump listing file, `.sched1' or 5769 `.sched2' respectively. However for N greater than nine, the 5770 output is always printed to standard error. 5771 5772 For N greater than zero, `-fsched-verbose' outputs the same 5773 information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'. For N 5774 greater than one, it also output basic block probabilities, 5775 detailed ready list information and unit/insn info. For N greater 5776 than two, it includes RTL at abort point, control-flow and regions 5777 info. And for N over four, `-fsched-verbose' also includes 5778 dependence info. 5779 5780 `-save-temps' 5781 `-save-temps=cwd' 5782 Store the usual "temporary" intermediate files permanently; place 5783 them in the current directory and name them based on the source 5784 file. Thus, compiling `foo.c' with `-c -save-temps' produces files 5785 `foo.i' and `foo.s', as well as `foo.o'. This creates a 5786 preprocessed `foo.i' output file even though the compiler now 5787 normally uses an integrated preprocessor. 5788 5789 When used in combination with the `-x' command-line option, 5790 `-save-temps' is sensible enough to avoid over writing an input 5791 source file with the same extension as an intermediate file. The 5792 corresponding intermediate file may be obtained by renaming the 5793 source file before using `-save-temps'. 5794 5795 If you invoke GCC in parallel, compiling several different source 5796 files that share a common base name in different subdirectories or 5797 the same source file compiled for multiple output destinations, it 5798 is likely that the different parallel compilers will interfere 5799 with each other, and overwrite the temporary files. For instance: 5800 5801 gcc -save-temps -o outdir1/foo.o indir1/foo.c& 5802 gcc -save-temps -o outdir2/foo.o indir2/foo.c& 5803 5804 may result in `foo.i' and `foo.o' being written to simultaneously 5805 by both compilers. 5806 5807 `-save-temps=obj' 5808 Store the usual "temporary" intermediate files permanently. If the 5809 `-o' option is used, the temporary files are based on the object 5810 file. If the `-o' option is not used, the `-save-temps=obj' 5811 switch behaves like `-save-temps'. 5812 5813 For example: 5814 5815 gcc -save-temps=obj -c foo.c 5816 gcc -save-temps=obj -c bar.c -o dir/xbar.o 5817 gcc -save-temps=obj foobar.c -o dir2/yfoobar 5818 5819 creates `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s', 5820 `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'. 5821 5822 `-time[=FILE]' 5823 Report the CPU time taken by each subprocess in the compilation 5824 sequence. For C source files, this is the compiler proper and 5825 assembler (plus the linker if linking is done). 5826 5827 Without the specification of an output file, the output looks like 5828 this: 5829 5830 # cc1 0.12 0.01 5831 # as 0.00 0.01 5832 5833 The first number on each line is the "user time", that is time 5834 spent executing the program itself. The second number is "system 5835 time", time spent executing operating system routines on behalf of 5836 the program. Both numbers are in seconds. 5837 5838 With the specification of an output file, the output is appended 5839 to the named file, and it looks like this: 5840 5841 0.12 0.01 cc1 OPTIONS 5842 0.00 0.01 as OPTIONS 5843 5844 The "user time" and the "system time" are moved before the program 5845 name, and the options passed to the program are displayed, so that 5846 one can later tell what file was being compiled, and with which 5847 options. 5848 5849 `-fvar-tracking' 5850 Run variable tracking pass. It computes where variables are 5851 stored at each position in code. Better debugging information is 5852 then generated (if the debugging information format supports this 5853 information). 5854 5855 It is enabled by default when compiling with optimization (`-Os', 5856 `-O', `-O2', ...), debugging information (`-g') and the debug info 5857 format supports it. 5858 5859 `-fvar-tracking-assignments' 5860 Annotate assignments to user variables early in the compilation and 5861 attempt to carry the annotations over throughout the compilation 5862 all the way to the end, in an attempt to improve debug information 5863 while optimizing. Use of `-gdwarf-4' is recommended along with it. 5864 5865 It can be enabled even if var-tracking is disabled, in which case 5866 annotations are created and maintained, but discarded at the end. 5867 5868 `-fvar-tracking-assignments-toggle' 5869 Toggle `-fvar-tracking-assignments', in the same way that 5870 `-gtoggle' toggles `-g'. 5871 5872 `-print-file-name=LIBRARY' 5873 Print the full absolute name of the library file LIBRARY that 5874 would be used when linking--and don't do anything else. With this 5875 option, GCC does not compile or link anything; it just prints the 5876 file name. 5877 5878 `-print-multi-directory' 5879 Print the directory name corresponding to the multilib selected by 5880 any other switches present in the command line. This directory is 5881 supposed to exist in `GCC_EXEC_PREFIX'. 5882 5883 `-print-multi-lib' 5884 Print the mapping from multilib directory names to compiler 5885 switches that enable them. The directory name is separated from 5886 the switches by `;', and each switch starts with an `@' instead of 5887 the `-', without spaces between multiple switches. This is 5888 supposed to ease shell processing. 5889 5890 `-print-multi-os-directory' 5891 Print the path to OS libraries for the selected multilib, relative 5892 to some `lib' subdirectory. If OS libraries are present in the 5893 `lib' subdirectory and no multilibs are used, this is usually just 5894 `.', if OS libraries are present in `libSUFFIX' sibling 5895 directories this prints e.g. `../lib64', `../lib' or `../lib32', 5896 or if OS libraries are present in `lib/SUBDIR' subdirectories it 5897 prints e.g. `amd64', `sparcv9' or `ev6'. 5898 5899 `-print-multiarch' 5900 Print the path to OS libraries for the selected multiarch, 5901 relative to some `lib' subdirectory. 5902 5903 `-print-prog-name=PROGRAM' 5904 Like `-print-file-name', but searches for a program such as `cpp'. 5905 5906 `-print-libgcc-file-name' 5907 Same as `-print-file-name=libgcc.a'. 5908 5909 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 5910 you do want to link with `libgcc.a'. You can do: 5911 5912 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 5913 5914 `-print-search-dirs' 5915 Print the name of the configured installation directory and a list 5916 of program and library directories `gcc' searches--and don't do 5917 anything else. 5918 5919 This is useful when `gcc' prints the error message `installation 5920 problem, cannot exec cpp0: No such file or directory'. To resolve 5921 this you either need to put `cpp0' and the other compiler 5922 components where `gcc' expects to find them, or you can set the 5923 environment variable `GCC_EXEC_PREFIX' to the directory where you 5924 installed them. Don't forget the trailing `/'. *Note Environment 5925 Variables::. 5926 5927 `-print-sysroot' 5928 Print the target sysroot directory that is used during 5929 compilation. This is the target sysroot specified either at 5930 configure time or using the `--sysroot' option, possibly with an 5931 extra suffix that depends on compilation options. If no target 5932 sysroot is specified, the option prints nothing. 5933 5934 `-print-sysroot-headers-suffix' 5935 Print the suffix added to the target sysroot when searching for 5936 headers, or give an error if the compiler is not configured with 5937 such a suffix--and don't do anything else. 5938 5939 `-dumpmachine' 5940 Print the compiler's target machine (for example, 5941 `i686-pc-linux-gnu')--and don't do anything else. 5942 5943 `-dumpversion' 5944 Print the compiler version (for example, `3.0')--and don't do 5945 anything else. 5946 5947 `-dumpspecs' 5948 Print the compiler's built-in specs--and don't do anything else. 5949 (This is used when GCC itself is being built.) *Note Spec Files::. 5950 5951 `-fno-eliminate-unused-debug-types' 5952 Normally, when producing DWARF 2 output, GCC avoids producing 5953 debug symbol output for types that are nowhere used in the source 5954 file being compiled. Sometimes it is useful to have GCC emit 5955 debugging information for all types declared in a compilation 5956 unit, regardless of whether or not they are actually used in that 5957 compilation unit, for example if, in the debugger, you want to 5958 cast a value to a type that is not actually used in your program 5959 (but is declared). More often, however, this results in a 5960 significant amount of wasted space. 5961 5962 5963 File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 5964 5965 3.10 Options That Control Optimization 5966 ====================================== 5967 5968 These options control various sorts of optimizations. 5969 5970 Without any optimization option, the compiler's goal is to reduce the 5971 cost of compilation and to make debugging produce the expected results. 5972 Statements are independent: if you stop the program with a breakpoint 5973 between statements, you can then assign a new value to any variable or 5974 change the program counter to any other statement in the function and 5975 get exactly the results you expect from the source code. 5976 5977 Turning on optimization flags makes the compiler attempt to improve 5978 the performance and/or code size at the expense of compilation time and 5979 possibly the ability to debug the program. 5980 5981 The compiler performs optimization based on the knowledge it has of the 5982 program. Compiling multiple files at once to a single output file mode 5983 allows the compiler to use information gained from all of the files 5984 when compiling each of them. 5985 5986 Not all optimizations are controlled directly by a flag. Only 5987 optimizations that have a flag are listed in this section. 5988 5989 Most optimizations are only enabled if an `-O' level is set on the 5990 command line. Otherwise they are disabled, even if individual 5991 optimization flags are specified. 5992 5993 Depending on the target and how GCC was configured, a slightly 5994 different set of optimizations may be enabled at each `-O' level than 5995 those listed here. You can invoke GCC with `-Q --help=optimizers' to 5996 find out the exact set of optimizations that are enabled at each level. 5997 *Note Overall Options::, for examples. 5998 5999 `-O' 6000 `-O1' 6001 Optimize. Optimizing compilation takes somewhat more time, and a 6002 lot more memory for a large function. 6003 6004 With `-O', the compiler tries to reduce code size and execution 6005 time, without performing any optimizations that take a great deal 6006 of compilation time. 6007 6008 `-O' turns on the following optimization flags: 6009 -fauto-inc-dec 6010 -fcompare-elim 6011 -fcprop-registers 6012 -fdce 6013 -fdefer-pop 6014 -fdelayed-branch 6015 -fdse 6016 -fguess-branch-probability 6017 -fif-conversion2 6018 -fif-conversion 6019 -fipa-pure-const 6020 -fipa-profile 6021 -fipa-reference 6022 -fmerge-constants 6023 -fsplit-wide-types 6024 -ftree-bit-ccp 6025 -ftree-builtin-call-dce 6026 -ftree-ccp 6027 -ftree-ch 6028 -ftree-copyrename 6029 -ftree-dce 6030 -ftree-dominator-opts 6031 -ftree-dse 6032 -ftree-forwprop 6033 -ftree-fre 6034 -ftree-phiprop 6035 -ftree-slsr 6036 -ftree-sra 6037 -ftree-pta 6038 -ftree-ter 6039 -funit-at-a-time 6040 6041 `-O' also turns on `-fomit-frame-pointer' on machines where doing 6042 so does not interfere with debugging. 6043 6044 `-O2' 6045 Optimize even more. GCC performs nearly all supported 6046 optimizations that do not involve a space-speed tradeoff. As 6047 compared to `-O', this option increases both compilation time and 6048 the performance of the generated code. 6049 6050 `-O2' turns on all optimization flags specified by `-O'. It also 6051 turns on the following optimization flags: 6052 -fthread-jumps 6053 -falign-functions -falign-jumps 6054 -falign-loops -falign-labels 6055 -fcaller-saves 6056 -fcrossjumping 6057 -fcse-follow-jumps -fcse-skip-blocks 6058 -fdelete-null-pointer-checks 6059 -fdevirtualize 6060 -fexpensive-optimizations 6061 -fgcse -fgcse-lm 6062 -fhoist-adjacent-loads 6063 -finline-small-functions 6064 -findirect-inlining 6065 -fipa-sra 6066 -foptimize-sibling-calls 6067 -fpartial-inlining 6068 -fpeephole2 6069 -fregmove 6070 -freorder-blocks -freorder-functions 6071 -frerun-cse-after-loop 6072 -fsched-interblock -fsched-spec 6073 -fschedule-insns -fschedule-insns2 6074 -fstrict-aliasing -fstrict-overflow 6075 -ftree-switch-conversion -ftree-tail-merge 6076 -ftree-pre 6077 -ftree-vrp 6078 6079 Please note the warning under `-fgcse' about invoking `-O2' on 6080 programs that use computed gotos. 6081 6082 `-O3' 6083 Optimize yet more. `-O3' turns on all optimizations specified by 6084 `-O2' and also turns on the `-finline-functions', 6085 `-funswitch-loops', `-fpredictive-commoning', 6086 `-fgcse-after-reload', `-ftree-vectorize', `-fvect-cost-model', 6087 `-ftree-partial-pre' and `-fipa-cp-clone' options. 6088 6089 `-O0' 6090 Reduce compilation time and make debugging produce the expected 6091 results. This is the default. 6092 6093 `-Os' 6094 Optimize for size. `-Os' enables all `-O2' optimizations that do 6095 not typically increase code size. It also performs further 6096 optimizations designed to reduce code size. 6097 6098 `-Os' disables the following optimization flags: 6099 -falign-functions -falign-jumps -falign-loops 6100 -falign-labels -freorder-blocks -freorder-blocks-and-partition 6101 -fprefetch-loop-arrays -ftree-vect-loop-version 6102 6103 `-Ofast' 6104 Disregard strict standards compliance. `-Ofast' enables all `-O3' 6105 optimizations. It also enables optimizations that are not valid 6106 for all standard-compliant programs. It turns on `-ffast-math' 6107 and the Fortran-specific `-fno-protect-parens' and 6108 `-fstack-arrays'. 6109 6110 `-Og' 6111 Optimize debugging experience. `-Og' enables optimizations that 6112 do not interfere with debugging. It should be the optimization 6113 level of choice for the standard edit-compile-debug cycle, offering 6114 a reasonable level of optimization while maintaining fast 6115 compilation and a good debugging experience. 6116 6117 If you use multiple `-O' options, with or without level numbers, 6118 the last such option is the one that is effective. 6119 6120 Options of the form `-fFLAG' specify machine-independent flags. Most 6121 flags have both positive and negative forms; the negative form of 6122 `-ffoo' is `-fno-foo'. In the table below, only one of the forms is 6123 listed--the one you typically use. You can figure out the other form 6124 by either removing `no-' or adding it. 6125 6126 The following options control specific optimizations. They are either 6127 activated by `-O' options or are related to ones that are. You can use 6128 the following flags in the rare cases when "fine-tuning" of 6129 optimizations to be performed is desired. 6130 6131 `-fno-default-inline' 6132 Do not make member functions inline by default merely because they 6133 are defined inside the class scope (C++ only). Otherwise, when 6134 you specify `-O', member functions defined inside class scope are 6135 compiled inline by default; i.e., you don't need to add `inline' 6136 in front of the member function name. 6137 6138 `-fno-defer-pop' 6139 Always pop the arguments to each function call as soon as that 6140 function returns. For machines that must pop arguments after a 6141 function call, the compiler normally lets arguments accumulate on 6142 the stack for several function calls and pops them all at once. 6143 6144 Disabled at levels `-O', `-O2', `-O3', `-Os'. 6145 6146 `-fforward-propagate' 6147 Perform a forward propagation pass on RTL. The pass tries to 6148 combine two instructions and checks if the result can be 6149 simplified. If loop unrolling is active, two passes are performed 6150 and the second is scheduled after loop unrolling. 6151 6152 This option is enabled by default at optimization levels `-O', 6153 `-O2', `-O3', `-Os'. 6154 6155 `-ffp-contract=STYLE' 6156 `-ffp-contract=off' disables floating-point expression contraction. 6157 `-ffp-contract=fast' enables floating-point expression contraction 6158 such as forming of fused multiply-add operations if the target has 6159 native support for them. `-ffp-contract=on' enables 6160 floating-point expression contraction if allowed by the language 6161 standard. This is currently not implemented and treated equal to 6162 `-ffp-contract=off'. 6163 6164 The default is `-ffp-contract=fast'. 6165 6166 `-fomit-frame-pointer' 6167 Don't keep the frame pointer in a register for functions that 6168 don't need one. This avoids the instructions to save, set up and 6169 restore frame pointers; it also makes an extra register available 6170 in many functions. *It also makes debugging impossible on some 6171 machines.* 6172 6173 On some machines, such as the VAX, this flag has no effect, because 6174 the standard calling sequence automatically handles the frame 6175 pointer and nothing is saved by pretending it doesn't exist. The 6176 machine-description macro `FRAME_POINTER_REQUIRED' controls 6177 whether a target machine supports this flag. *Note Register 6178 Usage: (gccint)Registers. 6179 6180 Starting with GCC version 4.6, the default setting (when not 6181 optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin 6182 x86 targets has been changed to `-fomit-frame-pointer'. The 6183 default can be reverted to `-fno-omit-frame-pointer' by 6184 configuring GCC with the `--enable-frame-pointer' configure option. 6185 6186 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6187 6188 `-foptimize-sibling-calls' 6189 Optimize sibling and tail recursive calls. 6190 6191 Enabled at levels `-O2', `-O3', `-Os'. 6192 6193 `-fno-inline' 6194 Do not expand any functions inline apart from those marked with 6195 the `always_inline' attribute. This is the default when not 6196 optimizing. 6197 6198 Single functions can be exempted from inlining by marking them 6199 with the `noinline' attribute. 6200 6201 `-finline-small-functions' 6202 Integrate functions into their callers when their body is smaller 6203 than expected function call code (so overall size of program gets 6204 smaller). The compiler heuristically decides which functions are 6205 simple enough to be worth integrating in this way. This inlining 6206 applies to all functions, even those not declared inline. 6207 6208 Enabled at level `-O2'. 6209 6210 `-findirect-inlining' 6211 Inline also indirect calls that are discovered to be known at 6212 compile time thanks to previous inlining. This option has any 6213 effect only when inlining itself is turned on by the 6214 `-finline-functions' or `-finline-small-functions' options. 6215 6216 Enabled at level `-O2'. 6217 6218 `-finline-functions' 6219 Consider all functions for inlining, even if they are not declared 6220 inline. The compiler heuristically decides which functions are 6221 worth integrating in this way. 6222 6223 If all calls to a given function are integrated, and the function 6224 is declared `static', then the function is normally not output as 6225 assembler code in its own right. 6226 6227 Enabled at level `-O3'. 6228 6229 `-finline-functions-called-once' 6230 Consider all `static' functions called once for inlining into their 6231 caller even if they are not marked `inline'. If a call to a given 6232 function is integrated, then the function is not output as 6233 assembler code in its own right. 6234 6235 Enabled at levels `-O1', `-O2', `-O3' and `-Os'. 6236 6237 `-fearly-inlining' 6238 Inline functions marked by `always_inline' and functions whose 6239 body seems smaller than the function call overhead early before 6240 doing `-fprofile-generate' instrumentation and real inlining pass. 6241 Doing so makes profiling significantly cheaper and usually 6242 inlining faster on programs having large chains of nested wrapper 6243 functions. 6244 6245 Enabled by default. 6246 6247 `-fipa-sra' 6248 Perform interprocedural scalar replacement of aggregates, removal 6249 of unused parameters and replacement of parameters passed by 6250 reference by parameters passed by value. 6251 6252 Enabled at levels `-O2', `-O3' and `-Os'. 6253 6254 `-finline-limit=N' 6255 By default, GCC limits the size of functions that can be inlined. 6256 This flag allows coarse control of this limit. N is the size of 6257 functions that can be inlined in number of pseudo instructions. 6258 6259 Inlining is actually controlled by a number of parameters, which 6260 may be specified individually by using `--param NAME=VALUE'. The 6261 `-finline-limit=N' option sets some of these parameters as follows: 6262 6263 `max-inline-insns-single' 6264 is set to N/2. 6265 6266 `max-inline-insns-auto' 6267 is set to N/2. 6268 6269 See below for a documentation of the individual parameters 6270 controlling inlining and for the defaults of these parameters. 6271 6272 _Note:_ there may be no value to `-finline-limit' that results in 6273 default behavior. 6274 6275 _Note:_ pseudo instruction represents, in this particular context, 6276 an abstract measurement of function's size. In no way does it 6277 represent a count of assembly instructions and as such its exact 6278 meaning might change from one release to an another. 6279 6280 `-fno-keep-inline-dllexport' 6281 This is a more fine-grained version of `-fkeep-inline-functions', 6282 which applies only to functions that are declared using the 6283 `dllexport' attribute or declspec (*Note Declaring Attributes of 6284 Functions: Function Attributes.) 6285 6286 `-fkeep-inline-functions' 6287 In C, emit `static' functions that are declared `inline' into the 6288 object file, even if the function has been inlined into all of its 6289 callers. This switch does not affect functions using the `extern 6290 inline' extension in GNU C90. In C++, emit any and all inline 6291 functions into the object file. 6292 6293 `-fkeep-static-consts' 6294 Emit variables declared `static const' when optimization isn't 6295 turned on, even if the variables aren't referenced. 6296 6297 GCC enables this option by default. If you want to force the 6298 compiler to check if a variable is referenced, regardless of 6299 whether or not optimization is turned on, use the 6300 `-fno-keep-static-consts' option. 6301 6302 `-fmerge-constants' 6303 Attempt to merge identical constants (string constants and 6304 floating-point constants) across compilation units. 6305 6306 This option is the default for optimized compilation if the 6307 assembler and linker support it. Use `-fno-merge-constants' to 6308 inhibit this behavior. 6309 6310 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6311 6312 `-fmerge-all-constants' 6313 Attempt to merge identical constants and identical variables. 6314 6315 This option implies `-fmerge-constants'. In addition to 6316 `-fmerge-constants' this considers e.g. even constant initialized 6317 arrays or initialized constant variables with integral or 6318 floating-point types. Languages like C or C++ require each 6319 variable, including multiple instances of the same variable in 6320 recursive calls, to have distinct locations, so using this option 6321 results in non-conforming behavior. 6322 6323 `-fmodulo-sched' 6324 Perform swing modulo scheduling immediately before the first 6325 scheduling pass. This pass looks at innermost loops and reorders 6326 their instructions by overlapping different iterations. 6327 6328 `-fmodulo-sched-allow-regmoves' 6329 Perform more aggressive SMS-based modulo scheduling with register 6330 moves allowed. By setting this flag certain anti-dependences 6331 edges are deleted, which triggers the generation of reg-moves 6332 based on the life-range analysis. This option is effective only 6333 with `-fmodulo-sched' enabled. 6334 6335 `-fno-branch-count-reg' 6336 Do not use "decrement and branch" instructions on a count register, 6337 but instead generate a sequence of instructions that decrement a 6338 register, compare it against zero, then branch based upon the 6339 result. This option is only meaningful on architectures that 6340 support such instructions, which include x86, PowerPC, IA-64 and 6341 S/390. 6342 6343 The default is `-fbranch-count-reg'. 6344 6345 `-fno-function-cse' 6346 Do not put function addresses in registers; make each instruction 6347 that calls a constant function contain the function's address 6348 explicitly. 6349 6350 This option results in less efficient code, but some strange hacks 6351 that alter the assembler output may be confused by the 6352 optimizations performed when this option is not used. 6353 6354 The default is `-ffunction-cse' 6355 6356 `-fno-zero-initialized-in-bss' 6357 If the target supports a BSS section, GCC by default puts 6358 variables that are initialized to zero into BSS. This can save 6359 space in the resulting code. 6360 6361 This option turns off this behavior because some programs 6362 explicitly rely on variables going to the data section--e.g., so 6363 that the resulting executable can find the beginning of that 6364 section and/or make assumptions based on that. 6365 6366 The default is `-fzero-initialized-in-bss'. 6367 6368 `-fmudflap -fmudflapth -fmudflapir' 6369 For front-ends that support it (C and C++), instrument all risky 6370 pointer/array dereferencing operations, some standard library 6371 string/heap functions, and some other associated constructs with 6372 range/validity tests. Modules so instrumented should be immune to 6373 buffer overflows, invalid heap use, and some other classes of C/C++ 6374 programming errors. The instrumentation relies on a separate 6375 runtime library (`libmudflap'), which is linked into a program if 6376 `-fmudflap' is given at link time. Run-time behavior of the 6377 instrumented program is controlled by the `MUDFLAP_OPTIONS' 6378 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 6379 its options. 6380 6381 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 6382 your program is multi-threaded. Use `-fmudflapir', in addition to 6383 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 6384 pointer reads. This produces less instrumentation (and therefore 6385 faster execution) and still provides some protection against 6386 outright memory corrupting writes, but allows erroneously read 6387 data to propagate within a program. 6388 6389 `-fthread-jumps' 6390 Perform optimizations that check to see if a jump branches to a 6391 location where another comparison subsumed by the first is found. 6392 If so, the first branch is redirected to either the destination of 6393 the second branch or a point immediately following it, depending 6394 on whether the condition is known to be true or false. 6395 6396 Enabled at levels `-O2', `-O3', `-Os'. 6397 6398 `-fsplit-wide-types' 6399 When using a type that occupies multiple registers, such as `long 6400 long' on a 32-bit system, split the registers apart and allocate 6401 them independently. This normally generates better code for those 6402 types, but may make debugging more difficult. 6403 6404 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6405 6406 `-fcse-follow-jumps' 6407 In common subexpression elimination (CSE), scan through jump 6408 instructions when the target of the jump is not reached by any 6409 other path. For example, when CSE encounters an `if' statement 6410 with an `else' clause, CSE follows the jump when the condition 6411 tested is false. 6412 6413 Enabled at levels `-O2', `-O3', `-Os'. 6414 6415 `-fcse-skip-blocks' 6416 This is similar to `-fcse-follow-jumps', but causes CSE to follow 6417 jumps that conditionally skip over blocks. When CSE encounters a 6418 simple `if' statement with no else clause, `-fcse-skip-blocks' 6419 causes CSE to follow the jump around the body of the `if'. 6420 6421 Enabled at levels `-O2', `-O3', `-Os'. 6422 6423 `-frerun-cse-after-loop' 6424 Re-run common subexpression elimination after loop optimizations 6425 are performed. 6426 6427 Enabled at levels `-O2', `-O3', `-Os'. 6428 6429 `-fgcse' 6430 Perform a global common subexpression elimination pass. This pass 6431 also performs global constant and copy propagation. 6432 6433 _Note:_ When compiling a program using computed gotos, a GCC 6434 extension, you may get better run-time performance if you disable 6435 the global common subexpression elimination pass by adding 6436 `-fno-gcse' to the command line. 6437 6438 Enabled at levels `-O2', `-O3', `-Os'. 6439 6440 `-fgcse-lm' 6441 When `-fgcse-lm' is enabled, global common subexpression 6442 elimination attempts to move loads that are only killed by stores 6443 into themselves. This allows a loop containing a load/store 6444 sequence to be changed to a load outside the loop, and a 6445 copy/store within the loop. 6446 6447 Enabled by default when `-fgcse' is enabled. 6448 6449 `-fgcse-sm' 6450 When `-fgcse-sm' is enabled, a store motion pass is run after 6451 global common subexpression elimination. This pass attempts to 6452 move stores out of loops. When used in conjunction with 6453 `-fgcse-lm', loops containing a load/store sequence can be changed 6454 to a load before the loop and a store after the loop. 6455 6456 Not enabled at any optimization level. 6457 6458 `-fgcse-las' 6459 When `-fgcse-las' is enabled, the global common subexpression 6460 elimination pass eliminates redundant loads that come after stores 6461 to the same memory location (both partial and full redundancies). 6462 6463 Not enabled at any optimization level. 6464 6465 `-fgcse-after-reload' 6466 When `-fgcse-after-reload' is enabled, a redundant load elimination 6467 pass is performed after reload. The purpose of this pass is to 6468 clean up redundant spilling. 6469 6470 `-faggressive-loop-optimizations' 6471 This option tells the loop optimizer to use language constraints to 6472 derive bounds for the number of iterations of a loop. This 6473 assumes that loop code does not invoke undefined behavior by for 6474 example causing signed integer overflows or out-of-bound array 6475 accesses. The bounds for the number of iterations of a loop are 6476 used to guide loop unrolling and peeling and loop exit test 6477 optimizations. This option is enabled by default. 6478 6479 `-funsafe-loop-optimizations' 6480 This option tells the loop optimizer to assume that loop indices 6481 do not overflow, and that loops with nontrivial exit condition are 6482 not infinite. This enables a wider range of loop optimizations 6483 even if the loop optimizer itself cannot prove that these 6484 assumptions are valid. If you use `-Wunsafe-loop-optimizations', 6485 the compiler warns you if it finds this kind of loop. 6486 6487 `-fcrossjumping' 6488 Perform cross-jumping transformation. This transformation unifies 6489 equivalent code and saves code size. The resulting code may or 6490 may not perform better than without cross-jumping. 6491 6492 Enabled at levels `-O2', `-O3', `-Os'. 6493 6494 `-fauto-inc-dec' 6495 Combine increments or decrements of addresses with memory accesses. 6496 This pass is always skipped on architectures that do not have 6497 instructions to support this. Enabled by default at `-O' and 6498 higher on architectures that support this. 6499 6500 `-fdce' 6501 Perform dead code elimination (DCE) on RTL. Enabled by default at 6502 `-O' and higher. 6503 6504 `-fdse' 6505 Perform dead store elimination (DSE) on RTL. Enabled by default 6506 at `-O' and higher. 6507 6508 `-fif-conversion' 6509 Attempt to transform conditional jumps into branch-less 6510 equivalents. This includes use of conditional moves, min, max, 6511 set flags and abs instructions, and some tricks doable by standard 6512 arithmetics. The use of conditional execution on chips where it 6513 is available is controlled by `if-conversion2'. 6514 6515 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6516 6517 `-fif-conversion2' 6518 Use conditional execution (where available) to transform 6519 conditional jumps into branch-less equivalents. 6520 6521 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6522 6523 `-fdelete-null-pointer-checks' 6524 Assume that programs cannot safely dereference null pointers, and 6525 that no code or data element resides there. This enables simple 6526 constant folding optimizations at all optimization levels. In 6527 addition, other optimization passes in GCC use this flag to 6528 control global dataflow analyses that eliminate useless checks for 6529 null pointers; these assume that if a pointer is checked after it 6530 has already been dereferenced, it cannot be null. 6531 6532 Note however that in some environments this assumption is not true. 6533 Use `-fno-delete-null-pointer-checks' to disable this optimization 6534 for programs that depend on that behavior. 6535 6536 Some targets, especially embedded ones, disable this option at all 6537 levels. Otherwise it is enabled at all levels: `-O0', `-O1', 6538 `-O2', `-O3', `-Os'. Passes that use the information are enabled 6539 independently at different optimization levels. 6540 6541 `-fdevirtualize' 6542 Attempt to convert calls to virtual functions to direct calls. 6543 This is done both within a procedure and interprocedurally as part 6544 of indirect inlining (`-findirect-inlining') and interprocedural 6545 constant propagation (`-fipa-cp'). Enabled at levels `-O2', 6546 `-O3', `-Os'. 6547 6548 `-fexpensive-optimizations' 6549 Perform a number of minor optimizations that are relatively 6550 expensive. 6551 6552 Enabled at levels `-O2', `-O3', `-Os'. 6553 6554 `-free' 6555 Attempt to remove redundant extension instructions. This is 6556 especially helpful for the x86-64 architecture, which implicitly 6557 zero-extends in 64-bit registers after writing to their lower 6558 32-bit half. 6559 6560 Enabled for x86 at levels `-O2', `-O3'. 6561 6562 `-foptimize-register-move' 6563 `-fregmove' 6564 Attempt to reassign register numbers in move instructions and as 6565 operands of other simple instructions in order to maximize the 6566 amount of register tying. This is especially helpful on machines 6567 with two-operand instructions. 6568 6569 Note `-fregmove' and `-foptimize-register-move' are the same 6570 optimization. 6571 6572 Enabled at levels `-O2', `-O3', `-Os'. 6573 6574 `-fira-algorithm=ALGORITHM' 6575 Use the specified coloring algorithm for the integrated register 6576 allocator. The ALGORITHM argument can be `priority', which 6577 specifies Chow's priority coloring, or `CB', which specifies 6578 Chaitin-Briggs coloring. Chaitin-Briggs coloring is not 6579 implemented for all architectures, but for those targets that do 6580 support it, it is the default because it generates better code. 6581 6582 `-fira-region=REGION' 6583 Use specified regions for the integrated register allocator. The 6584 REGION argument should be one of the following: 6585 6586 `all' 6587 Use all loops as register allocation regions. This can give 6588 the best results for machines with a small and/or irregular 6589 register set. 6590 6591 `mixed' 6592 Use all loops except for loops with small register pressure 6593 as the regions. This value usually gives the best results in 6594 most cases and for most architectures, and is enabled by 6595 default when compiling with optimization for speed (`-O', 6596 `-O2', ...). 6597 6598 `one' 6599 Use all functions as a single region. This typically results 6600 in the smallest code size, and is enabled by default for 6601 `-Os' or `-O0'. 6602 6603 6604 `-fira-hoist-pressure' 6605 Use IRA to evaluate register pressure in the code hoisting pass for 6606 decisions to hoist expressions. This option usually results in 6607 smaller code, but it can slow the compiler down. 6608 6609 This option is enabled at level `-Os' for all targets. 6610 6611 `-fira-loop-pressure' 6612 Use IRA to evaluate register pressure in loops for decisions to 6613 move loop invariants. This option usually results in generation 6614 of faster and smaller code on machines with large register files 6615 (>= 32 registers), but it can slow the compiler down. 6616 6617 This option is enabled at level `-O3' for some targets. 6618 6619 `-fno-ira-share-save-slots' 6620 Disable sharing of stack slots used for saving call-used hard 6621 registers living through a call. Each hard register gets a 6622 separate stack slot, and as a result function stack frames are 6623 larger. 6624 6625 `-fno-ira-share-spill-slots' 6626 Disable sharing of stack slots allocated for pseudo-registers. 6627 Each pseudo-register that does not get a hard register gets a 6628 separate stack slot, and as a result function stack frames are 6629 larger. 6630 6631 `-fira-verbose=N' 6632 Control the verbosity of the dump file for the integrated register 6633 allocator. The default value is 5. If the value N is greater or 6634 equal to 10, the dump output is sent to stderr using the same 6635 format as N minus 10. 6636 6637 `-fdelayed-branch' 6638 If supported for the target machine, attempt to reorder 6639 instructions to exploit instruction slots available after delayed 6640 branch instructions. 6641 6642 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6643 6644 `-fschedule-insns' 6645 If supported for the target machine, attempt to reorder 6646 instructions to eliminate execution stalls due to required data 6647 being unavailable. This helps machines that have slow floating 6648 point or memory load instructions by allowing other instructions 6649 to be issued until the result of the load or floating-point 6650 instruction is required. 6651 6652 Enabled at levels `-O2', `-O3'. 6653 6654 `-fschedule-insns2' 6655 Similar to `-fschedule-insns', but requests an additional pass of 6656 instruction scheduling after register allocation has been done. 6657 This is especially useful on machines with a relatively small 6658 number of registers and where memory load instructions take more 6659 than one cycle. 6660 6661 Enabled at levels `-O2', `-O3', `-Os'. 6662 6663 `-fno-sched-interblock' 6664 Don't schedule instructions across basic blocks. This is normally 6665 enabled by default when scheduling before register allocation, i.e. 6666 with `-fschedule-insns' or at `-O2' or higher. 6667 6668 `-fno-sched-spec' 6669 Don't allow speculative motion of non-load instructions. This is 6670 normally enabled by default when scheduling before register 6671 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 6672 6673 `-fsched-pressure' 6674 Enable register pressure sensitive insn scheduling before register 6675 allocation. This only makes sense when scheduling before register 6676 allocation is enabled, i.e. with `-fschedule-insns' or at `-O2' or 6677 higher. Usage of this option can improve the generated code and 6678 decrease its size by preventing register pressure increase above 6679 the number of available hard registers and subsequent spills in 6680 register allocation. 6681 6682 `-fsched-spec-load' 6683 Allow speculative motion of some load instructions. This only 6684 makes sense when scheduling before register allocation, i.e. with 6685 `-fschedule-insns' or at `-O2' or higher. 6686 6687 `-fsched-spec-load-dangerous' 6688 Allow speculative motion of more load instructions. This only 6689 makes sense when scheduling before register allocation, i.e. with 6690 `-fschedule-insns' or at `-O2' or higher. 6691 6692 `-fsched-stalled-insns' 6693 `-fsched-stalled-insns=N' 6694 Define how many insns (if any) can be moved prematurely from the 6695 queue of stalled insns into the ready list during the second 6696 scheduling pass. `-fno-sched-stalled-insns' means that no insns 6697 are moved prematurely, `-fsched-stalled-insns=0' means there is no 6698 limit on how many queued insns can be moved prematurely. 6699 `-fsched-stalled-insns' without a value is equivalent to 6700 `-fsched-stalled-insns=1'. 6701 6702 `-fsched-stalled-insns-dep' 6703 `-fsched-stalled-insns-dep=N' 6704 Define how many insn groups (cycles) are examined for a dependency 6705 on a stalled insn that is a candidate for premature removal from 6706 the queue of stalled insns. This has an effect only during the 6707 second scheduling pass, and only if `-fsched-stalled-insns' is 6708 used. `-fno-sched-stalled-insns-dep' is equivalent to 6709 `-fsched-stalled-insns-dep=0'. `-fsched-stalled-insns-dep' 6710 without a value is equivalent to `-fsched-stalled-insns-dep=1'. 6711 6712 `-fsched2-use-superblocks' 6713 When scheduling after register allocation, use superblock 6714 scheduling. This allows motion across basic block boundaries, 6715 resulting in faster schedules. This option is experimental, as 6716 not all machine descriptions used by GCC model the CPU closely 6717 enough to avoid unreliable results from the algorithm. 6718 6719 This only makes sense when scheduling after register allocation, 6720 i.e. with `-fschedule-insns2' or at `-O2' or higher. 6721 6722 `-fsched-group-heuristic' 6723 Enable the group heuristic in the scheduler. This heuristic favors 6724 the instruction that belongs to a schedule group. This is enabled 6725 by default when scheduling is enabled, i.e. with `-fschedule-insns' 6726 or `-fschedule-insns2' or at `-O2' or higher. 6727 6728 `-fsched-critical-path-heuristic' 6729 Enable the critical-path heuristic in the scheduler. This 6730 heuristic favors instructions on the critical path. This is 6731 enabled by default when scheduling is enabled, i.e. with 6732 `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher. 6733 6734 `-fsched-spec-insn-heuristic' 6735 Enable the speculative instruction heuristic in the scheduler. 6736 This heuristic favors speculative instructions with greater 6737 dependency weakness. This is enabled by default when scheduling 6738 is enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' 6739 or at `-O2' or higher. 6740 6741 `-fsched-rank-heuristic' 6742 Enable the rank heuristic in the scheduler. This heuristic favors 6743 the instruction belonging to a basic block with greater size or 6744 frequency. This is enabled by default when scheduling is enabled, 6745 i.e. with `-fschedule-insns' or `-fschedule-insns2' or at `-O2' 6746 or higher. 6747 6748 `-fsched-last-insn-heuristic' 6749 Enable the last-instruction heuristic in the scheduler. This 6750 heuristic favors the instruction that is less dependent on the 6751 last instruction scheduled. This is enabled by default when 6752 scheduling is enabled, i.e. with `-fschedule-insns' or 6753 `-fschedule-insns2' or at `-O2' or higher. 6754 6755 `-fsched-dep-count-heuristic' 6756 Enable the dependent-count heuristic in the scheduler. This 6757 heuristic favors the instruction that has more instructions 6758 depending on it. This is enabled by default when scheduling is 6759 enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' or 6760 at `-O2' or higher. 6761 6762 `-freschedule-modulo-scheduled-loops' 6763 Modulo scheduling is performed before traditional scheduling. If 6764 a loop is modulo scheduled, later scheduling passes may change its 6765 schedule. Use this option to control that behavior. 6766 6767 `-fselective-scheduling' 6768 Schedule instructions using selective scheduling algorithm. 6769 Selective scheduling runs instead of the first scheduler pass. 6770 6771 `-fselective-scheduling2' 6772 Schedule instructions using selective scheduling algorithm. 6773 Selective scheduling runs instead of the second scheduler pass. 6774 6775 `-fsel-sched-pipelining' 6776 Enable software pipelining of innermost loops during selective 6777 scheduling. This option has no effect unless one of 6778 `-fselective-scheduling' or `-fselective-scheduling2' is turned on. 6779 6780 `-fsel-sched-pipelining-outer-loops' 6781 When pipelining loops during selective scheduling, also pipeline 6782 outer loops. This option has no effect unless 6783 `-fsel-sched-pipelining' is turned on. 6784 6785 `-fshrink-wrap' 6786 Emit function prologues only before parts of the function that 6787 need it, rather than at the top of the function. This flag is 6788 enabled by default at `-O' and higher. 6789 6790 `-fcaller-saves' 6791 Enable allocation of values to registers that are clobbered by 6792 function calls, by emitting extra instructions to save and restore 6793 the registers around such calls. Such allocation is done only 6794 when it seems to result in better code. 6795 6796 This option is always enabled by default on certain machines, 6797 usually those which have no call-preserved registers to use 6798 instead. 6799 6800 Enabled at levels `-O2', `-O3', `-Os'. 6801 6802 `-fcombine-stack-adjustments' 6803 Tracks stack adjustments (pushes and pops) and stack memory 6804 references and then tries to find ways to combine them. 6805 6806 Enabled by default at `-O1' and higher. 6807 6808 `-fconserve-stack' 6809 Attempt to minimize stack usage. The compiler attempts to use less 6810 stack space, even if that makes the program slower. This option 6811 implies setting the `large-stack-frame' parameter to 100 and the 6812 `large-stack-frame-growth' parameter to 400. 6813 6814 `-ftree-reassoc' 6815 Perform reassociation on trees. This flag is enabled by default 6816 at `-O' and higher. 6817 6818 `-ftree-pre' 6819 Perform partial redundancy elimination (PRE) on trees. This flag 6820 is enabled by default at `-O2' and `-O3'. 6821 6822 `-ftree-partial-pre' 6823 Make partial redundancy elimination (PRE) more aggressive. This 6824 flag is enabled by default at `-O3'. 6825 6826 `-ftree-forwprop' 6827 Perform forward propagation on trees. This flag is enabled by 6828 default at `-O' and higher. 6829 6830 `-ftree-fre' 6831 Perform full redundancy elimination (FRE) on trees. The difference 6832 between FRE and PRE is that FRE only considers expressions that 6833 are computed on all paths leading to the redundant computation. 6834 This analysis is faster than PRE, though it exposes fewer 6835 redundancies. This flag is enabled by default at `-O' and higher. 6836 6837 `-ftree-phiprop' 6838 Perform hoisting of loads from conditional pointers on trees. This 6839 pass is enabled by default at `-O' and higher. 6840 6841 `-fhoist-adjacent-loads' 6842 Speculatively hoist loads from both branches of an if-then-else if 6843 the loads are from adjacent locations in the same structure and 6844 the target architecture has a conditional move instruction. This 6845 flag is enabled by default at `-O2' and higher. 6846 6847 `-ftree-copy-prop' 6848 Perform copy propagation on trees. This pass eliminates 6849 unnecessary copy operations. This flag is enabled by default at 6850 `-O' and higher. 6851 6852 `-fipa-pure-const' 6853 Discover which functions are pure or constant. Enabled by default 6854 at `-O' and higher. 6855 6856 `-fipa-reference' 6857 Discover which static variables do not escape the compilation unit. 6858 Enabled by default at `-O' and higher. 6859 6860 `-fipa-pta' 6861 Perform interprocedural pointer analysis and interprocedural 6862 modification and reference analysis. This option can cause 6863 excessive memory and compile-time usage on large compilation 6864 units. It is not enabled by default at any optimization level. 6865 6866 `-fipa-profile' 6867 Perform interprocedural profile propagation. The functions called 6868 only from cold functions are marked as cold. Also functions 6869 executed once (such as `cold', `noreturn', static constructors or 6870 destructors) are identified. Cold functions and loop less parts of 6871 functions executed once are then optimized for size. Enabled by 6872 default at `-O' and higher. 6873 6874 `-fipa-cp' 6875 Perform interprocedural constant propagation. This optimization 6876 analyzes the program to determine when values passed to functions 6877 are constants and then optimizes accordingly. This optimization 6878 can substantially increase performance if the application has 6879 constants passed to functions. This flag is enabled by default at 6880 `-O2', `-Os' and `-O3'. 6881 6882 `-fipa-cp-clone' 6883 Perform function cloning to make interprocedural constant 6884 propagation stronger. When enabled, interprocedural constant 6885 propagation performs function cloning when externally visible 6886 function can be called with constant arguments. Because this 6887 optimization can create multiple copies of functions, it may 6888 significantly increase code size (see `--param 6889 ipcp-unit-growth=VALUE'). This flag is enabled by default at 6890 `-O3'. 6891 6892 `-ftree-sink' 6893 Perform forward store motion on trees. This flag is enabled by 6894 default at `-O' and higher. 6895 6896 `-ftree-bit-ccp' 6897 Perform sparse conditional bit constant propagation on trees and 6898 propagate pointer alignment information. This pass only operates 6899 on local scalar variables and is enabled by default at `-O' and 6900 higher. It requires that `-ftree-ccp' is enabled. 6901 6902 `-ftree-ccp' 6903 Perform sparse conditional constant propagation (CCP) on trees. 6904 This pass only operates on local scalar variables and is enabled 6905 by default at `-O' and higher. 6906 6907 `-ftree-switch-conversion' 6908 Perform conversion of simple initializations in a switch to 6909 initializations from a scalar array. This flag is enabled by 6910 default at `-O2' and higher. 6911 6912 `-ftree-tail-merge' 6913 Look for identical code sequences. When found, replace one with a 6914 jump to the other. This optimization is known as tail merging or 6915 cross jumping. This flag is enabled by default at `-O2' and 6916 higher. The compilation time in this pass can be limited using 6917 `max-tail-merge-comparisons' parameter and 6918 `max-tail-merge-iterations' parameter. 6919 6920 `-ftree-dce' 6921 Perform dead code elimination (DCE) on trees. This flag is 6922 enabled by default at `-O' and higher. 6923 6924 `-ftree-builtin-call-dce' 6925 Perform conditional dead code elimination (DCE) for calls to 6926 built-in functions that may set `errno' but are otherwise 6927 side-effect free. This flag is enabled by default at `-O2' and 6928 higher if `-Os' is not also specified. 6929 6930 `-ftree-dominator-opts' 6931 Perform a variety of simple scalar cleanups (constant/copy 6932 propagation, redundancy elimination, range propagation and 6933 expression simplification) based on a dominator tree traversal. 6934 This also performs jump threading (to reduce jumps to jumps). This 6935 flag is enabled by default at `-O' and higher. 6936 6937 `-ftree-dse' 6938 Perform dead store elimination (DSE) on trees. A dead store is a 6939 store into a memory location that is later overwritten by another 6940 store without any intervening loads. In this case the earlier 6941 store can be deleted. This flag is enabled by default at `-O' and 6942 higher. 6943 6944 `-ftree-ch' 6945 Perform loop header copying on trees. This is beneficial since it 6946 increases effectiveness of code motion optimizations. It also 6947 saves one jump. This flag is enabled by default at `-O' and 6948 higher. It is not enabled for `-Os', since it usually increases 6949 code size. 6950 6951 `-ftree-loop-optimize' 6952 Perform loop optimizations on trees. This flag is enabled by 6953 default at `-O' and higher. 6954 6955 `-ftree-loop-linear' 6956 Perform loop interchange transformations on tree. Same as 6957 `-floop-interchange'. To use this code transformation, GCC has to 6958 be configured with `--with-ppl' and `--with-cloog' to enable the 6959 Graphite loop transformation infrastructure. 6960 6961 `-floop-interchange' 6962 Perform loop interchange transformations on loops. Interchanging 6963 two nested loops switches the inner and outer loops. For example, 6964 given a loop like: 6965 DO J = 1, M 6966 DO I = 1, N 6967 A(J, I) = A(J, I) * C 6968 ENDDO 6969 ENDDO 6970 loop interchange transforms the loop as if it were written: 6971 DO I = 1, N 6972 DO J = 1, M 6973 A(J, I) = A(J, I) * C 6974 ENDDO 6975 ENDDO 6976 which can be beneficial when `N' is larger than the caches, 6977 because in Fortran, the elements of an array are stored in memory 6978 contiguously by column, and the original loop iterates over rows, 6979 potentially creating at each access a cache miss. This 6980 optimization applies to all the languages supported by GCC and is 6981 not limited to Fortran. To use this code transformation, GCC has 6982 to be configured with `--with-ppl' and `--with-cloog' to enable the 6983 Graphite loop transformation infrastructure. 6984 6985 `-floop-strip-mine' 6986 Perform loop strip mining transformations on loops. Strip mining 6987 splits a loop into two nested loops. The outer loop has strides 6988 equal to the strip size and the inner loop has strides of the 6989 original loop within a strip. The strip length can be changed 6990 using the `loop-block-tile-size' parameter. For example, given a 6991 loop like: 6992 DO I = 1, N 6993 A(I) = A(I) + C 6994 ENDDO 6995 loop strip mining transforms the loop as if it were written: 6996 DO II = 1, N, 51 6997 DO I = II, min (II + 50, N) 6998 A(I) = A(I) + C 6999 ENDDO 7000 ENDDO 7001 This optimization applies to all the languages supported by GCC 7002 and is not limited to Fortran. To use this code transformation, 7003 GCC has to be configured with `--with-ppl' and `--with-cloog' to 7004 enable the Graphite loop transformation infrastructure. 7005 7006 `-floop-block' 7007 Perform loop blocking transformations on loops. Blocking strip 7008 mines each loop in the loop nest such that the memory accesses of 7009 the element loops fit inside caches. The strip length can be 7010 changed using the `loop-block-tile-size' parameter. For example, 7011 given a loop like: 7012 DO I = 1, N 7013 DO J = 1, M 7014 A(J, I) = B(I) + C(J) 7015 ENDDO 7016 ENDDO 7017 loop blocking transforms the loop as if it were written: 7018 DO II = 1, N, 51 7019 DO JJ = 1, M, 51 7020 DO I = II, min (II + 50, N) 7021 DO J = JJ, min (JJ + 50, M) 7022 A(J, I) = B(I) + C(J) 7023 ENDDO 7024 ENDDO 7025 ENDDO 7026 ENDDO 7027 which can be beneficial when `M' is larger than the caches, 7028 because the innermost loop iterates over a smaller amount of data 7029 which can be kept in the caches. This optimization applies to all 7030 the languages supported by GCC and is not limited to Fortran. To 7031 use this code transformation, GCC has to be configured with 7032 `--with-ppl' and `--with-cloog' to enable the Graphite loop 7033 transformation infrastructure. 7034 7035 `-fgraphite-identity' 7036 Enable the identity transformation for graphite. For every SCoP 7037 we generate the polyhedral representation and transform it back to 7038 gimple. Using `-fgraphite-identity' we can check the costs or 7039 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some 7040 minimal optimizations are also performed by the code generator 7041 CLooG, like index splitting and dead code elimination in loops. 7042 7043 `-floop-nest-optimize' 7044 Enable the ISL based loop nest optimizer. This is a generic loop 7045 nest optimizer based on the Pluto optimization algorithms. It 7046 calculates a loop structure optimized for data-locality and 7047 parallelism. This option is experimental. 7048 7049 `-floop-parallelize-all' 7050 Use the Graphite data dependence analysis to identify loops that 7051 can be parallelized. Parallelize all the loops that can be 7052 analyzed to not contain loop carried dependences without checking 7053 that it is profitable to parallelize the loops. 7054 7055 `-fcheck-data-deps' 7056 Compare the results of several data dependence analyzers. This 7057 option is used for debugging the data dependence analyzers. 7058 7059 `-ftree-loop-if-convert' 7060 Attempt to transform conditional jumps in the innermost loops to 7061 branch-less equivalents. The intent is to remove control-flow from 7062 the innermost loops in order to improve the ability of the 7063 vectorization pass to handle these loops. This is enabled by 7064 default if vectorization is enabled. 7065 7066 `-ftree-loop-if-convert-stores' 7067 Attempt to also if-convert conditional jumps containing memory 7068 writes. This transformation can be unsafe for multi-threaded 7069 programs as it transforms conditional memory writes into 7070 unconditional memory writes. For example, 7071 for (i = 0; i < N; i++) 7072 if (cond) 7073 A[i] = expr; 7074 is transformed to 7075 for (i = 0; i < N; i++) 7076 A[i] = cond ? expr : A[i]; 7077 potentially producing data races. 7078 7079 `-ftree-loop-distribution' 7080 Perform loop distribution. This flag can improve cache 7081 performance on big loop bodies and allow further loop 7082 optimizations, like parallelization or vectorization, to take 7083 place. For example, the loop 7084 DO I = 1, N 7085 A(I) = B(I) + C 7086 D(I) = E(I) * F 7087 ENDDO 7088 is transformed to 7089 DO I = 1, N 7090 A(I) = B(I) + C 7091 ENDDO 7092 DO I = 1, N 7093 D(I) = E(I) * F 7094 ENDDO 7095 7096 `-ftree-loop-distribute-patterns' 7097 Perform loop distribution of patterns that can be code generated 7098 with calls to a library. This flag is enabled by default at `-O3'. 7099 7100 This pass distributes the initialization loops and generates a 7101 call to memset zero. For example, the loop 7102 DO I = 1, N 7103 A(I) = 0 7104 B(I) = A(I) + I 7105 ENDDO 7106 is transformed to 7107 DO I = 1, N 7108 A(I) = 0 7109 ENDDO 7110 DO I = 1, N 7111 B(I) = A(I) + I 7112 ENDDO 7113 and the initialization loop is transformed into a call to memset 7114 zero. 7115 7116 `-ftree-loop-im' 7117 Perform loop invariant motion on trees. This pass moves only 7118 invariants that are hard to handle at RTL level (function calls, 7119 operations that expand to nontrivial sequences of insns). With 7120 `-funswitch-loops' it also moves operands of conditions that are 7121 invariant out of the loop, so that we can use just trivial 7122 invariantness analysis in loop unswitching. The pass also includes 7123 store motion. 7124 7125 `-ftree-loop-ivcanon' 7126 Create a canonical counter for number of iterations in loops for 7127 which determining number of iterations requires complicated 7128 analysis. Later optimizations then may determine the number 7129 easily. Useful especially in connection with unrolling. 7130 7131 `-fivopts' 7132 Perform induction variable optimizations (strength reduction, 7133 induction variable merging and induction variable elimination) on 7134 trees. 7135 7136 `-ftree-parallelize-loops=n' 7137 Parallelize loops, i.e., split their iteration space to run in n 7138 threads. This is only possible for loops whose iterations are 7139 independent and can be arbitrarily reordered. The optimization is 7140 only profitable on multiprocessor machines, for loops that are 7141 CPU-intensive, rather than constrained e.g. by memory bandwidth. 7142 This option implies `-pthread', and thus is only supported on 7143 targets that have support for `-pthread'. 7144 7145 `-ftree-pta' 7146 Perform function-local points-to analysis on trees. This flag is 7147 enabled by default at `-O' and higher. 7148 7149 `-ftree-sra' 7150 Perform scalar replacement of aggregates. This pass replaces 7151 structure references with scalars to prevent committing structures 7152 to memory too early. This flag is enabled by default at `-O' and 7153 higher. 7154 7155 `-ftree-copyrename' 7156 Perform copy renaming on trees. This pass attempts to rename 7157 compiler temporaries to other variables at copy locations, usually 7158 resulting in variable names which more closely resemble the 7159 original variables. This flag is enabled by default at `-O' and 7160 higher. 7161 7162 `-ftree-coalesce-inlined-vars' 7163 Tell the copyrename pass (see `-ftree-copyrename') to attempt to 7164 combine small user-defined variables too, but only if they were 7165 inlined from other functions. It is a more limited form of 7166 `-ftree-coalesce-vars'. This may harm debug information of such 7167 inlined variables, but it will keep variables of the inlined-into 7168 function apart from each other, such that they are more likely to 7169 contain the expected values in a debugging session. This was the 7170 default in GCC versions older than 4.7. 7171 7172 `-ftree-coalesce-vars' 7173 Tell the copyrename pass (see `-ftree-copyrename') to attempt to 7174 combine small user-defined variables too, instead of just compiler 7175 temporaries. This may severely limit the ability to debug an 7176 optimized program compiled with `-fno-var-tracking-assignments'. 7177 In the negated form, this flag prevents SSA coalescing of user 7178 variables, including inlined ones. This option is enabled by 7179 default. 7180 7181 `-ftree-ter' 7182 Perform temporary expression replacement during the SSA->normal 7183 phase. Single use/single def temporaries are replaced at their 7184 use location with their defining expression. This results in 7185 non-GIMPLE code, but gives the expanders much more complex trees 7186 to work on resulting in better RTL generation. This is enabled by 7187 default at `-O' and higher. 7188 7189 `-ftree-slsr' 7190 Perform straight-line strength reduction on trees. This 7191 recognizes related expressions involving multiplications and 7192 replaces them by less expensive calculations when possible. This 7193 is enabled by default at `-O' and higher. 7194 7195 `-ftree-vectorize' 7196 Perform loop vectorization on trees. This flag is enabled by 7197 default at `-O3'. 7198 7199 `-ftree-slp-vectorize' 7200 Perform basic block vectorization on trees. This flag is enabled 7201 by default at `-O3' and when `-ftree-vectorize' is enabled. 7202 7203 `-ftree-vect-loop-version' 7204 Perform loop versioning when doing loop vectorization on trees. 7205 When a loop appears to be vectorizable except that data alignment 7206 or data dependence cannot be determined at compile time, then 7207 vectorized and non-vectorized versions of the loop are generated 7208 along with run-time checks for alignment or dependence to control 7209 which version is executed. This option is enabled by default 7210 except at level `-Os' where it is disabled. 7211 7212 `-fvect-cost-model' 7213 Enable cost model for vectorization. This option is enabled by 7214 default at `-O3'. 7215 7216 `-ftree-vrp' 7217 Perform Value Range Propagation on trees. This is similar to the 7218 constant propagation pass, but instead of values, ranges of values 7219 are propagated. This allows the optimizers to remove unnecessary 7220 range checks like array bound checks and null pointer checks. 7221 This is enabled by default at `-O2' and higher. Null pointer check 7222 elimination is only done if `-fdelete-null-pointer-checks' is 7223 enabled. 7224 7225 `-ftracer' 7226 Perform tail duplication to enlarge superblock size. This 7227 transformation simplifies the control flow of the function 7228 allowing other optimizations to do a better job. 7229 7230 `-funroll-loops' 7231 Unroll loops whose number of iterations can be determined at 7232 compile time or upon entry to the loop. `-funroll-loops' implies 7233 `-frerun-cse-after-loop'. This option makes code larger, and may 7234 or may not make it run faster. 7235 7236 `-funroll-all-loops' 7237 Unroll all loops, even if their number of iterations is uncertain 7238 when the loop is entered. This usually makes programs run more 7239 slowly. `-funroll-all-loops' implies the same options as 7240 `-funroll-loops', 7241 7242 `-fsplit-ivs-in-unroller' 7243 Enables expression of values of induction variables in later 7244 iterations of the unrolled loop using the value in the first 7245 iteration. This breaks long dependency chains, thus improving 7246 efficiency of the scheduling passes. 7247 7248 A combination of `-fweb' and CSE is often sufficient to obtain the 7249 same effect. However, that is not reliable in cases where the 7250 loop body is more complicated than a single basic block. It also 7251 does not work at all on some architectures due to restrictions in 7252 the CSE pass. 7253 7254 This optimization is enabled by default. 7255 7256 `-fvariable-expansion-in-unroller' 7257 With this option, the compiler creates multiple copies of some 7258 local variables when unrolling a loop, which can result in 7259 superior code. 7260 7261 `-fpartial-inlining' 7262 Inline parts of functions. This option has any effect only when 7263 inlining itself is turned on by the `-finline-functions' or 7264 `-finline-small-functions' options. 7265 7266 Enabled at level `-O2'. 7267 7268 `-fpredictive-commoning' 7269 Perform predictive commoning optimization, i.e., reusing 7270 computations (especially memory loads and stores) performed in 7271 previous iterations of loops. 7272 7273 This option is enabled at level `-O3'. 7274 7275 `-fprefetch-loop-arrays' 7276 If supported by the target machine, generate instructions to 7277 prefetch memory to improve the performance of loops that access 7278 large arrays. 7279 7280 This option may generate better or worse code; results are highly 7281 dependent on the structure of loops within the source code. 7282 7283 Disabled at level `-Os'. 7284 7285 `-fno-peephole' 7286 `-fno-peephole2' 7287 Disable any machine-specific peephole optimizations. The 7288 difference between `-fno-peephole' and `-fno-peephole2' is in how 7289 they are implemented in the compiler; some targets use one, some 7290 use the other, a few use both. 7291 7292 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 7293 levels `-O2', `-O3', `-Os'. 7294 7295 `-fno-guess-branch-probability' 7296 Do not guess branch probabilities using heuristics. 7297 7298 GCC uses heuristics to guess branch probabilities if they are not 7299 provided by profiling feedback (`-fprofile-arcs'). These 7300 heuristics are based on the control flow graph. If some branch 7301 probabilities are specified by `__builtin_expect', then the 7302 heuristics are used to guess branch probabilities for the rest of 7303 the control flow graph, taking the `__builtin_expect' info into 7304 account. The interactions between the heuristics and 7305 `__builtin_expect' can be complex, and in some cases, it may be 7306 useful to disable the heuristics so that the effects of 7307 `__builtin_expect' are easier to understand. 7308 7309 The default is `-fguess-branch-probability' at levels `-O', `-O2', 7310 `-O3', `-Os'. 7311 7312 `-freorder-blocks' 7313 Reorder basic blocks in the compiled function in order to reduce 7314 number of taken branches and improve code locality. 7315 7316 Enabled at levels `-O2', `-O3'. 7317 7318 `-freorder-blocks-and-partition' 7319 In addition to reordering basic blocks in the compiled function, 7320 in order to reduce number of taken branches, partitions hot and 7321 cold basic blocks into separate sections of the assembly and .o 7322 files, to improve paging and cache locality performance. 7323 7324 This optimization is automatically turned off in the presence of 7325 exception handling, for linkonce sections, for functions with a 7326 user-defined section attribute and on any architecture that does 7327 not support named sections. 7328 7329 `-freorder-functions' 7330 Reorder functions in the object file in order to improve code 7331 locality. This is implemented by using special subsections 7332 `.text.hot' for most frequently executed functions and 7333 `.text.unlikely' for unlikely executed functions. Reordering is 7334 done by the linker so object file format must support named 7335 sections and linker must place them in a reasonable way. 7336 7337 Also profile feedback must be available to make this option 7338 effective. See `-fprofile-arcs' for details. 7339 7340 Enabled at levels `-O2', `-O3', `-Os'. 7341 7342 `-fstrict-aliasing' 7343 Allow the compiler to assume the strictest aliasing rules 7344 applicable to the language being compiled. For C (and C++), this 7345 activates optimizations based on the type of expressions. In 7346 particular, an object of one type is assumed never to reside at 7347 the same address as an object of a different type, unless the 7348 types are almost the same. For example, an `unsigned int' can 7349 alias an `int', but not a `void*' or a `double'. A character type 7350 may alias any other type. 7351 7352 Pay special attention to code like this: 7353 union a_union { 7354 int i; 7355 double d; 7356 }; 7357 7358 int f() { 7359 union a_union t; 7360 t.d = 3.0; 7361 return t.i; 7362 } 7363 The practice of reading from a different union member than the one 7364 most recently written to (called "type-punning") is common. Even 7365 with `-fstrict-aliasing', type-punning is allowed, provided the 7366 memory is accessed through the union type. So, the code above 7367 works as expected. *Note Structures unions enumerations and 7368 bit-fields implementation::. However, this code might not: 7369 int f() { 7370 union a_union t; 7371 int* ip; 7372 t.d = 3.0; 7373 ip = &t.i; 7374 return *ip; 7375 } 7376 7377 Similarly, access by taking the address, casting the resulting 7378 pointer and dereferencing the result has undefined behavior, even 7379 if the cast uses a union type, e.g.: 7380 int f() { 7381 double d = 3.0; 7382 return ((union a_union *) &d)->i; 7383 } 7384 7385 The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3', 7386 `-Os'. 7387 7388 `-fstrict-overflow' 7389 Allow the compiler to assume strict signed overflow rules, 7390 depending on the language being compiled. For C (and C++) this 7391 means that overflow when doing arithmetic with signed numbers is 7392 undefined, which means that the compiler may assume that it does 7393 not happen. This permits various optimizations. For example, the 7394 compiler assumes that an expression like `i + 10 > i' is always 7395 true for signed `i'. This assumption is only valid if signed 7396 overflow is undefined, as the expression is false if `i + 10' 7397 overflows when using twos complement arithmetic. When this option 7398 is in effect any attempt to determine whether an operation on 7399 signed numbers overflows must be written carefully to not actually 7400 involve overflow. 7401 7402 This option also allows the compiler to assume strict pointer 7403 semantics: given a pointer to an object, if adding an offset to 7404 that pointer does not produce a pointer to the same object, the 7405 addition is undefined. This permits the compiler to conclude that 7406 `p + u > p' is always true for a pointer `p' and unsigned integer 7407 `u'. This assumption is only valid because pointer wraparound is 7408 undefined, as the expression is false if `p + u' overflows using 7409 twos complement arithmetic. 7410 7411 See also the `-fwrapv' option. Using `-fwrapv' means that integer 7412 signed overflow is fully defined: it wraps. When `-fwrapv' is 7413 used, there is no difference between `-fstrict-overflow' and 7414 `-fno-strict-overflow' for integers. With `-fwrapv' certain types 7415 of overflow are permitted. For example, if the compiler gets an 7416 overflow when doing arithmetic on constants, the overflowed value 7417 can still be used with `-fwrapv', but not otherwise. 7418 7419 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 7420 `-Os'. 7421 7422 `-falign-functions' 7423 `-falign-functions=N' 7424 Align the start of functions to the next power-of-two greater than 7425 N, skipping up to N bytes. For instance, `-falign-functions=32' 7426 aligns functions to the next 32-byte boundary, but 7427 `-falign-functions=24' aligns to the next 32-byte boundary only if 7428 this can be done by skipping 23 bytes or less. 7429 7430 `-fno-align-functions' and `-falign-functions=1' are equivalent 7431 and mean that functions are not aligned. 7432 7433 Some assemblers only support this flag when N is a power of two; 7434 in that case, it is rounded up. 7435 7436 If N is not specified or is zero, use a machine-dependent default. 7437 7438 Enabled at levels `-O2', `-O3'. 7439 7440 `-falign-labels' 7441 `-falign-labels=N' 7442 Align all branch targets to a power-of-two boundary, skipping up to 7443 N bytes like `-falign-functions'. This option can easily make 7444 code slower, because it must insert dummy operations for when the 7445 branch target is reached in the usual flow of the code. 7446 7447 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 7448 that labels are not aligned. 7449 7450 If `-falign-loops' or `-falign-jumps' are applicable and are 7451 greater than this value, then their values are used instead. 7452 7453 If N is not specified or is zero, use a machine-dependent default 7454 which is very likely to be `1', meaning no alignment. 7455 7456 Enabled at levels `-O2', `-O3'. 7457 7458 `-falign-loops' 7459 `-falign-loops=N' 7460 Align loops to a power-of-two boundary, skipping up to N bytes 7461 like `-falign-functions'. If the loops are executed many times, 7462 this makes up for any execution of the dummy operations. 7463 7464 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 7465 that loops are not aligned. 7466 7467 If N is not specified or is zero, use a machine-dependent default. 7468 7469 Enabled at levels `-O2', `-O3'. 7470 7471 `-falign-jumps' 7472 `-falign-jumps=N' 7473 Align branch targets to a power-of-two boundary, for branch targets 7474 where the targets can only be reached by jumping, skipping up to N 7475 bytes like `-falign-functions'. In this case, no dummy operations 7476 need be executed. 7477 7478 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 7479 that loops are not aligned. 7480 7481 If N is not specified or is zero, use a machine-dependent default. 7482 7483 Enabled at levels `-O2', `-O3'. 7484 7485 `-funit-at-a-time' 7486 This option is left for compatibility reasons. `-funit-at-a-time' 7487 has no effect, while `-fno-unit-at-a-time' implies 7488 `-fno-toplevel-reorder' and `-fno-section-anchors'. 7489 7490 Enabled by default. 7491 7492 `-fno-toplevel-reorder' 7493 Do not reorder top-level functions, variables, and `asm' 7494 statements. Output them in the same order that they appear in the 7495 input file. When this option is used, unreferenced static 7496 variables are not removed. This option is intended to support 7497 existing code that relies on a particular ordering. For new code, 7498 it is better to use attributes. 7499 7500 Enabled at level `-O0'. When disabled explicitly, it also implies 7501 `-fno-section-anchors', which is otherwise enabled at `-O0' on some 7502 targets. 7503 7504 `-fweb' 7505 Constructs webs as commonly used for register allocation purposes 7506 and assign each web individual pseudo register. This allows the 7507 register allocation pass to operate on pseudos directly, but also 7508 strengthens several other optimization passes, such as CSE, loop 7509 optimizer and trivial dead code remover. It can, however, make 7510 debugging impossible, since variables no longer stay in a "home 7511 register". 7512 7513 Enabled by default with `-funroll-loops'. 7514 7515 `-fwhole-program' 7516 Assume that the current compilation unit represents the whole 7517 program being compiled. All public functions and variables with 7518 the exception of `main' and those merged by attribute 7519 `externally_visible' become static functions and in effect are 7520 optimized more aggressively by interprocedural optimizers. 7521 7522 This option should not be used in combination with `-flto'. 7523 Instead relying on a linker plugin should provide safer and more 7524 precise information. 7525 7526 `-flto[=N]' 7527 This option runs the standard link-time optimizer. When invoked 7528 with source code, it generates GIMPLE (one of GCC's internal 7529 representations) and writes it to special ELF sections in the 7530 object file. When the object files are linked together, all the 7531 function bodies are read from these ELF sections and instantiated 7532 as if they had been part of the same translation unit. 7533 7534 To use the link-time optimizer, `-flto' needs to be specified at 7535 compile time and during the final link. For example: 7536 7537 gcc -c -O2 -flto foo.c 7538 gcc -c -O2 -flto bar.c 7539 gcc -o myprog -flto -O2 foo.o bar.o 7540 7541 The first two invocations to GCC save a bytecode representation of 7542 GIMPLE into special ELF sections inside `foo.o' and `bar.o'. The 7543 final invocation reads the GIMPLE bytecode from `foo.o' and 7544 `bar.o', merges the two files into a single internal image, and 7545 compiles the result as usual. Since both `foo.o' and `bar.o' are 7546 merged into a single image, this causes all the interprocedural 7547 analyses and optimizations in GCC to work across the two files as 7548 if they were a single one. This means, for example, that the 7549 inliner is able to inline functions in `bar.o' into functions in 7550 `foo.o' and vice-versa. 7551 7552 Another (simpler) way to enable link-time optimization is: 7553 7554 gcc -o myprog -flto -O2 foo.c bar.c 7555 7556 The above generates bytecode for `foo.c' and `bar.c', merges them 7557 together into a single GIMPLE representation and optimizes them as 7558 usual to produce `myprog'. 7559 7560 The only important thing to keep in mind is that to enable 7561 link-time optimizations the `-flto' flag needs to be passed to 7562 both the compile and the link commands. 7563 7564 To make whole program optimization effective, it is necessary to 7565 make certain whole program assumptions. The compiler needs to know 7566 what functions and variables can be accessed by libraries and 7567 runtime outside of the link-time optimized unit. When supported 7568 by the linker, the linker plugin (see `-fuse-linker-plugin') 7569 passes information to the compiler about used and externally 7570 visible symbols. When the linker plugin is not available, 7571 `-fwhole-program' should be used to allow the compiler to make 7572 these assumptions, which leads to more aggressive optimization 7573 decisions. 7574 7575 Note that when a file is compiled with `-flto', the generated 7576 object file is larger than a regular object file because it 7577 contains GIMPLE bytecodes and the usual final code. This means 7578 that object files with LTO information can be linked as normal 7579 object files; if `-flto' is not passed to the linker, no 7580 interprocedural optimizations are applied. 7581 7582 Additionally, the optimization flags used to compile individual 7583 files are not necessarily related to those used at link time. For 7584 instance, 7585 7586 gcc -c -O0 -flto foo.c 7587 gcc -c -O0 -flto bar.c 7588 gcc -o myprog -flto -O3 foo.o bar.o 7589 7590 This produces individual object files with unoptimized assembler 7591 code, but the resulting binary `myprog' is optimized at `-O3'. 7592 If, instead, the final binary is generated without `-flto', then 7593 `myprog' is not optimized. 7594 7595 When producing the final binary with `-flto', GCC only applies 7596 link-time optimizations to those files that contain bytecode. 7597 Therefore, you can mix and match object files and libraries with 7598 GIMPLE bytecodes and final object code. GCC automatically selects 7599 which files to optimize in LTO mode and which files to link without 7600 further processing. 7601 7602 There are some code generation flags preserved by GCC when 7603 generating bytecodes, as they need to be used during the final link 7604 stage. Currently, the following options are saved into the GIMPLE 7605 bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags. 7606 7607 At link time, these options are read in and reapplied. Note that 7608 the current implementation makes no attempt to recognize 7609 conflicting values for these options. If different files have 7610 conflicting option values (e.g., one file is compiled with `-fPIC' 7611 and another isn't), the compiler simply uses the last value read 7612 from the bytecode files. It is recommended, then, that you 7613 compile all the files participating in the same link with the same 7614 options. 7615 7616 If LTO encounters objects with C linkage declared with incompatible 7617 types in separate translation units to be linked together 7618 (undefined behavior according to ISO C99 6.2.7), a non-fatal 7619 diagnostic may be issued. The behavior is still undefined at run 7620 time. 7621 7622 Another feature of LTO is that it is possible to apply 7623 interprocedural optimizations on files written in different 7624 languages. This requires support in the language front end. 7625 Currently, the C, C++ and Fortran front ends are capable of 7626 emitting GIMPLE bytecodes, so something like this should work: 7627 7628 gcc -c -flto foo.c 7629 g++ -c -flto bar.cc 7630 gfortran -c -flto baz.f90 7631 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran 7632 7633 Notice that the final link is done with `g++' to get the C++ 7634 runtime libraries and `-lgfortran' is added to get the Fortran 7635 runtime libraries. In general, when mixing languages in LTO mode, 7636 you should use the same link command options as when mixing 7637 languages in a regular (non-LTO) compilation; all you need to add 7638 is `-flto' to all the compile and link commands. 7639 7640 If object files containing GIMPLE bytecode are stored in a library 7641 archive, say `libfoo.a', it is possible to extract and use them in 7642 an LTO link if you are using a linker with plugin support. To 7643 enable this feature, use the flag `-fuse-linker-plugin' at link 7644 time: 7645 7646 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo 7647 7648 With the linker plugin enabled, the linker extracts the needed 7649 GIMPLE files from `libfoo.a' and passes them on to the running GCC 7650 to make them part of the aggregated GIMPLE image to be optimized. 7651 7652 If you are not using a linker with plugin support and/or do not 7653 enable the linker plugin, then the objects inside `libfoo.a' are 7654 extracted and linked as usual, but they do not participate in the 7655 LTO optimization process. 7656 7657 Link-time optimizations do not require the presence of the whole 7658 program to operate. If the program does not require any symbols 7659 to be exported, it is possible to combine `-flto' and 7660 `-fwhole-program' to allow the interprocedural optimizers to use 7661 more aggressive assumptions which may lead to improved 7662 optimization opportunities. Use of `-fwhole-program' is not 7663 needed when linker plugin is active (see `-fuse-linker-plugin'). 7664 7665 The current implementation of LTO makes no attempt to generate 7666 bytecode that is portable between different types of hosts. The 7667 bytecode files are versioned and there is a strict version check, 7668 so bytecode files generated in one version of GCC will not work 7669 with an older/newer version of GCC. 7670 7671 Link-time optimization does not work well with generation of 7672 debugging information. Combining `-flto' with `-g' is currently 7673 experimental and expected to produce wrong results. 7674 7675 If you specify the optional N, the optimization and code 7676 generation done at link time is executed in parallel using N 7677 parallel jobs by utilizing an installed `make' program. The 7678 environment variable `MAKE' may be used to override the program 7679 used. The default value for N is 1. 7680 7681 You can also specify `-flto=jobserver' to use GNU make's job 7682 server mode to determine the number of parallel jobs. This is 7683 useful when the Makefile calling GCC is already executing in 7684 parallel. You must prepend a `+' to the command recipe in the 7685 parent Makefile for this to work. This option likely only works 7686 if `MAKE' is GNU make. 7687 7688 This option is disabled by default. 7689 7690 `-flto-partition=ALG' 7691 Specify the partitioning algorithm used by the link-time optimizer. 7692 The value is either `1to1' to specify a partitioning mirroring the 7693 original source files or `balanced' to specify partitioning into 7694 equally sized chunks (whenever possible) or `max' to create new 7695 partition for every symbol where possible. Specifying `none' as 7696 an algorithm disables partitioning and streaming completely. The 7697 default value is `balanced'. While `1to1' can be used as an 7698 workaround for various code ordering issues, the `max' 7699 partitioning is intended for internal testing only. 7700 7701 `-flto-compression-level=N' 7702 This option specifies the level of compression used for 7703 intermediate language written to LTO object files, and is only 7704 meaningful in conjunction with LTO mode (`-flto'). Valid values 7705 are 0 (no compression) to 9 (maximum compression). Values outside 7706 this range are clamped to either 0 or 9. If the option is not 7707 given, a default balanced compression setting is used. 7708 7709 `-flto-report' 7710 Prints a report with internal details on the workings of the 7711 link-time optimizer. The contents of this report vary from 7712 version to version. It is meant to be useful to GCC developers 7713 when processing object files in LTO mode (via `-flto'). 7714 7715 Disabled by default. 7716 7717 `-fuse-linker-plugin' 7718 Enables the use of a linker plugin during link-time optimization. 7719 This option relies on plugin support in the linker, which is 7720 available in gold or in GNU ld 2.21 or newer. 7721 7722 This option enables the extraction of object files with GIMPLE 7723 bytecode out of library archives. This improves the quality of 7724 optimization by exposing more code to the link-time optimizer. 7725 This information specifies what symbols can be accessed externally 7726 (by non-LTO object or during dynamic linking). Resulting code 7727 quality improvements on binaries (and shared libraries that use 7728 hidden visibility) are similar to `-fwhole-program'. See `-flto' 7729 for a description of the effect of this flag and how to use it. 7730 7731 This option is enabled by default when LTO support in GCC is 7732 enabled and GCC was configured for use with a linker supporting 7733 plugins (GNU ld 2.21 or newer or gold). 7734 7735 `-ffat-lto-objects' 7736 Fat LTO objects are object files that contain both the 7737 intermediate language and the object code. This makes them usable 7738 for both LTO linking and normal linking. This option is effective 7739 only when compiling with `-flto' and is ignored at link time. 7740 7741 `-fno-fat-lto-objects' improves compilation time over plain LTO, 7742 but requires the complete toolchain to be aware of LTO. It 7743 requires a linker with linker plugin support for basic 7744 functionality. Additionally, `nm', `ar' and `ranlib' need to 7745 support linker plugins to allow a full-featured build environment 7746 (capable of building static libraries etc). GCC provides the 7747 `gcc-ar', `gcc-nm', `gcc-ranlib' wrappers to pass the right options 7748 to these tools. With non fat LTO makefiles need to be modified to 7749 use them. 7750 7751 The default is `-ffat-lto-objects' but this default is intended to 7752 change in future releases when linker plugin enabled environments 7753 become more common. 7754 7755 `-fcompare-elim' 7756 After register allocation and post-register allocation instruction 7757 splitting, identify arithmetic instructions that compute processor 7758 flags similar to a comparison operation based on that arithmetic. 7759 If possible, eliminate the explicit comparison operation. 7760 7761 This pass only applies to certain targets that cannot explicitly 7762 represent the comparison operation before register allocation is 7763 complete. 7764 7765 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7766 7767 `-fuse-ld=bfd' 7768 Use the `bfd' linker instead of the default linker. 7769 7770 `-fuse-ld=gold' 7771 Use the `gold' linker instead of the default linker. 7772 7773 `-fcprop-registers' 7774 After register allocation and post-register allocation instruction 7775 splitting, perform a copy-propagation pass to try to reduce 7776 scheduling dependencies and occasionally eliminate the copy. 7777 7778 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7779 7780 `-fprofile-correction' 7781 Profiles collected using an instrumented binary for multi-threaded 7782 programs may be inconsistent due to missed counter updates. When 7783 this option is specified, GCC uses heuristics to correct or smooth 7784 out such inconsistencies. By default, GCC emits an error message 7785 when an inconsistent profile is detected. 7786 7787 `-fprofile-dir=PATH' 7788 Set the directory to search for the profile data files in to PATH. 7789 This option affects only the profile data generated by 7790 `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used 7791 by `-fprofile-use' and `-fbranch-probabilities' and its related 7792 options. Both absolute and relative paths can be used. By 7793 default, GCC uses the current directory as PATH, thus the profile 7794 data file appears in the same directory as the object file. 7795 7796 `-fprofile-generate' 7797 `-fprofile-generate=PATH' 7798 Enable options usually used for instrumenting application to 7799 produce profile useful for later recompilation with profile 7800 feedback based optimization. You must use `-fprofile-generate' 7801 both when compiling and when linking your program. 7802 7803 The following options are enabled: `-fprofile-arcs', 7804 `-fprofile-values', `-fvpt'. 7805 7806 If PATH is specified, GCC looks at the PATH to find the profile 7807 feedback data files. See `-fprofile-dir'. 7808 7809 `-fprofile-use' 7810 `-fprofile-use=PATH' 7811 Enable profile feedback directed optimizations, and optimizations 7812 generally profitable only with profile feedback available. 7813 7814 The following options are enabled: `-fbranch-probabilities', 7815 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer', 7816 `-ftree-vectorize', `ftree-loop-distribute-patterns' 7817 7818 By default, GCC emits an error message if the feedback profiles do 7819 not match the source code. This error can be turned into a 7820 warning by using `-Wcoverage-mismatch'. Note this may result in 7821 poorly optimized code. 7822 7823 If PATH is specified, GCC looks at the PATH to find the profile 7824 feedback data files. See `-fprofile-dir'. 7825 7826 The following options control compiler behavior regarding 7827 floating-point arithmetic. These options trade off between speed and 7828 correctness. All must be specifically enabled. 7829 7830 `-ffloat-store' 7831 Do not store floating-point variables in registers, and inhibit 7832 other options that might change whether a floating-point value is 7833 taken from a register or memory. 7834 7835 This option prevents undesirable excess precision on machines such 7836 as the 68000 where the floating registers (of the 68881) keep more 7837 precision than a `double' is supposed to have. Similarly for the 7838 x86 architecture. For most programs, the excess precision does 7839 only good, but a few programs rely on the precise definition of 7840 IEEE floating point. Use `-ffloat-store' for such programs, after 7841 modifying them to store all pertinent intermediate computations 7842 into variables. 7843 7844 `-fexcess-precision=STYLE' 7845 This option allows further control over excess precision on 7846 machines where floating-point registers have more precision than 7847 the IEEE `float' and `double' types and the processor does not 7848 support operations rounding to those types. By default, 7849 `-fexcess-precision=fast' is in effect; this means that operations 7850 are carried out in the precision of the registers and that it is 7851 unpredictable when rounding to the types specified in the source 7852 code takes place. When compiling C, if 7853 `-fexcess-precision=standard' is specified then excess precision 7854 follows the rules specified in ISO C99; in particular, both casts 7855 and assignments cause values to be rounded to their semantic types 7856 (whereas `-ffloat-store' only affects assignments). This option 7857 is enabled by default for C if a strict conformance option such as 7858 `-std=c99' is used. 7859 7860 `-fexcess-precision=standard' is not implemented for languages 7861 other than C, and has no effect if `-funsafe-math-optimizations' 7862 or `-ffast-math' is specified. On the x86, it also has no effect 7863 if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the 7864 former case, IEEE semantics apply without excess precision, and in 7865 the latter, rounding is unpredictable. 7866 7867 `-ffast-math' 7868 Sets `-fno-math-errno', `-funsafe-math-optimizations', 7869 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans' 7870 and `-fcx-limited-range'. 7871 7872 This option causes the preprocessor macro `__FAST_MATH__' to be 7873 defined. 7874 7875 This option is not turned on by any `-O' option besides `-Ofast' 7876 since it can result in incorrect output for programs that depend 7877 on an exact implementation of IEEE or ISO rules/specifications for 7878 math functions. It may, however, yield faster code for programs 7879 that do not require the guarantees of these specifications. 7880 7881 `-fno-math-errno' 7882 Do not set `errno' after calling math functions that are executed 7883 with a single instruction, e.g., `sqrt'. A program that relies on 7884 IEEE exceptions for math error handling may want to use this flag 7885 for speed while maintaining IEEE arithmetic compatibility. 7886 7887 This option is not turned on by any `-O' option since it can 7888 result in incorrect output for programs that depend on an exact 7889 implementation of IEEE or ISO rules/specifications for math 7890 functions. It may, however, yield faster code for programs that do 7891 not require the guarantees of these specifications. 7892 7893 The default is `-fmath-errno'. 7894 7895 On Darwin systems, the math library never sets `errno'. There is 7896 therefore no reason for the compiler to consider the possibility 7897 that it might, and `-fno-math-errno' is the default. 7898 7899 `-funsafe-math-optimizations' 7900 Allow optimizations for floating-point arithmetic that (a) assume 7901 that arguments and results are valid and (b) may violate IEEE or 7902 ANSI standards. When used at link-time, it may include libraries 7903 or startup files that change the default FPU control word or other 7904 similar optimizations. 7905 7906 This option is not turned on by any `-O' option since it can 7907 result in incorrect output for programs that depend on an exact 7908 implementation of IEEE or ISO rules/specifications for math 7909 functions. It may, however, yield faster code for programs that do 7910 not require the guarantees of these specifications. Enables 7911 `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math' 7912 and `-freciprocal-math'. 7913 7914 The default is `-fno-unsafe-math-optimizations'. 7915 7916 `-fassociative-math' 7917 Allow re-association of operands in series of floating-point 7918 operations. This violates the ISO C and C++ language standard by 7919 possibly changing computation result. NOTE: re-ordering may 7920 change the sign of zero as well as ignore NaNs and inhibit or 7921 create underflow or overflow (and thus cannot be used on code that 7922 relies on rounding behavior like `(x + 2**52) - 2**52'. May also 7923 reorder floating-point comparisons and thus may not be used when 7924 ordered comparisons are required. This option requires that both 7925 `-fno-signed-zeros' and `-fno-trapping-math' be in effect. 7926 Moreover, it doesn't make much sense with `-frounding-math'. For 7927 Fortran the option is automatically enabled when both 7928 `-fno-signed-zeros' and `-fno-trapping-math' are in effect. 7929 7930 The default is `-fno-associative-math'. 7931 7932 `-freciprocal-math' 7933 Allow the reciprocal of a value to be used instead of dividing by 7934 the value if this enables optimizations. For example `x / y' can 7935 be replaced with `x * (1/y)', which is useful if `(1/y)' is 7936 subject to common subexpression elimination. Note that this loses 7937 precision and increases the number of flops operating on the value. 7938 7939 The default is `-fno-reciprocal-math'. 7940 7941 `-ffinite-math-only' 7942 Allow optimizations for floating-point arithmetic that assume that 7943 arguments and results are not NaNs or +-Infs. 7944 7945 This option is not turned on by any `-O' option since it can 7946 result in incorrect output for programs that depend on an exact 7947 implementation of IEEE or ISO rules/specifications for math 7948 functions. It may, however, yield faster code for programs that do 7949 not require the guarantees of these specifications. 7950 7951 The default is `-fno-finite-math-only'. 7952 7953 `-fno-signed-zeros' 7954 Allow optimizations for floating-point arithmetic that ignore the 7955 signedness of zero. IEEE arithmetic specifies the behavior of 7956 distinct +0.0 and -0.0 values, which then prohibits simplification 7957 of expressions such as x+0.0 or 0.0*x (even with 7958 `-ffinite-math-only'). This option implies that the sign of a 7959 zero result isn't significant. 7960 7961 The default is `-fsigned-zeros'. 7962 7963 `-fno-trapping-math' 7964 Compile code assuming that floating-point operations cannot 7965 generate user-visible traps. These traps include division by 7966 zero, overflow, underflow, inexact result and invalid operation. 7967 This option requires that `-fno-signaling-nans' be in effect. 7968 Setting this option may allow faster code if one relies on 7969 "non-stop" IEEE arithmetic, for example. 7970 7971 This option should never be turned on by any `-O' option since it 7972 can result in incorrect output for programs that depend on an 7973 exact implementation of IEEE or ISO rules/specifications for math 7974 functions. 7975 7976 The default is `-ftrapping-math'. 7977 7978 `-frounding-math' 7979 Disable transformations and optimizations that assume default 7980 floating-point rounding behavior. This is round-to-zero for all 7981 floating point to integer conversions, and round-to-nearest for 7982 all other arithmetic truncations. This option should be specified 7983 for programs that change the FP rounding mode dynamically, or that 7984 may be executed with a non-default rounding mode. This option 7985 disables constant folding of floating-point expressions at compile 7986 time (which may be affected by rounding mode) and arithmetic 7987 transformations that are unsafe in the presence of sign-dependent 7988 rounding modes. 7989 7990 The default is `-fno-rounding-math'. 7991 7992 This option is experimental and does not currently guarantee to 7993 disable all GCC optimizations that are affected by rounding mode. 7994 Future versions of GCC may provide finer control of this setting 7995 using C99's `FENV_ACCESS' pragma. This command-line option will 7996 be used to specify the default state for `FENV_ACCESS'. 7997 7998 `-fsignaling-nans' 7999 Compile code assuming that IEEE signaling NaNs may generate 8000 user-visible traps during floating-point operations. Setting this 8001 option disables optimizations that may change the number of 8002 exceptions visible with signaling NaNs. This option implies 8003 `-ftrapping-math'. 8004 8005 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 8006 defined. 8007 8008 The default is `-fno-signaling-nans'. 8009 8010 This option is experimental and does not currently guarantee to 8011 disable all GCC optimizations that affect signaling NaN behavior. 8012 8013 `-fsingle-precision-constant' 8014 Treat floating-point constants as single precision instead of 8015 implicitly converting them to double-precision constants. 8016 8017 `-fcx-limited-range' 8018 When enabled, this option states that a range reduction step is not 8019 needed when performing complex division. Also, there is no 8020 checking whether the result of a complex multiplication or 8021 division is `NaN + I*NaN', with an attempt to rescue the situation 8022 in that case. The default is `-fno-cx-limited-range', but is 8023 enabled by `-ffast-math'. 8024 8025 This option controls the default setting of the ISO C99 8026 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 8027 all languages. 8028 8029 `-fcx-fortran-rules' 8030 Complex multiplication and division follow Fortran rules. Range 8031 reduction is done as part of complex division, but there is no 8032 checking whether the result of a complex multiplication or 8033 division is `NaN + I*NaN', with an attempt to rescue the situation 8034 in that case. 8035 8036 The default is `-fno-cx-fortran-rules'. 8037 8038 8039 The following options control optimizations that may improve 8040 performance, but are not enabled by any `-O' options. This section 8041 includes experimental options that may produce broken code. 8042 8043 `-fbranch-probabilities' 8044 After running a program compiled with `-fprofile-arcs' (*note 8045 Options for Debugging Your Program or `gcc': Debugging Options.), 8046 you can compile it a second time using `-fbranch-probabilities', 8047 to improve optimizations based on the number of times each branch 8048 was taken. When a program compiled with `-fprofile-arcs' exits, 8049 it saves arc execution counts to a file called `SOURCENAME.gcda' 8050 for each source file. The information in this data file is very 8051 dependent on the structure of the generated code, so you must use 8052 the same source code and the same optimization options for both 8053 compilations. 8054 8055 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 8056 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 8057 optimization. Currently, they are only used in one place: in 8058 `reorg.c', instead of guessing which path a branch is most likely 8059 to take, the `REG_BR_PROB' values are used to exactly determine 8060 which path is taken more often. 8061 8062 `-fprofile-values' 8063 If combined with `-fprofile-arcs', it adds code so that some data 8064 about values of expressions in the program is gathered. 8065 8066 With `-fbranch-probabilities', it reads back the data gathered 8067 from profiling values of expressions for usage in optimizations. 8068 8069 Enabled with `-fprofile-generate' and `-fprofile-use'. 8070 8071 `-fvpt' 8072 If combined with `-fprofile-arcs', this option instructs the 8073 compiler to add code to gather information about values of 8074 expressions. 8075 8076 With `-fbranch-probabilities', it reads back the data gathered and 8077 actually performs the optimizations based on them. Currently the 8078 optimizations include specialization of division operations using 8079 the knowledge about the value of the denominator. 8080 8081 `-frename-registers' 8082 Attempt to avoid false dependencies in scheduled code by making use 8083 of registers left over after register allocation. This 8084 optimization most benefits processors with lots of registers. 8085 Depending on the debug information format adopted by the target, 8086 however, it can make debugging impossible, since variables no 8087 longer stay in a "home register". 8088 8089 Enabled by default with `-funroll-loops' and `-fpeel-loops'. 8090 8091 `-ftracer' 8092 Perform tail duplication to enlarge superblock size. This 8093 transformation simplifies the control flow of the function 8094 allowing other optimizations to do a better job. 8095 8096 Enabled with `-fprofile-use'. 8097 8098 `-funroll-loops' 8099 Unroll loops whose number of iterations can be determined at 8100 compile time or upon entry to the loop. `-funroll-loops' implies 8101 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 8102 also turns on complete loop peeling (i.e. complete removal of 8103 loops with a small constant number of iterations). This option 8104 makes code larger, and may or may not make it run faster. 8105 8106 Enabled with `-fprofile-use'. 8107 8108 `-funroll-all-loops' 8109 Unroll all loops, even if their number of iterations is uncertain 8110 when the loop is entered. This usually makes programs run more 8111 slowly. `-funroll-all-loops' implies the same options as 8112 `-funroll-loops'. 8113 8114 `-fpeel-loops' 8115 Peels loops for which there is enough information that they do not 8116 roll much (from profile feedback). It also turns on complete loop 8117 peeling (i.e. complete removal of loops with small constant number 8118 of iterations). 8119 8120 Enabled with `-fprofile-use'. 8121 8122 `-fmove-loop-invariants' 8123 Enables the loop invariant motion pass in the RTL loop optimizer. 8124 Enabled at level `-O1' 8125 8126 `-funswitch-loops' 8127 Move branches with loop invariant conditions out of the loop, with 8128 duplicates of the loop on both branches (modified according to 8129 result of the condition). 8130 8131 `-ffunction-sections' 8132 `-fdata-sections' 8133 Place each function or data item into its own section in the output 8134 file if the target supports arbitrary sections. The name of the 8135 function or the name of the data item determines the section's name 8136 in the output file. 8137 8138 Use these options on systems where the linker can perform 8139 optimizations to improve locality of reference in the instruction 8140 space. Most systems using the ELF object format and SPARC 8141 processors running Solaris 2 have linkers with such optimizations. 8142 AIX may have these optimizations in the future. 8143 8144 Only use these options when there are significant benefits from 8145 doing so. When you specify these options, the assembler and linker 8146 create larger object and executable files and are also slower. 8147 You cannot use `gprof' on all systems if you specify this option, 8148 and you may have problems with debugging if you specify both this 8149 option and `-g'. 8150 8151 `-fbranch-target-load-optimize' 8152 Perform branch target register load optimization before prologue / 8153 epilogue threading. The use of target registers can typically be 8154 exposed only during reload, thus hoisting loads out of loops and 8155 doing inter-block scheduling needs a separate optimization pass. 8156 8157 `-fbranch-target-load-optimize2' 8158 Perform branch target register load optimization after prologue / 8159 epilogue threading. 8160 8161 `-fbtr-bb-exclusive' 8162 When performing branch target register load optimization, don't 8163 reuse branch target registers within any basic block. 8164 8165 `-fstack-protector' 8166 Emit extra code to check for buffer overflows, such as stack 8167 smashing attacks. This is done by adding a guard variable to 8168 functions with vulnerable objects. This includes functions that 8169 call `alloca', and functions with buffers larger than 8 bytes. 8170 The guards are initialized when a function is entered and then 8171 checked when the function exits. If a guard check fails, an error 8172 message is printed and the program exits. 8173 8174 `-fstack-protector-all' 8175 Like `-fstack-protector' except that all functions are protected. 8176 8177 `-fsection-anchors' 8178 Try to reduce the number of symbolic address calculations by using 8179 shared "anchor" symbols to address nearby objects. This 8180 transformation can help to reduce the number of GOT entries and 8181 GOT accesses on some targets. 8182 8183 For example, the implementation of the following function `foo': 8184 8185 static int a, b, c; 8186 int foo (void) { return a + b + c; } 8187 8188 usually calculates the addresses of all three variables, but if you 8189 compile it with `-fsection-anchors', it accesses the variables 8190 from a common anchor point instead. The effect is similar to the 8191 following pseudocode (which isn't valid C): 8192 8193 int foo (void) 8194 { 8195 register int *xr = &x; 8196 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 8197 } 8198 8199 Not all targets support this option. 8200 8201 `--param NAME=VALUE' 8202 In some places, GCC uses various constants to control the amount of 8203 optimization that is done. For example, GCC does not inline 8204 functions that contain more than a certain number of instructions. 8205 You can control some of these constants on the command line using 8206 the `--param' option. 8207 8208 The names of specific parameters, and the meaning of the values, 8209 are tied to the internals of the compiler, and are subject to 8210 change without notice in future releases. 8211 8212 In each case, the VALUE is an integer. The allowable choices for 8213 NAME are: 8214 8215 `predictable-branch-outcome' 8216 When branch is predicted to be taken with probability lower 8217 than this threshold (in percent), then it is considered well 8218 predictable. The default is 10. 8219 8220 `max-crossjump-edges' 8221 The maximum number of incoming edges to consider for 8222 cross-jumping. The algorithm used by `-fcrossjumping' is 8223 O(N^2) in the number of edges incoming to each block. 8224 Increasing values mean more aggressive optimization, making 8225 the compilation time increase with probably small improvement 8226 in executable size. 8227 8228 `min-crossjump-insns' 8229 The minimum number of instructions that must be matched at 8230 the end of two blocks before cross-jumping is performed on 8231 them. This value is ignored in the case where all 8232 instructions in the block being cross-jumped from are 8233 matched. The default value is 5. 8234 8235 `max-grow-copy-bb-insns' 8236 The maximum code size expansion factor when copying basic 8237 blocks instead of jumping. The expansion is relative to a 8238 jump instruction. The default value is 8. 8239 8240 `max-goto-duplication-insns' 8241 The maximum number of instructions to duplicate to a block 8242 that jumps to a computed goto. To avoid O(N^2) behavior in a 8243 number of passes, GCC factors computed gotos early in the 8244 compilation process, and unfactors them as late as possible. 8245 Only computed jumps at the end of a basic blocks with no more 8246 than max-goto-duplication-insns are unfactored. The default 8247 value is 8. 8248 8249 `max-delay-slot-insn-search' 8250 The maximum number of instructions to consider when looking 8251 for an instruction to fill a delay slot. If more than this 8252 arbitrary number of instructions are searched, the time 8253 savings from filling the delay slot are minimal, so stop 8254 searching. Increasing values mean more aggressive 8255 optimization, making the compilation time increase with 8256 probably small improvement in execution time. 8257 8258 `max-delay-slot-live-search' 8259 When trying to fill delay slots, the maximum number of 8260 instructions to consider when searching for a block with 8261 valid live register information. Increasing this arbitrarily 8262 chosen value means more aggressive optimization, increasing 8263 the compilation time. This parameter should be removed when 8264 the delay slot code is rewritten to maintain the control-flow 8265 graph. 8266 8267 `max-gcse-memory' 8268 The approximate maximum amount of memory that can be 8269 allocated in order to perform the global common subexpression 8270 elimination optimization. If more memory than specified is 8271 required, the optimization is not done. 8272 8273 `max-gcse-insertion-ratio' 8274 If the ratio of expression insertions to deletions is larger 8275 than this value for any expression, then RTL PRE inserts or 8276 removes the expression and thus leaves partially redundant 8277 computations in the instruction stream. The default value is 8278 20. 8279 8280 `max-pending-list-length' 8281 The maximum number of pending dependencies scheduling allows 8282 before flushing the current state and starting over. Large 8283 functions with few branches or calls can create excessively 8284 large lists which needlessly consume memory and resources. 8285 8286 `max-modulo-backtrack-attempts' 8287 The maximum number of backtrack attempts the scheduler should 8288 make when modulo scheduling a loop. Larger values can 8289 exponentially increase compilation time. 8290 8291 `max-inline-insns-single' 8292 Several parameters control the tree inliner used in GCC. 8293 This number sets the maximum number of instructions (counted 8294 in GCC's internal representation) in a single function that 8295 the tree inliner considers for inlining. This only affects 8296 functions declared inline and methods implemented in a class 8297 declaration (C++). The default value is 400. 8298 8299 `max-inline-insns-auto' 8300 When you use `-finline-functions' (included in `-O3'), a lot 8301 of functions that would otherwise not be considered for 8302 inlining by the compiler are investigated. To those 8303 functions, a different (more restrictive) limit compared to 8304 functions declared inline can be applied. The default value 8305 is 40. 8306 8307 `inline-min-speedup' 8308 When estimated performance improvement of caller + callee 8309 runtime exceeds this threshold (in precent), the function can 8310 be inlined regardless the limit on `--param 8311 max-inline-insns-single' and `--param max-inline-insns-auto'. 8312 8313 `large-function-insns' 8314 The limit specifying really large functions. For functions 8315 larger than this limit after inlining, inlining is 8316 constrained by `--param large-function-growth'. This 8317 parameter is useful primarily to avoid extreme compilation 8318 time caused by non-linear algorithms used by the back end. 8319 The default value is 2700. 8320 8321 `large-function-growth' 8322 Specifies maximal growth of large function caused by inlining 8323 in percents. The default value is 100 which limits large 8324 function growth to 2.0 times the original size. 8325 8326 `large-unit-insns' 8327 The limit specifying large translation unit. Growth caused 8328 by inlining of units larger than this limit is limited by 8329 `--param inline-unit-growth'. For small units this might be 8330 too tight. For example, consider a unit consisting of 8331 function A that is inline and B that just calls A three 8332 times. If B is small relative to A, the growth of unit is 8333 300\% and yet such inlining is very sane. For very large 8334 units consisting of small inlineable functions, however, the 8335 overall unit growth limit is needed to avoid exponential 8336 explosion of code size. Thus for smaller units, the size is 8337 increased to `--param large-unit-insns' before applying 8338 `--param inline-unit-growth'. The default is 10000. 8339 8340 `inline-unit-growth' 8341 Specifies maximal overall growth of the compilation unit 8342 caused by inlining. The default value is 30 which limits 8343 unit growth to 1.3 times the original size. 8344 8345 `ipcp-unit-growth' 8346 Specifies maximal overall growth of the compilation unit 8347 caused by interprocedural constant propagation. The default 8348 value is 10 which limits unit growth to 1.1 times the 8349 original size. 8350 8351 `large-stack-frame' 8352 The limit specifying large stack frames. While inlining the 8353 algorithm is trying to not grow past this limit too much. 8354 The default value is 256 bytes. 8355 8356 `large-stack-frame-growth' 8357 Specifies maximal growth of large stack frames caused by 8358 inlining in percents. The default value is 1000 which limits 8359 large stack frame growth to 11 times the original size. 8360 8361 `max-inline-insns-recursive' 8362 `max-inline-insns-recursive-auto' 8363 Specifies the maximum number of instructions an out-of-line 8364 copy of a self-recursive inline function can grow into by 8365 performing recursive inlining. 8366 8367 For functions declared inline, `--param 8368 max-inline-insns-recursive' is taken into account. For 8369 functions not declared inline, recursive inlining happens 8370 only when `-finline-functions' (included in `-O3') is enabled 8371 and `--param max-inline-insns-recursive-auto' is used. The 8372 default value is 450. 8373 8374 `max-inline-recursive-depth' 8375 `max-inline-recursive-depth-auto' 8376 Specifies the maximum recursion depth used for recursive 8377 inlining. 8378 8379 For functions declared inline, `--param 8380 max-inline-recursive-depth' is taken into account. For 8381 functions not declared inline, recursive inlining happens 8382 only when `-finline-functions' (included in `-O3') is enabled 8383 and `--param max-inline-recursive-depth-auto' is used. The 8384 default value is 8. 8385 8386 `min-inline-recursive-probability' 8387 Recursive inlining is profitable only for function having 8388 deep recursion in average and can hurt for function having 8389 little recursion depth by increasing the prologue size or 8390 complexity of function body to other optimizers. 8391 8392 When profile feedback is available (see `-fprofile-generate') 8393 the actual recursion depth can be guessed from probability 8394 that function recurses via a given call expression. This 8395 parameter limits inlining only to call expressions whose 8396 probability exceeds the given threshold (in percents). The 8397 default value is 10. 8398 8399 `early-inlining-insns' 8400 Specify growth that the early inliner can make. In effect it 8401 increases the amount of inlining for code having a large 8402 abstraction penalty. The default value is 10. 8403 8404 `max-early-inliner-iterations' 8405 `max-early-inliner-iterations' 8406 Limit of iterations of the early inliner. This basically 8407 bounds the number of nested indirect calls the early inliner 8408 can resolve. Deeper chains are still handled by late 8409 inlining. 8410 8411 `comdat-sharing-probability' 8412 `comdat-sharing-probability' 8413 Probability (in percent) that C++ inline function with comdat 8414 visibility are shared across multiple compilation units. The 8415 default value is 20. 8416 8417 `min-vect-loop-bound' 8418 The minimum number of iterations under which loops are not 8419 vectorized when `-ftree-vectorize' is used. The number of 8420 iterations after vectorization needs to be greater than the 8421 value specified by this option to allow vectorization. The 8422 default value is 0. 8423 8424 `gcse-cost-distance-ratio' 8425 Scaling factor in calculation of maximum distance an 8426 expression can be moved by GCSE optimizations. This is 8427 currently supported only in the code hoisting pass. The 8428 bigger the ratio, the more aggressive code hoisting is with 8429 simple expressions, i.e., the expressions that have cost less 8430 than `gcse-unrestricted-cost'. Specifying 0 disables 8431 hoisting of simple expressions. The default value is 10. 8432 8433 `gcse-unrestricted-cost' 8434 Cost, roughly measured as the cost of a single typical machine 8435 instruction, at which GCSE optimizations do not constrain the 8436 distance an expression can travel. This is currently 8437 supported only in the code hoisting pass. The lesser the 8438 cost, the more aggressive code hoisting is. Specifying 0 8439 allows all expressions to travel unrestricted distances. The 8440 default value is 3. 8441 8442 `max-hoist-depth' 8443 The depth of search in the dominator tree for expressions to 8444 hoist. This is used to avoid quadratic behavior in hoisting 8445 algorithm. The value of 0 does not limit on the search, but 8446 may slow down compilation of huge functions. The default 8447 value is 30. 8448 8449 `max-tail-merge-comparisons' 8450 The maximum amount of similar bbs to compare a bb with. This 8451 is used to avoid quadratic behavior in tree tail merging. 8452 The default value is 10. 8453 8454 `max-tail-merge-iterations' 8455 The maximum amount of iterations of the pass over the 8456 function. This is used to limit compilation time in tree 8457 tail merging. The default value is 2. 8458 8459 `max-unrolled-insns' 8460 The maximum number of instructions that a loop may have to be 8461 unrolled. If a loop is unrolled, this parameter also 8462 determines how many times the loop code is unrolled. 8463 8464 `max-average-unrolled-insns' 8465 The maximum number of instructions biased by probabilities of 8466 their execution that a loop may have to be unrolled. If a 8467 loop is unrolled, this parameter also determines how many 8468 times the loop code is unrolled. 8469 8470 `max-unroll-times' 8471 The maximum number of unrollings of a single loop. 8472 8473 `max-peeled-insns' 8474 The maximum number of instructions that a loop may have to be 8475 peeled. If a loop is peeled, this parameter also determines 8476 how many times the loop code is peeled. 8477 8478 `max-peel-times' 8479 The maximum number of peelings of a single loop. 8480 8481 `max-peel-branches' 8482 The maximum number of branches on the hot path through the 8483 peeled sequence. 8484 8485 `max-completely-peeled-insns' 8486 The maximum number of insns of a completely peeled loop. 8487 8488 `max-completely-peel-times' 8489 The maximum number of iterations of a loop to be suitable for 8490 complete peeling. 8491 8492 `max-completely-peel-loop-nest-depth' 8493 The maximum depth of a loop nest suitable for complete 8494 peeling. 8495 8496 `max-unswitch-insns' 8497 The maximum number of insns of an unswitched loop. 8498 8499 `max-unswitch-level' 8500 The maximum number of branches unswitched in a single loop. 8501 8502 `lim-expensive' 8503 The minimum cost of an expensive expression in the loop 8504 invariant motion. 8505 8506 `iv-consider-all-candidates-bound' 8507 Bound on number of candidates for induction variables, below 8508 which all candidates are considered for each use in induction 8509 variable optimizations. If there are more candidates than 8510 this, only the most relevant ones are considered to avoid 8511 quadratic time complexity. 8512 8513 `iv-max-considered-uses' 8514 The induction variable optimizations give up on loops that 8515 contain more induction variable uses. 8516 8517 `iv-always-prune-cand-set-bound' 8518 If the number of candidates in the set is smaller than this 8519 value, always try to remove unnecessary ivs from the set when 8520 adding a new one. 8521 8522 `scev-max-expr-size' 8523 Bound on size of expressions used in the scalar evolutions 8524 analyzer. Large expressions slow the analyzer. 8525 8526 `scev-max-expr-complexity' 8527 Bound on the complexity of the expressions in the scalar 8528 evolutions analyzer. Complex expressions slow the analyzer. 8529 8530 `omega-max-vars' 8531 The maximum number of variables in an Omega constraint system. 8532 The default value is 128. 8533 8534 `omega-max-geqs' 8535 The maximum number of inequalities in an Omega constraint 8536 system. The default value is 256. 8537 8538 `omega-max-eqs' 8539 The maximum number of equalities in an Omega constraint 8540 system. The default value is 128. 8541 8542 `omega-max-wild-cards' 8543 The maximum number of wildcard variables that the Omega 8544 solver is able to insert. The default value is 18. 8545 8546 `omega-hash-table-size' 8547 The size of the hash table in the Omega solver. The default 8548 value is 550. 8549 8550 `omega-max-keys' 8551 The maximal number of keys used by the Omega solver. The 8552 default value is 500. 8553 8554 `omega-eliminate-redundant-constraints' 8555 When set to 1, use expensive methods to eliminate all 8556 redundant constraints. The default value is 0. 8557 8558 `vect-max-version-for-alignment-checks' 8559 The maximum number of run-time checks that can be performed 8560 when doing loop versioning for alignment in the vectorizer. 8561 See option `-ftree-vect-loop-version' for more information. 8562 8563 `vect-max-version-for-alias-checks' 8564 The maximum number of run-time checks that can be performed 8565 when doing loop versioning for alias in the vectorizer. See 8566 option `-ftree-vect-loop-version' for more information. 8567 8568 `max-iterations-to-track' 8569 The maximum number of iterations of a loop the brute-force 8570 algorithm for analysis of the number of iterations of the 8571 loop tries to evaluate. 8572 8573 `hot-bb-count-ws-permille' 8574 A basic block profile count is considered hot if it 8575 contributes to the given permillage (i.e. 0...1000) of the 8576 entire profiled execution. 8577 8578 `hot-bb-frequency-fraction' 8579 Select fraction of the entry block frequency of executions of 8580 basic block in function given basic block needs to have to be 8581 considered hot. 8582 8583 `max-predicted-iterations' 8584 The maximum number of loop iterations we predict statically. 8585 This is useful in cases where a function contains a single 8586 loop with known bound and another loop with unknown bound. 8587 The known number of iterations is predicted correctly, while 8588 the unknown number of iterations average to roughly 10. This 8589 means that the loop without bounds appears artificially cold 8590 relative to the other one. 8591 8592 `align-threshold' 8593 Select fraction of the maximal frequency of executions of a 8594 basic block in a function to align the basic block. 8595 8596 `align-loop-iterations' 8597 A loop expected to iterate at least the selected number of 8598 iterations is aligned. 8599 8600 `tracer-dynamic-coverage' 8601 `tracer-dynamic-coverage-feedback' 8602 This value is used to limit superblock formation once the 8603 given percentage of executed instructions is covered. This 8604 limits unnecessary code size expansion. 8605 8606 The `tracer-dynamic-coverage-feedback' is used only when 8607 profile feedback is available. The real profiles (as opposed 8608 to statically estimated ones) are much less balanced allowing 8609 the threshold to be larger value. 8610 8611 `tracer-max-code-growth' 8612 Stop tail duplication once code growth has reached given 8613 percentage. This is a rather artificial limit, as most of 8614 the duplicates are eliminated later in cross jumping, so it 8615 may be set to much higher values than is the desired code 8616 growth. 8617 8618 `tracer-min-branch-ratio' 8619 Stop reverse growth when the reverse probability of best edge 8620 is less than this threshold (in percent). 8621 8622 `tracer-min-branch-ratio' 8623 `tracer-min-branch-ratio-feedback' 8624 Stop forward growth if the best edge has probability lower 8625 than this threshold. 8626 8627 Similarly to `tracer-dynamic-coverage' two values are 8628 present, one for compilation for profile feedback and one for 8629 compilation without. The value for compilation with profile 8630 feedback needs to be more conservative (higher) in order to 8631 make tracer effective. 8632 8633 `max-cse-path-length' 8634 The maximum number of basic blocks on path that CSE considers. 8635 The default is 10. 8636 8637 `max-cse-insns' 8638 The maximum number of instructions CSE processes before 8639 flushing. The default is 1000. 8640 8641 `ggc-min-expand' 8642 GCC uses a garbage collector to manage its own memory 8643 allocation. This parameter specifies the minimum percentage 8644 by which the garbage collector's heap should be allowed to 8645 expand between collections. Tuning this may improve 8646 compilation speed; it has no effect on code generation. 8647 8648 The default is 30% + 70% * (RAM/1GB) with an upper bound of 8649 100% when RAM >= 1GB. If `getrlimit' is available, the 8650 notion of "RAM" is the smallest of actual RAM and 8651 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 8652 calculate RAM on a particular platform, the lower bound of 8653 30% is used. Setting this parameter and `ggc-min-heapsize' 8654 to zero causes a full collection to occur at every 8655 opportunity. This is extremely slow, but can be useful for 8656 debugging. 8657 8658 `ggc-min-heapsize' 8659 Minimum size of the garbage collector's heap before it begins 8660 bothering to collect garbage. The first collection occurs 8661 after the heap expands by `ggc-min-expand'% beyond 8662 `ggc-min-heapsize'. Again, tuning this may improve 8663 compilation speed, and has no effect on code generation. 8664 8665 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 8666 that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 8667 exceeded, but with a lower bound of 4096 (four megabytes) and 8668 an upper bound of 131072 (128 megabytes). If GCC is not able 8669 to calculate RAM on a particular platform, the lower bound is 8670 used. Setting this parameter very large effectively disables 8671 garbage collection. Setting this parameter and 8672 `ggc-min-expand' to zero causes a full collection to occur at 8673 every opportunity. 8674 8675 `max-reload-search-insns' 8676 The maximum number of instruction reload should look backward 8677 for equivalent register. Increasing values mean more 8678 aggressive optimization, making the compilation time increase 8679 with probably slightly better performance. The default value 8680 is 100. 8681 8682 `max-cselib-memory-locations' 8683 The maximum number of memory locations cselib should take 8684 into account. Increasing values mean more aggressive 8685 optimization, making the compilation time increase with 8686 probably slightly better performance. The default value is 8687 500. 8688 8689 `reorder-blocks-duplicate' 8690 `reorder-blocks-duplicate-feedback' 8691 Used by the basic block reordering pass to decide whether to 8692 use unconditional branch or duplicate the code on its 8693 destination. Code is duplicated when its estimated size is 8694 smaller than this value multiplied by the estimated size of 8695 unconditional jump in the hot spots of the program. 8696 8697 The `reorder-block-duplicate-feedback' is used only when 8698 profile feedback is available. It may be set to higher 8699 values than `reorder-block-duplicate' since information about 8700 the hot spots is more accurate. 8701 8702 `max-sched-ready-insns' 8703 The maximum number of instructions ready to be issued the 8704 scheduler should consider at any given time during the first 8705 scheduling pass. Increasing values mean more thorough 8706 searches, making the compilation time increase with probably 8707 little benefit. The default value is 100. 8708 8709 `max-sched-region-blocks' 8710 The maximum number of blocks in a region to be considered for 8711 interblock scheduling. The default value is 10. 8712 8713 `max-pipeline-region-blocks' 8714 The maximum number of blocks in a region to be considered for 8715 pipelining in the selective scheduler. The default value is 8716 15. 8717 8718 `max-sched-region-insns' 8719 The maximum number of insns in a region to be considered for 8720 interblock scheduling. The default value is 100. 8721 8722 `max-pipeline-region-insns' 8723 The maximum number of insns in a region to be considered for 8724 pipelining in the selective scheduler. The default value is 8725 200. 8726 8727 `min-spec-prob' 8728 The minimum probability (in percents) of reaching a source 8729 block for interblock speculative scheduling. The default 8730 value is 40. 8731 8732 `max-sched-extend-regions-iters' 8733 The maximum number of iterations through CFG to extend 8734 regions. A value of 0 (the default) disables region 8735 extensions. 8736 8737 `max-sched-insn-conflict-delay' 8738 The maximum conflict delay for an insn to be considered for 8739 speculative motion. The default value is 3. 8740 8741 `sched-spec-prob-cutoff' 8742 The minimal probability of speculation success (in percents), 8743 so that speculative insns are scheduled. The default value 8744 is 40. 8745 8746 `sched-spec-state-edge-prob-cutoff' 8747 The minimum probability an edge must have for the scheduler 8748 to save its state across it. The default value is 10. 8749 8750 `sched-mem-true-dep-cost' 8751 Minimal distance (in CPU cycles) between store and load 8752 targeting same memory locations. The default value is 1. 8753 8754 `selsched-max-lookahead' 8755 The maximum size of the lookahead window of selective 8756 scheduling. It is a depth of search for available 8757 instructions. The default value is 50. 8758 8759 `selsched-max-sched-times' 8760 The maximum number of times that an instruction is scheduled 8761 during selective scheduling. This is the limit on the number 8762 of iterations through which the instruction may be pipelined. 8763 The default value is 2. 8764 8765 `selsched-max-insns-to-rename' 8766 The maximum number of best instructions in the ready list 8767 that are considered for renaming in the selective scheduler. 8768 The default value is 2. 8769 8770 `sms-min-sc' 8771 The minimum value of stage count that swing modulo scheduler 8772 generates. The default value is 2. 8773 8774 `max-last-value-rtl' 8775 The maximum size measured as number of RTLs that can be 8776 recorded in an expression in combiner for a pseudo register 8777 as last known value of that register. The default is 10000. 8778 8779 `integer-share-limit' 8780 Small integer constants can use a shared data structure, 8781 reducing the compiler's memory usage and increasing its 8782 speed. This sets the maximum value of a shared integer 8783 constant. The default value is 256. 8784 8785 `ssp-buffer-size' 8786 The minimum size of buffers (i.e. arrays) that receive stack 8787 smashing protection when `-fstack-protection' is used. 8788 8789 `max-jump-thread-duplication-stmts' 8790 Maximum number of statements allowed in a block that needs to 8791 be duplicated when threading jumps. 8792 8793 `max-fields-for-field-sensitive' 8794 Maximum number of fields in a structure treated in a field 8795 sensitive manner during pointer analysis. The default is zero 8796 for `-O0' and `-O1', and 100 for `-Os', `-O2', and `-O3'. 8797 8798 `prefetch-latency' 8799 Estimate on average number of instructions that are executed 8800 before prefetch finishes. The distance prefetched ahead is 8801 proportional to this constant. Increasing this number may 8802 also lead to less streams being prefetched (see 8803 `simultaneous-prefetches'). 8804 8805 `simultaneous-prefetches' 8806 Maximum number of prefetches that can run at the same time. 8807 8808 `l1-cache-line-size' 8809 The size of cache line in L1 cache, in bytes. 8810 8811 `l1-cache-size' 8812 The size of L1 cache, in kilobytes. 8813 8814 `l2-cache-size' 8815 The size of L2 cache, in kilobytes. 8816 8817 `min-insn-to-prefetch-ratio' 8818 The minimum ratio between the number of instructions and the 8819 number of prefetches to enable prefetching in a loop. 8820 8821 `prefetch-min-insn-to-mem-ratio' 8822 The minimum ratio between the number of instructions and the 8823 number of memory references to enable prefetching in a loop. 8824 8825 `use-canonical-types' 8826 Whether the compiler should use the "canonical" type system. 8827 By default, this should always be 1, which uses a more 8828 efficient internal mechanism for comparing types in C++ and 8829 Objective-C++. However, if bugs in the canonical type system 8830 are causing compilation failures, set this value to 0 to 8831 disable canonical types. 8832 8833 `switch-conversion-max-branch-ratio' 8834 Switch initialization conversion refuses to create arrays 8835 that are bigger than `switch-conversion-max-branch-ratio' 8836 times the number of branches in the switch. 8837 8838 `max-partial-antic-length' 8839 Maximum length of the partial antic set computed during the 8840 tree partial redundancy elimination optimization 8841 (`-ftree-pre') when optimizing at `-O3' and above. For some 8842 sorts of source code the enhanced partial redundancy 8843 elimination optimization can run away, consuming all of the 8844 memory available on the host machine. This parameter sets a 8845 limit on the length of the sets that are computed, which 8846 prevents the runaway behavior. Setting a value of 0 for this 8847 parameter allows an unlimited set length. 8848 8849 `sccvn-max-scc-size' 8850 Maximum size of a strongly connected component (SCC) during 8851 SCCVN processing. If this limit is hit, SCCVN processing for 8852 the whole function is not done and optimizations depending on 8853 it are disabled. The default maximum SCC size is 10000. 8854 8855 `sccvn-max-alias-queries-per-access' 8856 Maximum number of alias-oracle queries we perform when 8857 looking for redundancies for loads and stores. If this limit 8858 is hit the search is aborted and the load or store is not 8859 considered redundant. The number of queries is 8860 algorithmically limited to the number of stores on all paths 8861 from the load to the function entry. The default maxmimum 8862 number of queries is 1000. 8863 8864 `ira-max-loops-num' 8865 IRA uses regional register allocation by default. If a 8866 function contains more loops than the number given by this 8867 parameter, only at most the given number of the most 8868 frequently-executed loops form regions for regional register 8869 allocation. The default value of the parameter is 100. 8870 8871 `ira-max-conflict-table-size' 8872 Although IRA uses a sophisticated algorithm to compress the 8873 conflict table, the table can still require excessive amounts 8874 of memory for huge functions. If the conflict table for a 8875 function could be more than the size in MB given by this 8876 parameter, the register allocator instead uses a faster, 8877 simpler, and lower-quality algorithm that does not require 8878 building a pseudo-register conflict table. The default value 8879 of the parameter is 2000. 8880 8881 `ira-loop-reserved-regs' 8882 IRA can be used to evaluate more accurate register pressure 8883 in loops for decisions to move loop invariants (see `-O3'). 8884 The number of available registers reserved for some other 8885 purposes is given by this parameter. The default value of 8886 the parameter is 2, which is the minimal number of registers 8887 needed by typical instructions. This value is the best found 8888 from numerous experiments. 8889 8890 `loop-invariant-max-bbs-in-loop' 8891 Loop invariant motion can be very expensive, both in 8892 compilation time and in amount of needed compile-time memory, 8893 with very large loops. Loops with more basic blocks than 8894 this parameter won't have loop invariant motion optimization 8895 performed on them. The default value of the parameter is 8896 1000 for `-O1' and 10000 for `-O2' and above. 8897 8898 `loop-max-datarefs-for-datadeps' 8899 Building data dapendencies is expensive for very large loops. 8900 This parameter limits the number of data references in loops 8901 that are considered for data dependence analysis. These 8902 large loops are no handled by the optimizations using loop 8903 data dependencies. The default value is 1000. 8904 8905 `max-vartrack-size' 8906 Sets a maximum number of hash table slots to use during 8907 variable tracking dataflow analysis of any function. If this 8908 limit is exceeded with variable tracking at assignments 8909 enabled, analysis for that function is retried without it, 8910 after removing all debug insns from the function. If the 8911 limit is exceeded even without debug insns, var tracking 8912 analysis is completely disabled for the function. Setting 8913 the parameter to zero makes it unlimited. 8914 8915 `max-vartrack-expr-depth' 8916 Sets a maximum number of recursion levels when attempting to 8917 map variable names or debug temporaries to value expressions. 8918 This trades compilation time for more complete debug 8919 information. If this is set too low, value expressions that 8920 are available and could be represented in debug information 8921 may end up not being used; setting this higher may enable the 8922 compiler to find more complex debug expressions, but compile 8923 time and memory use may grow. The default is 12. 8924 8925 `min-nondebug-insn-uid' 8926 Use uids starting at this parameter for nondebug insns. The 8927 range below the parameter is reserved exclusively for debug 8928 insns created by `-fvar-tracking-assignments', but debug 8929 insns may get (non-overlapping) uids above it if the reserved 8930 range is exhausted. 8931 8932 `ipa-sra-ptr-growth-factor' 8933 IPA-SRA replaces a pointer to an aggregate with one or more 8934 new parameters only when their cumulative size is less or 8935 equal to `ipa-sra-ptr-growth-factor' times the size of the 8936 original pointer parameter. 8937 8938 `tm-max-aggregate-size' 8939 When making copies of thread-local variables in a 8940 transaction, this parameter specifies the size in bytes after 8941 which variables are saved with the logging functions as 8942 opposed to save/restore code sequence pairs. This option 8943 only applies when using `-fgnu-tm'. 8944 8945 `graphite-max-nb-scop-params' 8946 To avoid exponential effects in the Graphite loop transforms, 8947 the number of parameters in a Static Control Part (SCoP) is 8948 bounded. The default value is 10 parameters. A variable 8949 whose value is unknown at compilation time and defined 8950 outside a SCoP is a parameter of the SCoP. 8951 8952 `graphite-max-bbs-per-function' 8953 To avoid exponential effects in the detection of SCoPs, the 8954 size of the functions analyzed by Graphite is bounded. The 8955 default value is 100 basic blocks. 8956 8957 `loop-block-tile-size' 8958 Loop blocking or strip mining transforms, enabled with 8959 `-floop-block' or `-floop-strip-mine', strip mine each loop 8960 in the loop nest by a given number of iterations. The strip 8961 length can be changed using the `loop-block-tile-size' 8962 parameter. The default value is 51 iterations. 8963 8964 `ipa-cp-value-list-size' 8965 IPA-CP attempts to track all possible values and types passed 8966 to a function's parameter in order to propagate them and 8967 perform devirtualization. `ipa-cp-value-list-size' is the 8968 maximum number of values and types it stores per one formal 8969 parameter of a function. 8970 8971 `lto-partitions' 8972 Specify desired number of partitions produced during WHOPR 8973 compilation. The number of partitions should exceed the 8974 number of CPUs used for compilation. The default value is 32. 8975 8976 `lto-minpartition' 8977 Size of minimal partition for WHOPR (in estimated 8978 instructions). This prevents expenses of splitting very 8979 small programs into too many partitions. 8980 8981 `cxx-max-namespaces-for-diagnostic-help' 8982 The maximum number of namespaces to consult for suggestions 8983 when C++ name lookup fails for an identifier. The default is 8984 1000. 8985 8986 `sink-frequency-threshold' 8987 The maximum relative execution frequency (in percents) of the 8988 target block relative to a statement's original block to 8989 allow statement sinking of a statement. Larger numbers 8990 result in more aggressive statement sinking. The default 8991 value is 75. A small positive adjustment is applied for 8992 statements with memory operands as those are even more 8993 profitable so sink. 8994 8995 `max-stores-to-sink' 8996 The maximum number of conditional stores paires that can be 8997 sunk. Set to 0 if either vectorization (`-ftree-vectorize') 8998 or if-conversion (`-ftree-loop-if-convert') is disabled. The 8999 default is 2. 9000 9001 `allow-load-data-races' 9002 Allow optimizers to introduce new data races on loads. Set 9003 to 1 to allow, otherwise to 0. This option is enabled by 9004 default unless implicitly set by the `-fmemory-model=' option. 9005 9006 `allow-store-data-races' 9007 Allow optimizers to introduce new data races on stores. Set 9008 to 1 to allow, otherwise to 0. This option is enabled by 9009 default unless implicitly set by the `-fmemory-model=' option. 9010 9011 `allow-packed-load-data-races' 9012 Allow optimizers to introduce new data races on packed data 9013 loads. Set to 1 to allow, otherwise to 0. This option is 9014 enabled by default unless implicitly set by the 9015 `-fmemory-model=' option. 9016 9017 `allow-packed-store-data-races' 9018 Allow optimizers to introduce new data races on packed data 9019 stores. Set to 1 to allow, otherwise to 0. This option is 9020 enabled by default unless implicitly set by the 9021 `-fmemory-model=' option. 9022 9023 `case-values-threshold' 9024 The smallest number of different values for which it is best 9025 to use a jump-table instead of a tree of conditional 9026 branches. If the value is 0, use the default for the 9027 machine. The default is 0. 9028 9029 `tree-reassoc-width' 9030 Set the maximum number of instructions executed in parallel in 9031 reassociated tree. This parameter overrides target dependent 9032 heuristics used by default if has non zero value. 9033 9034 `sched-pressure-algorithm' 9035 Choose between the two available implementations of 9036 `-fsched-pressure'. Algorithm 1 is the original 9037 implementation and is the more likely to prevent instructions 9038 from being reordered. Algorithm 2 was designed to be a 9039 compromise between the relatively conservative approach taken 9040 by algorithm 1 and the rather aggressive approach taken by 9041 the default scheduler. It relies more heavily on having a 9042 regular register file and accurate register pressure classes. 9043 See `haifa-sched.c' in the GCC sources for more details. 9044 9045 The default choice depends on the target. 9046 9047 `max-slsr-cand-scan' 9048 Set the maximum number of existing candidates that will be 9049 considered when seeking a basis for a new straight-line 9050 strength reduction candidate. 9051 9052 9053 9054 File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 9055 9056 3.11 Options Controlling the Preprocessor 9057 ========================================= 9058 9059 These options control the C preprocessor, which is run on each C source 9060 file before actual compilation. 9061 9062 If you use the `-E' option, nothing is done except preprocessing. 9063 Some of these options make sense only together with `-E' because they 9064 cause the preprocessor output to be unsuitable for actual compilation. 9065 9066 `-Wp,OPTION' 9067 You can use `-Wp,OPTION' to bypass the compiler driver and pass 9068 OPTION directly through to the preprocessor. If OPTION contains 9069 commas, it is split into multiple options at the commas. However, 9070 many options are modified, translated or interpreted by the 9071 compiler driver before being passed to the preprocessor, and `-Wp' 9072 forcibly bypasses this phase. The preprocessor's direct interface 9073 is undocumented and subject to change, so whenever possible you 9074 should avoid using `-Wp' and let the driver handle the options 9075 instead. 9076 9077 `-Xpreprocessor OPTION' 9078 Pass OPTION as an option to the preprocessor. You can use this to 9079 supply system-specific preprocessor options that GCC does not 9080 recognize. 9081 9082 If you want to pass an option that takes an argument, you must use 9083 `-Xpreprocessor' twice, once for the option and once for the 9084 argument. 9085 9086 `-no-integrated-cpp' 9087 Perform preprocessing as a separate pass before compilation. By 9088 default, GCC performs preprocessing as an integrated part of input 9089 tokenization and parsing. If this option is provided, the 9090 appropriate language front end (`cc1', `cc1plus', or `cc1obj' for 9091 C, C++, and Objective-C, respectively) is instead invoked twice, 9092 once for preprocessing only and once for actual compilation of the 9093 preprocessed input. This option may be useful in conjunction with 9094 the `-B' or `-wrapper' options to specify an alternate 9095 preprocessor or perform additional processing of the program 9096 source between normal preprocessing and compilation. 9097 9098 `-D NAME' 9099 Predefine NAME as a macro, with definition `1'. 9100 9101 `-D NAME=DEFINITION' 9102 The contents of DEFINITION are tokenized and processed as if they 9103 appeared during translation phase three in a `#define' directive. 9104 In particular, the definition will be truncated by embedded 9105 newline characters. 9106 9107 If you are invoking the preprocessor from a shell or shell-like 9108 program you may need to use the shell's quoting syntax to protect 9109 characters such as spaces that have a meaning in the shell syntax. 9110 9111 If you wish to define a function-like macro on the command line, 9112 write its argument list with surrounding parentheses before the 9113 equals sign (if any). Parentheses are meaningful to most shells, 9114 so you will need to quote the option. With `sh' and `csh', 9115 `-D'NAME(ARGS...)=DEFINITION'' works. 9116 9117 `-D' and `-U' options are processed in the order they are given on 9118 the command line. All `-imacros FILE' and `-include FILE' options 9119 are processed after all `-D' and `-U' options. 9120 9121 `-U NAME' 9122 Cancel any previous definition of NAME, either built in or 9123 provided with a `-D' option. 9124 9125 `-undef' 9126 Do not predefine any system-specific or GCC-specific macros. The 9127 standard predefined macros remain defined. 9128 9129 `-I DIR' 9130 Add the directory DIR to the list of directories to be searched 9131 for header files. Directories named by `-I' are searched before 9132 the standard system include directories. If the directory DIR is 9133 a standard system include directory, the option is ignored to 9134 ensure that the default search order for system directories and 9135 the special treatment of system headers are not defeated . If DIR 9136 begins with `=', then the `=' will be replaced by the sysroot 9137 prefix; see `--sysroot' and `-isysroot'. 9138 9139 `-o FILE' 9140 Write output to FILE. This is the same as specifying FILE as the 9141 second non-option argument to `cpp'. `gcc' has a different 9142 interpretation of a second non-option argument, so you must use 9143 `-o' to specify the output file. 9144 9145 `-Wall' 9146 Turns on all optional warnings which are desirable for normal code. 9147 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 9148 warning about integer promotion causing a change of sign in `#if' 9149 expressions. Note that many of the preprocessor's warnings are on 9150 by default and have no options to control them. 9151 9152 `-Wcomment' 9153 `-Wcomments' 9154 Warn whenever a comment-start sequence `/*' appears in a `/*' 9155 comment, or whenever a backslash-newline appears in a `//' comment. 9156 (Both forms have the same effect.) 9157 9158 `-Wtrigraphs' 9159 Most trigraphs in comments cannot affect the meaning of the 9160 program. However, a trigraph that would form an escaped newline 9161 (`??/' at the end of a line) can, by changing where the comment 9162 begins or ends. Therefore, only trigraphs that would form escaped 9163 newlines produce warnings inside a comment. 9164 9165 This option is implied by `-Wall'. If `-Wall' is not given, this 9166 option is still enabled unless trigraphs are enabled. To get 9167 trigraph conversion without warnings, but get the other `-Wall' 9168 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 9169 9170 `-Wtraditional' 9171 Warn about certain constructs that behave differently in 9172 traditional and ISO C. Also warn about ISO C constructs that have 9173 no traditional C equivalent, and problematic constructs which 9174 should be avoided. 9175 9176 `-Wundef' 9177 Warn whenever an identifier which is not a macro is encountered in 9178 an `#if' directive, outside of `defined'. Such identifiers are 9179 replaced with zero. 9180 9181 `-Wunused-macros' 9182 Warn about macros defined in the main file that are unused. A 9183 macro is "used" if it is expanded or tested for existence at least 9184 once. The preprocessor will also warn if the macro has not been 9185 used at the time it is redefined or undefined. 9186 9187 Built-in macros, macros defined on the command line, and macros 9188 defined in include files are not warned about. 9189 9190 _Note:_ If a macro is actually used, but only used in skipped 9191 conditional blocks, then CPP will report it as unused. To avoid 9192 the warning in such a case, you might improve the scope of the 9193 macro's definition by, for example, moving it into the first 9194 skipped block. Alternatively, you could provide a dummy use with 9195 something like: 9196 9197 #if defined the_macro_causing_the_warning 9198 #endif 9199 9200 `-Wendif-labels' 9201 Warn whenever an `#else' or an `#endif' are followed by text. 9202 This usually happens in code of the form 9203 9204 #if FOO 9205 ... 9206 #else FOO 9207 ... 9208 #endif FOO 9209 9210 The second and third `FOO' should be in comments, but often are not 9211 in older programs. This warning is on by default. 9212 9213 `-Werror' 9214 Make all warnings into hard errors. Source code which triggers 9215 warnings will be rejected. 9216 9217 `-Wsystem-headers' 9218 Issue warnings for code in system headers. These are normally 9219 unhelpful in finding bugs in your own code, therefore suppressed. 9220 If you are responsible for the system library, you may want to see 9221 them. 9222 9223 `-w' 9224 Suppress all warnings, including those which GNU CPP issues by 9225 default. 9226 9227 `-pedantic' 9228 Issue all the mandatory diagnostics listed in the C standard. 9229 Some of them are left out by default, since they trigger 9230 frequently on harmless code. 9231 9232 `-pedantic-errors' 9233 Issue all the mandatory diagnostics, and make all mandatory 9234 diagnostics into errors. This includes mandatory diagnostics that 9235 GCC issues without `-pedantic' but treats as warnings. 9236 9237 `-M' 9238 Instead of outputting the result of preprocessing, output a rule 9239 suitable for `make' describing the dependencies of the main source 9240 file. The preprocessor outputs one `make' rule containing the 9241 object file name for that source file, a colon, and the names of 9242 all the included files, including those coming from `-include' or 9243 `-imacros' command line options. 9244 9245 Unless specified explicitly (with `-MT' or `-MQ'), the object file 9246 name consists of the name of the source file with any suffix 9247 replaced with object file suffix and with any leading directory 9248 parts removed. If there are many included files then the rule is 9249 split into several lines using `\'-newline. The rule has no 9250 commands. 9251 9252 This option does not suppress the preprocessor's debug output, 9253 such as `-dM'. To avoid mixing such debug output with the 9254 dependency rules you should explicitly specify the dependency 9255 output file with `-MF', or use an environment variable like 9256 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 9257 output will still be sent to the regular output stream as normal. 9258 9259 Passing `-M' to the driver implies `-E', and suppresses warnings 9260 with an implicit `-w'. 9261 9262 `-MM' 9263 Like `-M' but do not mention header files that are found in system 9264 header directories, nor header files that are included, directly 9265 or indirectly, from such a header. 9266 9267 This implies that the choice of angle brackets or double quotes in 9268 an `#include' directive does not in itself determine whether that 9269 header will appear in `-MM' dependency output. This is a slight 9270 change in semantics from GCC versions 3.0 and earlier. 9271 9272 `-MF FILE' 9273 When used with `-M' or `-MM', specifies a file to write the 9274 dependencies to. If no `-MF' switch is given the preprocessor 9275 sends the rules to the same place it would have sent preprocessed 9276 output. 9277 9278 When used with the driver options `-MD' or `-MMD', `-MF' overrides 9279 the default dependency output file. 9280 9281 `-MG' 9282 In conjunction with an option such as `-M' requesting dependency 9283 generation, `-MG' assumes missing header files are generated files 9284 and adds them to the dependency list without raising an error. 9285 The dependency filename is taken directly from the `#include' 9286 directive without prepending any path. `-MG' also suppresses 9287 preprocessed output, as a missing header file renders this useless. 9288 9289 This feature is used in automatic updating of makefiles. 9290 9291 `-MP' 9292 This option instructs CPP to add a phony target for each dependency 9293 other than the main file, causing each to depend on nothing. These 9294 dummy rules work around errors `make' gives if you remove header 9295 files without updating the `Makefile' to match. 9296 9297 This is typical output: 9298 9299 test.o: test.c test.h 9300 9301 test.h: 9302 9303 `-MT TARGET' 9304 Change the target of the rule emitted by dependency generation. By 9305 default CPP takes the name of the main input file, deletes any 9306 directory components and any file suffix such as `.c', and appends 9307 the platform's usual object suffix. The result is the target. 9308 9309 An `-MT' option will set the target to be exactly the string you 9310 specify. If you want multiple targets, you can specify them as a 9311 single argument to `-MT', or use multiple `-MT' options. 9312 9313 For example, `-MT '$(objpfx)foo.o'' might give 9314 9315 $(objpfx)foo.o: foo.c 9316 9317 `-MQ TARGET' 9318 Same as `-MT', but it quotes any characters which are special to 9319 Make. `-MQ '$(objpfx)foo.o'' gives 9320 9321 $$(objpfx)foo.o: foo.c 9322 9323 The default target is automatically quoted, as if it were given 9324 with `-MQ'. 9325 9326 `-MD' 9327 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 9328 implied. The driver determines FILE based on whether an `-o' 9329 option is given. If it is, the driver uses its argument but with 9330 a suffix of `.d', otherwise it takes the name of the input file, 9331 removes any directory components and suffix, and applies a `.d' 9332 suffix. 9333 9334 If `-MD' is used in conjunction with `-E', any `-o' switch is 9335 understood to specify the dependency output file (*note -MF: 9336 dashMF.), but if used without `-E', each `-o' is understood to 9337 specify a target object file. 9338 9339 Since `-E' is not implied, `-MD' can be used to generate a 9340 dependency output file as a side-effect of the compilation process. 9341 9342 `-MMD' 9343 Like `-MD' except mention only user header files, not system 9344 header files. 9345 9346 `-fpch-deps' 9347 When using precompiled headers (*note Precompiled Headers::), this 9348 flag will cause the dependency-output flags to also list the files 9349 from the precompiled header's dependencies. If not specified only 9350 the precompiled header would be listed and not the files that were 9351 used to create it because those files are not consulted when a 9352 precompiled header is used. 9353 9354 `-fpch-preprocess' 9355 This option allows use of a precompiled header (*note Precompiled 9356 Headers::) together with `-E'. It inserts a special `#pragma', 9357 `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the 9358 place where the precompiled header was found, and its FILENAME. 9359 When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and 9360 loads the PCH. 9361 9362 This option is off by default, because the resulting preprocessed 9363 output is only really suitable as input to GCC. It is switched on 9364 by `-save-temps'. 9365 9366 You should not write this `#pragma' in your own code, but it is 9367 safe to edit the filename if the PCH file is available in a 9368 different location. The filename may be absolute or it may be 9369 relative to GCC's current directory. 9370 9371 `-x c' 9372 `-x c++' 9373 `-x objective-c' 9374 `-x assembler-with-cpp' 9375 Specify the source language: C, C++, Objective-C, or assembly. 9376 This has nothing to do with standards conformance or extensions; 9377 it merely selects which base syntax to expect. If you give none 9378 of these options, cpp will deduce the language from the extension 9379 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 9380 extensions for C++ and assembly are also recognized. If cpp does 9381 not recognize the extension, it will treat the file as C; this is 9382 the most generic mode. 9383 9384 _Note:_ Previous versions of cpp accepted a `-lang' option which 9385 selected both the language and the standards conformance level. 9386 This option has been removed, because it conflicts with the `-l' 9387 option. 9388 9389 `-std=STANDARD' 9390 `-ansi' 9391 Specify the standard to which the code should conform. Currently 9392 CPP knows about C and C++ standards; others may be added in the 9393 future. 9394 9395 STANDARD may be one of: 9396 `c90' 9397 `c89' 9398 `iso9899:1990' 9399 The ISO C standard from 1990. `c90' is the customary 9400 shorthand for this version of the standard. 9401 9402 The `-ansi' option is equivalent to `-std=c90'. 9403 9404 `iso9899:199409' 9405 The 1990 C standard, as amended in 1994. 9406 9407 `iso9899:1999' 9408 `c99' 9409 `iso9899:199x' 9410 `c9x' 9411 The revised ISO C standard, published in December 1999. 9412 Before publication, this was known as C9X. 9413 9414 `iso9899:2011' 9415 `c11' 9416 `c1x' 9417 The revised ISO C standard, published in December 2011. 9418 Before publication, this was known as C1X. 9419 9420 `gnu90' 9421 `gnu89' 9422 The 1990 C standard plus GNU extensions. This is the default. 9423 9424 `gnu99' 9425 `gnu9x' 9426 The 1999 C standard plus GNU extensions. 9427 9428 `gnu11' 9429 `gnu1x' 9430 The 2011 C standard plus GNU extensions. 9431 9432 `c++98' 9433 The 1998 ISO C++ standard plus amendments. 9434 9435 `gnu++98' 9436 The same as `-std=c++98' plus GNU extensions. This is the 9437 default for C++ code. 9438 9439 `-I-' 9440 Split the include path. Any directories specified with `-I' 9441 options before `-I-' are searched only for headers requested with 9442 `#include "FILE"'; they are not searched for `#include <FILE>'. 9443 If additional directories are specified with `-I' options after 9444 the `-I-', those directories are searched for all `#include' 9445 directives. 9446 9447 In addition, `-I-' inhibits the use of the directory of the current 9448 file directory as the first search directory for `#include "FILE"'. 9449 This option has been deprecated. 9450 9451 `-nostdinc' 9452 Do not search the standard system directories for header files. 9453 Only the directories you have specified with `-I' options (and the 9454 directory of the current file, if appropriate) are searched. 9455 9456 `-nostdinc++' 9457 Do not search for header files in the C++-specific standard 9458 directories, but do still search the other standard directories. 9459 (This option is used when building the C++ library.) 9460 9461 `-include FILE' 9462 Process FILE as if `#include "file"' appeared as the first line of 9463 the primary source file. However, the first directory searched 9464 for FILE is the preprocessor's working directory _instead of_ the 9465 directory containing the main source file. If not found there, it 9466 is searched for in the remainder of the `#include "..."' search 9467 chain as normal. 9468 9469 If multiple `-include' options are given, the files are included 9470 in the order they appear on the command line. 9471 9472 `-imacros FILE' 9473 Exactly like `-include', except that any output produced by 9474 scanning FILE is thrown away. Macros it defines remain defined. 9475 This allows you to acquire all the macros from a header without 9476 also processing its declarations. 9477 9478 All files specified by `-imacros' are processed before all files 9479 specified by `-include'. 9480 9481 `-idirafter DIR' 9482 Search DIR for header files, but do it _after_ all directories 9483 specified with `-I' and the standard system directories have been 9484 exhausted. DIR is treated as a system include directory. If DIR 9485 begins with `=', then the `=' will be replaced by the sysroot 9486 prefix; see `--sysroot' and `-isysroot'. 9487 9488 `-iprefix PREFIX' 9489 Specify PREFIX as the prefix for subsequent `-iwithprefix' 9490 options. If the prefix represents a directory, you should include 9491 the final `/'. 9492 9493 `-iwithprefix DIR' 9494 `-iwithprefixbefore DIR' 9495 Append DIR to the prefix specified previously with `-iprefix', and 9496 add the resulting directory to the include search path. 9497 `-iwithprefixbefore' puts it in the same place `-I' would; 9498 `-iwithprefix' puts it where `-idirafter' would. 9499 9500 `-isysroot DIR' 9501 This option is like the `--sysroot' option, but applies only to 9502 header files (except for Darwin targets, where it applies to both 9503 header files and libraries). See the `--sysroot' option for more 9504 information. 9505 9506 `-imultilib DIR' 9507 Use DIR as a subdirectory of the directory containing 9508 target-specific C++ headers. 9509 9510 `-isystem DIR' 9511 Search DIR for header files, after all directories specified by 9512 `-I' but before the standard system directories. Mark it as a 9513 system directory, so that it gets the same special treatment as is 9514 applied to the standard system directories. If DIR begins with 9515 `=', then the `=' will be replaced by the sysroot prefix; see 9516 `--sysroot' and `-isysroot'. 9517 9518 `-iquote DIR' 9519 Search DIR only for header files requested with `#include "FILE"'; 9520 they are not searched for `#include <FILE>', before all 9521 directories specified by `-I' and before the standard system 9522 directories. If DIR begins with `=', then the `=' will be replaced 9523 by the sysroot prefix; see `--sysroot' and `-isysroot'. 9524 9525 `-fdirectives-only' 9526 When preprocessing, handle directives, but do not expand macros. 9527 9528 The option's behavior depends on the `-E' and `-fpreprocessed' 9529 options. 9530 9531 With `-E', preprocessing is limited to the handling of directives 9532 such as `#define', `#ifdef', and `#error'. Other preprocessor 9533 operations, such as macro expansion and trigraph conversion are 9534 not performed. In addition, the `-dD' option is implicitly 9535 enabled. 9536 9537 With `-fpreprocessed', predefinition of command line and most 9538 builtin macros is disabled. Macros such as `__LINE__', which are 9539 contextually dependent, are handled normally. This enables 9540 compilation of files previously preprocessed with `-E 9541 -fdirectives-only'. 9542 9543 With both `-E' and `-fpreprocessed', the rules for 9544 `-fpreprocessed' take precedence. This enables full preprocessing 9545 of files previously preprocessed with `-E -fdirectives-only'. 9546 9547 `-fdollars-in-identifiers' 9548 Accept `$' in identifiers. 9549 9550 `-fextended-identifiers' 9551 Accept universal character names in identifiers. This option is 9552 experimental; in a future version of GCC, it will be enabled by 9553 default for C99 and C++. 9554 9555 `-fno-canonical-system-headers' 9556 When preprocessing, do not shorten system header paths with 9557 canonicalization. 9558 9559 `-fpreprocessed' 9560 Indicate to the preprocessor that the input file has already been 9561 preprocessed. This suppresses things like macro expansion, 9562 trigraph conversion, escaped newline splicing, and processing of 9563 most directives. The preprocessor still recognizes and removes 9564 comments, so that you can pass a file preprocessed with `-C' to 9565 the compiler without problems. In this mode the integrated 9566 preprocessor is little more than a tokenizer for the front ends. 9567 9568 `-fpreprocessed' is implicit if the input file has one of the 9569 extensions `.i', `.ii' or `.mi'. These are the extensions that 9570 GCC uses for preprocessed files created by `-save-temps'. 9571 9572 `-ftabstop=WIDTH' 9573 Set the distance between tab stops. This helps the preprocessor 9574 report correct column numbers in warnings or errors, even if tabs 9575 appear on the line. If the value is less than 1 or greater than 9576 100, the option is ignored. The default is 8. 9577 9578 `-fdebug-cpp' 9579 This option is only useful for debugging GCC. When used with 9580 `-E', dumps debugging information about location maps. Every 9581 token in the output is preceded by the dump of the map its location 9582 belongs to. The dump of the map holding the location of a token 9583 would be: 9584 {`P':`/file/path';`F':`/includer/path';`L':LINE_NUM;`C':COL_NUM;`S':SYSTEM_HEADER_P;`M':MAP_ADDRESS;`E':MACRO_EXPANSION_P,`loc':LOCATION} 9585 9586 When used without `-E', this option has no effect. 9587 9588 `-ftrack-macro-expansion[=LEVEL]' 9589 Track locations of tokens across macro expansions. This allows the 9590 compiler to emit diagnostic about the current macro expansion stack 9591 when a compilation error occurs in a macro expansion. Using this 9592 option makes the preprocessor and the compiler consume more 9593 memory. The LEVEL parameter can be used to choose the level of 9594 precision of token location tracking thus decreasing the memory 9595 consumption if necessary. Value `0' of LEVEL de-activates this 9596 option just as if no `-ftrack-macro-expansion' was present on the 9597 command line. Value `1' tracks tokens locations in a degraded mode 9598 for the sake of minimal memory overhead. In this mode all tokens 9599 resulting from the expansion of an argument of a function-like 9600 macro have the same location. Value `2' tracks tokens locations 9601 completely. This value is the most memory hungry. When this 9602 option is given no argument, the default parameter value is `2'. 9603 9604 Note that -ftrack-macro-expansion=2 is activated by default. 9605 9606 `-fexec-charset=CHARSET' 9607 Set the execution character set, used for string and character 9608 constants. The default is UTF-8. CHARSET can be any encoding 9609 supported by the system's `iconv' library routine. 9610 9611 `-fwide-exec-charset=CHARSET' 9612 Set the wide execution character set, used for wide string and 9613 character constants. The default is UTF-32 or UTF-16, whichever 9614 corresponds to the width of `wchar_t'. As with `-fexec-charset', 9615 CHARSET can be any encoding supported by the system's `iconv' 9616 library routine; however, you will have problems with encodings 9617 that do not fit exactly in `wchar_t'. 9618 9619 `-finput-charset=CHARSET' 9620 Set the input character set, used for translation from the 9621 character set of the input file to the source character set used 9622 by GCC. If the locale does not specify, or GCC cannot get this 9623 information from the locale, the default is UTF-8. This can be 9624 overridden by either the locale or this command line option. 9625 Currently the command line option takes precedence if there's a 9626 conflict. CHARSET can be any encoding supported by the system's 9627 `iconv' library routine. 9628 9629 `-fworking-directory' 9630 Enable generation of linemarkers in the preprocessor output that 9631 will let the compiler know the current working directory at the 9632 time of preprocessing. When this option is enabled, the 9633 preprocessor will emit, after the initial linemarker, a second 9634 linemarker with the current working directory followed by two 9635 slashes. GCC will use this directory, when it's present in the 9636 preprocessed input, as the directory emitted as the current 9637 working directory in some debugging information formats. This 9638 option is implicitly enabled if debugging information is enabled, 9639 but this can be inhibited with the negated form 9640 `-fno-working-directory'. If the `-P' flag is present in the 9641 command line, this option has no effect, since no `#line' 9642 directives are emitted whatsoever. 9643 9644 `-fno-show-column' 9645 Do not print column numbers in diagnostics. This may be necessary 9646 if diagnostics are being scanned by a program that does not 9647 understand the column numbers, such as `dejagnu'. 9648 9649 `-A PREDICATE=ANSWER' 9650 Make an assertion with the predicate PREDICATE and answer ANSWER. 9651 This form is preferred to the older form `-A PREDICATE(ANSWER)', 9652 which is still supported, because it does not use shell special 9653 characters. 9654 9655 `-A -PREDICATE=ANSWER' 9656 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 9657 9658 `-dCHARS' 9659 CHARS is a sequence of one or more of the following characters, 9660 and must not be preceded by a space. Other characters are 9661 interpreted by the compiler proper, or reserved for future 9662 versions of GCC, and so are silently ignored. If you specify 9663 characters whose behavior conflicts, the result is undefined. 9664 9665 `M' 9666 Instead of the normal output, generate a list of `#define' 9667 directives for all the macros defined during the execution of 9668 the preprocessor, including predefined macros. This gives 9669 you a way of finding out what is predefined in your version 9670 of the preprocessor. Assuming you have no file `foo.h', the 9671 command 9672 9673 touch foo.h; cpp -dM foo.h 9674 9675 will show all the predefined macros. 9676 9677 If you use `-dM' without the `-E' option, `-dM' is 9678 interpreted as a synonym for `-fdump-rtl-mach'. *Note 9679 Debugging Options: (gcc)Debugging Options. 9680 9681 `D' 9682 Like `M' except in two respects: it does _not_ include the 9683 predefined macros, and it outputs _both_ the `#define' 9684 directives and the result of preprocessing. Both kinds of 9685 output go to the standard output file. 9686 9687 `N' 9688 Like `D', but emit only the macro names, not their expansions. 9689 9690 `I' 9691 Output `#include' directives in addition to the result of 9692 preprocessing. 9693 9694 `U' 9695 Like `D' except that only macros that are expanded, or whose 9696 definedness is tested in preprocessor directives, are output; 9697 the output is delayed until the use or test of the macro; and 9698 `#undef' directives are also output for macros tested but 9699 undefined at the time. 9700 9701 `-P' 9702 Inhibit generation of linemarkers in the output from the 9703 preprocessor. This might be useful when running the preprocessor 9704 on something that is not C code, and will be sent to a program 9705 which might be confused by the linemarkers. 9706 9707 `-C' 9708 Do not discard comments. All comments are passed through to the 9709 output file, except for comments in processed directives, which 9710 are deleted along with the directive. 9711 9712 You should be prepared for side effects when using `-C'; it causes 9713 the preprocessor to treat comments as tokens in their own right. 9714 For example, comments appearing at the start of what would be a 9715 directive line have the effect of turning that line into an 9716 ordinary source line, since the first token on the line is no 9717 longer a `#'. 9718 9719 `-CC' 9720 Do not discard comments, including during macro expansion. This is 9721 like `-C', except that comments contained within macros are also 9722 passed through to the output file where the macro is expanded. 9723 9724 In addition to the side-effects of the `-C' option, the `-CC' 9725 option causes all C++-style comments inside a macro to be 9726 converted to C-style comments. This is to prevent later use of 9727 that macro from inadvertently commenting out the remainder of the 9728 source line. 9729 9730 The `-CC' option is generally used to support lint comments. 9731 9732 `-traditional-cpp' 9733 Try to imitate the behavior of old-fashioned C preprocessors, as 9734 opposed to ISO C preprocessors. 9735 9736 `-trigraphs' 9737 Process trigraph sequences. These are three-character sequences, 9738 all starting with `??', that are defined by ISO C to stand for 9739 single characters. For example, `??/' stands for `\', so `'??/n'' 9740 is a character constant for a newline. By default, GCC ignores 9741 trigraphs, but in standard-conforming modes it converts them. See 9742 the `-std' and `-ansi' options. 9743 9744 The nine trigraphs and their replacements are 9745 9746 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 9747 Replacement: [ ] { } # \ ^ | ~ 9748 9749 `-remap' 9750 Enable special code to work around file systems which only permit 9751 very short file names, such as MS-DOS. 9752 9753 `--help' 9754 `--target-help' 9755 Print text describing all the command line options instead of 9756 preprocessing anything. 9757 9758 `-v' 9759 Verbose mode. Print out GNU CPP's version number at the beginning 9760 of execution, and report the final form of the include path. 9761 9762 `-H' 9763 Print the name of each header file used, in addition to other 9764 normal activities. Each name is indented to show how deep in the 9765 `#include' stack it is. Precompiled header files are also 9766 printed, even if they are found to be invalid; an invalid 9767 precompiled header file is printed with `...x' and a valid one 9768 with `...!' . 9769 9770 `-version' 9771 `--version' 9772 Print out GNU CPP's version number. With one dash, proceed to 9773 preprocess as normal. With two dashes, exit immediately. 9774 9775 9776 File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 9777 9778 3.12 Passing Options to the Assembler 9779 ===================================== 9780 9781 You can pass options to the assembler. 9782 9783 `-Wa,OPTION' 9784 Pass OPTION as an option to the assembler. If OPTION contains 9785 commas, it is split into multiple options at the commas. 9786 9787 `-Xassembler OPTION' 9788 Pass OPTION as an option to the assembler. You can use this to 9789 supply system-specific assembler options that GCC does not 9790 recognize. 9791 9792 If you want to pass an option that takes an argument, you must use 9793 `-Xassembler' twice, once for the option and once for the argument. 9794 9795 9796 9797 File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 9798 9799 3.13 Options for Linking 9800 ======================== 9801 9802 These options come into play when the compiler links object files into 9803 an executable output file. They are meaningless if the compiler is not 9804 doing a link step. 9805 9806 `OBJECT-FILE-NAME' 9807 A file name that does not end in a special recognized suffix is 9808 considered to name an object file or library. (Object files are 9809 distinguished from libraries by the linker according to the file 9810 contents.) If linking is done, these object files are used as 9811 input to the linker. 9812 9813 `-c' 9814 `-S' 9815 `-E' 9816 If any of these options is used, then the linker is not run, and 9817 object file names should not be used as arguments. *Note Overall 9818 Options::. 9819 9820 `-lLIBRARY' 9821 `-l LIBRARY' 9822 Search the library named LIBRARY when linking. (The second 9823 alternative with the library as a separate argument is only for 9824 POSIX compliance and is not recommended.) 9825 9826 It makes a difference where in the command you write this option; 9827 the linker searches and processes libraries and object files in 9828 the order they are specified. Thus, `foo.o -lz bar.o' searches 9829 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 9830 refers to functions in `z', those functions may not be loaded. 9831 9832 The linker searches a standard list of directories for the library, 9833 which is actually a file named `libLIBRARY.a'. The linker then 9834 uses this file as if it had been specified precisely by name. 9835 9836 The directories searched include several standard system 9837 directories plus any that you specify with `-L'. 9838 9839 Normally the files found this way are library files--archive files 9840 whose members are object files. The linker handles an archive 9841 file by scanning through it for members which define symbols that 9842 have so far been referenced but not defined. But if the file that 9843 is found is an ordinary object file, it is linked in the usual 9844 fashion. The only difference between using an `-l' option and 9845 specifying a file name is that `-l' surrounds LIBRARY with `lib' 9846 and `.a' and searches several directories. 9847 9848 `-lobjc' 9849 You need this special case of the `-l' option in order to link an 9850 Objective-C or Objective-C++ program. 9851 9852 `-nostartfiles' 9853 Do not use the standard system startup files when linking. The 9854 standard system libraries are used normally, unless `-nostdlib' or 9855 `-nodefaultlibs' is used. 9856 9857 `-nodefaultlibs' 9858 Do not use the standard system libraries when linking. Only the 9859 libraries you specify are passed to the linker, and options 9860 specifying linkage of the system libraries, such as 9861 `-static-libgcc' or `-shared-libgcc', are ignored. The standard 9862 startup files are used normally, unless `-nostartfiles' is used. 9863 9864 The compiler may generate calls to `memcmp', `memset', `memcpy' 9865 and `memmove'. These entries are usually resolved by entries in 9866 libc. These entry points should be supplied through some other 9867 mechanism when this option is specified. 9868 9869 `-nostdlib' 9870 Do not use the standard system startup files or libraries when 9871 linking. No startup files and only the libraries you specify are 9872 passed to the linker, and options specifying linkage of the system 9873 libraries, such as `-static-libgcc' or `-shared-libgcc', are 9874 ignored. 9875 9876 The compiler may generate calls to `memcmp', `memset', `memcpy' 9877 and `memmove'. These entries are usually resolved by entries in 9878 libc. These entry points should be supplied through some other 9879 mechanism when this option is specified. 9880 9881 One of the standard libraries bypassed by `-nostdlib' and 9882 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 9883 which GCC uses to overcome shortcomings of particular machines, or 9884 special needs for some languages. (*Note Interfacing to GCC 9885 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 9886 most cases, you need `libgcc.a' even when you want to avoid other 9887 standard libraries. In other words, when you specify `-nostdlib' 9888 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 9889 This ensures that you have no unresolved references to internal GCC 9890 library subroutines. (An example of such an internal subroutine 9891 is `__main', used to ensure C++ constructors are called; *note 9892 `collect2': (gccint)Collect2.) 9893 9894 `-pie' 9895 Produce a position independent executable on targets that support 9896 it. For predictable results, you must also specify the same set 9897 of options used for compilation (`-fpie', `-fPIE', or model 9898 suboptions) when you specify this linker option. 9899 9900 `-rdynamic' 9901 Pass the flag `-export-dynamic' to the ELF linker, on targets that 9902 support it. This instructs the linker to add all symbols, not only 9903 used ones, to the dynamic symbol table. This option is needed for 9904 some uses of `dlopen' or to allow obtaining backtraces from within 9905 a program. 9906 9907 `-s' 9908 Remove all symbol table and relocation information from the 9909 executable. 9910 9911 `-static' 9912 On systems that support dynamic linking, this prevents linking 9913 with the shared libraries. On other systems, this option has no 9914 effect. 9915 9916 `-shared' 9917 Produce a shared object which can then be linked with other 9918 objects to form an executable. Not all systems support this 9919 option. For predictable results, you must also specify the same 9920 set of options used for compilation (`-fpic', `-fPIC', or model 9921 suboptions) when you specify this linker option.(1) 9922 9923 `-shared-libgcc' 9924 `-static-libgcc' 9925 On systems that provide `libgcc' as a shared library, these options 9926 force the use of either the shared or static version, respectively. 9927 If no shared version of `libgcc' was built when the compiler was 9928 configured, these options have no effect. 9929 9930 There are several situations in which an application should use the 9931 shared `libgcc' instead of the static version. The most common of 9932 these is when the application wishes to throw and catch exceptions 9933 across different shared libraries. In that case, each of the 9934 libraries as well as the application itself should use the shared 9935 `libgcc'. 9936 9937 Therefore, the G++ and GCJ drivers automatically add 9938 `-shared-libgcc' whenever you build a shared library or a main 9939 executable, because C++ and Java programs typically use 9940 exceptions, so this is the right thing to do. 9941 9942 If, instead, you use the GCC driver to create shared libraries, 9943 you may find that they are not always linked with the shared 9944 `libgcc'. If GCC finds, at its configuration time, that you have 9945 a non-GNU linker or a GNU linker that does not support option 9946 `--eh-frame-hdr', it links the shared version of `libgcc' into 9947 shared libraries by default. Otherwise, it takes advantage of the 9948 linker and optimizes away the linking with the shared version of 9949 `libgcc', linking with the static version of libgcc by default. 9950 This allows exceptions to propagate through such shared libraries, 9951 without incurring relocation costs at library load time. 9952 9953 However, if a library or main executable is supposed to throw or 9954 catch exceptions, you must link it using the G++ or GCJ driver, as 9955 appropriate for the languages used in the program, or using the 9956 option `-shared-libgcc', such that it is linked with the shared 9957 `libgcc'. 9958 9959 `-static-libasan' 9960 When the `-fsanitize=address' option is used to link a program, 9961 the GCC driver automatically links against `libasan'. If 9962 `libasan' is available as a shared library, and the `-static' 9963 option is not used, then this links against the shared version of 9964 `libasan'. The `-static-libasan' option directs the GCC driver to 9965 link `libasan' statically, without necessarily linking other 9966 libraries statically. 9967 9968 `-static-libtsan' 9969 When the `-fsanitize=thread' option is used to link a program, the 9970 GCC driver automatically links against `libtsan'. If `libtsan' is 9971 available as a shared library, and the `-static' option is not 9972 used, then this links against the shared version of `libtsan'. 9973 The `-static-libtsan' option directs the GCC driver to link 9974 `libtsan' statically, without necessarily linking other libraries 9975 statically. 9976 9977 `-static-libstdc++' 9978 When the `g++' program is used to link a C++ program, it normally 9979 automatically links against `libstdc++'. If `libstdc++' is 9980 available as a shared library, and the `-static' option is not 9981 used, then this links against the shared version of `libstdc++'. 9982 That is normally fine. However, it is sometimes useful to freeze 9983 the version of `libstdc++' used by the program without going all 9984 the way to a fully static link. The `-static-libstdc++' option 9985 directs the `g++' driver to link `libstdc++' statically, without 9986 necessarily linking other libraries statically. 9987 9988 `-symbolic' 9989 Bind references to global symbols when building a shared object. 9990 Warn about any unresolved references (unless overridden by the 9991 link editor option `-Xlinker -z -Xlinker defs'). Only a few 9992 systems support this option. 9993 9994 `-T SCRIPT' 9995 Use SCRIPT as the linker script. This option is supported by most 9996 systems using the GNU linker. On some targets, such as bare-board 9997 targets without an operating system, the `-T' option may be 9998 required when linking to avoid references to undefined symbols. 9999 10000 `-Xlinker OPTION' 10001 Pass OPTION as an option to the linker. You can use this to 10002 supply system-specific linker options that GCC does not recognize. 10003 10004 If you want to pass an option that takes a separate argument, you 10005 must use `-Xlinker' twice, once for the option and once for the 10006 argument. For example, to pass `-assert definitions', you must 10007 write `-Xlinker -assert -Xlinker definitions'. It does not work 10008 to write `-Xlinker "-assert definitions"', because this passes the 10009 entire string as a single argument, which is not what the linker 10010 expects. 10011 10012 When using the GNU linker, it is usually more convenient to pass 10013 arguments to linker options using the `OPTION=VALUE' syntax than 10014 as separate arguments. For example, you can specify `-Xlinker 10015 -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'. 10016 Other linkers may not support this syntax for command-line options. 10017 10018 `-Wl,OPTION' 10019 Pass OPTION as an option to the linker. If OPTION contains 10020 commas, it is split into multiple options at the commas. You can 10021 use this syntax to pass an argument to the option. For example, 10022 `-Wl,-Map,output.map' passes `-Map output.map' to the linker. 10023 When using the GNU linker, you can also get the same effect with 10024 `-Wl,-Map=output.map'. 10025 10026 `-u SYMBOL' 10027 Pretend the symbol SYMBOL is undefined, to force linking of 10028 library modules to define it. You can use `-u' multiple times with 10029 different symbols to force loading of additional library modules. 10030 10031 ---------- Footnotes ---------- 10032 10033 (1) On some systems, `gcc -shared' needs to build supplementary stub 10034 code for constructors to work. On multi-libbed systems, `gcc -shared' 10035 must select the correct support libraries to link against. Failing to 10036 supply the correct flags may lead to subtle defects. Supplying them in 10037 cases where they are not necessary is innocuous. 10038 10039 10040 File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 10041 10042 3.14 Options for Directory Search 10043 ================================= 10044 10045 These options specify directories to search for header files, for 10046 libraries and for parts of the compiler: 10047 10048 `-IDIR' 10049 Add the directory DIR to the head of the list of directories to be 10050 searched for header files. This can be used to override a system 10051 header file, substituting your own version, since these 10052 directories are searched before the system header file 10053 directories. However, you should not use this option to add 10054 directories that contain vendor-supplied system header files (use 10055 `-isystem' for that). If you use more than one `-I' option, the 10056 directories are scanned in left-to-right order; the standard 10057 system directories come after. 10058 10059 If a standard system include directory, or a directory specified 10060 with `-isystem', is also specified with `-I', the `-I' option is 10061 ignored. The directory is still searched but as a system 10062 directory at its normal position in the system include chain. 10063 This is to ensure that GCC's procedure to fix buggy system headers 10064 and the ordering for the `include_next' directive are not 10065 inadvertently changed. If you really need to change the search 10066 order for system directories, use the `-nostdinc' and/or 10067 `-isystem' options. 10068 10069 `-iplugindir=DIR' 10070 Set the directory to search for plugins that are passed by 10071 `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'. This option 10072 is not meant to be used by the user, but only passed by the driver. 10073 10074 `-iquoteDIR' 10075 Add the directory DIR to the head of the list of directories to be 10076 searched for header files only for the case of `#include "FILE"'; 10077 they are not searched for `#include <FILE>', otherwise just like 10078 `-I'. 10079 10080 `-LDIR' 10081 Add directory DIR to the list of directories to be searched for 10082 `-l'. 10083 10084 `-BPREFIX' 10085 This option specifies where to find the executables, libraries, 10086 include files, and data files of the compiler itself. 10087 10088 The compiler driver program runs one or more of the subprograms 10089 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 10090 program it tries to run, both with and without `MACHINE/VERSION/' 10091 (*note Target Options::). 10092 10093 For each subprogram to be run, the compiler driver first tries the 10094 `-B' prefix, if any. If that name is not found, or if `-B' is not 10095 specified, the driver tries two standard prefixes, `/usr/lib/gcc/' 10096 and `/usr/local/lib/gcc/'. If neither of those results in a file 10097 name that is found, the unmodified program name is searched for 10098 using the directories specified in your `PATH' environment 10099 variable. 10100 10101 The compiler checks to see if the path provided by the `-B' refers 10102 to a directory, and if necessary it adds a directory separator 10103 character at the end of the path. 10104 10105 `-B' prefixes that effectively specify directory names also apply 10106 to libraries in the linker, because the compiler translates these 10107 options into `-L' options for the linker. They also apply to 10108 includes files in the preprocessor, because the compiler 10109 translates these options into `-isystem' options for the 10110 preprocessor. In this case, the compiler appends `include' to the 10111 prefix. 10112 10113 The runtime support file `libgcc.a' can also be searched for using 10114 the `-B' prefix, if needed. If it is not found there, the two 10115 standard prefixes above are tried, and that is all. The file is 10116 left out of the link if it is not found by those means. 10117 10118 Another way to specify a prefix much like the `-B' prefix is to use 10119 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 10120 Variables::. 10121 10122 As a special kludge, if the path provided by `-B' is 10123 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 10124 is replaced by `[dir/]include'. This is to help with 10125 boot-strapping the compiler. 10126 10127 `-specs=FILE' 10128 Process FILE after the compiler reads in the standard `specs' 10129 file, in order to override the defaults which the `gcc' driver 10130 program uses when determining what switches to pass to `cc1', 10131 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 10132 specified on the command line, and they are processed in order, 10133 from left to right. 10134 10135 `--sysroot=DIR' 10136 Use DIR as the logical root directory for headers and libraries. 10137 For example, if the compiler normally searches for headers in 10138 `/usr/include' and libraries in `/usr/lib', it instead searches 10139 `DIR/usr/include' and `DIR/usr/lib'. 10140 10141 If you use both this option and the `-isysroot' option, then the 10142 `--sysroot' option applies to libraries, but the `-isysroot' 10143 option applies to header files. 10144 10145 The GNU linker (beginning with version 2.16) has the necessary 10146 support for this option. If your linker does not support this 10147 option, the header file aspect of `--sysroot' still works, but the 10148 library aspect does not. 10149 10150 `--no-sysroot-suffix' 10151 For some targets, a suffix is added to the root directory specified 10152 with `--sysroot', depending on the other options used, so that 10153 headers may for example be found in `DIR/SUFFIX/usr/include' 10154 instead of `DIR/usr/include'. This option disables the addition of 10155 such a suffix. 10156 10157 `-I-' 10158 This option has been deprecated. Please use `-iquote' instead for 10159 `-I' directories before the `-I-' and remove the `-I-'. Any 10160 directories you specify with `-I' options before the `-I-' option 10161 are searched only for the case of `#include "FILE"'; they are not 10162 searched for `#include <FILE>'. 10163 10164 If additional directories are specified with `-I' options after 10165 the `-I-', these directories are searched for all `#include' 10166 directives. (Ordinarily _all_ `-I' directories are used this way.) 10167 10168 In addition, the `-I-' option inhibits the use of the current 10169 directory (where the current input file came from) as the first 10170 search directory for `#include "FILE"'. There is no way to 10171 override this effect of `-I-'. With `-I.' you can specify 10172 searching the directory that is current when the compiler is 10173 invoked. That is not exactly the same as what the preprocessor 10174 does by default, but it is often satisfactory. 10175 10176 `-I-' does not inhibit the use of the standard system directories 10177 for header files. Thus, `-I-' and `-nostdinc' are independent. 10178 10179 10180 File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 10181 10182 3.15 Specifying subprocesses and the switches to pass to them 10183 ============================================================= 10184 10185 `gcc' is a driver program. It performs its job by invoking a sequence 10186 of other programs to do the work of compiling, assembling and linking. 10187 GCC interprets its command-line parameters and uses these to deduce 10188 which programs it should invoke, and which command-line options it 10189 ought to place on their command lines. This behavior is controlled by 10190 "spec strings". In most cases there is one spec string for each 10191 program that GCC can invoke, but a few programs have multiple spec 10192 strings to control their behavior. The spec strings built into GCC can 10193 be overridden by using the `-specs=' command-line switch to specify a 10194 spec file. 10195 10196 "Spec files" are plaintext files that are used to construct spec 10197 strings. They consist of a sequence of directives separated by blank 10198 lines. The type of directive is determined by the first non-whitespace 10199 character on the line, which can be one of the following: 10200 10201 `%COMMAND' 10202 Issues a COMMAND to the spec file processor. The commands that can 10203 appear here are: 10204 10205 `%include <FILE>' 10206 Search for FILE and insert its text at the current point in 10207 the specs file. 10208 10209 `%include_noerr <FILE>' 10210 Just like `%include', but do not generate an error message if 10211 the include file cannot be found. 10212 10213 `%rename OLD_NAME NEW_NAME' 10214 Rename the spec string OLD_NAME to NEW_NAME. 10215 10216 10217 `*[SPEC_NAME]:' 10218 This tells the compiler to create, override or delete the named 10219 spec string. All lines after this directive up to the next 10220 directive or blank line are considered to be the text for the spec 10221 string. If this results in an empty string then the spec is 10222 deleted. (Or, if the spec did not exist, then nothing happens.) 10223 Otherwise, if the spec does not currently exist a new spec is 10224 created. If the spec does exist then its contents are overridden 10225 by the text of this directive, unless the first character of that 10226 text is the `+' character, in which case the text is appended to 10227 the spec. 10228 10229 `[SUFFIX]:' 10230 Creates a new `[SUFFIX] spec' pair. All lines after this directive 10231 and up to the next directive or blank line are considered to make 10232 up the spec string for the indicated suffix. When the compiler 10233 encounters an input file with the named suffix, it processes the 10234 spec string in order to work out how to compile that file. For 10235 example: 10236 10237 .ZZ: 10238 z-compile -input %i 10239 10240 This says that any input file whose name ends in `.ZZ' should be 10241 passed to the program `z-compile', which should be invoked with the 10242 command-line switch `-input' and with the result of performing the 10243 `%i' substitution. (See below.) 10244 10245 As an alternative to providing a spec string, the text following a 10246 suffix directive can be one of the following: 10247 10248 `@LANGUAGE' 10249 This says that the suffix is an alias for a known LANGUAGE. 10250 This is similar to using the `-x' command-line switch to GCC 10251 to specify a language explicitly. For example: 10252 10253 .ZZ: 10254 @c++ 10255 10256 Says that .ZZ files are, in fact, C++ source files. 10257 10258 `#NAME' 10259 This causes an error messages saying: 10260 10261 NAME compiler not installed on this system. 10262 10263 GCC already has an extensive list of suffixes built into it. This 10264 directive adds an entry to the end of the list of suffixes, but 10265 since the list is searched from the end backwards, it is 10266 effectively possible to override earlier entries using this 10267 technique. 10268 10269 10270 GCC has the following spec strings built into it. Spec files can 10271 override these strings or create their own. Note that individual 10272 targets can also add their own spec strings to this list. 10273 10274 asm Options to pass to the assembler 10275 asm_final Options to pass to the assembler post-processor 10276 cpp Options to pass to the C preprocessor 10277 cc1 Options to pass to the C compiler 10278 cc1plus Options to pass to the C++ compiler 10279 endfile Object files to include at the end of the link 10280 link Options to pass to the linker 10281 lib Libraries to include on the command line to the linker 10282 libgcc Decides which GCC support library to pass to the linker 10283 linker Sets the name of the linker 10284 predefines Defines to be passed to the C preprocessor 10285 signed_char Defines to pass to CPP to say whether `char' is signed 10286 by default 10287 startfile Object files to include at the start of the link 10288 10289 Here is a small example of a spec file: 10290 10291 %rename lib old_lib 10292 10293 *lib: 10294 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 10295 10296 This example renames the spec called `lib' to `old_lib' and then 10297 overrides the previous definition of `lib' with a new one. The new 10298 definition adds in some extra command-line options before including the 10299 text of the old definition. 10300 10301 "Spec strings" are a list of command-line options to be passed to their 10302 corresponding program. In addition, the spec strings can contain 10303 `%'-prefixed sequences to substitute variable text or to conditionally 10304 insert text into the command line. Using these constructs it is 10305 possible to generate quite complex command lines. 10306 10307 Here is a table of all defined `%'-sequences for spec strings. Note 10308 that spaces are not generated automatically around the results of 10309 expanding these sequences. Therefore you can concatenate them together 10310 or combine them with constant text in a single argument. 10311 10312 `%%' 10313 Substitute one `%' into the program name or argument. 10314 10315 `%i' 10316 Substitute the name of the input file being processed. 10317 10318 `%b' 10319 Substitute the basename of the input file being processed. This 10320 is the substring up to (and not including) the last period and not 10321 including the directory. 10322 10323 `%B' 10324 This is the same as `%b', but include the file suffix (text after 10325 the last period). 10326 10327 `%d' 10328 Marks the argument containing or following the `%d' as a temporary 10329 file name, so that that file is deleted if GCC exits successfully. 10330 Unlike `%g', this contributes no text to the argument. 10331 10332 `%gSUFFIX' 10333 Substitute a file name that has suffix SUFFIX and is chosen once 10334 per compilation, and mark the argument in the same way as `%d'. 10335 To reduce exposure to denial-of-service attacks, the file name is 10336 now chosen in a way that is hard to predict even when previously 10337 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 10338 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 10339 matches the regexp `[.A-Za-z]*' or the special string `%O', which 10340 is treated exactly as if `%O' had been preprocessed. Previously, 10341 `%g' was simply substituted with a file name chosen once per 10342 compilation, without regard to any appended suffix (which was 10343 therefore treated just like ordinary text), making such attacks 10344 more likely to succeed. 10345 10346 `%uSUFFIX' 10347 Like `%g', but generates a new temporary file name each time it 10348 appears instead of once per compilation. 10349 10350 `%USUFFIX' 10351 Substitutes the last file name generated with `%uSUFFIX', 10352 generating a new one if there is no such last file name. In the 10353 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 10354 they don't share the same suffix _space_, so `%g.s ... %U.s ... 10355 %g.s ... %U.s' involves the generation of two distinct file names, 10356 one for each `%g.s' and another for each `%U.s'. Previously, `%U' 10357 was simply substituted with a file name chosen for the previous 10358 `%u', without regard to any appended suffix. 10359 10360 `%jSUFFIX' 10361 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 10362 writable, and if `-save-temps' is not used; otherwise, substitute 10363 the name of a temporary file, just like `%u'. This temporary file 10364 is not meant for communication between processes, but rather as a 10365 junk disposal mechanism. 10366 10367 `%|SUFFIX' 10368 `%mSUFFIX' 10369 Like `%g', except if `-pipe' is in effect. In that case `%|' 10370 substitutes a single dash and `%m' substitutes nothing at all. 10371 These are the two most common ways to instruct a program that it 10372 should read from standard input or write to standard output. If 10373 you need something more elaborate you can use an `%{pipe:`X'}' 10374 construct: see for example `f/lang-specs.h'. 10375 10376 `%.SUFFIX' 10377 Substitutes .SUFFIX for the suffixes of a matched switch's args 10378 when it is subsequently output with `%*'. SUFFIX is terminated by 10379 the next space or %. 10380 10381 `%w' 10382 Marks the argument containing or following the `%w' as the 10383 designated output file of this compilation. This puts the argument 10384 into the sequence of arguments that `%o' substitutes. 10385 10386 `%o' 10387 Substitutes the names of all the output files, with spaces 10388 automatically placed around them. You should write spaces around 10389 the `%o' as well or the results are undefined. `%o' is for use in 10390 the specs for running the linker. Input files whose names have no 10391 recognized suffix are not compiled at all, but they are included 10392 among the output files, so they are linked. 10393 10394 `%O' 10395 Substitutes the suffix for object files. Note that this is 10396 handled specially when it immediately follows `%g, %u, or %U', 10397 because of the need for those to form complete file names. The 10398 handling is such that `%O' is treated exactly as if it had already 10399 been substituted, except that `%g, %u, and %U' do not currently 10400 support additional SUFFIX characters following `%O' as they do 10401 following, for example, `.o'. 10402 10403 `%p' 10404 Substitutes the standard macro predefinitions for the current 10405 target machine. Use this when running `cpp'. 10406 10407 `%P' 10408 Like `%p', but puts `__' before and after the name of each 10409 predefined macro, except for macros that start with `__' or with 10410 `_L', where L is an uppercase letter. This is for ISO C. 10411 10412 `%I' 10413 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 10414 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 10415 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 10416 necessary. 10417 10418 `%s' 10419 Current argument is the name of a library or startup file of some 10420 sort. Search for that file in a standard list of directories and 10421 substitute the full name found. The current working directory is 10422 included in the list of directories scanned. 10423 10424 `%T' 10425 Current argument is the name of a linker script. Search for that 10426 file in the current list of directories to scan for libraries. If 10427 the file is located insert a `--script' option into the command 10428 line followed by the full path name found. If the file is not 10429 found then generate an error message. Note: the current working 10430 directory is not searched. 10431 10432 `%eSTR' 10433 Print STR as an error message. STR is terminated by a newline. 10434 Use this when inconsistent options are detected. 10435 10436 `%(NAME)' 10437 Substitute the contents of spec string NAME at this point. 10438 10439 `%x{OPTION}' 10440 Accumulate an option for `%X'. 10441 10442 `%X' 10443 Output the accumulated linker options specified by `-Wl' or a `%x' 10444 spec string. 10445 10446 `%Y' 10447 Output the accumulated assembler options specified by `-Wa'. 10448 10449 `%Z' 10450 Output the accumulated preprocessor options specified by `-Wp'. 10451 10452 `%a' 10453 Process the `asm' spec. This is used to compute the switches to 10454 be passed to the assembler. 10455 10456 `%A' 10457 Process the `asm_final' spec. This is a spec string for passing 10458 switches to an assembler post-processor, if such a program is 10459 needed. 10460 10461 `%l' 10462 Process the `link' spec. This is the spec for computing the 10463 command line passed to the linker. Typically it makes use of the 10464 `%L %G %S %D and %E' sequences. 10465 10466 `%D' 10467 Dump out a `-L' option for each directory that GCC believes might 10468 contain startup files. If the target supports multilibs then the 10469 current multilib directory is prepended to each of these paths. 10470 10471 `%L' 10472 Process the `lib' spec. This is a spec string for deciding which 10473 libraries are included on the command line to the linker. 10474 10475 `%G' 10476 Process the `libgcc' spec. This is a spec string for deciding 10477 which GCC support library is included on the command line to the 10478 linker. 10479 10480 `%S' 10481 Process the `startfile' spec. This is a spec for deciding which 10482 object files are the first ones passed to the linker. Typically 10483 this might be a file named `crt0.o'. 10484 10485 `%E' 10486 Process the `endfile' spec. This is a spec string that specifies 10487 the last object files that are passed to the linker. 10488 10489 `%C' 10490 Process the `cpp' spec. This is used to construct the arguments 10491 to be passed to the C preprocessor. 10492 10493 `%1' 10494 Process the `cc1' spec. This is used to construct the options to 10495 be passed to the actual C compiler (`cc1'). 10496 10497 `%2' 10498 Process the `cc1plus' spec. This is used to construct the options 10499 to be passed to the actual C++ compiler (`cc1plus'). 10500 10501 `%*' 10502 Substitute the variable part of a matched option. See below. 10503 Note that each comma in the substituted string is replaced by a 10504 single space. 10505 10506 `%<`S'' 10507 Remove all occurrences of `-S' from the command line. Note--this 10508 command is position dependent. `%' commands in the spec string 10509 before this one see `-S', `%' commands in the spec string after 10510 this one do not. 10511 10512 `%:FUNCTION(ARGS)' 10513 Call the named function FUNCTION, passing it ARGS. ARGS is first 10514 processed as a nested spec string, then split into an argument 10515 vector in the usual fashion. The function returns a string which 10516 is processed as if it had appeared literally as part of the 10517 current spec. 10518 10519 The following built-in spec functions are provided: 10520 10521 ``getenv'' 10522 The `getenv' spec function takes two arguments: an environment 10523 variable name and a string. If the environment variable is 10524 not defined, a fatal error is issued. Otherwise, the return 10525 value is the value of the environment variable concatenated 10526 with the string. For example, if `TOPDIR' is defined as 10527 `/path/to/top', then: 10528 10529 %:getenv(TOPDIR /include) 10530 10531 expands to `/path/to/top/include'. 10532 10533 ``if-exists'' 10534 The `if-exists' spec function takes one argument, an absolute 10535 pathname to a file. If the file exists, `if-exists' returns 10536 the pathname. Here is a small example of its usage: 10537 10538 *startfile: 10539 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 10540 10541 ``if-exists-else'' 10542 The `if-exists-else' spec function is similar to the 10543 `if-exists' spec function, except that it takes two 10544 arguments. The first argument is an absolute pathname to a 10545 file. If the file exists, `if-exists-else' returns the 10546 pathname. If it does not exist, it returns the second 10547 argument. This way, `if-exists-else' can be used to select 10548 one file or another, based on the existence of the first. 10549 Here is a small example of its usage: 10550 10551 *startfile: 10552 crt0%O%s %:if-exists(crti%O%s) \ 10553 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 10554 10555 ``replace-outfile'' 10556 The `replace-outfile' spec function takes two arguments. It 10557 looks for the first argument in the outfiles array and 10558 replaces it with the second argument. Here is a small 10559 example of its usage: 10560 10561 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 10562 10563 ``remove-outfile'' 10564 The `remove-outfile' spec function takes one argument. It 10565 looks for the first argument in the outfiles array and 10566 removes it. Here is a small example its usage: 10567 10568 %:remove-outfile(-lm) 10569 10570 ``pass-through-libs'' 10571 The `pass-through-libs' spec function takes any number of 10572 arguments. It finds any `-l' options and any non-options 10573 ending in `.a' (which it assumes are the names of linker 10574 input library archive files) and returns a result containing 10575 all the found arguments each prepended by 10576 `-plugin-opt=-pass-through=' and joined by spaces. This list 10577 is intended to be passed to the LTO linker plugin. 10578 10579 %:pass-through-libs(%G %L %G) 10580 10581 ``print-asm-header'' 10582 The `print-asm-header' function takes no arguments and simply 10583 prints a banner like: 10584 10585 Assembler options 10586 ================= 10587 10588 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 10589 10590 It is used to separate compiler options from assembler options 10591 in the `--target-help' output. 10592 10593 `%{`S'}' 10594 Substitutes the `-S' switch, if that switch is given to GCC. If 10595 that switch is not specified, this substitutes nothing. Note that 10596 the leading dash is omitted when specifying this option, and it is 10597 automatically inserted if the substitution is performed. Thus the 10598 spec string `%{foo}' matches the command-line option `-foo' and 10599 outputs the command-line option `-foo'. 10600 10601 `%W{`S'}' 10602 Like %{`S'} but mark last argument supplied within as a file to be 10603 deleted on failure. 10604 10605 `%{`S'*}' 10606 Substitutes all the switches specified to GCC whose names start 10607 with `-S', but which also take an argument. This is used for 10608 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 10609 being one switch whose name starts with `o'. %{o*} substitutes 10610 this text, including the space. Thus two arguments are generated. 10611 10612 `%{`S'*&`T'*}' 10613 Like %{`S'*}, but preserve order of `S' and `T' options (the order 10614 of `S' and `T' in the spec is not significant). There can be any 10615 number of ampersand-separated variables; for each the wild card is 10616 optional. Useful for CPP as `%{D*&U*&A*}'. 10617 10618 `%{`S':`X'}' 10619 Substitutes `X', if the `-S' switch is given to GCC. 10620 10621 `%{!`S':`X'}' 10622 Substitutes `X', if the `-S' switch is _not_ given to GCC. 10623 10624 `%{`S'*:`X'}' 10625 Substitutes `X' if one or more switches whose names start with 10626 `-S' are specified to GCC. Normally `X' is substituted only once, 10627 no matter how many such switches appeared. However, if `%*' 10628 appears somewhere in `X', then `X' is substituted once for each 10629 matching switch, with the `%*' replaced by the part of that switch 10630 matching the `*'. 10631 10632 `%{.`S':`X'}' 10633 Substitutes `X', if processing a file with suffix `S'. 10634 10635 `%{!.`S':`X'}' 10636 Substitutes `X', if _not_ processing a file with suffix `S'. 10637 10638 `%{,`S':`X'}' 10639 Substitutes `X', if processing a file for language `S'. 10640 10641 `%{!,`S':`X'}' 10642 Substitutes `X', if not processing a file for language `S'. 10643 10644 `%{`S'|`P':`X'}' 10645 Substitutes `X' if either `-S' or `-P' is given to GCC. This may 10646 be combined with `!', `.', `,', and `*' sequences as well, 10647 although they have a stronger binding than the `|'. If `%*' 10648 appears in `X', all of the alternatives must be starred, and only 10649 the first matching alternative is substituted. 10650 10651 For example, a spec string like this: 10652 10653 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 10654 10655 outputs the following command-line options from the following input 10656 command-line options: 10657 10658 fred.c -foo -baz 10659 jim.d -bar -boggle 10660 -d fred.c -foo -baz -boggle 10661 -d jim.d -bar -baz -boggle 10662 10663 `%{S:X; T:Y; :D}' 10664 If `S' is given to GCC, substitutes `X'; else if `T' is given to 10665 GCC, substitutes `Y'; else substitutes `D'. There can be as many 10666 clauses as you need. This may be combined with `.', `,', `!', 10667 `|', and `*' as needed. 10668 10669 10670 The conditional text `X' in a %{`S':`X'} or similar construct may 10671 contain other nested `%' constructs or spaces, or even newlines. They 10672 are processed as usual, as described above. Trailing white space in 10673 `X' is ignored. White space may also appear anywhere on the left side 10674 of the colon in these constructs, except between `.' or `*' and the 10675 corresponding word. 10676 10677 The `-O', `-f', `-m', and `-W' switches are handled specifically in 10678 these constructs. If another value of `-O' or the negated form of a 10679 `-f', `-m', or `-W' switch is found later in the command line, the 10680 earlier switch value is ignored, except with {`S'*} where `S' is just 10681 one letter, which passes all matching options. 10682 10683 The character `|' at the beginning of the predicate text is used to 10684 indicate that a command should be piped to the following command, but 10685 only if `-pipe' is specified. 10686 10687 It is built into GCC which switches take arguments and which do not. 10688 (You might think it would be useful to generalize this to allow each 10689 compiler's spec to say which switches take arguments. But this cannot 10690 be done in a consistent fashion. GCC cannot even decide which input 10691 files have been specified without knowing which switches take arguments, 10692 and it must know which input files to compile in order to tell which 10693 compilers to run). 10694 10695 GCC also knows implicitly that arguments starting in `-l' are to be 10696 treated as compiler output files, and passed to the linker in their 10697 proper position among the other output files. 10698 10699 10700 File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 10701 10702 3.16 Specifying Target Machine and Compiler Version 10703 =================================================== 10704 10705 The usual way to run GCC is to run the executable called `gcc', or 10706 `MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a 10707 version other than the one that was installed last. 10708 10709 10710 File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 10711 10712 3.17 Hardware Models and Configurations 10713 ======================================= 10714 10715 Each target machine types can have its own special options, starting 10716 with `-m', to choose among various hardware models or 10717 configurations--for example, 68010 vs 68020, floating coprocessor or 10718 none. A single installed version of the compiler can compile for any 10719 model or configuration, according to the options specified. 10720 10721 Some configurations of the compiler also support additional special 10722 options, usually for compatibility with other compilers on the same 10723 platform. 10724 10725 * Menu: 10726 10727 * AArch64 Options:: 10728 * Adapteva Epiphany Options:: 10729 * ARM Options:: 10730 * AVR Options:: 10731 * Blackfin Options:: 10732 * C6X Options:: 10733 * CRIS Options:: 10734 * CR16 Options:: 10735 * Darwin Options:: 10736 * DEC Alpha Options:: 10737 * FR30 Options:: 10738 * FRV Options:: 10739 * GNU/Linux Options:: 10740 * H8/300 Options:: 10741 * HPPA Options:: 10742 * i386 and x86-64 Options:: 10743 * i386 and x86-64 Windows Options:: 10744 * IA-64 Options:: 10745 * LM32 Options:: 10746 * M32C Options:: 10747 * M32R/D Options:: 10748 * M680x0 Options:: 10749 * MCore Options:: 10750 * MeP Options:: 10751 * MicroBlaze Options:: 10752 * MIPS Options:: 10753 * MMIX Options:: 10754 * MN10300 Options:: 10755 * Moxie Options:: 10756 * PDP-11 Options:: 10757 * picoChip Options:: 10758 * PowerPC Options:: 10759 * RL78 Options:: 10760 * RS/6000 and PowerPC Options:: 10761 * RX Options:: 10762 * S/390 and zSeries Options:: 10763 * Score Options:: 10764 * SH Options:: 10765 * Solaris 2 Options:: 10766 * SPARC Options:: 10767 * SPU Options:: 10768 * System V Options:: 10769 * TILE-Gx Options:: 10770 * TILEPro Options:: 10771 * V850 Options:: 10772 * VAX Options:: 10773 * VMS Options:: 10774 * VxWorks Options:: 10775 * x86-64 Options:: 10776 * Xstormy16 Options:: 10777 * Xtensa Options:: 10778 * zSeries Options:: 10779 10780 10781 File: gcc.info, Node: AArch64 Options, Next: Adapteva Epiphany Options, Up: Submodel Options 10782 10783 3.17.1 AArch64 Options 10784 ---------------------- 10785 10786 These options are defined for AArch64 implementations: 10787 10788 `-mbig-endian' 10789 Generate big-endian code. This is the default when GCC is 10790 configured for an `aarch64_be-*-*' target. 10791 10792 `-mgeneral-regs-only' 10793 Generate code which uses only the general registers. 10794 10795 `-mlittle-endian' 10796 Generate little-endian code. This is the default when GCC is 10797 configured for an `aarch64-*-*' but not an `aarch64_be-*-*' target. 10798 10799 `-mcmodel=tiny' 10800 Generate code for the tiny code model. The program and its 10801 statically defined symbols must be within 1GB of each other. 10802 Pointers are 64 bits. Programs can be statically or dynamically 10803 linked. This model is not fully implemented and mostly treated as 10804 `small'. 10805 10806 `-mcmodel=small' 10807 Generate code for the small code model. The program and its 10808 statically defined symbols must be within 4GB of each other. 10809 Pointers are 64 bits. Programs can be statically or dynamically 10810 linked. This is the default code model. 10811 10812 `-mcmodel=large' 10813 Generate code for the large code model. This makes no assumptions 10814 about addresses and sizes of sections. Pointers are 64 bits. 10815 Programs can be statically linked only. 10816 10817 `-mstrict-align' 10818 Do not assume that unaligned memory references will be handled by 10819 the system. 10820 10821 `-momit-leaf-frame-pointer' 10822 `-mno-omit-leaf-frame-pointer' 10823 Omit or keep the frame pointer in leaf functions. The former 10824 behaviour is the default. 10825 10826 `-mtls-dialect=desc' 10827 Use TLS descriptors as the thread-local storage mechanism for 10828 dynamic accesses of TLS variables. This is the default. 10829 10830 `-mtls-dialect=traditional' 10831 Use traditional TLS as the thread-local storage mechanism for 10832 dynamic accesses of TLS variables. 10833 10834 `-march=NAME' 10835 Specify the name of the target architecture, optionally suffixed 10836 by one or more feature modifiers. This option has the form 10837 `-march=ARCH{+[no]FEATURE}*', where the only value for ARCH is 10838 `armv8-a'. The possible values for FEATURE are documented in the 10839 sub-section below. 10840 10841 Where conflicting feature modifiers are specified, the right-most 10842 feature is used. 10843 10844 GCC uses this name to determine what kind of instructions it can 10845 emit when generating assembly code. This option can be used in 10846 conjunction with or instead of the `-mcpu=' option. 10847 10848 `-mcpu=NAME' 10849 Specify the name of the target processor, optionally suffixed by 10850 one or more feature modifiers. This option has the form 10851 `-mcpu=CPU{+[no]FEATURE}*', where the possible values for CPU are 10852 `generic', `large'. The possible values for FEATURE are 10853 documented in the sub-section below. 10854 10855 Where conflicting feature modifiers are specified, the right-most 10856 feature is used. 10857 10858 GCC uses this name to determine what kind of instructions it can 10859 emit when generating assembly code. 10860 10861 `-mtune=NAME' 10862 Specify the name of the processor to tune the performance for. 10863 The code will be tuned as if the target processor were of the type 10864 specified in this option, but still using instructions compatible 10865 with the target processor specified by a `-mcpu=' option. This 10866 option cannot be suffixed by feature modifiers. 10867 10868 10869 3.17.1.1 `-march' and `-mcpu' feature modifiers 10870 ............................................... 10871 10872 Feature modifiers used with `-march' and `-mcpu' can be one the 10873 following: 10874 10875 `crypto' 10876 Enable Crypto extension. This implies Advanced SIMD is enabled. 10877 10878 `fp' 10879 Enable floating-point instructions. 10880 10881 `simd' 10882 Enable Advanced SIMD instructions. This implies floating-point 10883 instructions are enabled. This is the default for all current 10884 possible values for options `-march' and `-mcpu='. 10885 10886 10887 File: gcc.info, Node: Adapteva Epiphany Options, Next: ARM Options, Prev: AArch64 Options, Up: Submodel Options 10888 10889 3.17.2 Adapteva Epiphany Options 10890 -------------------------------- 10891 10892 These `-m' options are defined for Adapteva Epiphany: 10893 10894 `-mhalf-reg-file' 10895 Don't allocate any register in the range `r32'...`r63'. That 10896 allows code to run on hardware variants that lack these registers. 10897 10898 `-mprefer-short-insn-regs' 10899 Preferrentially allocate registers that allow short instruction 10900 generation. This can result in increased instruction count, so 10901 this may either reduce or increase overall code size. 10902 10903 `-mbranch-cost=NUM' 10904 Set the cost of branches to roughly NUM "simple" instructions. 10905 This cost is only a heuristic and is not guaranteed to produce 10906 consistent results across releases. 10907 10908 `-mcmove' 10909 Enable the generation of conditional moves. 10910 10911 `-mnops=NUM' 10912 Emit NUM NOPs before every other generated instruction. 10913 10914 `-mno-soft-cmpsf' 10915 For single-precision floating-point comparisons, emit an `fsub' 10916 instruction and test the flags. This is faster than a software 10917 comparison, but can get incorrect results in the presence of NaNs, 10918 or when two different small numbers are compared such that their 10919 difference is calculated as zero. The default is `-msoft-cmpsf', 10920 which uses slower, but IEEE-compliant, software comparisons. 10921 10922 `-mstack-offset=NUM' 10923 Set the offset between the top of the stack and the stack pointer. 10924 E.g., a value of 8 means that the eight bytes in the range 10925 `sp+0...sp+7' can be used by leaf functions without stack 10926 allocation. Values other than `8' or `16' are untested and 10927 unlikely to work. Note also that this option changes the ABI; 10928 compiling a program with a different stack offset than the 10929 libraries have been compiled with generally does not work. This 10930 option can be useful if you want to evaluate if a different stack 10931 offset would give you better code, but to actually use a different 10932 stack offset to build working programs, it is recommended to 10933 configure the toolchain with the appropriate 10934 `--with-stack-offset=NUM' option. 10935 10936 `-mno-round-nearest' 10937 Make the scheduler assume that the rounding mode has been set to 10938 truncating. The default is `-mround-nearest'. 10939 10940 `-mlong-calls' 10941 If not otherwise specified by an attribute, assume all calls might 10942 be beyond the offset range of the `b' / `bl' instructions, and 10943 therefore load the function address into a register before 10944 performing a (otherwise direct) call. This is the default. 10945 10946 `-mshort-calls' 10947 If not otherwise specified by an attribute, assume all direct 10948 calls are in the range of the `b' / `bl' instructions, so use 10949 these instructions for direct calls. The default is 10950 `-mlong-calls'. 10951 10952 `-msmall16' 10953 Assume addresses can be loaded as 16-bit unsigned values. This 10954 does not apply to function addresses for which `-mlong-calls' 10955 semantics are in effect. 10956 10957 `-mfp-mode=MODE' 10958 Set the prevailing mode of the floating-point unit. This 10959 determines the floating-point mode that is provided and expected 10960 at function call and return time. Making this mode match the mode 10961 you predominantly need at function start can make your programs 10962 smaller and faster by avoiding unnecessary mode switches. 10963 10964 MODE can be set to one the following values: 10965 10966 `caller' 10967 Any mode at function entry is valid, and retained or restored 10968 when the function returns, and when it calls other functions. 10969 This mode is useful for compiling libraries or other 10970 compilation units you might want to incorporate into 10971 different programs with different prevailing FPU modes, and 10972 the convenience of being able to use a single object file 10973 outweighs the size and speed overhead for any extra mode 10974 switching that might be needed, compared with what would be 10975 needed with a more specific choice of prevailing FPU mode. 10976 10977 `truncate' 10978 This is the mode used for floating-point calculations with 10979 truncating (i.e. round towards zero) rounding mode. That 10980 includes conversion from floating point to integer. 10981 10982 `round-nearest' 10983 This is the mode used for floating-point calculations with 10984 round-to-nearest-or-even rounding mode. 10985 10986 `int' 10987 This is the mode used to perform integer calculations in the 10988 FPU, e.g. integer multiply, or integer 10989 multiply-and-accumulate. 10990 10991 The default is `-mfp-mode=caller' 10992 10993 `-mnosplit-lohi' 10994 `-mno-postinc' 10995 `-mno-postmodify' 10996 Code generation tweaks that disable, respectively, splitting of 10997 32-bit loads, generation of post-increment addresses, and 10998 generation of post-modify addresses. The defaults are 10999 `msplit-lohi', `-mpost-inc', and `-mpost-modify'. 11000 11001 `-mnovect-double' 11002 Change the preferred SIMD mode to SImode. The default is 11003 `-mvect-double', which uses DImode as preferred SIMD mode. 11004 11005 `-max-vect-align=NUM' 11006 The maximum alignment for SIMD vector mode types. NUM may be 4 or 11007 8. The default is 8. Note that this is an ABI change, even 11008 though many library function interfaces are unaffected if they 11009 don't use SIMD vector modes in places that affect size and/or 11010 alignment of relevant types. 11011 11012 `-msplit-vecmove-early' 11013 Split vector moves into single word moves before reload. In 11014 theory this can give better register allocation, but so far the 11015 reverse seems to be generally the case. 11016 11017 `-m1reg-REG' 11018 Specify a register to hold the constant -1, which makes loading 11019 small negative constants and certain bitmasks faster. Allowable 11020 values for REG are `r43' and `r63', which specify use of that 11021 register as a fixed register, and `none', which means that no 11022 register is used for this purpose. The default is `-m1reg-none'. 11023 11024 11025 11026 File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: Adapteva Epiphany Options, Up: Submodel Options 11027 11028 3.17.3 ARM Options 11029 ------------------ 11030 11031 These `-m' options are defined for Advanced RISC Machines (ARM) 11032 architectures: 11033 11034 `-mabi=NAME' 11035 Generate code for the specified ABI. Permissible values are: 11036 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 11037 11038 `-mapcs-frame' 11039 Generate a stack frame that is compliant with the ARM Procedure 11040 Call Standard for all functions, even if this is not strictly 11041 necessary for correct execution of the code. Specifying 11042 `-fomit-frame-pointer' with this option causes the stack frames 11043 not to be generated for leaf functions. The default is 11044 `-mno-apcs-frame'. 11045 11046 `-mapcs' 11047 This is a synonym for `-mapcs-frame'. 11048 11049 `-mthumb-interwork' 11050 Generate code that supports calling between the ARM and Thumb 11051 instruction sets. Without this option, on pre-v5 architectures, 11052 the two instruction sets cannot be reliably used inside one 11053 program. The default is `-mno-thumb-interwork', since slightly 11054 larger code is generated when `-mthumb-interwork' is specified. 11055 In AAPCS configurations this option is meaningless. 11056 11057 `-mno-sched-prolog' 11058 Prevent the reordering of instructions in the function prologue, 11059 or the merging of those instruction with the instructions in the 11060 function's body. This means that all functions start with a 11061 recognizable set of instructions (or in fact one of a choice from 11062 a small set of different function prologues), and this information 11063 can be used to locate the start of functions inside an executable 11064 piece of code. The default is `-msched-prolog'. 11065 11066 `-mfloat-abi=NAME' 11067 Specifies which floating-point ABI to use. Permissible values 11068 are: `soft', `softfp' and `hard'. 11069 11070 Specifying `soft' causes GCC to generate output containing library 11071 calls for floating-point operations. `softfp' allows the 11072 generation of code using hardware floating-point instructions, but 11073 still uses the soft-float calling conventions. `hard' allows 11074 generation of floating-point instructions and uses FPU-specific 11075 calling conventions. 11076 11077 The default depends on the specific target configuration. Note 11078 that the hard-float and soft-float ABIs are not link-compatible; 11079 you must compile your entire program with the same ABI, and link 11080 with a compatible set of libraries. 11081 11082 `-mlittle-endian' 11083 Generate code for a processor running in little-endian mode. This 11084 is the default for all standard configurations. 11085 11086 `-mbig-endian' 11087 Generate code for a processor running in big-endian mode; the 11088 default is to compile code for a little-endian processor. 11089 11090 `-mwords-little-endian' 11091 This option only applies when generating code for big-endian 11092 processors. Generate code for a little-endian word order but a 11093 big-endian byte order. That is, a byte order of the form 11094 `32107654'. Note: this option should only be used if you require 11095 compatibility with code for big-endian ARM processors generated by 11096 versions of the compiler prior to 2.8. This option is now 11097 deprecated. 11098 11099 `-march=NAME' 11100 This specifies the name of the target ARM architecture. GCC uses 11101 this name to determine what kind of instructions it can emit when 11102 generating assembly code. This option can be used in conjunction 11103 with or instead of the `-mcpu=' option. Permissible names are: 11104 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 11105 `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2', 11106 `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r', 11107 `armv7-m', `armv7e-m' `armv8-a', `iwmmxt', `iwmmxt2', `ep9312'. 11108 11109 `-march=native' causes the compiler to auto-detect the architecture 11110 of the build computer. At present, this feature is only supported 11111 on Linux, and not all architectures are recognized. If the 11112 auto-detect is unsuccessful the option has no effect. 11113 11114 `-mtune=NAME' 11115 This option specifies the name of the target ARM processor for 11116 which GCC should tune the performance of the code. For some ARM 11117 implementations better performance can be obtained by using this 11118 option. Permissible names are: `arm2', `arm250', `arm3', `arm6', 11119 `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d', 11120 `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i', 11121 `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe', 11122 `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t', 11123 `strongarm', `strongarm110', `strongarm1100', `strongarm1110', 11124 `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t', 11125 `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t', 11126 `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e', 11127 `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore', 11128 `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', 11129 `arm1176jzf-s', `cortex-a5', `cortex-a7', `cortex-a8', `cortex-a9', 11130 `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-m4', 11131 `cortex-m3', `cortex-m1', `cortex-m0', `cortex-m0plus', 11132 `marvell-pj4', `xscale', `iwmmxt', `iwmmxt2', `ep9312', `fa526', 11133 `fa626', `fa606te', `fa626te', `fmp626', `fa726te'. 11134 11135 `-mtune=generic-ARCH' specifies that GCC should tune the 11136 performance for a blend of processors within architecture ARCH. 11137 The aim is to generate code that run well on the current most 11138 popular processors, balancing between optimizations that benefit 11139 some CPUs in the range, and avoiding performance pitfalls of other 11140 CPUs. The effects of this option may change in future GCC 11141 versions as CPU models come and go. 11142 11143 `-mtune=native' causes the compiler to auto-detect the CPU of the 11144 build computer. At present, this feature is only supported on 11145 Linux, and not all architectures are recognized. If the 11146 auto-detect is unsuccessful the option has no effect. 11147 11148 `-mcpu=NAME' 11149 This specifies the name of the target ARM processor. GCC uses 11150 this name to derive the name of the target ARM architecture (as if 11151 specified by `-march') and the ARM processor type for which to 11152 tune for performance (as if specified by `-mtune'). Where this 11153 option is used in conjunction with `-march' or `-mtune', those 11154 options take precedence over the appropriate part of this option. 11155 11156 Permissible names for this option are the same as those for 11157 `-mtune'. 11158 11159 `-mcpu=generic-ARCH' is also permissible, and is equivalent to 11160 `-march=ARCH -mtune=generic-ARCH'. See `-mtune' for more 11161 information. 11162 11163 `-mcpu=native' causes the compiler to auto-detect the CPU of the 11164 build computer. At present, this feature is only supported on 11165 Linux, and not all architectures are recognized. If the 11166 auto-detect is unsuccessful the option has no effect. 11167 11168 `-mfpu=NAME' 11169 This specifies what floating-point hardware (or hardware 11170 emulation) is available on the target. Permissible names are: 11171 `vfp', `vfpv3', `vfpv3-fp16', `vfpv3-d16', `vfpv3-d16-fp16', 11172 `vfpv3xd', `vfpv3xd-fp16', `neon', `neon-fp16', `vfpv4', 11173 `vfpv4-d16', `fpv4-sp-d16', `neon-vfpv4', `fp-armv8', 11174 `neon-fp-armv8', and `crypto-neon-fp-armv8'. 11175 11176 If `-msoft-float' is specified this specifies the format of 11177 floating-point values. 11178 11179 If the selected floating-point hardware includes the NEON extension 11180 (e.g. `-mfpu'=`neon'), note that floating-point operations are not 11181 generated by GCC's auto-vectorization pass unless 11182 `-funsafe-math-optimizations' is also specified. This is because 11183 NEON hardware does not fully implement the IEEE 754 standard for 11184 floating-point arithmetic (in particular denormal values are 11185 treated as zero), so the use of NEON instructions may lead to a 11186 loss of precision. 11187 11188 `-mfp16-format=NAME' 11189 Specify the format of the `__fp16' half-precision floating-point 11190 type. Permissible names are `none', `ieee', and `alternative'; 11191 the default is `none', in which case the `__fp16' type is not 11192 defined. *Note Half-Precision::, for more information. 11193 11194 `-mstructure-size-boundary=N' 11195 The sizes of all structures and unions are rounded up to a multiple 11196 of the number of bits set by this option. Permissible values are 11197 8, 32 and 64. The default value varies for different toolchains. 11198 For the COFF targeted toolchain the default value is 8. A value 11199 of 64 is only allowed if the underlying ABI supports it. 11200 11201 Specifying a larger number can produce faster, more efficient 11202 code, but can also increase the size of the program. Different 11203 values are potentially incompatible. Code compiled with one value 11204 cannot necessarily expect to work with code or libraries compiled 11205 with another value, if they exchange information using structures 11206 or unions. 11207 11208 `-mabort-on-noreturn' 11209 Generate a call to the function `abort' at the end of a `noreturn' 11210 function. It is executed if the function tries to return. 11211 11212 `-mlong-calls' 11213 `-mno-long-calls' 11214 Tells the compiler to perform function calls by first loading the 11215 address of the function into a register and then performing a 11216 subroutine call on this register. This switch is needed if the 11217 target function lies outside of the 64-megabyte addressing range 11218 of the offset-based version of subroutine call instruction. 11219 11220 Even if this switch is enabled, not all function calls are turned 11221 into long calls. The heuristic is that static functions, functions 11222 that have the `short-call' attribute, functions that are inside 11223 the scope of a `#pragma no_long_calls' directive, and functions 11224 whose definitions have already been compiled within the current 11225 compilation unit are not turned into long calls. The exceptions 11226 to this rule are that weak function definitions, functions with 11227 the `long-call' attribute or the `section' attribute, and 11228 functions that are within the scope of a `#pragma long_calls' 11229 directive are always turned into long calls. 11230 11231 This feature is not enabled by default. Specifying 11232 `-mno-long-calls' restores the default behavior, as does placing 11233 the function calls within the scope of a `#pragma long_calls_off' 11234 directive. Note these switches have no effect on how the compiler 11235 generates code to handle function calls via function pointers. 11236 11237 `-msingle-pic-base' 11238 Treat the register used for PIC addressing as read-only, rather 11239 than loading it in the prologue for each function. The runtime 11240 system is responsible for initializing this register with an 11241 appropriate value before execution begins. 11242 11243 `-mpic-register=REG' 11244 Specify the register to be used for PIC addressing. For standard 11245 PIC base case, the default will be any suitable register 11246 determined by compiler. For single PIC base case, the default is 11247 `R9' if target is EABI based or stack-checking is enabled, 11248 otherwise the default is `R10'. 11249 11250 `-mpoke-function-name' 11251 Write the name of each function into the text section, directly 11252 preceding the function prologue. The generated code is similar to 11253 this: 11254 11255 t0 11256 .ascii "arm_poke_function_name", 0 11257 .align 11258 t1 11259 .word 0xff000000 + (t1 - t0) 11260 arm_poke_function_name 11261 mov ip, sp 11262 stmfd sp!, {fp, ip, lr, pc} 11263 sub fp, ip, #4 11264 11265 When performing a stack backtrace, code can inspect the value of 11266 `pc' stored at `fp + 0'. If the trace function then looks at 11267 location `pc - 12' and the top 8 bits are set, then we know that 11268 there is a function name embedded immediately preceding this 11269 location and has length `((pc[-3]) & 0xff000000)'. 11270 11271 `-mthumb' 11272 `-marm' 11273 Select between generating code that executes in ARM and Thumb 11274 states. The default for most configurations is to generate code 11275 that executes in ARM state, but the default can be changed by 11276 configuring GCC with the `--with-mode='STATE configure option. 11277 11278 `-mtpcs-frame' 11279 Generate a stack frame that is compliant with the Thumb Procedure 11280 Call Standard for all non-leaf functions. (A leaf function is one 11281 that does not call any other functions.) The default is 11282 `-mno-tpcs-frame'. 11283 11284 `-mtpcs-leaf-frame' 11285 Generate a stack frame that is compliant with the Thumb Procedure 11286 Call Standard for all leaf functions. (A leaf function is one 11287 that does not call any other functions.) The default is 11288 `-mno-apcs-leaf-frame'. 11289 11290 `-mcallee-super-interworking' 11291 Gives all externally visible functions in the file being compiled 11292 an ARM instruction set header which switches to Thumb mode before 11293 executing the rest of the function. This allows these functions 11294 to be called from non-interworking code. This option is not valid 11295 in AAPCS configurations because interworking is enabled by default. 11296 11297 `-mcaller-super-interworking' 11298 Allows calls via function pointers (including virtual functions) to 11299 execute correctly regardless of whether the target code has been 11300 compiled for interworking or not. There is a small overhead in 11301 the cost of executing a function pointer if this option is 11302 enabled. This option is not valid in AAPCS configurations because 11303 interworking is enabled by default. 11304 11305 `-mtp=NAME' 11306 Specify the access model for the thread local storage pointer. 11307 The valid models are `soft', which generates calls to 11308 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 11309 `cp15' directly (supported in the arm6k architecture), and `auto', 11310 which uses the best available method for the selected processor. 11311 The default setting is `auto'. 11312 11313 `-mtls-dialect=DIALECT' 11314 Specify the dialect to use for accessing thread local storage. Two 11315 DIALECTs are supported--`gnu' and `gnu2'. The `gnu' dialect 11316 selects the original GNU scheme for supporting local and global 11317 dynamic TLS models. The `gnu2' dialect selects the GNU descriptor 11318 scheme, which provides better performance for shared libraries. 11319 The GNU descriptor scheme is compatible with the original scheme, 11320 but does require new assembler, linker and library support. 11321 Initial and local exec TLS models are unaffected by this option 11322 and always use the original scheme. 11323 11324 `-mword-relocations' 11325 Only generate absolute relocations on word-sized values (i.e. 11326 R_ARM_ABS32). This is enabled by default on targets (uClinux, 11327 SymbianOS) where the runtime loader imposes this restriction, and 11328 when `-fpic' or `-fPIC' is specified. 11329 11330 `-mfix-cortex-m3-ldrd' 11331 Some Cortex-M3 cores can cause data corruption when `ldrd' 11332 instructions with overlapping destination and base registers are 11333 used. This option avoids generating these instructions. This 11334 option is enabled by default when `-mcpu=cortex-m3' is specified. 11335 11336 `-munaligned-access' 11337 `-mno-unaligned-access' 11338 Enables (or disables) reading and writing of 16- and 32- bit values 11339 from addresses that are not 16- or 32- bit aligned. By default 11340 unaligned access is disabled for all pre-ARMv6 and all ARMv6-M 11341 architectures, and enabled for all other architectures. If 11342 unaligned access is not enabled then words in packed data 11343 structures will be accessed a byte at a time. 11344 11345 The ARM attribute `Tag_CPU_unaligned_access' will be set in the 11346 generated object file to either true or false, depending upon the 11347 setting of this option. If unaligned access is enabled then the 11348 preprocessor symbol `__ARM_FEATURE_UNALIGNED' will also be defined. 11349 11350 11351 11352 File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 11353 11354 3.17.4 AVR Options 11355 ------------------ 11356 11357 These options are defined for AVR implementations: 11358 11359 `-mmcu=MCU' 11360 Specify Atmel AVR instruction set architectures (ISA) or MCU type. 11361 11362 The default for this option is `avr2'. 11363 11364 GCC supports the following AVR devices and ISAs: 11365 11366 `avr2' 11367 "Classic" devices with up to 8 KiB of program memory. 11368 MCU = `attiny22', `attiny26', `at90c8534', `at90s2313', 11369 `at90s2323', `at90s2333', `at90s2343', `at90s4414', 11370 `at90s4433', `at90s4434', `at90s8515', `at90s8535'. 11371 11372 `avr25' 11373 "Classic" devices with up to 8 KiB of program memory and with 11374 the `MOVW' instruction. 11375 MCU = `ata5272', `ata6289', `attiny13', `attiny13a', 11376 `attiny2313', `attiny2313a', `attiny24', `attiny24a', 11377 `attiny25', `attiny261', `attiny261a', `attiny43u', 11378 `attiny4313', `attiny44', `attiny44a', `attiny45', 11379 `attiny461', `attiny461a', `attiny48', `attiny84', 11380 `attiny84a', `attiny85', `attiny861', `attiny861a', 11381 `attiny87', `attiny88', `at86rf401'. 11382 11383 `avr3' 11384 "Classic" devices with 16 KiB up to 64 KiB of program memory. 11385 MCU = `at43usb355', `at76c711'. 11386 11387 `avr31' 11388 "Classic" devices with 128 KiB of program memory. 11389 MCU = `atmega103', `at43usb320'. 11390 11391 `avr35' 11392 "Classic" devices with 16 KiB up to 64 KiB of program memory 11393 and with the `MOVW' instruction. 11394 MCU = `ata5505', `atmega16u2', `atmega32u2', `atmega8u2', 11395 `attiny1634', `attiny167', `at90usb162', `at90usb82'. 11396 11397 `avr4' 11398 "Enhanced" devices with up to 8 KiB of program memory. 11399 MCU = `ata6285', `ata6286', `atmega48', `atmega48a', 11400 `atmega48p', `atmega48pa', `atmega8', `atmega8a', 11401 `atmega8hva', `atmega8515', `atmega8535', `atmega88', 11402 `atmega88a', `atmega88p', `atmega88pa', `at90pwm1', 11403 `at90pwm2', `at90pwm2b', `at90pwm3', `at90pwm3b', `at90pwm81'. 11404 11405 `avr5' 11406 "Enhanced" devices with 16 KiB up to 64 KiB of program memory. 11407 MCU = `ata5790', `ata5790n', `ata5795', `atmega16', 11408 `atmega16a', `atmega16hva', `atmega16hva2', `atmega16hvb', 11409 `atmega16hvbrevb', `atmega16m1', `atmega16u4', `atmega161', 11410 `atmega162', `atmega163', `atmega164a', `atmega164p', 11411 `atmega164pa', `atmega165', `atmega165a', `atmega165p', 11412 `atmega165pa', `atmega168', `atmega168a', `atmega168p', 11413 `atmega168pa', `atmega169', `atmega169a', `atmega169p', 11414 `atmega169pa', `atmega26hvg', `atmega32', `atmega32a', 11415 `atmega32c1', `atmega32hvb', `atmega32hvbrevb', `atmega32m1', 11416 `atmega32u4', `atmega32u6', `atmega323', `atmega324a', 11417 `atmega324p', `atmega324pa', `atmega325', `atmega325a', 11418 `atmega325p', `atmega3250', `atmega3250a', `atmega3250p', 11419 `atmega3250pa', `atmega328', `atmega328p', `atmega329', 11420 `atmega329a', `atmega329p', `atmega329pa', `atmega3290', 11421 `atmega3290a', `atmega3290p', `atmega3290pa', `atmega406', 11422 `atmega48hvf', `atmega64', `atmega64a', `atmega64c1', 11423 `atmega64hve', `atmega64m1', `atmega64rfa2', `atmega64rfr2', 11424 `atmega640', `atmega644', `atmega644a', `atmega644p', 11425 `atmega644pa', `atmega645', `atmega645a', `atmega645p', 11426 `atmega6450', `atmega6450a', `atmega6450p', `atmega649', 11427 `atmega649a', `atmega649p', `atmega6490', `atmega6490a', 11428 `atmega6490p', `at90can32', `at90can64', `at90pwm161', 11429 `at90pwm216', `at90pwm316', `at90scr100', `at90usb646', 11430 `at90usb647', `at94k', `m3000'. 11431 11432 `avr51' 11433 "Enhanced" devices with 128 KiB of program memory. 11434 MCU = `atmega128', `atmega128a', `atmega128rfa1', 11435 `atmega1280', `atmega1281', `atmega1284', `atmega1284p', 11436 `at90can128', `at90usb1286', `at90usb1287'. 11437 11438 `avr6' 11439 "Enhanced" devices with 3-byte PC, i.e. with more than 11440 128 KiB of program memory. 11441 MCU = `atmega2560', `atmega2561'. 11442 11443 `avrxmega2' 11444 "XMEGA" devices with more than 8 KiB and up to 64 KiB of 11445 program memory. 11446 MCU = `atmxt112sl', `atmxt224', `atmxt224e', `atmxt336s', 11447 `atxmega16a4', `atxmega16a4u', `atxmega16c4', `atxmega16d4', 11448 `atxmega16x1', `atxmega32a4', `atxmega32a4u', `atxmega32c4', 11449 `atxmega32d4', `atxmega32e5', `atxmega32x1'. 11450 11451 `avrxmega4' 11452 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 11453 program memory. 11454 MCU = `atxmega64a3', `atxmega64a3u', `atxmega64a4u', 11455 `atxmega64b1', `atxmega64b3', `atxmega64c3', `atxmega64d3', 11456 `atxmega64d4'. 11457 11458 `avrxmega5' 11459 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 11460 program memory and more than 64 KiB of RAM. 11461 MCU = `atxmega64a1', `atxmega64a1u'. 11462 11463 `avrxmega6' 11464 "XMEGA" devices with more than 128 KiB of program memory. 11465 MCU = `atmxt540s', `atmxt540sreva', `atxmega128a3', 11466 `atxmega128a3u', `atxmega128b1', `atxmega128b3', 11467 `atxmega128c3', `atxmega128d3', `atxmega128d4', 11468 `atxmega192a3', `atxmega192a3u', `atxmega192c3', 11469 `atxmega192d3', `atxmega256a3', `atxmega256a3b', 11470 `atxmega256a3bu', `atxmega256a3u', `atxmega256c3', 11471 `atxmega256d3', `atxmega384c3', `atxmega384d3'. 11472 11473 `avrxmega7' 11474 "XMEGA" devices with more than 128 KiB of program memory and 11475 more than 64 KiB of RAM. 11476 MCU = `atxmega128a1', `atxmega128a1u', `atxmega128a4u'. 11477 11478 `avr1' 11479 This ISA is implemented by the minimal AVR core and supported 11480 for assembler only. 11481 MCU = `attiny11', `attiny12', `attiny15', `attiny28', 11482 `at90s1200'. 11483 11484 11485 `-maccumulate-args' 11486 Accumulate outgoing function arguments and acquire/release the 11487 needed stack space for outgoing function arguments once in function 11488 prologue/epilogue. Without this option, outgoing arguments are 11489 pushed before calling a function and popped afterwards. 11490 11491 Popping the arguments after the function call can be expensive on 11492 AVR so that accumulating the stack space might lead to smaller 11493 executables because arguments need not to be removed from the 11494 stack after such a function call. 11495 11496 This option can lead to reduced code size for functions that 11497 perform several calls to functions that get their arguments on the 11498 stack like calls to printf-like functions. 11499 11500 `-mbranch-cost=COST' 11501 Set the branch costs for conditional branch instructions to COST. 11502 Reasonable values for COST are small, non-negative integers. The 11503 default branch cost is 0. 11504 11505 `-mcall-prologues' 11506 Functions prologues/epilogues are expanded as calls to appropriate 11507 subroutines. Code size is smaller. 11508 11509 `-mint8' 11510 Assume `int' to be 8-bit integer. This affects the sizes of all 11511 types: a `char' is 1 byte, an `int' is 1 byte, a `long' is 2 bytes, 11512 and `long long' is 4 bytes. Please note that this option does not 11513 conform to the C standards, but it results in smaller code size. 11514 11515 `-mno-interrupts' 11516 Generated code is not compatible with hardware interrupts. Code 11517 size is smaller. 11518 11519 `-mrelax' 11520 Try to replace `CALL' resp. `JMP' instruction by the shorter 11521 `RCALL' resp. `RJMP' instruction if applicable. Setting `-mrelax' 11522 just adds the `--relax' option to the linker command line when the 11523 linker is called. 11524 11525 Jump relaxing is performed by the linker because jump offsets are 11526 not known before code is located. Therefore, the assembler code 11527 generated by the compiler is the same, but the instructions in the 11528 executable may differ from instructions in the assembler code. 11529 11530 Relaxing must be turned on if linker stubs are needed, see the 11531 section on `EIND' and linker stubs below. 11532 11533 `-msp8' 11534 Treat the stack pointer register as an 8-bit register, i.e. assume 11535 the high byte of the stack pointer is zero. In general, you don't 11536 need to set this option by hand. 11537 11538 This option is used internally by the compiler to select and build 11539 multilibs for architectures `avr2' and `avr25'. These 11540 architectures mix devices with and without `SPH'. For any setting 11541 other than `-mmcu=avr2' or `-mmcu=avr25' the compiler driver will 11542 add or remove this option from the compiler proper's command line, 11543 because the compiler then knows if the device or architecture has 11544 an 8-bit stack pointer and thus no `SPH' register or not. 11545 11546 `-mstrict-X' 11547 Use address register `X' in a way proposed by the hardware. This 11548 means that `X' is only used in indirect, post-increment or 11549 pre-decrement addressing. 11550 11551 Without this option, the `X' register may be used in the same way 11552 as `Y' or `Z' which then is emulated by additional instructions. 11553 For example, loading a value with `X+const' addressing with a 11554 small non-negative `const < 64' to a register RN is performed as 11555 11556 adiw r26, const ; X += const 11557 ld RN, X ; RN = *X 11558 sbiw r26, const ; X -= const 11559 11560 `-mtiny-stack' 11561 Only change the lower 8 bits of the stack pointer. 11562 11563 `-Waddr-space-convert' 11564 Warn about conversions between address spaces in the case where the 11565 resulting address space is not contained in the incoming address 11566 space. 11567 11568 3.17.4.1 `EIND' and Devices with more than 128 Ki Bytes of Flash 11569 ................................................................ 11570 11571 Pointers in the implementation are 16 bits wide. The address of a 11572 function or label is represented as word address so that indirect jumps 11573 and calls can target any code address in the range of 64 Ki words. 11574 11575 In order to facilitate indirect jump on devices with more than 128 Ki 11576 bytes of program memory space, there is a special function register 11577 called `EIND' that serves as most significant part of the target address 11578 when `EICALL' or `EIJMP' instructions are used. 11579 11580 Indirect jumps and calls on these devices are handled as follows by 11581 the compiler and are subject to some limitations: 11582 11583 * The compiler never sets `EIND'. 11584 11585 * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP' 11586 instructions or might read `EIND' directly in order to emulate an 11587 indirect call/jump by means of a `RET' instruction. 11588 11589 * The compiler assumes that `EIND' never changes during the startup 11590 code or during the application. In particular, `EIND' is not 11591 saved/restored in function or interrupt service routine 11592 prologue/epilogue. 11593 11594 * For indirect calls to functions and computed goto, the linker 11595 generates _stubs_. Stubs are jump pads sometimes also called 11596 _trampolines_. Thus, the indirect call/jump jumps to such a stub. 11597 The stub contains a direct jump to the desired address. 11598 11599 * Linker relaxation must be turned on so that the linker will 11600 generate the stubs correctly an all situaltion. See the compiler 11601 option `-mrelax' and the linler option `--relax'. There are 11602 corner cases where the linker is supposed to generate stubs but 11603 aborts without relaxation and without a helpful error message. 11604 11605 * The default linker script is arranged for code with `EIND = 0'. 11606 If code is supposed to work for a setup with `EIND != 0', a custom 11607 linker script has to be used in order to place the sections whose 11608 name start with `.trampolines' into the segment where `EIND' 11609 points to. 11610 11611 * The startup code from libgcc never sets `EIND'. Notice that 11612 startup code is a blend of code from libgcc and AVR-LibC. For the 11613 impact of AVR-LibC on `EIND', see the 11614 AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/). 11615 11616 * It is legitimate for user-specific startup code to set up `EIND' 11617 early, for example by means of initialization code located in 11618 section `.init3'. Such code runs prior to general startup code 11619 that initializes RAM and calls constructors, but after the bit of 11620 startup code from AVR-LibC that sets `EIND' to the segment where 11621 the vector table is located. 11622 #include <avr/io.h> 11623 11624 static void 11625 __attribute__((section(".init3"),naked,used,no_instrument_function)) 11626 init3_set_eind (void) 11627 { 11628 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t" 11629 "out %i0,r24" :: "n" (&EIND) : "r24","memory"); 11630 } 11631 11632 The `__trampolines_start' symbol is defined in the linker script. 11633 11634 * Stubs are generated automatically by the linker if the following 11635 two conditions are met: 11636 - The address of a label is taken by means of the `gs' modifier 11637 (short for _generate stubs_) like so: 11638 LDI r24, lo8(gs(FUNC)) 11639 LDI r25, hi8(gs(FUNC)) 11640 11641 - The final location of that label is in a code segment 11642 _outside_ the segment where the stubs are located. 11643 11644 * The compiler emits such `gs' modifiers for code labels in the 11645 following situations: 11646 - Taking address of a function or code label. 11647 11648 - Computed goto. 11649 11650 - If prologue-save function is used, see `-mcall-prologues' 11651 command-line option. 11652 11653 - Switch/case dispatch tables. If you do not want such dispatch 11654 tables you can specify the `-fno-jump-tables' command-line 11655 option. 11656 11657 - C and C++ constructors/destructors called during 11658 startup/shutdown. 11659 11660 - If the tools hit a `gs()' modifier explained above. 11661 11662 * Jumping to non-symbolic addresses like so is _not_ supported: 11663 11664 int main (void) 11665 { 11666 /* Call function at word address 0x2 */ 11667 return ((int(*)(void)) 0x2)(); 11668 } 11669 11670 Instead, a stub has to be set up, i.e. the function has to be 11671 called through a symbol (`func_4' in the example): 11672 11673 int main (void) 11674 { 11675 extern int func_4 (void); 11676 11677 /* Call function at byte address 0x4 */ 11678 return func_4(); 11679 } 11680 11681 and the application be linked with `-Wl,--defsym,func_4=0x4'. 11682 Alternatively, `func_4' can be defined in the linker script. 11683 11684 3.17.4.2 Handling of the `RAMPD', `RAMPX', `RAMPY' and `RAMPZ' Special Function Registers 11685 ......................................................................................... 11686 11687 Some AVR devices support memories larger than the 64 KiB range that can 11688 be accessed with 16-bit pointers. To access memory locations outside 11689 this 64 KiB range, the contentent of a `RAMP' register is used as high 11690 part of the address: The `X', `Y', `Z' address register is concatenated 11691 with the `RAMPX', `RAMPY', `RAMPZ' special function register, 11692 respectively, to get a wide address. Similarly, `RAMPD' is used 11693 together with direct addressing. 11694 11695 * The startup code initializes the `RAMP' special function registers 11696 with zero. 11697 11698 * If a *note named address space: AVR Named Address Spaces. other 11699 than generic or `__flash' is used, then `RAMPZ' is set as needed 11700 before the operation. 11701 11702 * If the device supports RAM larger than 64 KiB and the compiler 11703 needs to change `RAMPZ' to accomplish an operation, `RAMPZ' is 11704 reset to zero after the operation. 11705 11706 * If the device comes with a specific `RAMP' register, the ISR 11707 prologue/epilogue saves/restores that SFR and initializes it with 11708 zero in case the ISR code might (implicitly) use it. 11709 11710 * RAM larger than 64 KiB is not supported by GCC for AVR targets. 11711 If you use inline assembler to read from locations outside the 11712 16-bit address range and change one of the `RAMP' registers, you 11713 must reset it to zero after the access. 11714 11715 11716 3.17.4.3 AVR Built-in Macros 11717 ............................ 11718 11719 GCC defines several built-in macros so that the user code can test for 11720 the presence or absence of features. Almost any of the following 11721 built-in macros are deduced from device capabilities and thus triggered 11722 by the `-mmcu=' command-line option. 11723 11724 For even more AVR-specific built-in macros see *note AVR Named Address 11725 Spaces:: and *note AVR Built-in Functions::. 11726 11727 `__AVR_ARCH__' 11728 Build-in macro that resolves to a decimal number that identifies 11729 the architecture and depends on the `-mmcu=MCU' option. Possible 11730 values are: 11731 11732 `2', `25', `3', `31', `35', `4', `5', `51', `6', `102', `104', 11733 `105', `106', `107' 11734 11735 for MCU=`avr2', `avr25', `avr3', `avr31', `avr35', `avr4', `avr5', 11736 `avr51', `avr6', `avrxmega2', `avrxmega4', `avrxmega5', 11737 `avrxmega6', `avrxmega7', respectively. If MCU specifies a 11738 device, this built-in macro is set accordingly. For example, with 11739 `-mmcu=atmega8' the macro will be defined to `4'. 11740 11741 `__AVR_DEVICE__' 11742 Setting `-mmcu=DEVICE' defines this built-in macro which reflects 11743 the device's name. For example, `-mmcu=atmega8' defines the 11744 built-in macro `__AVR_ATmega8__', `-mmcu=attiny261a' defines 11745 `__AVR_ATtiny261A__', etc. 11746 11747 The built-in macros' names follow the scheme `__AVR_DEVICE__' 11748 where DEVICE is the device name as from the AVR user manual. The 11749 difference between DEVICE in the built-in macro and DEVICE in 11750 `-mmcu=DEVICE' is that the latter is always lowercase. 11751 11752 If DEVICE is not a device but only a core architecture like 11753 `avr51', this macro will not be defined. 11754 11755 `__AVR_XMEGA__' 11756 The device / architecture belongs to the XMEGA family of devices. 11757 11758 `__AVR_HAVE_ELPM__' 11759 The device has the the `ELPM' instruction. 11760 11761 `__AVR_HAVE_ELPMX__' 11762 The device has the `ELPM RN,Z' and `ELPM RN,Z+' instructions. 11763 11764 `__AVR_HAVE_MOVW__' 11765 The device has the `MOVW' instruction to perform 16-bit 11766 register-register moves. 11767 11768 `__AVR_HAVE_LPMX__' 11769 The device has the `LPM RN,Z' and `LPM RN,Z+' instructions. 11770 11771 `__AVR_HAVE_MUL__' 11772 The device has a hardware multiplier. 11773 11774 `__AVR_HAVE_JMP_CALL__' 11775 The device has the `JMP' and `CALL' instructions. This is the 11776 case for devices with at least 16 KiB of program memory. 11777 11778 `__AVR_HAVE_EIJMP_EICALL__' 11779 `__AVR_3_BYTE_PC__' 11780 The device has the `EIJMP' and `EICALL' instructions. This is the 11781 case for devices with more than 128 KiB of program memory. This 11782 also means that the program counter (PC) is 3 bytes wide. 11783 11784 `__AVR_2_BYTE_PC__' 11785 The program counter (PC) is 2 bytes wide. This is the case for 11786 devices with up to 128 KiB of program memory. 11787 11788 `__AVR_HAVE_8BIT_SP__' 11789 `__AVR_HAVE_16BIT_SP__' 11790 The stack pointer (SP) register is treated as 8-bit respectively 11791 16-bit register by the compiler. The definition of these macros 11792 is affected by `-mtiny-stack'. 11793 11794 `__AVR_HAVE_SPH__' 11795 `__AVR_SP8__' 11796 The device has the SPH (high part of stack pointer) special 11797 function register or has an 8-bit stack pointer, respectively. 11798 The definition of these macros is affected by `-mmcu=' and in the 11799 cases of `-mmcu=avr2' and `-mmcu=avr25' also by `-msp8'. 11800 11801 `__AVR_HAVE_RAMPD__' 11802 `__AVR_HAVE_RAMPX__' 11803 `__AVR_HAVE_RAMPY__' 11804 `__AVR_HAVE_RAMPZ__' 11805 The device has the `RAMPD', `RAMPX', `RAMPY', `RAMPZ' special 11806 function register, respectively. 11807 11808 `__NO_INTERRUPTS__' 11809 This macro reflects the `-mno-interrupts' command line option. 11810 11811 `__AVR_ERRATA_SKIP__' 11812 `__AVR_ERRATA_SKIP_JMP_CALL__' 11813 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit 11814 instructions because of a hardware erratum. Skip instructions are 11815 `SBRS', `SBRC', `SBIS', `SBIC' and `CPSE'. The second macro is 11816 only defined if `__AVR_HAVE_JMP_CALL__' is also set. 11817 11818 `__AVR_SFR_OFFSET__=OFFSET' 11819 Instructions that can address I/O special function registers 11820 directly like `IN', `OUT', `SBI', etc. may use a different address 11821 as if addressed by an instruction to access RAM like `LD' or 11822 `STS'. This offset depends on the device architecture and has to 11823 be subtracted from the RAM address in order to get the respective 11824 I/O address. 11825 11826 `__WITH_AVRLIBC__' 11827 The compiler is configured to be used together with AVR-Libc. See 11828 the `--with-avrlibc' configure option. 11829 11830 11831 11832 File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options, Up: Submodel Options 11833 11834 3.17.5 Blackfin Options 11835 ----------------------- 11836 11837 `-mcpu=CPU[-SIREVISION]' 11838 Specifies the name of the target Blackfin processor. Currently, 11839 CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522', 11840 `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532', 11841 `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542', 11842 `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m', 11843 `bf548m', `bf549m', `bf561', `bf592'. 11844 11845 The optional SIREVISION specifies the silicon revision of the 11846 target Blackfin processor. Any workarounds available for the 11847 targeted silicon revision are enabled. If SIREVISION is `none', 11848 no workarounds are enabled. If SIREVISION is `any', all 11849 workarounds for the targeted processor are enabled. The 11850 `__SILICON_REVISION__' macro is defined to two hexadecimal digits 11851 representing the major and minor numbers in the silicon revision. 11852 If SIREVISION is `none', the `__SILICON_REVISION__' is not 11853 defined. If SIREVISION is `any', the `__SILICON_REVISION__' is 11854 defined to be `0xffff'. If this optional SIREVISION is not used, 11855 GCC assumes the latest known silicon revision of the targeted 11856 Blackfin processor. 11857 11858 GCC defines a preprocessor macro for the specified CPU. For the 11859 `bfin-elf' toolchain, this option causes the hardware BSP provided 11860 by libgloss to be linked in if `-msim' is not given. 11861 11862 Without this option, `bf532' is used as the processor by default. 11863 11864 Note that support for `bf561' is incomplete. For `bf561', only 11865 the preprocessor macro is defined. 11866 11867 `-msim' 11868 Specifies that the program will be run on the simulator. This 11869 causes the simulator BSP provided by libgloss to be linked in. 11870 This option has effect only for `bfin-elf' toolchain. Certain 11871 other options, such as `-mid-shared-library' and `-mfdpic', imply 11872 `-msim'. 11873 11874 `-momit-leaf-frame-pointer' 11875 Don't keep the frame pointer in a register for leaf functions. 11876 This avoids the instructions to save, set up and restore frame 11877 pointers and makes an extra register available in leaf functions. 11878 The option `-fomit-frame-pointer' removes the frame pointer for 11879 all functions, which might make debugging harder. 11880 11881 `-mspecld-anomaly' 11882 When enabled, the compiler ensures that the generated code does not 11883 contain speculative loads after jump instructions. If this option 11884 is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined. 11885 11886 `-mno-specld-anomaly' 11887 Don't generate extra code to prevent speculative loads from 11888 occurring. 11889 11890 `-mcsync-anomaly' 11891 When enabled, the compiler ensures that the generated code does not 11892 contain CSYNC or SSYNC instructions too soon after conditional 11893 branches. If this option is used, 11894 `__WORKAROUND_SPECULATIVE_SYNCS' is defined. 11895 11896 `-mno-csync-anomaly' 11897 Don't generate extra code to prevent CSYNC or SSYNC instructions 11898 from occurring too soon after a conditional branch. 11899 11900 `-mlow-64k' 11901 When enabled, the compiler is free to take advantage of the 11902 knowledge that the entire program fits into the low 64k of memory. 11903 11904 `-mno-low-64k' 11905 Assume that the program is arbitrarily large. This is the default. 11906 11907 `-mstack-check-l1' 11908 Do stack checking using information placed into L1 scratchpad 11909 memory by the uClinux kernel. 11910 11911 `-mid-shared-library' 11912 Generate code that supports shared libraries via the library ID 11913 method. This allows for execute in place and shared libraries in 11914 an environment without virtual memory management. This option 11915 implies `-fPIC'. With a `bfin-elf' target, this option implies 11916 `-msim'. 11917 11918 `-mno-id-shared-library' 11919 Generate code that doesn't assume ID-based shared libraries are 11920 being used. This is the default. 11921 11922 `-mleaf-id-shared-library' 11923 Generate code that supports shared libraries via the library ID 11924 method, but assumes that this library or executable won't link 11925 against any other ID shared libraries. That allows the compiler 11926 to use faster code for jumps and calls. 11927 11928 `-mno-leaf-id-shared-library' 11929 Do not assume that the code being compiled won't link against any 11930 ID shared libraries. Slower code is generated for jump and call 11931 insns. 11932 11933 `-mshared-library-id=n' 11934 Specifies the identification number of the ID-based shared library 11935 being compiled. Specifying a value of 0 generates more compact 11936 code; specifying other values forces the allocation of that number 11937 to the current library but is no more space- or time-efficient 11938 than omitting this option. 11939 11940 `-msep-data' 11941 Generate code that allows the data segment to be located in a 11942 different area of memory from the text segment. This allows for 11943 execute in place in an environment without virtual memory 11944 management by eliminating relocations against the text section. 11945 11946 `-mno-sep-data' 11947 Generate code that assumes that the data segment follows the text 11948 segment. This is the default. 11949 11950 `-mlong-calls' 11951 `-mno-long-calls' 11952 Tells the compiler to perform function calls by first loading the 11953 address of the function into a register and then performing a 11954 subroutine call on this register. This switch is needed if the 11955 target function lies outside of the 24-bit addressing range of the 11956 offset-based version of subroutine call instruction. 11957 11958 This feature is not enabled by default. Specifying 11959 `-mno-long-calls' restores the default behavior. Note these 11960 switches have no effect on how the compiler generates code to 11961 handle function calls via function pointers. 11962 11963 `-mfast-fp' 11964 Link with the fast floating-point library. This library relaxes 11965 some of the IEEE floating-point standard's rules for checking 11966 inputs against Not-a-Number (NAN), in the interest of performance. 11967 11968 `-minline-plt' 11969 Enable inlining of PLT entries in function calls to functions that 11970 are not known to bind locally. It has no effect without `-mfdpic'. 11971 11972 `-mmulticore' 11973 Build a standalone application for multicore Blackfin processors. 11974 This option causes proper start files and link scripts supporting 11975 multicore to be used, and defines the macro `__BFIN_MULTICORE'. 11976 It can only be used with `-mcpu=bf561[-SIREVISION]'. 11977 11978 This option can be used with `-mcorea' or `-mcoreb', which selects 11979 the one-application-per-core programming model. Without `-mcorea' 11980 or `-mcoreb', the single-application/dual-core programming model 11981 is used. In this model, the main function of Core B should be 11982 named as `coreb_main'. 11983 11984 If this option is not used, the single-core application programming 11985 model is used. 11986 11987 `-mcorea' 11988 Build a standalone application for Core A of BF561 when using the 11989 one-application-per-core programming model. Proper start files and 11990 link scripts are used to support Core A, and the macro 11991 `__BFIN_COREA' is defined. This option can only be used in 11992 conjunction with `-mmulticore'. 11993 11994 `-mcoreb' 11995 Build a standalone application for Core B of BF561 when using the 11996 one-application-per-core programming model. Proper start files and 11997 link scripts are used to support Core B, and the macro 11998 `__BFIN_COREB' is defined. When this option is used, `coreb_main' 11999 should be used instead of `main'. This option can only be used in 12000 conjunction with `-mmulticore'. 12001 12002 `-msdram' 12003 Build a standalone application for SDRAM. Proper start files and 12004 link scripts are used to put the application into SDRAM, and the 12005 macro `__BFIN_SDRAM' is defined. The loader should initialize 12006 SDRAM before loading the application. 12007 12008 `-micplb' 12009 Assume that ICPLBs are enabled at run time. This has an effect on 12010 certain anomaly workarounds. For Linux targets, the default is to 12011 assume ICPLBs are enabled; for standalone applications the default 12012 is off. 12013 12014 12015 File: gcc.info, Node: C6X Options, Next: CRIS Options, Prev: Blackfin Options, Up: Submodel Options 12016 12017 3.17.6 C6X Options 12018 ------------------ 12019 12020 `-march=NAME' 12021 This specifies the name of the target architecture. GCC uses this 12022 name to determine what kind of instructions it can emit when 12023 generating assembly code. Permissible names are: `c62x', `c64x', 12024 `c64x+', `c67x', `c67x+', `c674x'. 12025 12026 `-mbig-endian' 12027 Generate code for a big-endian target. 12028 12029 `-mlittle-endian' 12030 Generate code for a little-endian target. This is the default. 12031 12032 `-msim' 12033 Choose startup files and linker script suitable for the simulator. 12034 12035 `-msdata=default' 12036 Put small global and static data in the `.neardata' section, which 12037 is pointed to by register `B14'. Put small uninitialized global 12038 and static data in the `.bss' section, which is adjacent to the 12039 `.neardata' section. Put small read-only data into the `.rodata' 12040 section. The corresponding sections used for large pieces of data 12041 are `.fardata', `.far' and `.const'. 12042 12043 `-msdata=all' 12044 Put all data, not just small objects, into the sections reserved 12045 for small data, and use addressing relative to the `B14' register 12046 to access them. 12047 12048 `-msdata=none' 12049 Make no use of the sections reserved for small data, and use 12050 absolute addresses to access all data. Put all initialized global 12051 and static data in the `.fardata' section, and all uninitialized 12052 data in the `.far' section. Put all constant data into the 12053 `.const' section. 12054 12055 12056 File: gcc.info, Node: CRIS Options, Next: CR16 Options, Prev: C6X Options, Up: Submodel Options 12057 12058 3.17.7 CRIS Options 12059 ------------------- 12060 12061 These options are defined specifically for the CRIS ports. 12062 12063 `-march=ARCHITECTURE-TYPE' 12064 `-mcpu=ARCHITECTURE-TYPE' 12065 Generate code for the specified architecture. The choices for 12066 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 12067 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 12068 cris-axis-linux-gnu, where the default is `v10'. 12069 12070 `-mtune=ARCHITECTURE-TYPE' 12071 Tune to ARCHITECTURE-TYPE everything applicable about the generated 12072 code, except for the ABI and the set of available instructions. 12073 The choices for ARCHITECTURE-TYPE are the same as for 12074 `-march=ARCHITECTURE-TYPE'. 12075 12076 `-mmax-stack-frame=N' 12077 Warn when the stack frame of a function exceeds N bytes. 12078 12079 `-metrax4' 12080 `-metrax100' 12081 The options `-metrax4' and `-metrax100' are synonyms for 12082 `-march=v3' and `-march=v8' respectively. 12083 12084 `-mmul-bug-workaround' 12085 `-mno-mul-bug-workaround' 12086 Work around a bug in the `muls' and `mulu' instructions for CPU 12087 models where it applies. This option is active by default. 12088 12089 `-mpdebug' 12090 Enable CRIS-specific verbose debug-related information in the 12091 assembly code. This option also has the effect of turning off the 12092 `#NO_APP' formatted-code indicator to the assembler at the 12093 beginning of the assembly file. 12094 12095 `-mcc-init' 12096 Do not use condition-code results from previous instruction; 12097 always emit compare and test instructions before use of condition 12098 codes. 12099 12100 `-mno-side-effects' 12101 Do not emit instructions with side effects in addressing modes 12102 other than post-increment. 12103 12104 `-mstack-align' 12105 `-mno-stack-align' 12106 `-mdata-align' 12107 `-mno-data-align' 12108 `-mconst-align' 12109 `-mno-const-align' 12110 These options (`no-' options) arrange (eliminate arrangements) for 12111 the stack frame, individual data and constants to be aligned for 12112 the maximum single data access size for the chosen CPU model. The 12113 default is to arrange for 32-bit alignment. ABI details such as 12114 structure layout are not affected by these options. 12115 12116 `-m32-bit' 12117 `-m16-bit' 12118 `-m8-bit' 12119 Similar to the stack- data- and const-align options above, these 12120 options arrange for stack frame, writable data and constants to 12121 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 12122 alignment. 12123 12124 `-mno-prologue-epilogue' 12125 `-mprologue-epilogue' 12126 With `-mno-prologue-epilogue', the normal function prologue and 12127 epilogue which set up the stack frame are omitted and no return 12128 instructions or return sequences are generated in the code. Use 12129 this option only together with visual inspection of the compiled 12130 code: no warnings or errors are generated when call-saved 12131 registers must be saved, or storage for local variables needs to 12132 be allocated. 12133 12134 `-mno-gotplt' 12135 `-mgotplt' 12136 With `-fpic' and `-fPIC', don't generate (do generate) instruction 12137 sequences that load addresses for functions from the PLT part of 12138 the GOT rather than (traditional on other architectures) calls to 12139 the PLT. The default is `-mgotplt'. 12140 12141 `-melf' 12142 Legacy no-op option only recognized with the cris-axis-elf and 12143 cris-axis-linux-gnu targets. 12144 12145 `-mlinux' 12146 Legacy no-op option only recognized with the cris-axis-linux-gnu 12147 target. 12148 12149 `-sim' 12150 This option, recognized for the cris-axis-elf, arranges to link 12151 with input-output functions from a simulator library. Code, 12152 initialized data and zero-initialized data are allocated 12153 consecutively. 12154 12155 `-sim2' 12156 Like `-sim', but pass linker options to locate initialized data at 12157 0x40000000 and zero-initialized data at 0x80000000. 12158 12159 12160 File: gcc.info, Node: CR16 Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 12161 12162 3.17.8 CR16 Options 12163 ------------------- 12164 12165 These options are defined specifically for the CR16 ports. 12166 12167 `-mmac' 12168 Enable the use of multiply-accumulate instructions. Disabled by 12169 default. 12170 12171 `-mcr16cplus' 12172 `-mcr16c' 12173 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 12174 is default. 12175 12176 `-msim' 12177 Links the library libsim.a which is in compatible with simulator. 12178 Applicable to ELF compiler only. 12179 12180 `-mint32' 12181 Choose integer type as 32-bit wide. 12182 12183 `-mbit-ops' 12184 Generates `sbit'/`cbit' instructions for bit manipulations. 12185 12186 `-mdata-model=MODEL' 12187 Choose a data model. The choices for MODEL are `near', `far' or 12188 `medium'. `medium' is default. However, `far' is not valid with 12189 `-mcr16c', as the CR16C architecture does not support the far data 12190 model. 12191 12192 12193 File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CR16 Options, Up: Submodel Options 12194 12195 3.17.9 Darwin Options 12196 --------------------- 12197 12198 These options are defined for all architectures running the Darwin 12199 operating system. 12200 12201 FSF GCC on Darwin does not create "fat" object files; it creates an 12202 object file for the single architecture that GCC was built to target. 12203 Apple's GCC on Darwin does create "fat" files if multiple `-arch' 12204 options are used; it does so by running the compiler or linker multiple 12205 times and joining the results together with `lipo'. 12206 12207 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 12208 is determined by the flags that specify the ISA that GCC is targeting, 12209 like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 12210 used to override this. 12211 12212 The Darwin tools vary in their behavior when presented with an ISA 12213 mismatch. The assembler, `as', only permits instructions to be used 12214 that are valid for the subtype of the file it is generating, so you 12215 cannot put 64-bit instructions in a `ppc750' object file. The linker 12216 for shared libraries, `/usr/bin/libtool', fails and prints an error if 12217 asked to create a shared library with a less restrictive subtype than 12218 its input files (for instance, trying to put a `ppc970' object file in 12219 a `ppc7400' library). The linker for executables, `ld', quietly gives 12220 the executable the most restrictive subtype of any of its input files. 12221 12222 `-FDIR' 12223 Add the framework directory DIR to the head of the list of 12224 directories to be searched for header files. These directories are 12225 interleaved with those specified by `-I' options and are scanned 12226 in a left-to-right order. 12227 12228 A framework directory is a directory with frameworks in it. A 12229 framework is a directory with a `Headers' and/or `PrivateHeaders' 12230 directory contained directly in it that ends in `.framework'. The 12231 name of a framework is the name of this directory excluding the 12232 `.framework'. Headers associated with the framework are found in 12233 one of those two directories, with `Headers' being searched first. 12234 A subframework is a framework directory that is in a framework's 12235 `Frameworks' directory. Includes of subframework headers can only 12236 appear in a header of a framework that contains the subframework, 12237 or in a sibling subframework header. Two subframeworks are 12238 siblings if they occur in the same framework. A subframework 12239 should not have the same name as a framework; a warning is issued 12240 if this is violated. Currently a subframework cannot have 12241 subframeworks; in the future, the mechanism may be extended to 12242 support this. The standard frameworks can be found in 12243 `/System/Library/Frameworks' and `/Library/Frameworks'. An 12244 example include looks like `#include <Framework/header.h>', where 12245 `Framework' denotes the name of the framework and `header.h' is 12246 found in the `PrivateHeaders' or `Headers' directory. 12247 12248 `-iframeworkDIR' 12249 Like `-F' except the directory is a treated as a system directory. 12250 The main difference between this `-iframework' and `-F' is that 12251 with `-iframework' the compiler does not warn about constructs 12252 contained within header files found via DIR. This option is valid 12253 only for the C family of languages. 12254 12255 `-gused' 12256 Emit debugging information for symbols that are used. For stabs 12257 debugging format, this enables `-feliminate-unused-debug-symbols'. 12258 This is by default ON. 12259 12260 `-gfull' 12261 Emit debugging information for all symbols and types. 12262 12263 `-mmacosx-version-min=VERSION' 12264 The earliest version of MacOS X that this executable will run on 12265 is VERSION. Typical values of VERSION include `10.1', `10.2', and 12266 `10.3.9'. 12267 12268 If the compiler was built to use the system's headers by default, 12269 then the default for this option is the system version on which the 12270 compiler is running, otherwise the default is to make choices that 12271 are compatible with as many systems and code bases as possible. 12272 12273 `-mkernel' 12274 Enable kernel development mode. The `-mkernel' option sets 12275 `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions', 12276 `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and 12277 `-fno-rtti' where applicable. This mode also sets `-mno-altivec', 12278 `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC 12279 targets. 12280 12281 `-mone-byte-bool' 12282 Override the defaults for `bool' so that `sizeof(bool)==1'. By 12283 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 12284 and `1' when compiling for Darwin/x86, so this option has no 12285 effect on x86. 12286 12287 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 12288 code that is not binary compatible with code generated without 12289 that switch. Using this switch may require recompiling all other 12290 modules in a program, including system libraries. Use this switch 12291 to conform to a non-default data model. 12292 12293 `-mfix-and-continue' 12294 `-ffix-and-continue' 12295 `-findirect-data' 12296 Generate code suitable for fast turnaround development, such as to 12297 allow GDB to dynamically load `.o' files into already-running 12298 programs. `-findirect-data' and `-ffix-and-continue' are provided 12299 for backwards compatibility. 12300 12301 `-all_load' 12302 Loads all members of static archive libraries. See man ld(1) for 12303 more information. 12304 12305 `-arch_errors_fatal' 12306 Cause the errors having to do with files that have the wrong 12307 architecture to be fatal. 12308 12309 `-bind_at_load' 12310 Causes the output file to be marked such that the dynamic linker 12311 will bind all undefined references when the file is loaded or 12312 launched. 12313 12314 `-bundle' 12315 Produce a Mach-o bundle format file. See man ld(1) for more 12316 information. 12317 12318 `-bundle_loader EXECUTABLE' 12319 This option specifies the EXECUTABLE that will load the build 12320 output file being linked. See man ld(1) for more information. 12321 12322 `-dynamiclib' 12323 When passed this option, GCC produces a dynamic library instead of 12324 an executable when linking, using the Darwin `libtool' command. 12325 12326 `-force_cpusubtype_ALL' 12327 This causes GCC's output file to have the ALL subtype, instead of 12328 one controlled by the `-mcpu' or `-march' option. 12329 12330 `-allowable_client CLIENT_NAME' 12331 `-client_name' 12332 `-compatibility_version' 12333 `-current_version' 12334 `-dead_strip' 12335 `-dependency-file' 12336 `-dylib_file' 12337 `-dylinker_install_name' 12338 `-dynamic' 12339 `-exported_symbols_list' 12340 `-filelist' 12341 `-flat_namespace' 12342 `-force_flat_namespace' 12343 `-headerpad_max_install_names' 12344 `-image_base' 12345 `-init' 12346 `-install_name' 12347 `-keep_private_externs' 12348 `-multi_module' 12349 `-multiply_defined' 12350 `-multiply_defined_unused' 12351 `-noall_load' 12352 `-no_dead_strip_inits_and_terms' 12353 `-nofixprebinding' 12354 `-nomultidefs' 12355 `-noprebind' 12356 `-noseglinkedit' 12357 `-pagezero_size' 12358 `-prebind' 12359 `-prebind_all_twolevel_modules' 12360 `-private_bundle' 12361 `-read_only_relocs' 12362 `-sectalign' 12363 `-sectobjectsymbols' 12364 `-whyload' 12365 `-seg1addr' 12366 `-sectcreate' 12367 `-sectobjectsymbols' 12368 `-sectorder' 12369 `-segaddr' 12370 `-segs_read_only_addr' 12371 `-segs_read_write_addr' 12372 `-seg_addr_table' 12373 `-seg_addr_table_filename' 12374 `-seglinkedit' 12375 `-segprot' 12376 `-segs_read_only_addr' 12377 `-segs_read_write_addr' 12378 `-single_module' 12379 `-static' 12380 `-sub_library' 12381 `-sub_umbrella' 12382 `-twolevel_namespace' 12383 `-umbrella' 12384 `-undefined' 12385 `-unexported_symbols_list' 12386 `-weak_reference_mismatches' 12387 `-whatsloaded' 12388 These options are passed to the Darwin linker. The Darwin linker 12389 man page describes them in detail. 12390 12391 12392 File: gcc.info, Node: DEC Alpha Options, Next: FR30 Options, Prev: Darwin Options, Up: Submodel Options 12393 12394 3.17.10 DEC Alpha Options 12395 ------------------------- 12396 12397 These `-m' options are defined for the DEC Alpha implementations: 12398 12399 `-mno-soft-float' 12400 `-msoft-float' 12401 Use (do not use) the hardware floating-point instructions for 12402 floating-point operations. When `-msoft-float' is specified, 12403 functions in `libgcc.a' are used to perform floating-point 12404 operations. Unless they are replaced by routines that emulate the 12405 floating-point operations, or compiled in such a way as to call 12406 such emulations routines, these routines issue floating-point 12407 operations. If you are compiling for an Alpha without 12408 floating-point operations, you must ensure that the library is 12409 built so as not to call them. 12410 12411 Note that Alpha implementations without floating-point operations 12412 are required to have floating-point registers. 12413 12414 `-mfp-reg' 12415 `-mno-fp-regs' 12416 Generate code that uses (does not use) the floating-point register 12417 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 12418 register set is not used, floating-point operands are passed in 12419 integer registers as if they were integers and floating-point 12420 results are passed in `$0' instead of `$f0'. This is a 12421 non-standard calling sequence, so any function with a 12422 floating-point argument or return value called by code compiled 12423 with `-mno-fp-regs' must also be compiled with that option. 12424 12425 A typical use of this option is building a kernel that does not 12426 use, and hence need not save and restore, any floating-point 12427 registers. 12428 12429 `-mieee' 12430 The Alpha architecture implements floating-point hardware 12431 optimized for maximum performance. It is mostly compliant with 12432 the IEEE floating-point standard. However, for full compliance, 12433 software assistance is required. This option generates code fully 12434 IEEE-compliant code _except_ that the INEXACT-FLAG is not 12435 maintained (see below). If this option is turned on, the 12436 preprocessor macro `_IEEE_FP' is defined during compilation. The 12437 resulting code is less efficient but is able to correctly support 12438 denormalized numbers and exceptional IEEE values such as 12439 not-a-number and plus/minus infinity. Other Alpha compilers call 12440 this option `-ieee_with_no_inexact'. 12441 12442 `-mieee-with-inexact' 12443 This is like `-mieee' except the generated code also maintains the 12444 IEEE INEXACT-FLAG. Turning on this option causes the generated 12445 code to implement fully-compliant IEEE math. In addition to 12446 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 12447 On some Alpha implementations the resulting code may execute 12448 significantly slower than the code generated by default. Since 12449 there is very little code that depends on the INEXACT-FLAG, you 12450 should normally not specify this option. Other Alpha compilers 12451 call this option `-ieee_with_inexact'. 12452 12453 `-mfp-trap-mode=TRAP-MODE' 12454 This option controls what floating-point related traps are enabled. 12455 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 12456 trap mode can be set to one of four values: 12457 12458 `n' 12459 This is the default (normal) setting. The only traps that 12460 are enabled are the ones that cannot be disabled in software 12461 (e.g., division by zero trap). 12462 12463 `u' 12464 In addition to the traps enabled by `n', underflow traps are 12465 enabled as well. 12466 12467 `su' 12468 Like `u', but the instructions are marked to be safe for 12469 software completion (see Alpha architecture manual for 12470 details). 12471 12472 `sui' 12473 Like `su', but inexact traps are enabled as well. 12474 12475 `-mfp-rounding-mode=ROUNDING-MODE' 12476 Selects the IEEE rounding mode. Other Alpha compilers call this 12477 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 12478 12479 `n' 12480 Normal IEEE rounding mode. Floating-point numbers are 12481 rounded towards the nearest machine number or towards the 12482 even machine number in case of a tie. 12483 12484 `m' 12485 Round towards minus infinity. 12486 12487 `c' 12488 Chopped rounding mode. Floating-point numbers are rounded 12489 towards zero. 12490 12491 `d' 12492 Dynamic rounding mode. A field in the floating-point control 12493 register (FPCR, see Alpha architecture reference manual) 12494 controls the rounding mode in effect. The C library 12495 initializes this register for rounding towards plus infinity. 12496 Thus, unless your program modifies the FPCR, `d' corresponds 12497 to round towards plus infinity. 12498 12499 `-mtrap-precision=TRAP-PRECISION' 12500 In the Alpha architecture, floating-point traps are imprecise. 12501 This means without software assistance it is impossible to recover 12502 from a floating trap and program execution normally needs to be 12503 terminated. GCC can generate code that can assist operating 12504 system trap handlers in determining the exact location that caused 12505 a floating-point trap. Depending on the requirements of an 12506 application, different levels of precisions can be selected: 12507 12508 `p' 12509 Program precision. This option is the default and means a 12510 trap handler can only identify which program caused a 12511 floating-point exception. 12512 12513 `f' 12514 Function precision. The trap handler can determine the 12515 function that caused a floating-point exception. 12516 12517 `i' 12518 Instruction precision. The trap handler can determine the 12519 exact instruction that caused a floating-point exception. 12520 12521 Other Alpha compilers provide the equivalent options called 12522 `-scope_safe' and `-resumption_safe'. 12523 12524 `-mieee-conformant' 12525 This option marks the generated code as IEEE conformant. You must 12526 not use this option unless you also specify `-mtrap-precision=i' 12527 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 12528 effect is to emit the line `.eflag 48' in the function prologue of 12529 the generated assembly file. 12530 12531 `-mbuild-constants' 12532 Normally GCC examines a 32- or 64-bit integer constant to see if 12533 it can construct it from smaller constants in two or three 12534 instructions. If it cannot, it outputs the constant as a literal 12535 and generates code to load it from the data segment at run time. 12536 12537 Use this option to require GCC to construct _all_ integer constants 12538 using code, even if it takes more instructions (the maximum is 12539 six). 12540 12541 You typically use this option to build a shared library dynamic 12542 loader. Itself a shared library, it must relocate itself in memory 12543 before it can find the variables and constants in its own data 12544 segment. 12545 12546 `-mbwx' 12547 `-mno-bwx' 12548 `-mcix' 12549 `-mno-cix' 12550 `-mfix' 12551 `-mno-fix' 12552 `-mmax' 12553 `-mno-max' 12554 Indicate whether GCC should generate code to use the optional BWX, 12555 CIX, FIX and MAX instruction sets. The default is to use the 12556 instruction sets supported by the CPU type specified via `-mcpu=' 12557 option or that of the CPU on which GCC was built if none is 12558 specified. 12559 12560 `-mfloat-vax' 12561 `-mfloat-ieee' 12562 Generate code that uses (does not use) VAX F and G floating-point 12563 arithmetic instead of IEEE single and double precision. 12564 12565 `-mexplicit-relocs' 12566 `-mno-explicit-relocs' 12567 Older Alpha assemblers provided no way to generate symbol 12568 relocations except via assembler macros. Use of these macros does 12569 not allow optimal instruction scheduling. GNU binutils as of 12570 version 2.12 supports a new syntax that allows the compiler to 12571 explicitly mark which relocations should apply to which 12572 instructions. This option is mostly useful for debugging, as GCC 12573 detects the capabilities of the assembler when it is built and 12574 sets the default accordingly. 12575 12576 `-msmall-data' 12577 `-mlarge-data' 12578 When `-mexplicit-relocs' is in effect, static data is accessed via 12579 "gp-relative" relocations. When `-msmall-data' is used, objects 8 12580 bytes long or smaller are placed in a "small data area" (the 12581 `.sdata' and `.sbss' sections) and are accessed via 16-bit 12582 relocations off of the `$gp' register. This limits the size of 12583 the small data area to 64KB, but allows the variables to be 12584 directly accessed via a single instruction. 12585 12586 The default is `-mlarge-data'. With this option the data area is 12587 limited to just below 2GB. Programs that require more than 2GB of 12588 data must use `malloc' or `mmap' to allocate the data in the heap 12589 instead of in the program's data segment. 12590 12591 When generating code for shared libraries, `-fpic' implies 12592 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 12593 12594 `-msmall-text' 12595 `-mlarge-text' 12596 When `-msmall-text' is used, the compiler assumes that the code of 12597 the entire program (or shared library) fits in 4MB, and is thus 12598 reachable with a branch instruction. When `-msmall-data' is used, 12599 the compiler can assume that all local symbols share the same 12600 `$gp' value, and thus reduce the number of instructions required 12601 for a function call from 4 to 1. 12602 12603 The default is `-mlarge-text'. 12604 12605 `-mcpu=CPU_TYPE' 12606 Set the instruction set and instruction scheduling parameters for 12607 machine type CPU_TYPE. You can specify either the `EV' style name 12608 or the corresponding chip number. GCC supports scheduling 12609 parameters for the EV4, EV5 and EV6 family of processors and 12610 chooses the default values for the instruction set from the 12611 processor you specify. If you do not specify a processor type, 12612 GCC defaults to the processor on which the compiler was built. 12613 12614 Supported values for CPU_TYPE are 12615 12616 `ev4' 12617 `ev45' 12618 `21064' 12619 Schedules as an EV4 and has no instruction set extensions. 12620 12621 `ev5' 12622 `21164' 12623 Schedules as an EV5 and has no instruction set extensions. 12624 12625 `ev56' 12626 `21164a' 12627 Schedules as an EV5 and supports the BWX extension. 12628 12629 `pca56' 12630 `21164pc' 12631 `21164PC' 12632 Schedules as an EV5 and supports the BWX and MAX extensions. 12633 12634 `ev6' 12635 `21264' 12636 Schedules as an EV6 and supports the BWX, FIX, and MAX 12637 extensions. 12638 12639 `ev67' 12640 `21264a' 12641 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 12642 extensions. 12643 12644 Native toolchains also support the value `native', which selects 12645 the best architecture option for the host processor. 12646 `-mcpu=native' has no effect if GCC does not recognize the 12647 processor. 12648 12649 `-mtune=CPU_TYPE' 12650 Set only the instruction scheduling parameters for machine type 12651 CPU_TYPE. The instruction set is not changed. 12652 12653 Native toolchains also support the value `native', which selects 12654 the best architecture option for the host processor. 12655 `-mtune=native' has no effect if GCC does not recognize the 12656 processor. 12657 12658 `-mmemory-latency=TIME' 12659 Sets the latency the scheduler should assume for typical memory 12660 references as seen by the application. This number is highly 12661 dependent on the memory access patterns used by the application 12662 and the size of the external cache on the machine. 12663 12664 Valid options for TIME are 12665 12666 `NUMBER' 12667 A decimal number representing clock cycles. 12668 12669 `L1' 12670 `L2' 12671 `L3' 12672 `main' 12673 The compiler contains estimates of the number of clock cycles 12674 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 12675 (also called Dcache, Scache, and Bcache), as well as to main 12676 memory. Note that L3 is only valid for EV5. 12677 12678 12679 12680 File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options 12681 12682 3.17.11 FR30 Options 12683 -------------------- 12684 12685 These options are defined specifically for the FR30 port. 12686 12687 `-msmall-model' 12688 Use the small address space model. This can produce smaller code, 12689 but it does assume that all symbolic values and addresses fit into 12690 a 20-bit range. 12691 12692 `-mno-lsim' 12693 Assume that runtime support has been provided and so there is no 12694 need to include the simulator library (`libsim.a') on the linker 12695 command line. 12696 12697 12698 12699 File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 12700 12701 3.17.12 FRV Options 12702 ------------------- 12703 12704 `-mgpr-32' 12705 Only use the first 32 general-purpose registers. 12706 12707 `-mgpr-64' 12708 Use all 64 general-purpose registers. 12709 12710 `-mfpr-32' 12711 Use only the first 32 floating-point registers. 12712 12713 `-mfpr-64' 12714 Use all 64 floating-point registers. 12715 12716 `-mhard-float' 12717 Use hardware instructions for floating-point operations. 12718 12719 `-msoft-float' 12720 Use library routines for floating-point operations. 12721 12722 `-malloc-cc' 12723 Dynamically allocate condition code registers. 12724 12725 `-mfixed-cc' 12726 Do not try to dynamically allocate condition code registers, only 12727 use `icc0' and `fcc0'. 12728 12729 `-mdword' 12730 Change ABI to use double word insns. 12731 12732 `-mno-dword' 12733 Do not use double word instructions. 12734 12735 `-mdouble' 12736 Use floating-point double instructions. 12737 12738 `-mno-double' 12739 Do not use floating-point double instructions. 12740 12741 `-mmedia' 12742 Use media instructions. 12743 12744 `-mno-media' 12745 Do not use media instructions. 12746 12747 `-mmuladd' 12748 Use multiply and add/subtract instructions. 12749 12750 `-mno-muladd' 12751 Do not use multiply and add/subtract instructions. 12752 12753 `-mfdpic' 12754 Select the FDPIC ABI, which uses function descriptors to represent 12755 pointers to functions. Without any PIC/PIE-related options, it 12756 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 12757 and small data are within a 12-bit range from the GOT base 12758 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 12759 bits. With a `bfin-elf' target, this option implies `-msim'. 12760 12761 `-minline-plt' 12762 Enable inlining of PLT entries in function calls to functions that 12763 are not known to bind locally. It has no effect without `-mfdpic'. 12764 It's enabled by default if optimizing for speed and compiling for 12765 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 12766 optimization option such as `-O3' or above is present in the 12767 command line. 12768 12769 `-mTLS' 12770 Assume a large TLS segment when generating thread-local code. 12771 12772 `-mtls' 12773 Do not assume a large TLS segment when generating thread-local 12774 code. 12775 12776 `-mgprel-ro' 12777 Enable the use of `GPREL' relocations in the FDPIC ABI for data 12778 that is known to be in read-only sections. It's enabled by 12779 default, except for `-fpic' or `-fpie': even though it may help 12780 make the global offset table smaller, it trades 1 instruction for 12781 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 12782 of which may be shared by multiple symbols, and it avoids the need 12783 for a GOT entry for the referenced symbol, so it's more likely to 12784 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 12785 12786 `-multilib-library-pic' 12787 Link with the (library, not FD) pic libraries. It's implied by 12788 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 12789 `-mfdpic'. You should never have to use it explicitly. 12790 12791 `-mlinked-fp' 12792 Follow the EABI requirement of always creating a frame pointer 12793 whenever a stack frame is allocated. This option is enabled by 12794 default and can be disabled with `-mno-linked-fp'. 12795 12796 `-mlong-calls' 12797 Use indirect addressing to call functions outside the current 12798 compilation unit. This allows the functions to be placed anywhere 12799 within the 32-bit address space. 12800 12801 `-malign-labels' 12802 Try to align labels to an 8-byte boundary by inserting NOPs into 12803 the previous packet. This option only has an effect when VLIW 12804 packing is enabled. It doesn't create new packets; it merely adds 12805 NOPs to existing ones. 12806 12807 `-mlibrary-pic' 12808 Generate position-independent EABI code. 12809 12810 `-macc-4' 12811 Use only the first four media accumulator registers. 12812 12813 `-macc-8' 12814 Use all eight media accumulator registers. 12815 12816 `-mpack' 12817 Pack VLIW instructions. 12818 12819 `-mno-pack' 12820 Do not pack VLIW instructions. 12821 12822 `-mno-eflags' 12823 Do not mark ABI switches in e_flags. 12824 12825 `-mcond-move' 12826 Enable the use of conditional-move instructions (default). 12827 12828 This switch is mainly for debugging the compiler and will likely 12829 be removed in a future version. 12830 12831 `-mno-cond-move' 12832 Disable the use of conditional-move instructions. 12833 12834 This switch is mainly for debugging the compiler and will likely 12835 be removed in a future version. 12836 12837 `-mscc' 12838 Enable the use of conditional set instructions (default). 12839 12840 This switch is mainly for debugging the compiler and will likely 12841 be removed in a future version. 12842 12843 `-mno-scc' 12844 Disable the use of conditional set instructions. 12845 12846 This switch is mainly for debugging the compiler and will likely 12847 be removed in a future version. 12848 12849 `-mcond-exec' 12850 Enable the use of conditional execution (default). 12851 12852 This switch is mainly for debugging the compiler and will likely 12853 be removed in a future version. 12854 12855 `-mno-cond-exec' 12856 Disable the use of conditional execution. 12857 12858 This switch is mainly for debugging the compiler and will likely 12859 be removed in a future version. 12860 12861 `-mvliw-branch' 12862 Run a pass to pack branches into VLIW instructions (default). 12863 12864 This switch is mainly for debugging the compiler and will likely 12865 be removed in a future version. 12866 12867 `-mno-vliw-branch' 12868 Do not run a pass to pack branches into VLIW instructions. 12869 12870 This switch is mainly for debugging the compiler and will likely 12871 be removed in a future version. 12872 12873 `-mmulti-cond-exec' 12874 Enable optimization of `&&' and `||' in conditional execution 12875 (default). 12876 12877 This switch is mainly for debugging the compiler and will likely 12878 be removed in a future version. 12879 12880 `-mno-multi-cond-exec' 12881 Disable optimization of `&&' and `||' in conditional execution. 12882 12883 This switch is mainly for debugging the compiler and will likely 12884 be removed in a future version. 12885 12886 `-mnested-cond-exec' 12887 Enable nested conditional execution optimizations (default). 12888 12889 This switch is mainly for debugging the compiler and will likely 12890 be removed in a future version. 12891 12892 `-mno-nested-cond-exec' 12893 Disable nested conditional execution optimizations. 12894 12895 This switch is mainly for debugging the compiler and will likely 12896 be removed in a future version. 12897 12898 `-moptimize-membar' 12899 This switch removes redundant `membar' instructions from the 12900 compiler-generated code. It is enabled by default. 12901 12902 `-mno-optimize-membar' 12903 This switch disables the automatic removal of redundant `membar' 12904 instructions from the generated code. 12905 12906 `-mtomcat-stats' 12907 Cause gas to print out tomcat statistics. 12908 12909 `-mcpu=CPU' 12910 Select the processor type for which to generate code. Possible 12911 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 12912 `fr400', `fr300' and `simple'. 12913 12914 12915 12916 File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 12917 12918 3.17.13 GNU/Linux Options 12919 ------------------------- 12920 12921 These `-m' options are defined for GNU/Linux targets: 12922 12923 `-mglibc' 12924 Use the GNU C library. This is the default except on 12925 `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets. 12926 12927 `-muclibc' 12928 Use uClibc C library. This is the default on `*-*-linux-*uclibc*' 12929 targets. 12930 12931 `-mbionic' 12932 Use Bionic C library. This is the default on 12933 `*-*-linux-*android*' targets. 12934 12935 `-mandroid' 12936 Compile code compatible with Android platform. This is the 12937 default on `*-*-linux-*android*' targets. 12938 12939 When compiling, this option enables `-mbionic', `-fPIC', 12940 `-fno-exceptions' and `-fno-rtti' by default. When linking, this 12941 option makes the GCC driver pass Android-specific options to the 12942 linker. Finally, this option causes the preprocessor macro 12943 `__ANDROID__' to be defined. 12944 12945 `-tno-android-cc' 12946 Disable compilation effects of `-mandroid', i.e., do not enable 12947 `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default. 12948 12949 `-tno-android-ld' 12950 Disable linking effects of `-mandroid', i.e., pass standard Linux 12951 linking options to the linker. 12952 12953 12954 12955 File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 12956 12957 3.17.14 H8/300 Options 12958 ---------------------- 12959 12960 These `-m' options are defined for the H8/300 implementations: 12961 12962 `-mrelax' 12963 Shorten some address references at link time, when possible; uses 12964 the linker option `-relax'. *Note `ld' and the H8/300: 12965 (ld)H8/300, for a fuller description. 12966 12967 `-mh' 12968 Generate code for the H8/300H. 12969 12970 `-ms' 12971 Generate code for the H8S. 12972 12973 `-mn' 12974 Generate code for the H8S and H8/300H in the normal mode. This 12975 switch must be used either with `-mh' or `-ms'. 12976 12977 `-ms2600' 12978 Generate code for the H8S/2600. This switch must be used with 12979 `-ms'. 12980 12981 `-mexr' 12982 Extended registers are stored on stack before execution of function 12983 with monitor attribute. Default option is `-mexr'. This option is 12984 valid only for H8S targets. 12985 12986 `-mno-exr' 12987 Extended registers are not stored on stack before execution of 12988 function with monitor attribute. Default option is `-mno-exr'. 12989 This option is valid only for H8S targets. 12990 12991 `-mint32' 12992 Make `int' data 32 bits by default. 12993 12994 `-malign-300' 12995 On the H8/300H and H8S, use the same alignment rules as for the 12996 H8/300. The default for the H8/300H and H8S is to align longs and 12997 floats on 4-byte boundaries. `-malign-300' causes them to be 12998 aligned on 2-byte boundaries. This option has no effect on the 12999 H8/300. 13000 13001 13002 File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 13003 13004 3.17.15 HPPA Options 13005 -------------------- 13006 13007 These `-m' options are defined for the HPPA family of computers: 13008 13009 `-march=ARCHITECTURE-TYPE' 13010 Generate code for the specified architecture. The choices for 13011 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 13012 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 13013 an HP-UX system to determine the proper architecture option for 13014 your machine. Code compiled for lower numbered architectures runs 13015 on higher numbered architectures, but not the other way around. 13016 13017 `-mpa-risc-1-0' 13018 `-mpa-risc-1-1' 13019 `-mpa-risc-2-0' 13020 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 13021 respectively. 13022 13023 `-mbig-switch' 13024 Generate code suitable for big switch tables. Use this option 13025 only if the assembler/linker complain about out-of-range branches 13026 within a switch table. 13027 13028 `-mjump-in-delay' 13029 Fill delay slots of function calls with unconditional jump 13030 instructions by modifying the return pointer for the function call 13031 to be the target of the conditional jump. 13032 13033 `-mdisable-fpregs' 13034 Prevent floating-point registers from being used in any manner. 13035 This is necessary for compiling kernels that perform lazy context 13036 switching of floating-point registers. If you use this option and 13037 attempt to perform floating-point operations, the compiler aborts. 13038 13039 `-mdisable-indexing' 13040 Prevent the compiler from using indexing address modes. This 13041 avoids some rather obscure problems when compiling MIG generated 13042 code under MACH. 13043 13044 `-mno-space-regs' 13045 Generate code that assumes the target has no space registers. 13046 This allows GCC to generate faster indirect calls and use unscaled 13047 index address modes. 13048 13049 Such code is suitable for level 0 PA systems and kernels. 13050 13051 `-mfast-indirect-calls' 13052 Generate code that assumes calls never cross space boundaries. 13053 This allows GCC to emit code that performs faster indirect calls. 13054 13055 This option does not work in the presence of shared libraries or 13056 nested functions. 13057 13058 `-mfixed-range=REGISTER-RANGE' 13059 Generate code treating the given register range as fixed registers. 13060 A fixed register is one that the register allocator cannot use. 13061 This is useful when compiling kernel code. A register range is 13062 specified as two registers separated by a dash. Multiple register 13063 ranges can be specified separated by a comma. 13064 13065 `-mlong-load-store' 13066 Generate 3-instruction load and store sequences as sometimes 13067 required by the HP-UX 10 linker. This is equivalent to the `+k' 13068 option to the HP compilers. 13069 13070 `-mportable-runtime' 13071 Use the portable calling conventions proposed by HP for ELF 13072 systems. 13073 13074 `-mgas' 13075 Enable the use of assembler directives only GAS understands. 13076 13077 `-mschedule=CPU-TYPE' 13078 Schedule code according to the constraints for the machine type 13079 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 13080 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 13081 HP-UX system to determine the proper scheduling option for your 13082 machine. The default scheduling is `8000'. 13083 13084 `-mlinker-opt' 13085 Enable the optimization pass in the HP-UX linker. Note this makes 13086 symbolic debugging impossible. It also triggers a bug in the 13087 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 13088 messages when linking some programs. 13089 13090 `-msoft-float' 13091 Generate output containing library calls for floating point. 13092 *Warning:* the requisite libraries are not available for all HPPA 13093 targets. Normally the facilities of the machine's usual C 13094 compiler are used, but this cannot be done directly in 13095 cross-compilation. You must make your own arrangements to provide 13096 suitable library functions for cross-compilation. 13097 13098 `-msoft-float' changes the calling convention in the output file; 13099 therefore, it is only useful if you compile _all_ of a program with 13100 this option. In particular, you need to compile `libgcc.a', the 13101 library that comes with GCC, with `-msoft-float' in order for this 13102 to work. 13103 13104 `-msio' 13105 Generate the predefine, `_SIO', for server IO. The default is 13106 `-mwsio'. This generates the predefines, `__hp9000s700', 13107 `__hp9000s700__' and `_WSIO', for workstation IO. These options 13108 are available under HP-UX and HI-UX. 13109 13110 `-mgnu-ld' 13111 Use options specific to GNU `ld'. This passes `-shared' to `ld' 13112 when building a shared library. It is the default when GCC is 13113 configured, explicitly or implicitly, with the GNU linker. This 13114 option does not affect which `ld' is called; it only changes what 13115 parameters are passed to that `ld'. The `ld' that is called is 13116 determined by the `--with-ld' configure option, GCC's program 13117 search path, and finally by the user's `PATH'. The linker used by 13118 GCC can be printed using `which `gcc -print-prog-name=ld`'. This 13119 option is only available on the 64-bit HP-UX GCC, i.e. configured 13120 with `hppa*64*-*-hpux*'. 13121 13122 `-mhp-ld' 13123 Use options specific to HP `ld'. This passes `-b' to `ld' when 13124 building a shared library and passes `+Accept TypeMismatch' to 13125 `ld' on all links. It is the default when GCC is configured, 13126 explicitly or implicitly, with the HP linker. This option does 13127 not affect which `ld' is called; it only changes what parameters 13128 are passed to that `ld'. The `ld' that is called is determined by 13129 the `--with-ld' configure option, GCC's program search path, and 13130 finally by the user's `PATH'. The linker used by GCC can be 13131 printed using `which `gcc -print-prog-name=ld`'. This option is 13132 only available on the 64-bit HP-UX GCC, i.e. configured with 13133 `hppa*64*-*-hpux*'. 13134 13135 `-mlong-calls' 13136 Generate code that uses long call sequences. This ensures that a 13137 call is always able to reach linker generated stubs. The default 13138 is to generate long calls only when the distance from the call 13139 site to the beginning of the function or translation unit, as the 13140 case may be, exceeds a predefined limit set by the branch type 13141 being used. The limits for normal calls are 7,600,000 and 240,000 13142 bytes, respectively for the PA 2.0 and PA 1.X architectures. 13143 Sibcalls are always limited at 240,000 bytes. 13144 13145 Distances are measured from the beginning of functions when using 13146 the `-ffunction-sections' option, or when using the `-mgas' and 13147 `-mno-portable-runtime' options together under HP-UX with the SOM 13148 linker. 13149 13150 It is normally not desirable to use this option as it degrades 13151 performance. However, it may be useful in large applications, 13152 particularly when partial linking is used to build the application. 13153 13154 The types of long calls used depends on the capabilities of the 13155 assembler and linker, and the type of code being generated. The 13156 impact on systems that support long absolute calls, and long pic 13157 symbol-difference or pc-relative calls should be relatively small. 13158 However, an indirect call is used on 32-bit ELF systems in pic code 13159 and it is quite long. 13160 13161 `-munix=UNIX-STD' 13162 Generate compiler predefines and select a startfile for the 13163 specified UNIX standard. The choices for UNIX-STD are `93', `95' 13164 and `98'. `93' is supported on all HP-UX versions. `95' is 13165 available on HP-UX 10.10 and later. `98' is available on HP-UX 13166 11.11 and later. The default values are `93' for HP-UX 10.00, 13167 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 13168 later. 13169 13170 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 13171 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 13172 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 13173 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 13174 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 13175 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 13176 13177 It is _important_ to note that this option changes the interfaces 13178 for various library routines. It also affects the operational 13179 behavior of the C library. Thus, _extreme_ care is needed in 13180 using this option. 13181 13182 Library code that is intended to operate with more than one UNIX 13183 standard must test, set and restore the variable 13184 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 13185 provide this capability. 13186 13187 `-nolibdld' 13188 Suppress the generation of link options to search libdld.sl when 13189 the `-static' option is specified on HP-UX 10 and later. 13190 13191 `-static' 13192 The HP-UX implementation of setlocale in libc has a dependency on 13193 libdld.sl. There isn't an archive version of libdld.sl. Thus, 13194 when the `-static' option is specified, special link options are 13195 needed to resolve this dependency. 13196 13197 On HP-UX 10 and later, the GCC driver adds the necessary options to 13198 link with libdld.sl when the `-static' option is specified. This 13199 causes the resulting binary to be dynamic. On the 64-bit port, 13200 the linkers generate dynamic binaries by default in any case. The 13201 `-nolibdld' option can be used to prevent the GCC driver from 13202 adding these link options. 13203 13204 `-threads' 13205 Add support for multithreading with the "dce thread" library under 13206 HP-UX. This option sets flags for both the preprocessor and 13207 linker. 13208 13209 13210 File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options 13211 13212 3.17.16 Intel 386 and AMD x86-64 Options 13213 ---------------------------------------- 13214 13215 These `-m' options are defined for the i386 and x86-64 family of 13216 computers: 13217 13218 `-march=CPU-TYPE' 13219 Generate instructions for the machine type CPU-TYPE. In contrast 13220 to `-mtune=CPU-TYPE', which merely tunes the generated code for 13221 the specified CPU-TYPE, `-march=CPU-TYPE' allows GCC to generate 13222 code that may not run at all on processors other than the one 13223 indicated. Specifying `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 13224 13225 The choices for CPU-TYPE are: 13226 13227 `native' 13228 This selects the CPU to generate code for at compilation time 13229 by determining the processor type of the compiling machine. 13230 Using `-march=native' enables all instruction subsets 13231 supported by the local machine (hence the result might not 13232 run on different machines). Using `-mtune=native' produces 13233 code optimized for the local machine under the constraints of 13234 the selected instruction set. 13235 13236 `i386' 13237 Original Intel i386 CPU. 13238 13239 `i486' 13240 Intel i486 CPU. (No scheduling is implemented for this chip.) 13241 13242 `i586' 13243 `pentium' 13244 Intel Pentium CPU with no MMX support. 13245 13246 `pentium-mmx' 13247 Intel Pentium MMX CPU, based on Pentium core with MMX 13248 instruction set support. 13249 13250 `pentiumpro' 13251 Intel Pentium Pro CPU. 13252 13253 `i686' 13254 When used with `-march', the Pentium Pro instruction set is 13255 used, so the code runs on all i686 family chips. When used 13256 with `-mtune', it has the same meaning as `generic'. 13257 13258 `pentium2' 13259 Intel Pentium II CPU, based on Pentium Pro core with MMX 13260 instruction set support. 13261 13262 `pentium3' 13263 `pentium3m' 13264 Intel Pentium III CPU, based on Pentium Pro core with MMX and 13265 SSE instruction set support. 13266 13267 `pentium-m' 13268 Intel Pentium M; low-power version of Intel Pentium III CPU 13269 with MMX, SSE and SSE2 instruction set support. Used by 13270 Centrino notebooks. 13271 13272 `pentium4' 13273 `pentium4m' 13274 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set 13275 support. 13276 13277 `prescott' 13278 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 13279 and SSE3 instruction set support. 13280 13281 `nocona' 13282 Improved version of Intel Pentium 4 CPU with 64-bit 13283 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 13284 13285 `core2' 13286 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 13287 and SSSE3 instruction set support. 13288 13289 `corei7' 13290 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, 13291 SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support. 13292 13293 `corei7-avx' 13294 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, 13295 SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction 13296 set support. 13297 13298 `core-avx-i' 13299 Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, 13300 SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and 13301 F16C instruction set support. 13302 13303 `core-avx2' 13304 Intel Core CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, 13305 SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL, 13306 FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction set 13307 support. 13308 13309 `atom' 13310 Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, 13311 SSE3 and SSSE3 instruction set support. 13312 13313 `k6' 13314 AMD K6 CPU with MMX instruction set support. 13315 13316 `k6-2' 13317 `k6-3' 13318 Improved versions of AMD K6 CPU with MMX and 3DNow! 13319 instruction set support. 13320 13321 `athlon' 13322 `athlon-tbird' 13323 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE 13324 prefetch instructions support. 13325 13326 `athlon-4' 13327 `athlon-xp' 13328 `athlon-mp' 13329 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and 13330 full SSE instruction set support. 13331 13332 `k8' 13333 `opteron' 13334 `athlon64' 13335 `athlon-fx' 13336 Processors based on the AMD K8 core with x86-64 instruction 13337 set support, including the AMD Opteron, Athlon 64, and Athlon 13338 64 FX processors. (This supersets MMX, SSE, SSE2, 3DNow!, 13339 enhanced 3DNow! and 64-bit instruction set extensions.) 13340 13341 `k8-sse3' 13342 `opteron-sse3' 13343 `athlon64-sse3' 13344 Improved versions of AMD K8 cores with SSE3 instruction set 13345 support. 13346 13347 `amdfam10' 13348 `barcelona' 13349 CPUs based on AMD Family 10h cores with x86-64 instruction 13350 set support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 13351 3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set 13352 extensions.) 13353 13354 `bdver1' 13355 CPUs based on AMD Family 15h cores with x86-64 instruction 13356 set support. (This supersets FMA4, AVX, XOP, LWP, AES, 13357 PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, 13358 SSE4.2, ABM and 64-bit instruction set extensions.) 13359 13360 `bdver2' 13361 AMD Family 15h core based CPUs with x86-64 instruction set 13362 support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, 13363 AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, 13364 SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.) 13365 13366 `bdver3' 13367 AMD Family 15h core based CPUs with x86-64 instruction set 13368 support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, 13369 AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, 13370 SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions. 13371 13372 `btver1' 13373 CPUs based on AMD Family 14h cores with x86-64 instruction 13374 set support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, 13375 SSE4A, CX16, ABM and 64-bit instruction set extensions.) 13376 13377 `btver2' 13378 CPUs based on AMD Family 16h cores with x86-64 instruction 13379 set support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, 13380 AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, 13381 SSE, MMX and 64-bit instruction set extensions. 13382 13383 `winchip-c6' 13384 IDT WinChip C6 CPU, dealt in same way as i486 with additional 13385 MMX instruction set support. 13386 13387 `winchip2' 13388 IDT WinChip 2 CPU, dealt in same way as i486 with additional 13389 MMX and 3DNow! instruction set support. 13390 13391 `c3' 13392 VIA C3 CPU with MMX and 3DNow! instruction set support. (No 13393 scheduling is implemented for this chip.) 13394 13395 `c3-2' 13396 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set 13397 support. (No scheduling is implemented for this chip.) 13398 13399 `geode' 13400 AMD Geode embedded processor with MMX and 3DNow! instruction 13401 set support. 13402 13403 `-mtune=CPU-TYPE' 13404 Tune to CPU-TYPE everything applicable about the generated code, 13405 except for the ABI and the set of available instructions. While 13406 picking a specific CPU-TYPE schedules things appropriately for 13407 that particular chip, the compiler does not generate any code that 13408 cannot run on the default machine type unless you use a 13409 `-march=CPU-TYPE' option. For example, if GCC is configured for 13410 i686-pc-linux-gnu then `-mtune=pentium4' generates code that is 13411 tuned for Pentium 4 but still runs on i686 machines. 13412 13413 The choices for CPU-TYPE are the same as for `-march'. In 13414 addition, `-mtune' supports an extra choice for CPU-TYPE: 13415 13416 `generic' 13417 Produce code optimized for the most common IA32/AMD64/EM64T 13418 processors. If you know the CPU on which your code will run, 13419 then you should use the corresponding `-mtune' or `-march' 13420 option instead of `-mtune=generic'. But, if you do not know 13421 exactly what CPU users of your application will have, then 13422 you should use this option. 13423 13424 As new processors are deployed in the marketplace, the 13425 behavior of this option will change. Therefore, if you 13426 upgrade to a newer version of GCC, code generation controlled 13427 by this option will change to reflect the processors that are 13428 most common at the time that version of GCC is released. 13429 13430 There is no `-march=generic' option because `-march' 13431 indicates the instruction set the compiler can use, and there 13432 is no generic instruction set applicable to all processors. 13433 In contrast, `-mtune' indicates the processor (or, in this 13434 case, collection of processors) for which the code is 13435 optimized. 13436 13437 `-mcpu=CPU-TYPE' 13438 A deprecated synonym for `-mtune'. 13439 13440 `-mfpmath=UNIT' 13441 Generate floating-point arithmetic for selected unit UNIT. The 13442 choices for UNIT are: 13443 13444 `387' 13445 Use the standard 387 floating-point coprocessor present on 13446 the majority of chips and emulated otherwise. Code compiled 13447 with this option runs almost everywhere. The temporary 13448 results are computed in 80-bit precision instead of the 13449 precision specified by the type, resulting in slightly 13450 different results compared to most of other chips. See 13451 `-ffloat-store' for more detailed description. 13452 13453 This is the default choice for i386 compiler. 13454 13455 `sse' 13456 Use scalar floating-point instructions present in the SSE 13457 instruction set. This instruction set is supported by 13458 Pentium III and newer chips, and in the AMD line by Athlon-4, 13459 Athlon XP and Athlon MP chips. The earlier version of the SSE 13460 instruction set supports only single-precision arithmetic, 13461 thus the double and extended-precision arithmetic are still 13462 done using 387. A later version, present only in Pentium 4 13463 and AMD x86-64 chips, supports double-precision arithmetic 13464 too. 13465 13466 For the i386 compiler, you must use `-march=CPU-TYPE', `-msse' 13467 or `-msse2' switches to enable SSE extensions and make this 13468 option effective. For the x86-64 compiler, these extensions 13469 are enabled by default. 13470 13471 The resulting code should be considerably faster in the 13472 majority of cases and avoid the numerical instability 13473 problems of 387 code, but may break some existing code that 13474 expects temporaries to be 80 bits. 13475 13476 This is the default choice for the x86-64 compiler. 13477 13478 `sse,387' 13479 `sse+387' 13480 `both' 13481 Attempt to utilize both instruction sets at once. This 13482 effectively doubles the amount of available registers, and on 13483 chips with separate execution units for 387 and SSE the 13484 execution resources too. Use this option with care, as it is 13485 still experimental, because the GCC register allocator does 13486 not model separate functional units well, resulting in 13487 unstable performance. 13488 13489 `-masm=DIALECT' 13490 Output assembly instructions using selected DIALECT. Supported 13491 choices are `intel' or `att' (the default). Darwin does not 13492 support `intel'. 13493 13494 `-mieee-fp' 13495 `-mno-ieee-fp' 13496 Control whether or not the compiler uses IEEE floating-point 13497 comparisons. These correctly handle the case where the result of a 13498 comparison is unordered. 13499 13500 `-msoft-float' 13501 Generate output containing library calls for floating point. 13502 13503 *Warning:* the requisite libraries are not part of GCC. Normally 13504 the facilities of the machine's usual C compiler are used, but 13505 this can't be done directly in cross-compilation. You must make 13506 your own arrangements to provide suitable library functions for 13507 cross-compilation. 13508 13509 On machines where a function returns floating-point results in the 13510 80387 register stack, some floating-point opcodes may be emitted 13511 even if `-msoft-float' is used. 13512 13513 `-mno-fp-ret-in-387' 13514 Do not use the FPU registers for return values of functions. 13515 13516 The usual calling convention has functions return values of types 13517 `float' and `double' in an FPU register, even if there is no FPU. 13518 The idea is that the operating system should emulate an FPU. 13519 13520 The option `-mno-fp-ret-in-387' causes such values to be returned 13521 in ordinary CPU registers instead. 13522 13523 `-mno-fancy-math-387' 13524 Some 387 emulators do not support the `sin', `cos' and `sqrt' 13525 instructions for the 387. Specify this option to avoid generating 13526 those instructions. This option is the default on FreeBSD, 13527 OpenBSD and NetBSD. This option is overridden when `-march' 13528 indicates that the target CPU always has an FPU and so the 13529 instruction does not need emulation. These instructions are not 13530 generated unless you also use the `-funsafe-math-optimizations' 13531 switch. 13532 13533 `-malign-double' 13534 `-mno-align-double' 13535 Control whether GCC aligns `double', `long double', and `long 13536 long' variables on a two-word boundary or a one-word boundary. 13537 Aligning `double' variables on a two-word boundary produces code 13538 that runs somewhat faster on a Pentium at the expense of more 13539 memory. 13540 13541 On x86-64, `-malign-double' is enabled by default. 13542 13543 *Warning:* if you use the `-malign-double' switch, structures 13544 containing the above types are aligned differently than the 13545 published application binary interface specifications for the 386 13546 and are not binary compatible with structures in code compiled 13547 without that switch. 13548 13549 `-m96bit-long-double' 13550 `-m128bit-long-double' 13551 These switches control the size of `long double' type. The i386 13552 application binary interface specifies the size to be 96 bits, so 13553 `-m96bit-long-double' is the default in 32-bit mode. 13554 13555 Modern architectures (Pentium and newer) prefer `long double' to 13556 be aligned to an 8- or 16-byte boundary. In arrays or structures 13557 conforming to the ABI, this is not possible. So specifying 13558 `-m128bit-long-double' aligns `long double' to a 16-byte boundary 13559 by padding the `long double' with an additional 32-bit zero. 13560 13561 In the x86-64 compiler, `-m128bit-long-double' is the default 13562 choice as its ABI specifies that `long double' is aligned on 13563 16-byte boundary. 13564 13565 Notice that neither of these options enable any extra precision 13566 over the x87 standard of 80 bits for a `long double'. 13567 13568 *Warning:* if you override the default value for your target ABI, 13569 this changes the size of structures and arrays containing `long 13570 double' variables, as well as modifying the function calling 13571 convention for functions taking `long double'. Hence they are not 13572 binary-compatible with code compiled without that switch. 13573 13574 `-mlong-double-64' 13575 `-mlong-double-80' 13576 These switches control the size of `long double' type. A size of 13577 64 bits makes the `long double' type equivalent to the `double' 13578 type. This is the default for Bionic C library. 13579 13580 *Warning:* if you override the default value for your target ABI, 13581 this changes the size of structures and arrays containing `long 13582 double' variables, as well as modifying the function calling 13583 convention for functions taking `long double'. Hence they are not 13584 binary-compatible with code compiled without that switch. 13585 13586 `-mlarge-data-threshold=THRESHOLD' 13587 When `-mcmodel=medium' is specified, data objects larger than 13588 THRESHOLD are placed in the large data section. This value must 13589 be the same across all objects linked into the binary, and 13590 defaults to 65535. 13591 13592 `-mrtd' 13593 Use a different function-calling convention, in which functions 13594 that take a fixed number of arguments return with the `ret NUM' 13595 instruction, which pops their arguments while returning. This 13596 saves one instruction in the caller since there is no need to pop 13597 the arguments there. 13598 13599 You can specify that an individual function is called with this 13600 calling sequence with the function attribute `stdcall'. You can 13601 also override the `-mrtd' option by using the function attribute 13602 `cdecl'. *Note Function Attributes::. 13603 13604 *Warning:* this calling convention is incompatible with the one 13605 normally used on Unix, so you cannot use it if you need to call 13606 libraries compiled with the Unix compiler. 13607 13608 Also, you must provide function prototypes for all functions that 13609 take variable numbers of arguments (including `printf'); otherwise 13610 incorrect code is generated for calls to those functions. 13611 13612 In addition, seriously incorrect code results if you call a 13613 function with too many arguments. (Normally, extra arguments are 13614 harmlessly ignored.) 13615 13616 `-mregparm=NUM' 13617 Control how many registers are used to pass integer arguments. By 13618 default, no registers are used to pass arguments, and at most 3 13619 registers can be used. You can control this behavior for a 13620 specific function by using the function attribute `regparm'. 13621 *Note Function Attributes::. 13622 13623 *Warning:* if you use this switch, and NUM is nonzero, then you 13624 must build all modules with the same value, including any 13625 libraries. This includes the system libraries and startup modules. 13626 13627 `-msseregparm' 13628 Use SSE register passing conventions for float and double arguments 13629 and return values. You can control this behavior for a specific 13630 function by using the function attribute `sseregparm'. *Note 13631 Function Attributes::. 13632 13633 *Warning:* if you use this switch then you must build all modules 13634 with the same value, including any libraries. This includes the 13635 system libraries and startup modules. 13636 13637 `-mvect8-ret-in-mem' 13638 Return 8-byte vectors in memory instead of MMX registers. This is 13639 the default on Solaris 8 and 9 and VxWorks to match the ABI of the 13640 Sun Studio compilers until version 12. Later compiler versions 13641 (starting with Studio 12 Update 1) follow the ABI used by other 13642 x86 targets, which is the default on Solaris 10 and later. _Only_ 13643 use this option if you need to remain compatible with existing 13644 code produced by those previous compiler versions or older 13645 versions of GCC. 13646 13647 `-mpc32' 13648 `-mpc64' 13649 `-mpc80' 13650 Set 80387 floating-point precision to 32, 64 or 80 bits. When 13651 `-mpc32' is specified, the significands of results of 13652 floating-point operations are rounded to 24 bits (single 13653 precision); `-mpc64' rounds the significands of results of 13654 floating-point operations to 53 bits (double precision) and 13655 `-mpc80' rounds the significands of results of floating-point 13656 operations to 64 bits (extended double precision), which is the 13657 default. When this option is used, floating-point operations in 13658 higher precisions are not available to the programmer without 13659 setting the FPU control word explicitly. 13660 13661 Setting the rounding of floating-point operations to less than the 13662 default 80 bits can speed some programs by 2% or more. Note that 13663 some mathematical libraries assume that extended-precision 13664 (80-bit) floating-point operations are enabled by default; 13665 routines in such libraries could suffer significant loss of 13666 accuracy, typically through so-called "catastrophic cancellation", 13667 when this option is used to set the precision to less than 13668 extended precision. 13669 13670 `-mstackrealign' 13671 Realign the stack at entry. On the Intel x86, the `-mstackrealign' 13672 option generates an alternate prologue and epilogue that realigns 13673 the run-time stack if necessary. This supports mixing legacy 13674 codes that keep 4-byte stack alignment with modern codes that keep 13675 16-byte stack alignment for SSE compatibility. See also the 13676 attribute `force_align_arg_pointer', applicable to individual 13677 functions. 13678 13679 `-mpreferred-stack-boundary=NUM' 13680 Attempt to keep the stack boundary aligned to a 2 raised to NUM 13681 byte boundary. If `-mpreferred-stack-boundary' is not specified, 13682 the default is 4 (16 bytes or 128 bits). 13683 13684 *Warning:* When generating code for the x86-64 architecture with 13685 SSE extensions disabled, `-mpreferred-stack-boundary=3' can be 13686 used to keep the stack boundary aligned to 8 byte boundary. Since 13687 x86-64 ABI require 16 byte stack alignment, this is ABI 13688 incompatible and intended to be used in controlled environment 13689 where stack space is important limitation. This option will lead 13690 to wrong code when functions compiled with 16 byte stack alignment 13691 (such as functions from a standard library) are called with 13692 misaligned stack. In this case, SSE instructions may lead to 13693 misaligned memory access traps. In addition, variable arguments 13694 will be handled incorrectly for 16 byte aligned objects (including 13695 x87 long double and __int128), leading to wrong results. You must 13696 build all modules with `-mpreferred-stack-boundary=3', including 13697 any libraries. This includes the system libraries and startup 13698 modules. 13699 13700 `-mincoming-stack-boundary=NUM' 13701 Assume the incoming stack is aligned to a 2 raised to NUM byte 13702 boundary. If `-mincoming-stack-boundary' is not specified, the 13703 one specified by `-mpreferred-stack-boundary' is used. 13704 13705 On Pentium and Pentium Pro, `double' and `long double' values 13706 should be aligned to an 8-byte boundary (see `-malign-double') or 13707 suffer significant run time performance penalties. On Pentium 13708 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 13709 work properly if it is not 16-byte aligned. 13710 13711 To ensure proper alignment of this values on the stack, the stack 13712 boundary must be as aligned as that required by any value stored 13713 on the stack. Further, every function must be generated such that 13714 it keeps the stack aligned. Thus calling a function compiled with 13715 a higher preferred stack boundary from a function compiled with a 13716 lower preferred stack boundary most likely misaligns the stack. 13717 It is recommended that libraries that use callbacks always use the 13718 default setting. 13719 13720 This extra alignment does consume extra stack space, and generally 13721 increases code size. Code that is sensitive to stack space usage, 13722 such as embedded systems and operating system kernels, may want to 13723 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 13724 13725 `-mmmx' 13726 `-mno-mmx' 13727 `-msse' 13728 `-mno-sse' 13729 `-msse2' 13730 `-mno-sse2' 13731 `-msse3' 13732 `-mno-sse3' 13733 `-mssse3' 13734 `-mno-ssse3' 13735 `-msse4.1' 13736 `-mno-sse4.1' 13737 `-msse4.2' 13738 `-mno-sse4.2' 13739 `-msse4' 13740 `-mno-sse4' 13741 `-mavx' 13742 `-mno-avx' 13743 `-mavx2' 13744 `-mno-avx2' 13745 `-maes' 13746 `-mno-aes' 13747 `-mpclmul' 13748 `-mno-pclmul' 13749 `-mfsgsbase' 13750 `-mno-fsgsbase' 13751 `-mrdrnd' 13752 `-mno-rdrnd' 13753 `-mf16c' 13754 `-mno-f16c' 13755 `-mfma' 13756 `-mno-fma' 13757 `-msse4a' 13758 `-mno-sse4a' 13759 `-mfma4' 13760 `-mno-fma4' 13761 `-mxop' 13762 `-mno-xop' 13763 `-mlwp' 13764 `-mno-lwp' 13765 `-m3dnow' 13766 `-mno-3dnow' 13767 `-mpopcnt' 13768 `-mno-popcnt' 13769 `-mabm' 13770 `-mno-abm' 13771 `-mbmi' 13772 `-mbmi2' 13773 `-mno-bmi' 13774 `-mno-bmi2' 13775 `-mlzcnt' 13776 `-mno-lzcnt' 13777 `-mrtm' 13778 `-mtbm' 13779 `-mno-tbm' 13780 These switches enable or disable the use of instructions in the 13781 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, 13782 FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, 13783 LZCNT, RTM or 3DNow! extended instruction sets. These extensions 13784 are also available as built-in functions: see *note X86 Built-in 13785 Functions::, for details of the functions enabled and disabled by 13786 these switches. 13787 13788 To generate SSE/SSE2 instructions automatically from floating-point 13789 code (as opposed to 387 instructions), see `-mfpmath=sse'. 13790 13791 GCC depresses SSEx instructions when `-mavx' is used. Instead, it 13792 generates new AVX instructions or AVX equivalence for all SSEx 13793 instructions when needed. 13794 13795 These options enable GCC to use these extended instructions in 13796 generated code, even without `-mfpmath=sse'. Applications that 13797 perform run-time CPU detection must compile separate files for each 13798 supported architecture, using the appropriate flags. In 13799 particular, the file containing the CPU detection code should be 13800 compiled without these options. 13801 13802 `-mcld' 13803 This option instructs GCC to emit a `cld' instruction in the 13804 prologue of functions that use string instructions. String 13805 instructions depend on the DF flag to select between autoincrement 13806 or autodecrement mode. While the ABI specifies the DF flag to be 13807 cleared on function entry, some operating systems violate this 13808 specification by not clearing the DF flag in their exception 13809 dispatchers. The exception handler can be invoked with the DF flag 13810 set, which leads to wrong direction mode when string instructions 13811 are used. This option can be enabled by default on 32-bit x86 13812 targets by configuring GCC with the `--enable-cld' configure 13813 option. Generation of `cld' instructions can be suppressed with 13814 the `-mno-cld' compiler option in this case. 13815 13816 `-mvzeroupper' 13817 This option instructs GCC to emit a `vzeroupper' instruction 13818 before a transfer of control flow out of the function to minimize 13819 the AVX to SSE transition penalty as well as remove unnecessary 13820 `zeroupper' intrinsics. 13821 13822 `-mprefer-avx128' 13823 This option instructs GCC to use 128-bit AVX instructions instead 13824 of 256-bit AVX instructions in the auto-vectorizer. 13825 13826 `-mcx16' 13827 This option enables GCC to generate `CMPXCHG16B' instructions. 13828 `CMPXCHG16B' allows for atomic operations on 128-bit double 13829 quadword (or oword) data types. This is useful for 13830 high-resolution counters that can be updated by multiple 13831 processors (or cores). This instruction is generated as part of 13832 atomic built-in functions: see *note __sync Builtins:: or *note 13833 __atomic Builtins:: for details. 13834 13835 `-msahf' 13836 This option enables generation of `SAHF' instructions in 64-bit 13837 code. Early Intel Pentium 4 CPUs with Intel 64 support, prior to 13838 the introduction of Pentium 4 G1 step in December 2005, lacked the 13839 `LAHF' and `SAHF' instructions which were supported by AMD64. 13840 These are load and store instructions, respectively, for certain 13841 status flags. In 64-bit mode, the `SAHF' instruction is used to 13842 optimize `fmod', `drem', and `remainder' built-in functions; see 13843 *note Other Builtins:: for details. 13844 13845 `-mmovbe' 13846 This option enables use of the `movbe' instruction to implement 13847 `__builtin_bswap32' and `__builtin_bswap64'. 13848 13849 `-mcrc32' 13850 This option enables built-in functions `__builtin_ia32_crc32qi', 13851 `__builtin_ia32_crc32hi', `__builtin_ia32_crc32si' and 13852 `__builtin_ia32_crc32di' to generate the `crc32' machine 13853 instruction. 13854 13855 `-mrecip' 13856 This option enables use of `RCPSS' and `RSQRTSS' instructions (and 13857 their vectorized variants `RCPPS' and `RSQRTPS') with an 13858 additional Newton-Raphson step to increase precision instead of 13859 `DIVSS' and `SQRTSS' (and their vectorized variants) for 13860 single-precision floating-point arguments. These instructions are 13861 generated only when `-funsafe-math-optimizations' is enabled 13862 together with `-finite-math-only' and `-fno-trapping-math'. Note 13863 that while the throughput of the sequence is higher than the 13864 throughput of the non-reciprocal instruction, the precision of the 13865 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 13866 equals 0.99999994). 13867 13868 Note that GCC implements `1.0f/sqrtf(X)' in terms of `RSQRTSS' (or 13869 `RSQRTPS') already with `-ffast-math' (or the above option 13870 combination), and doesn't need `-mrecip'. 13871 13872 Also note that GCC emits the above sequence with additional 13873 Newton-Raphson step for vectorized single-float division and 13874 vectorized `sqrtf(X)' already with `-ffast-math' (or the above 13875 option combination), and doesn't need `-mrecip'. 13876 13877 `-mrecip=OPT' 13878 This option controls which reciprocal estimate instructions may be 13879 used. OPT is a comma-separated list of options, which may be 13880 preceded by a `!' to invert the option: 13881 13882 `all' 13883 Enable all estimate instructions. 13884 13885 `default' 13886 Enable the default instructions, equivalent to `-mrecip'. 13887 13888 `none' 13889 Disable all estimate instructions, equivalent to `-mno-recip'. 13890 13891 `div' 13892 Enable the approximation for scalar division. 13893 13894 `vec-div' 13895 Enable the approximation for vectorized division. 13896 13897 `sqrt' 13898 Enable the approximation for scalar square root. 13899 13900 `vec-sqrt' 13901 Enable the approximation for vectorized square root. 13902 13903 So, for example, `-mrecip=all,!sqrt' enables all of the reciprocal 13904 approximations, except for square root. 13905 13906 `-mveclibabi=TYPE' 13907 Specifies the ABI type to use for vectorizing intrinsics using an 13908 external library. Supported values for TYPE are `svml' for the 13909 Intel short vector math library and `acml' for the AMD math core 13910 library. To use this option, both `-ftree-vectorize' and 13911 `-funsafe-math-optimizations' have to be enabled, and an SVML or 13912 ACML ABI-compatible library must be specified at link time. 13913 13914 GCC currently emits calls to `vmldExp2', `vmldLn2', `vmldLog102', 13915 `vmldLog102', `vmldPow2', `vmldTanh2', `vmldTan2', `vmldAtan2', 13916 `vmldAtanh2', `vmldCbrt2', `vmldSinh2', `vmldSin2', `vmldAsinh2', 13917 `vmldAsin2', `vmldCosh2', `vmldCos2', `vmldAcosh2', `vmldAcos2', 13918 `vmlsExp4', `vmlsLn4', `vmlsLog104', `vmlsLog104', `vmlsPow4', 13919 `vmlsTanh4', `vmlsTan4', `vmlsAtan4', `vmlsAtanh4', `vmlsCbrt4', 13920 `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', `vmlsAsin4', `vmlsCosh4', 13921 `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' for corresponding 13922 function type when `-mveclibabi=svml' is used, and `__vrd2_sin', 13923 `__vrd2_cos', `__vrd2_exp', `__vrd2_log', `__vrd2_log2', 13924 `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', `__vrs4_expf', 13925 `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and `__vrs4_powf' 13926 for the corresponding function type when `-mveclibabi=acml' is 13927 used. 13928 13929 `-mabi=NAME' 13930 Generate code for the specified calling convention. Permissible 13931 values are `sysv' for the ABI used on GNU/Linux and other systems, 13932 and `ms' for the Microsoft ABI. The default is to use the 13933 Microsoft ABI when targeting Microsoft Windows and the SysV ABI on 13934 all other systems. You can control this behavior for a specific 13935 function by using the function attribute `ms_abi'/`sysv_abi'. 13936 *Note Function Attributes::. 13937 13938 `-mtls-dialect=TYPE' 13939 Generate code to access thread-local storage using the `gnu' or 13940 `gnu2' conventions. `gnu' is the conservative default; `gnu2' is 13941 more efficient, but it may add compile- and run-time requirements 13942 that cannot be satisfied on all systems. 13943 13944 `-mpush-args' 13945 `-mno-push-args' 13946 Use PUSH operations to store outgoing parameters. This method is 13947 shorter and usually equally fast as method using SUB/MOV 13948 operations and is enabled by default. In some cases disabling it 13949 may improve performance because of improved scheduling and reduced 13950 dependencies. 13951 13952 `-maccumulate-outgoing-args' 13953 If enabled, the maximum amount of space required for outgoing 13954 arguments is computed in the function prologue. This is faster on 13955 most modern CPUs because of reduced dependencies, improved 13956 scheduling and reduced stack usage when the preferred stack 13957 boundary is not equal to 2. The drawback is a notable increase in 13958 code size. This switch implies `-mno-push-args'. 13959 13960 `-mthreads' 13961 Support thread-safe exception handling on MinGW. Programs that 13962 rely on thread-safe exception handling must compile and link all 13963 code with the `-mthreads' option. When compiling, `-mthreads' 13964 defines `-D_MT'; when linking, it links in a special thread helper 13965 library `-lmingwthrd' which cleans up per-thread 13966 exception-handling data. 13967 13968 `-mno-align-stringops' 13969 Do not align the destination of inlined string operations. This 13970 switch reduces code size and improves performance in case the 13971 destination is already aligned, but GCC doesn't know about it. 13972 13973 `-minline-all-stringops' 13974 By default GCC inlines string operations only when the destination 13975 is known to be aligned to least a 4-byte boundary. This enables 13976 more inlining and increases code size, but may improve performance 13977 of code that depends on fast `memcpy', `strlen', and `memset' for 13978 short lengths. 13979 13980 `-minline-stringops-dynamically' 13981 For string operations of unknown size, use run-time checks with 13982 inline code for small blocks and a library call for large blocks. 13983 13984 `-mstringop-strategy=ALG' 13985 Override the internal decision heuristic for the particular 13986 algorithm to use for inlining string operations. The allowed 13987 values for ALG are: 13988 13989 `rep_byte' 13990 `rep_4byte' 13991 `rep_8byte' 13992 Expand using i386 `rep' prefix of the specified size. 13993 13994 `byte_loop' 13995 `loop' 13996 `unrolled_loop' 13997 Expand into an inline loop. 13998 13999 `libcall' 14000 Always use a library call. 14001 14002 `-momit-leaf-frame-pointer' 14003 Don't keep the frame pointer in a register for leaf functions. 14004 This avoids the instructions to save, set up, and restore frame 14005 pointers and makes an extra register available in leaf functions. 14006 The option `-fomit-leaf-frame-pointer' removes the frame pointer 14007 for leaf functions, which might make debugging harder. 14008 14009 `-mtls-direct-seg-refs' 14010 `-mno-tls-direct-seg-refs' 14011 Controls whether TLS variables may be accessed with offsets from 14012 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 14013 whether the thread base pointer must be added. Whether or not this 14014 is valid depends on the operating system, and whether it maps the 14015 segment to cover the entire TLS area. 14016 14017 For systems that use the GNU C Library, the default is on. 14018 14019 `-msse2avx' 14020 `-mno-sse2avx' 14021 Specify that the assembler should encode SSE instructions with VEX 14022 prefix. The option `-mavx' turns this on by default. 14023 14024 `-mfentry' 14025 `-mno-fentry' 14026 If profiling is active (`-pg'), put the profiling counter call 14027 before the prologue. Note: On x86 architectures the attribute 14028 `ms_hook_prologue' isn't possible at the moment for `-mfentry' and 14029 `-pg'. 14030 14031 `-m8bit-idiv' 14032 `-mno-8bit-idiv' 14033 On some processors, like Intel Atom, 8-bit unsigned integer divide 14034 is much faster than 32-bit/64-bit integer divide. This option 14035 generates a run-time check. If both dividend and divisor are 14036 within range of 0 to 255, 8-bit unsigned integer divide is used 14037 instead of 32-bit/64-bit integer divide. 14038 14039 `-mavx256-split-unaligned-load' 14040 `-mavx256-split-unaligned-store' 14041 Split 32-byte AVX unaligned load and store. 14042 14043 14044 These `-m' switches are supported in addition to the above on x86-64 14045 processors in 64-bit environments. 14046 14047 `-m32' 14048 `-m64' 14049 `-mx32' 14050 Generate code for a 32-bit or 64-bit environment. The `-m32' 14051 option sets `int', `long', and pointer types to 32 bits, and 14052 generates code that runs on any i386 system. 14053 14054 The `-m64' option sets `int' to 32 bits and `long' and pointer 14055 types to 64 bits, and generates code for the x86-64 architecture. 14056 For Darwin only the `-m64' option also turns off the `-fno-pic' 14057 and `-mdynamic-no-pic' options. 14058 14059 The `-mx32' option sets `int', `long', and pointer types to 32 14060 bits, and generates code for the x86-64 architecture. 14061 14062 `-mno-red-zone' 14063 Do not use a so-called "red zone" for x86-64 code. The red zone 14064 is mandated by the x86-64 ABI; it is a 128-byte area beyond the 14065 location of the stack pointer that is not modified by signal or 14066 interrupt handlers and therefore can be used for temporary data 14067 without adjusting the stack pointer. The flag `-mno-red-zone' 14068 disables this red zone. 14069 14070 `-mcmodel=small' 14071 Generate code for the small code model: the program and its 14072 symbols must be linked in the lower 2 GB of the address space. 14073 Pointers are 64 bits. Programs can be statically or dynamically 14074 linked. This is the default code model. 14075 14076 `-mcmodel=kernel' 14077 Generate code for the kernel code model. The kernel runs in the 14078 negative 2 GB of the address space. This model has to be used for 14079 Linux kernel code. 14080 14081 `-mcmodel=medium' 14082 Generate code for the medium model: the program is linked in the 14083 lower 2 GB of the address space. Small symbols are also placed 14084 there. Symbols with sizes larger than `-mlarge-data-threshold' 14085 are put into large data or BSS sections and can be located above 14086 2GB. Programs can be statically or dynamically linked. 14087 14088 `-mcmodel=large' 14089 Generate code for the large model. This model makes no assumptions 14090 about addresses and sizes of sections. 14091 14092 `-maddress-mode=long' 14093 Generate code for long address mode. This is only supported for 14094 64-bit and x32 environments. It is the default address mode for 14095 64-bit environments. 14096 14097 `-maddress-mode=short' 14098 Generate code for short address mode. This is only supported for 14099 32-bit and x32 environments. It is the default address mode for 14100 32-bit and x32 environments. 14101 14102 14103 File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options 14104 14105 3.17.17 i386 and x86-64 Windows Options 14106 --------------------------------------- 14107 14108 These additional options are available for Microsoft Windows targets: 14109 14110 `-mconsole' 14111 This option specifies that a console application is to be 14112 generated, by instructing the linker to set the PE header 14113 subsystem type required for console applications. This option is 14114 available for Cygwin and MinGW targets and is enabled by default 14115 on those targets. 14116 14117 `-mdll' 14118 This option is available for Cygwin and MinGW targets. It 14119 specifies that a DLL--a dynamic link library--is to be generated, 14120 enabling the selection of the required runtime startup object and 14121 entry point. 14122 14123 `-mnop-fun-dllimport' 14124 This option is available for Cygwin and MinGW targets. It 14125 specifies that the `dllimport' attribute should be ignored. 14126 14127 `-mthread' 14128 This option is available for MinGW targets. It specifies that 14129 MinGW-specific thread support is to be used. 14130 14131 `-municode' 14132 This option is available for MinGW-w64 targets. It causes the 14133 `UNICODE' preprocessor macro to be predefined, and chooses 14134 Unicode-capable runtime startup code. 14135 14136 `-mwin32' 14137 This option is available for Cygwin and MinGW targets. It 14138 specifies that the typical Microsoft Windows predefined macros are 14139 to be set in the pre-processor, but does not influence the choice 14140 of runtime library/startup code. 14141 14142 `-mwindows' 14143 This option is available for Cygwin and MinGW targets. It 14144 specifies that a GUI application is to be generated by instructing 14145 the linker to set the PE header subsystem type appropriately. 14146 14147 `-fno-set-stack-executable' 14148 This option is available for MinGW targets. It specifies that the 14149 executable flag for the stack used by nested functions isn't set. 14150 This is necessary for binaries running in kernel mode of Microsoft 14151 Windows, as there the User32 API, which is used to set executable 14152 privileges, isn't available. 14153 14154 `-fwritable-relocated-rdata' 14155 This option is available for MinGW and Cygwin targets. It 14156 specifies that relocated-data in read-only section is put into 14157 .data section. This is a necessary for older runtimes not 14158 supporting modification of .rdata sections for pseudo-relocation. 14159 14160 `-mpe-aligned-commons' 14161 This option is available for Cygwin and MinGW targets. It 14162 specifies that the GNU extension to the PE file format that 14163 permits the correct alignment of COMMON variables should be used 14164 when generating code. It is enabled by default if GCC detects 14165 that the target assembler found during configuration supports the 14166 feature. 14167 14168 See also under *note i386 and x86-64 Options:: for standard options. 14169 14170 14171 File: gcc.info, Node: IA-64 Options, Next: LM32 Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options 14172 14173 3.17.18 IA-64 Options 14174 --------------------- 14175 14176 These are the `-m' options defined for the Intel IA-64 architecture. 14177 14178 `-mbig-endian' 14179 Generate code for a big-endian target. This is the default for 14180 HP-UX. 14181 14182 `-mlittle-endian' 14183 Generate code for a little-endian target. This is the default for 14184 AIX5 and GNU/Linux. 14185 14186 `-mgnu-as' 14187 `-mno-gnu-as' 14188 Generate (or don't) code for the GNU assembler. This is the 14189 default. 14190 14191 `-mgnu-ld' 14192 `-mno-gnu-ld' 14193 Generate (or don't) code for the GNU linker. This is the default. 14194 14195 `-mno-pic' 14196 Generate code that does not use a global pointer register. The 14197 result is not position independent code, and violates the IA-64 14198 ABI. 14199 14200 `-mvolatile-asm-stop' 14201 `-mno-volatile-asm-stop' 14202 Generate (or don't) a stop bit immediately before and after 14203 volatile asm statements. 14204 14205 `-mregister-names' 14206 `-mno-register-names' 14207 Generate (or don't) `in', `loc', and `out' register names for the 14208 stacked registers. This may make assembler output more readable. 14209 14210 `-mno-sdata' 14211 `-msdata' 14212 Disable (or enable) optimizations that use the small data section. 14213 This may be useful for working around optimizer bugs. 14214 14215 `-mconstant-gp' 14216 Generate code that uses a single constant global pointer value. 14217 This is useful when compiling kernel code. 14218 14219 `-mauto-pic' 14220 Generate code that is self-relocatable. This implies 14221 `-mconstant-gp'. This is useful when compiling firmware code. 14222 14223 `-minline-float-divide-min-latency' 14224 Generate code for inline divides of floating-point values using 14225 the minimum latency algorithm. 14226 14227 `-minline-float-divide-max-throughput' 14228 Generate code for inline divides of floating-point values using 14229 the maximum throughput algorithm. 14230 14231 `-mno-inline-float-divide' 14232 Do not generate inline code for divides of floating-point values. 14233 14234 `-minline-int-divide-min-latency' 14235 Generate code for inline divides of integer values using the 14236 minimum latency algorithm. 14237 14238 `-minline-int-divide-max-throughput' 14239 Generate code for inline divides of integer values using the 14240 maximum throughput algorithm. 14241 14242 `-mno-inline-int-divide' 14243 Do not generate inline code for divides of integer values. 14244 14245 `-minline-sqrt-min-latency' 14246 Generate code for inline square roots using the minimum latency 14247 algorithm. 14248 14249 `-minline-sqrt-max-throughput' 14250 Generate code for inline square roots using the maximum throughput 14251 algorithm. 14252 14253 `-mno-inline-sqrt' 14254 Do not generate inline code for `sqrt'. 14255 14256 `-mfused-madd' 14257 `-mno-fused-madd' 14258 Do (don't) generate code that uses the fused multiply/add or 14259 multiply/subtract instructions. The default is to use these 14260 instructions. 14261 14262 `-mno-dwarf2-asm' 14263 `-mdwarf2-asm' 14264 Don't (or do) generate assembler code for the DWARF 2 line number 14265 debugging info. This may be useful when not using the GNU 14266 assembler. 14267 14268 `-mearly-stop-bits' 14269 `-mno-early-stop-bits' 14270 Allow stop bits to be placed earlier than immediately preceding the 14271 instruction that triggered the stop bit. This can improve 14272 instruction scheduling, but does not always do so. 14273 14274 `-mfixed-range=REGISTER-RANGE' 14275 Generate code treating the given register range as fixed registers. 14276 A fixed register is one that the register allocator cannot use. 14277 This is useful when compiling kernel code. A register range is 14278 specified as two registers separated by a dash. Multiple register 14279 ranges can be specified separated by a comma. 14280 14281 `-mtls-size=TLS-SIZE' 14282 Specify bit size of immediate TLS offsets. Valid values are 14, 14283 22, and 64. 14284 14285 `-mtune=CPU-TYPE' 14286 Tune the instruction scheduling for a particular CPU, Valid values 14287 are `itanium', `itanium1', `merced', `itanium2', and `mckinley'. 14288 14289 `-milp32' 14290 `-mlp64' 14291 Generate code for a 32-bit or 64-bit environment. The 32-bit 14292 environment sets int, long and pointer to 32 bits. The 64-bit 14293 environment sets int to 32 bits and long and pointer to 64 bits. 14294 These are HP-UX specific flags. 14295 14296 `-mno-sched-br-data-spec' 14297 `-msched-br-data-spec' 14298 (Dis/En)able data speculative scheduling before reload. This 14299 results in generation of `ld.a' instructions and the corresponding 14300 check instructions (`ld.c' / `chk.a'). The default is 'disable'. 14301 14302 `-msched-ar-data-spec' 14303 `-mno-sched-ar-data-spec' 14304 (En/Dis)able data speculative scheduling after reload. This 14305 results in generation of `ld.a' instructions and the corresponding 14306 check instructions (`ld.c' / `chk.a'). The default is 'enable'. 14307 14308 `-mno-sched-control-spec' 14309 `-msched-control-spec' 14310 (Dis/En)able control speculative scheduling. This feature is 14311 available only during region scheduling (i.e. before reload). 14312 This results in generation of the `ld.s' instructions and the 14313 corresponding check instructions `chk.s'. The default is 14314 'disable'. 14315 14316 `-msched-br-in-data-spec' 14317 `-mno-sched-br-in-data-spec' 14318 (En/Dis)able speculative scheduling of the instructions that are 14319 dependent on the data speculative loads before reload. This is 14320 effective only with `-msched-br-data-spec' enabled. The default 14321 is 'enable'. 14322 14323 `-msched-ar-in-data-spec' 14324 `-mno-sched-ar-in-data-spec' 14325 (En/Dis)able speculative scheduling of the instructions that are 14326 dependent on the data speculative loads after reload. This is 14327 effective only with `-msched-ar-data-spec' enabled. The default 14328 is 'enable'. 14329 14330 `-msched-in-control-spec' 14331 `-mno-sched-in-control-spec' 14332 (En/Dis)able speculative scheduling of the instructions that are 14333 dependent on the control speculative loads. This is effective 14334 only with `-msched-control-spec' enabled. The default is 'enable'. 14335 14336 `-mno-sched-prefer-non-data-spec-insns' 14337 `-msched-prefer-non-data-spec-insns' 14338 If enabled, data-speculative instructions are chosen for schedule 14339 only if there are no other choices at the moment. This makes the 14340 use of the data speculation much more conservative. The default 14341 is 'disable'. 14342 14343 `-mno-sched-prefer-non-control-spec-insns' 14344 `-msched-prefer-non-control-spec-insns' 14345 If enabled, control-speculative instructions are chosen for 14346 schedule only if there are no other choices at the moment. This 14347 makes the use of the control speculation much more conservative. 14348 The default is 'disable'. 14349 14350 `-mno-sched-count-spec-in-critical-path' 14351 `-msched-count-spec-in-critical-path' 14352 If enabled, speculative dependencies are considered during 14353 computation of the instructions priorities. This makes the use of 14354 the speculation a bit more conservative. The default is 'disable'. 14355 14356 `-msched-spec-ldc' 14357 Use a simple data speculation check. This option is on by default. 14358 14359 `-msched-control-spec-ldc' 14360 Use a simple check for control speculation. This option is on by 14361 default. 14362 14363 `-msched-stop-bits-after-every-cycle' 14364 Place a stop bit after every cycle when scheduling. This option 14365 is on by default. 14366 14367 `-msched-fp-mem-deps-zero-cost' 14368 Assume that floating-point stores and loads are not likely to 14369 cause a conflict when placed into the same instruction group. 14370 This option is disabled by default. 14371 14372 `-msel-sched-dont-check-control-spec' 14373 Generate checks for control speculation in selective scheduling. 14374 This flag is disabled by default. 14375 14376 `-msched-max-memory-insns=MAX-INSNS' 14377 Limit on the number of memory insns per instruction group, giving 14378 lower priority to subsequent memory insns attempting to schedule 14379 in the same instruction group. Frequently useful to prevent cache 14380 bank conflicts. The default value is 1. 14381 14382 `-msched-max-memory-insns-hard-limit' 14383 Makes the limit specified by `msched-max-memory-insns' a hard 14384 limit, disallowing more than that number in an instruction group. 14385 Otherwise, the limit is "soft", meaning that non-memory operations 14386 are preferred when the limit is reached, but memory operations may 14387 still be scheduled. 14388 14389 14390 14391 File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64 Options, Up: Submodel Options 14392 14393 3.17.19 LM32 Options 14394 -------------------- 14395 14396 These `-m' options are defined for the LatticeMico32 architecture: 14397 14398 `-mbarrel-shift-enabled' 14399 Enable barrel-shift instructions. 14400 14401 `-mdivide-enabled' 14402 Enable divide and modulus instructions. 14403 14404 `-mmultiply-enabled' 14405 Enable multiply instructions. 14406 14407 `-msign-extend-enabled' 14408 Enable sign extend instructions. 14409 14410 `-muser-enabled' 14411 Enable user-defined instructions. 14412 14413 14414 14415 File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options 14416 14417 3.17.20 M32C Options 14418 -------------------- 14419 14420 `-mcpu=NAME' 14421 Select the CPU for which code is generated. NAME may be one of 14422 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 14423 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 14424 series. 14425 14426 `-msim' 14427 Specifies that the program will be run on the simulator. This 14428 causes an alternate runtime library to be linked in which 14429 supports, for example, file I/O. You must not use this option 14430 when generating programs that will run on real hardware; you must 14431 provide your own runtime library for whatever I/O functions are 14432 needed. 14433 14434 `-memregs=NUMBER' 14435 Specifies the number of memory-based pseudo-registers GCC uses 14436 during code generation. These pseudo-registers are used like real 14437 registers, so there is a tradeoff between GCC's ability to fit the 14438 code into available registers, and the performance penalty of using 14439 memory instead of registers. Note that all modules in a program 14440 must be compiled with the same value for this option. Because of 14441 that, you must not use this option with GCC's default runtime 14442 libraries. 14443 14444 14445 14446 File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 14447 14448 3.17.21 M32R/D Options 14449 ---------------------- 14450 14451 These `-m' options are defined for Renesas M32R/D architectures: 14452 14453 `-m32r2' 14454 Generate code for the M32R/2. 14455 14456 `-m32rx' 14457 Generate code for the M32R/X. 14458 14459 `-m32r' 14460 Generate code for the M32R. This is the default. 14461 14462 `-mmodel=small' 14463 Assume all objects live in the lower 16MB of memory (so that their 14464 addresses can be loaded with the `ld24' instruction), and assume 14465 all subroutines are reachable with the `bl' instruction. This is 14466 the default. 14467 14468 The addressability of a particular object can be set with the 14469 `model' attribute. 14470 14471 `-mmodel=medium' 14472 Assume objects may be anywhere in the 32-bit address space (the 14473 compiler generates `seth/add3' instructions to load their 14474 addresses), and assume all subroutines are reachable with the `bl' 14475 instruction. 14476 14477 `-mmodel=large' 14478 Assume objects may be anywhere in the 32-bit address space (the 14479 compiler generates `seth/add3' instructions to load their 14480 addresses), and assume subroutines may not be reachable with the 14481 `bl' instruction (the compiler generates the much slower 14482 `seth/add3/jl' instruction sequence). 14483 14484 `-msdata=none' 14485 Disable use of the small data area. Variables are put into one of 14486 `.data', `.bss', or `.rodata' (unless the `section' attribute has 14487 been specified). This is the default. 14488 14489 The small data area consists of sections `.sdata' and `.sbss'. 14490 Objects may be explicitly put in the small data area with the 14491 `section' attribute using one of these sections. 14492 14493 `-msdata=sdata' 14494 Put small global and static data in the small data area, but do not 14495 generate special code to reference them. 14496 14497 `-msdata=use' 14498 Put small global and static data in the small data area, and 14499 generate special instructions to reference them. 14500 14501 `-G NUM' 14502 Put global and static objects less than or equal to NUM bytes into 14503 the small data or BSS sections instead of the normal data or BSS 14504 sections. The default value of NUM is 8. The `-msdata' option 14505 must be set to one of `sdata' or `use' for this option to have any 14506 effect. 14507 14508 All modules should be compiled with the same `-G NUM' value. 14509 Compiling with different values of NUM may or may not work; if it 14510 doesn't the linker gives an error message--incorrect code is not 14511 generated. 14512 14513 `-mdebug' 14514 Makes the M32R-specific code in the compiler display some 14515 statistics that might help in debugging programs. 14516 14517 `-malign-loops' 14518 Align all loops to a 32-byte boundary. 14519 14520 `-mno-align-loops' 14521 Do not enforce a 32-byte alignment for loops. This is the default. 14522 14523 `-missue-rate=NUMBER' 14524 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 14525 14526 `-mbranch-cost=NUMBER' 14527 NUMBER can only be 1 or 2. If it is 1 then branches are preferred 14528 over conditional code, if it is 2, then the opposite applies. 14529 14530 `-mflush-trap=NUMBER' 14531 Specifies the trap number to use to flush the cache. The default 14532 is 12. Valid numbers are between 0 and 15 inclusive. 14533 14534 `-mno-flush-trap' 14535 Specifies that the cache cannot be flushed by using a trap. 14536 14537 `-mflush-func=NAME' 14538 Specifies the name of the operating system function to call to 14539 flush the cache. The default is __flush_cache_, but a function 14540 call is only used if a trap is not available. 14541 14542 `-mno-flush-func' 14543 Indicates that there is no OS function for flushing the cache. 14544 14545 14546 14547 File: gcc.info, Node: M680x0 Options, Next: MCore Options, Prev: M32R/D Options, Up: Submodel Options 14548 14549 3.17.22 M680x0 Options 14550 ---------------------- 14551 14552 These are the `-m' options defined for M680x0 and ColdFire processors. 14553 The default settings depend on which architecture was selected when the 14554 compiler was configured; the defaults for the most common choices are 14555 given below. 14556 14557 `-march=ARCH' 14558 Generate code for a specific M680x0 or ColdFire instruction set 14559 architecture. Permissible values of ARCH for M680x0 architectures 14560 are: `68000', `68010', `68020', `68030', `68040', `68060' and 14561 `cpu32'. ColdFire architectures are selected according to 14562 Freescale's ISA classification and the permissible values are: 14563 `isaa', `isaaplus', `isab' and `isac'. 14564 14565 GCC defines a macro `__mcfARCH__' whenever it is generating code 14566 for a ColdFire target. The ARCH in this macro is one of the 14567 `-march' arguments given above. 14568 14569 When used together, `-march' and `-mtune' select code that runs on 14570 a family of similar processors but that is optimized for a 14571 particular microarchitecture. 14572 14573 `-mcpu=CPU' 14574 Generate code for a specific M680x0 or ColdFire processor. The 14575 M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040', 14576 `68060', `68302', `68332' and `cpu32'. The ColdFire CPUs are 14577 given by the table below, which also classifies the CPUs into 14578 families: 14579 14580 *Family* *`-mcpu' arguments* 14581 `51' `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg' 14582 `51jm' `51mm' `51qe' `51qm' 14583 `5206' `5202' `5204' `5206' 14584 `5206e' `5206e' 14585 `5208' `5207' `5208' 14586 `5211a' `5210a' `5211a' 14587 `5213' `5211' `5212' `5213' 14588 `5216' `5214' `5216' 14589 `52235' `52230' `52231' `52232' `52233' `52234' `52235' 14590 `5225' `5224' `5225' 14591 `52259' `52252' `52254' `52255' `52256' `52258' `52259' 14592 `5235' `5232' `5233' `5234' `5235' `523x' 14593 `5249' `5249' 14594 `5250' `5250' 14595 `5271' `5270' `5271' 14596 `5272' `5272' 14597 `5275' `5274' `5275' 14598 `5282' `5280' `5281' `5282' `528x' 14599 `53017' `53011' `53012' `53013' `53014' `53015' `53016' 14600 `53017' 14601 `5307' `5307' 14602 `5329' `5327' `5328' `5329' `532x' 14603 `5373' `5372' `5373' `537x' 14604 `5407' `5407' 14605 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x' 14606 `5480' `5481' `5482' `5483' `5484' `5485' 14607 14608 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with 14609 CPU. Other combinations of `-mcpu' and `-march' are rejected. 14610 14611 GCC defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is 14612 selected. It also defines `__mcf_family_FAMILY', where the value 14613 of FAMILY is given by the table above. 14614 14615 `-mtune=TUNE' 14616 Tune the code for a particular microarchitecture within the 14617 constraints set by `-march' and `-mcpu'. The M680x0 14618 microarchitectures are: `68000', `68010', `68020', `68030', 14619 `68040', `68060' and `cpu32'. The ColdFire microarchitectures 14620 are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'. 14621 14622 You can also use `-mtune=68020-40' for code that needs to run 14623 relatively well on 68020, 68030 and 68040 targets. 14624 `-mtune=68020-60' is similar but includes 68060 targets as well. 14625 These two options select the same tuning decisions as `-m68020-40' 14626 and `-m68020-60' respectively. 14627 14628 GCC defines the macros `__mcARCH' and `__mcARCH__' when tuning for 14629 680x0 architecture ARCH. It also defines `mcARCH' unless either 14630 `-ansi' or a non-GNU `-std' option is used. If GCC is tuning for 14631 a range of architectures, as selected by `-mtune=68020-40' or 14632 `-mtune=68020-60', it defines the macros for every architecture in 14633 the range. 14634 14635 GCC also defines the macro `__mUARCH__' when tuning for ColdFire 14636 microarchitecture UARCH, where UARCH is one of the arguments given 14637 above. 14638 14639 `-m68000' 14640 `-mc68000' 14641 Generate output for a 68000. This is the default when the 14642 compiler is configured for 68000-based systems. It is equivalent 14643 to `-march=68000'. 14644 14645 Use this option for microcontrollers with a 68000 or EC000 core, 14646 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 14647 14648 `-m68010' 14649 Generate output for a 68010. This is the default when the 14650 compiler is configured for 68010-based systems. It is equivalent 14651 to `-march=68010'. 14652 14653 `-m68020' 14654 `-mc68020' 14655 Generate output for a 68020. This is the default when the 14656 compiler is configured for 68020-based systems. It is equivalent 14657 to `-march=68020'. 14658 14659 `-m68030' 14660 Generate output for a 68030. This is the default when the 14661 compiler is configured for 68030-based systems. It is equivalent 14662 to `-march=68030'. 14663 14664 `-m68040' 14665 Generate output for a 68040. This is the default when the 14666 compiler is configured for 68040-based systems. It is equivalent 14667 to `-march=68040'. 14668 14669 This option inhibits the use of 68881/68882 instructions that have 14670 to be emulated by software on the 68040. Use this option if your 14671 68040 does not have code to emulate those instructions. 14672 14673 `-m68060' 14674 Generate output for a 68060. This is the default when the 14675 compiler is configured for 68060-based systems. It is equivalent 14676 to `-march=68060'. 14677 14678 This option inhibits the use of 68020 and 68881/68882 instructions 14679 that have to be emulated by software on the 68060. Use this 14680 option if your 68060 does not have code to emulate those 14681 instructions. 14682 14683 `-mcpu32' 14684 Generate output for a CPU32. This is the default when the 14685 compiler is configured for CPU32-based systems. It is equivalent 14686 to `-march=cpu32'. 14687 14688 Use this option for microcontrollers with a CPU32 or CPU32+ core, 14689 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 14690 68341, 68349 and 68360. 14691 14692 `-m5200' 14693 Generate output for a 520X ColdFire CPU. This is the default when 14694 the compiler is configured for 520X-based systems. It is 14695 equivalent to `-mcpu=5206', and is now deprecated in favor of that 14696 option. 14697 14698 Use this option for microcontroller with a 5200 core, including 14699 the MCF5202, MCF5203, MCF5204 and MCF5206. 14700 14701 `-m5206e' 14702 Generate output for a 5206e ColdFire CPU. The option is now 14703 deprecated in favor of the equivalent `-mcpu=5206e'. 14704 14705 `-m528x' 14706 Generate output for a member of the ColdFire 528X family. The 14707 option is now deprecated in favor of the equivalent `-mcpu=528x'. 14708 14709 `-m5307' 14710 Generate output for a ColdFire 5307 CPU. The option is now 14711 deprecated in favor of the equivalent `-mcpu=5307'. 14712 14713 `-m5407' 14714 Generate output for a ColdFire 5407 CPU. The option is now 14715 deprecated in favor of the equivalent `-mcpu=5407'. 14716 14717 `-mcfv4e' 14718 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 14719 This includes use of hardware floating-point instructions. The 14720 option is equivalent to `-mcpu=547x', and is now deprecated in 14721 favor of that option. 14722 14723 `-m68020-40' 14724 Generate output for a 68040, without using any of the new 14725 instructions. This results in code that can run relatively 14726 efficiently on either a 68020/68881 or a 68030 or a 68040. The 14727 generated code does use the 68881 instructions that are emulated 14728 on the 68040. 14729 14730 The option is equivalent to `-march=68020' `-mtune=68020-40'. 14731 14732 `-m68020-60' 14733 Generate output for a 68060, without using any of the new 14734 instructions. This results in code that can run relatively 14735 efficiently on either a 68020/68881 or a 68030 or a 68040. The 14736 generated code does use the 68881 instructions that are emulated 14737 on the 68060. 14738 14739 The option is equivalent to `-march=68020' `-mtune=68020-60'. 14740 14741 `-mhard-float' 14742 `-m68881' 14743 Generate floating-point instructions. This is the default for 14744 68020 and above, and for ColdFire devices that have an FPU. It 14745 defines the macro `__HAVE_68881__' on M680x0 targets and 14746 `__mcffpu__' on ColdFire targets. 14747 14748 `-msoft-float' 14749 Do not generate floating-point instructions; use library calls 14750 instead. This is the default for 68000, 68010, and 68832 targets. 14751 It is also the default for ColdFire devices that have no FPU. 14752 14753 `-mdiv' 14754 `-mno-div' 14755 Generate (do not generate) ColdFire hardware divide and remainder 14756 instructions. If `-march' is used without `-mcpu', the default is 14757 "on" for ColdFire architectures and "off" for M680x0 14758 architectures. Otherwise, the default is taken from the target CPU 14759 (either the default CPU, or the one specified by `-mcpu'). For 14760 example, the default is "off" for `-mcpu=5206' and "on" for 14761 `-mcpu=5206e'. 14762 14763 GCC defines the macro `__mcfhwdiv__' when this option is enabled. 14764 14765 `-mshort' 14766 Consider type `int' to be 16 bits wide, like `short int'. 14767 Additionally, parameters passed on the stack are also aligned to a 14768 16-bit boundary even on targets whose API mandates promotion to 14769 32-bit. 14770 14771 `-mno-short' 14772 Do not consider type `int' to be 16 bits wide. This is the 14773 default. 14774 14775 `-mnobitfield' 14776 `-mno-bitfield' 14777 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 14778 and `-m5200' options imply `-mnobitfield'. 14779 14780 `-mbitfield' 14781 Do use the bit-field instructions. The `-m68020' option implies 14782 `-mbitfield'. This is the default if you use a configuration 14783 designed for a 68020. 14784 14785 `-mrtd' 14786 Use a different function-calling convention, in which functions 14787 that take a fixed number of arguments return with the `rtd' 14788 instruction, which pops their arguments while returning. This 14789 saves one instruction in the caller since there is no need to pop 14790 the arguments there. 14791 14792 This calling convention is incompatible with the one normally used 14793 on Unix, so you cannot use it if you need to call libraries 14794 compiled with the Unix compiler. 14795 14796 Also, you must provide function prototypes for all functions that 14797 take variable numbers of arguments (including `printf'); otherwise 14798 incorrect code is generated for calls to those functions. 14799 14800 In addition, seriously incorrect code results if you call a 14801 function with too many arguments. (Normally, extra arguments are 14802 harmlessly ignored.) 14803 14804 The `rtd' instruction is supported by the 68010, 68020, 68030, 14805 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 14806 14807 `-mno-rtd' 14808 Do not use the calling conventions selected by `-mrtd'. This is 14809 the default. 14810 14811 `-malign-int' 14812 `-mno-align-int' 14813 Control whether GCC aligns `int', `long', `long long', `float', 14814 `double', and `long double' variables on a 32-bit boundary 14815 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 14816 variables on 32-bit boundaries produces code that runs somewhat 14817 faster on processors with 32-bit busses at the expense of more 14818 memory. 14819 14820 *Warning:* if you use the `-malign-int' switch, GCC aligns 14821 structures containing the above types differently than most 14822 published application binary interface specifications for the m68k. 14823 14824 `-mpcrel' 14825 Use the pc-relative addressing mode of the 68000 directly, instead 14826 of using a global offset table. At present, this option implies 14827 `-fpic', allowing at most a 16-bit offset for pc-relative 14828 addressing. `-fPIC' is not presently supported with `-mpcrel', 14829 though this could be supported for 68020 and higher processors. 14830 14831 `-mno-strict-align' 14832 `-mstrict-align' 14833 Do not (do) assume that unaligned memory references are handled by 14834 the system. 14835 14836 `-msep-data' 14837 Generate code that allows the data segment to be located in a 14838 different area of memory from the text segment. This allows for 14839 execute-in-place in an environment without virtual memory 14840 management. This option implies `-fPIC'. 14841 14842 `-mno-sep-data' 14843 Generate code that assumes that the data segment follows the text 14844 segment. This is the default. 14845 14846 `-mid-shared-library' 14847 Generate code that supports shared libraries via the library ID 14848 method. This allows for execute-in-place and shared libraries in 14849 an environment without virtual memory management. This option 14850 implies `-fPIC'. 14851 14852 `-mno-id-shared-library' 14853 Generate code that doesn't assume ID-based shared libraries are 14854 being used. This is the default. 14855 14856 `-mshared-library-id=n' 14857 Specifies the identification number of the ID-based shared library 14858 being compiled. Specifying a value of 0 generates more compact 14859 code; specifying other values forces the allocation of that number 14860 to the current library, but is no more space- or time-efficient 14861 than omitting this option. 14862 14863 `-mxgot' 14864 `-mno-xgot' 14865 When generating position-independent code for ColdFire, generate 14866 code that works if the GOT has more than 8192 entries. This code 14867 is larger and slower than code generated without this option. On 14868 M680x0 processors, this option is not needed; `-fPIC' suffices. 14869 14870 GCC normally uses a single instruction to load values from the GOT. 14871 While this is relatively efficient, it only works if the GOT is 14872 smaller than about 64k. Anything larger causes the linker to 14873 report an error such as: 14874 14875 relocation truncated to fit: R_68K_GOT16O foobar 14876 14877 If this happens, you should recompile your code with `-mxgot'. It 14878 should then work with very large GOTs. However, code generated 14879 with `-mxgot' is less efficient, since it takes 4 instructions to 14880 fetch the value of a global symbol. 14881 14882 Note that some linkers, including newer versions of the GNU linker, 14883 can create multiple GOTs and sort GOT entries. If you have such a 14884 linker, you should only need to use `-mxgot' when compiling a 14885 single object file that accesses more than 8192 GOT entries. Very 14886 few do. 14887 14888 These options have no effect unless GCC is generating 14889 position-independent code. 14890 14891 14892 14893 File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M680x0 Options, Up: Submodel Options 14894 14895 3.17.23 MCore Options 14896 --------------------- 14897 14898 These are the `-m' options defined for the Motorola M*Core processors. 14899 14900 `-mhardlit' 14901 `-mno-hardlit' 14902 Inline constants into the code stream if it can be done in two 14903 instructions or less. 14904 14905 `-mdiv' 14906 `-mno-div' 14907 Use the divide instruction. (Enabled by default). 14908 14909 `-mrelax-immediate' 14910 `-mno-relax-immediate' 14911 Allow arbitrary-sized immediates in bit operations. 14912 14913 `-mwide-bitfields' 14914 `-mno-wide-bitfields' 14915 Always treat bit-fields as `int'-sized. 14916 14917 `-m4byte-functions' 14918 `-mno-4byte-functions' 14919 Force all functions to be aligned to a 4-byte boundary. 14920 14921 `-mcallgraph-data' 14922 `-mno-callgraph-data' 14923 Emit callgraph information. 14924 14925 `-mslow-bytes' 14926 `-mno-slow-bytes' 14927 Prefer word access when reading byte quantities. 14928 14929 `-mlittle-endian' 14930 `-mbig-endian' 14931 Generate code for a little-endian target. 14932 14933 `-m210' 14934 `-m340' 14935 Generate code for the 210 processor. 14936 14937 `-mno-lsim' 14938 Assume that runtime support has been provided and so omit the 14939 simulator library (`libsim.a)' from the linker command line. 14940 14941 `-mstack-increment=SIZE' 14942 Set the maximum amount for a single stack increment operation. 14943 Large values can increase the speed of programs that contain 14944 functions that need a large amount of stack space, but they can 14945 also trigger a segmentation fault if the stack is extended too 14946 much. The default value is 0x1000. 14947 14948 14949 14950 File: gcc.info, Node: MeP Options, Next: MicroBlaze Options, Prev: MCore Options, Up: Submodel Options 14951 14952 3.17.24 MeP Options 14953 ------------------- 14954 14955 `-mabsdiff' 14956 Enables the `abs' instruction, which is the absolute difference 14957 between two registers. 14958 14959 `-mall-opts' 14960 Enables all the optional instructions--average, multiply, divide, 14961 bit operations, leading zero, absolute difference, min/max, clip, 14962 and saturation. 14963 14964 `-maverage' 14965 Enables the `ave' instruction, which computes the average of two 14966 registers. 14967 14968 `-mbased=N' 14969 Variables of size N bytes or smaller are placed in the `.based' 14970 section by default. Based variables use the `$tp' register as a 14971 base register, and there is a 128-byte limit to the `.based' 14972 section. 14973 14974 `-mbitops' 14975 Enables the bit operation instructions--bit test (`btstm'), set 14976 (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set 14977 (`tas'). 14978 14979 `-mc=NAME' 14980 Selects which section constant data is placed in. NAME may be 14981 `tiny', `near', or `far'. 14982 14983 `-mclip' 14984 Enables the `clip' instruction. Note that `-mclip' is not useful 14985 unless you also provide `-mminmax'. 14986 14987 `-mconfig=NAME' 14988 Selects one of the built-in core configurations. Each MeP chip has 14989 one or more modules in it; each module has a core CPU and a 14990 variety of coprocessors, optional instructions, and peripherals. 14991 The `MeP-Integrator' tool, not part of GCC, provides these 14992 configurations through this option; using this option is the same 14993 as using all the corresponding command-line options. The default 14994 configuration is `default'. 14995 14996 `-mcop' 14997 Enables the coprocessor instructions. By default, this is a 32-bit 14998 coprocessor. Note that the coprocessor is normally enabled via the 14999 `-mconfig=' option. 15000 15001 `-mcop32' 15002 Enables the 32-bit coprocessor's instructions. 15003 15004 `-mcop64' 15005 Enables the 64-bit coprocessor's instructions. 15006 15007 `-mivc2' 15008 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. 15009 15010 `-mdc' 15011 Causes constant variables to be placed in the `.near' section. 15012 15013 `-mdiv' 15014 Enables the `div' and `divu' instructions. 15015 15016 `-meb' 15017 Generate big-endian code. 15018 15019 `-mel' 15020 Generate little-endian code. 15021 15022 `-mio-volatile' 15023 Tells the compiler that any variable marked with the `io' 15024 attribute is to be considered volatile. 15025 15026 `-ml' 15027 Causes variables to be assigned to the `.far' section by default. 15028 15029 `-mleadz' 15030 Enables the `leadz' (leading zero) instruction. 15031 15032 `-mm' 15033 Causes variables to be assigned to the `.near' section by default. 15034 15035 `-mminmax' 15036 Enables the `min' and `max' instructions. 15037 15038 `-mmult' 15039 Enables the multiplication and multiply-accumulate instructions. 15040 15041 `-mno-opts' 15042 Disables all the optional instructions enabled by `-mall-opts'. 15043 15044 `-mrepeat' 15045 Enables the `repeat' and `erepeat' instructions, used for 15046 low-overhead looping. 15047 15048 `-ms' 15049 Causes all variables to default to the `.tiny' section. Note that 15050 there is a 65536-byte limit to this section. Accesses to these 15051 variables use the `%gp' base register. 15052 15053 `-msatur' 15054 Enables the saturation instructions. Note that the compiler does 15055 not currently generate these itself, but this option is included 15056 for compatibility with other tools, like `as'. 15057 15058 `-msdram' 15059 Link the SDRAM-based runtime instead of the default ROM-based 15060 runtime. 15061 15062 `-msim' 15063 Link the simulator runtime libraries. 15064 15065 `-msimnovec' 15066 Link the simulator runtime libraries, excluding built-in support 15067 for reset and exception vectors and tables. 15068 15069 `-mtf' 15070 Causes all functions to default to the `.far' section. Without 15071 this option, functions default to the `.near' section. 15072 15073 `-mtiny=N' 15074 Variables that are N bytes or smaller are allocated to the `.tiny' 15075 section. These variables use the `$gp' base register. The 15076 default for this option is 4, but note that there's a 65536-byte 15077 limit to the `.tiny' section. 15078 15079 15080 15081 File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Options, Up: Submodel Options 15082 15083 3.17.25 MicroBlaze Options 15084 -------------------------- 15085 15086 `-msoft-float' 15087 Use software emulation for floating point (default). 15088 15089 `-mhard-float' 15090 Use hardware floating-point instructions. 15091 15092 `-mmemcpy' 15093 Do not optimize block moves, use `memcpy'. 15094 15095 `-mno-clearbss' 15096 This option is deprecated. Use `-fno-zero-initialized-in-bss' 15097 instead. 15098 15099 `-mcpu=CPU-TYPE' 15100 Use features of, and schedule code for, the given CPU. Supported 15101 values are in the format `vX.YY.Z', where X is a major version, YY 15102 is the minor version, and Z is compatibility code. Example values 15103 are `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b', 15104 `v6.00.a'. 15105 15106 `-mxl-soft-mul' 15107 Use software multiply emulation (default). 15108 15109 `-mxl-soft-div' 15110 Use software emulation for divides (default). 15111 15112 `-mxl-barrel-shift' 15113 Use the hardware barrel shifter. 15114 15115 `-mxl-pattern-compare' 15116 Use pattern compare instructions. 15117 15118 `-msmall-divides' 15119 Use table lookup optimization for small signed integer divisions. 15120 15121 `-mxl-stack-check' 15122 This option is deprecated. Use `-fstack-check' instead. 15123 15124 `-mxl-gp-opt' 15125 Use GP-relative `.sdata'/`.sbss' sections. 15126 15127 `-mxl-multiply-high' 15128 Use multiply high instructions for high part of 32x32 multiply. 15129 15130 `-mxl-float-convert' 15131 Use hardware floating-point conversion instructions. 15132 15133 `-mxl-float-sqrt' 15134 Use hardware floating-point square root instruction. 15135 15136 `-mbig-endian' 15137 Generate code for a big-endian target. 15138 15139 `-mlittle-endian' 15140 Generate code for a little-endian target. 15141 15142 `-mxl-reorder' 15143 Use reorder instructions (swap and byte reversed load/store). 15144 15145 `-mxl-mode-APP-MODEL' 15146 Select application model APP-MODEL. Valid models are 15147 `executable' 15148 normal executable (default), uses startup code `crt0.o'. 15149 15150 `xmdstub' 15151 for use with Xilinx Microprocessor Debugger (XMD) based 15152 software intrusive debug agent called xmdstub. This uses 15153 startup file `crt1.o' and sets the start address of the 15154 program to 0x800. 15155 15156 `bootstrap' 15157 for applications that are loaded using a bootloader. This 15158 model uses startup file `crt2.o' which does not contain a 15159 processor reset vector handler. This is suitable for 15160 transferring control on a processor reset to the bootloader 15161 rather than the application. 15162 15163 `novectors' 15164 for applications that do not require any of the MicroBlaze 15165 vectors. This option may be useful for applications running 15166 within a monitoring application. This model uses `crt3.o' as 15167 a startup file. 15168 15169 Option `-xl-mode-APP-MODEL' is a deprecated alias for 15170 `-mxl-mode-APP-MODEL'. 15171 15172 15173 15174 File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MicroBlaze Options, Up: Submodel Options 15175 15176 3.17.26 MIPS Options 15177 -------------------- 15178 15179 `-EB' 15180 Generate big-endian code. 15181 15182 `-EL' 15183 Generate little-endian code. This is the default for `mips*el-*-*' 15184 configurations. 15185 15186 `-march=ARCH' 15187 Generate code that runs on ARCH, which can be the name of a 15188 generic MIPS ISA, or the name of a particular processor. The ISA 15189 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 15190 `mips32r2', `mips64' and `mips64r2'. The processor names are: 15191 `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd', 15192 `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec', 15193 `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `34kn', 15194 `74kc', `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1', 15195 `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', `m4k', 15196 `octeon', `octeon+', `octeon2', `orion', `r2000', `r3000', 15197 `r3900', `r4000', `r4400', `r4600', `r4650', `r4700', `r6000', 15198 `r8000', `rm7000', `rm9000', `r10000', `r12000', `r14000', 15199 `r16000', `sb1', `sr71000', `vr4100', `vr4111', `vr4120', 15200 `vr4130', `vr4300', `vr5000', `vr5400', `vr5500', `xlr' and `xlp'. 15201 The special value `from-abi' selects the most compatible 15202 architecture for the selected ABI (that is, `mips1' for 32-bit 15203 ABIs and `mips3' for 64-bit ABIs). 15204 15205 The native Linux/GNU toolchain also supports the value `native', 15206 which selects the best architecture option for the host processor. 15207 `-march=native' has no effect if GCC does not recognize the 15208 processor. 15209 15210 In processor names, a final `000' can be abbreviated as `k' (for 15211 example, `-march=r2k'). Prefixes are optional, and `vr' may be 15212 written `r'. 15213 15214 Names of the form `Nf2_1' refer to processors with FPUs clocked at 15215 half the rate of the core, names of the form `Nf1_1' refer to 15216 processors with FPUs clocked at the same rate as the core, and 15217 names of the form `Nf3_2' refer to processors with FPUs clocked a 15218 ratio of 3:2 with respect to the core. For compatibility reasons, 15219 `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are 15220 accepted as synonyms for `Nf1_1'. 15221 15222 GCC defines two macros based on the value of this option. The 15223 first is `_MIPS_ARCH', which gives the name of target 15224 architecture, as a string. The second has the form 15225 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 15226 `_MIPS_ARCH'. For example, `-march=r2000' sets `_MIPS_ARCH' to 15227 `"r2000"' and defines the macro `_MIPS_ARCH_R2000'. 15228 15229 Note that the `_MIPS_ARCH' macro uses the processor names given 15230 above. In other words, it has the full prefix and does not 15231 abbreviate `000' as `k'. In the case of `from-abi', the macro 15232 names the resolved architecture (either `"mips1"' or `"mips3"'). 15233 It names the default architecture when no `-march' option is given. 15234 15235 `-mtune=ARCH' 15236 Optimize for ARCH. Among other things, this option controls the 15237 way instructions are scheduled, and the perceived cost of 15238 arithmetic operations. The list of ARCH values is the same as for 15239 `-march'. 15240 15241 When this option is not used, GCC optimizes for the processor 15242 specified by `-march'. By using `-march' and `-mtune' together, 15243 it is possible to generate code that runs on a family of 15244 processors, but optimize the code for one particular member of 15245 that family. 15246 15247 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 15248 which work in the same way as the `-march' ones described above. 15249 15250 `-mips1' 15251 Equivalent to `-march=mips1'. 15252 15253 `-mips2' 15254 Equivalent to `-march=mips2'. 15255 15256 `-mips3' 15257 Equivalent to `-march=mips3'. 15258 15259 `-mips4' 15260 Equivalent to `-march=mips4'. 15261 15262 `-mips32' 15263 Equivalent to `-march=mips32'. 15264 15265 `-mips32r2' 15266 Equivalent to `-march=mips32r2'. 15267 15268 `-mips64' 15269 Equivalent to `-march=mips64'. 15270 15271 `-mips64r2' 15272 Equivalent to `-march=mips64r2'. 15273 15274 `-mips16' 15275 `-mno-mips16' 15276 Generate (do not generate) MIPS16 code. If GCC is targeting a 15277 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE. 15278 15279 MIPS16 code generation can also be controlled on a per-function 15280 basis by means of `mips16' and `nomips16' attributes. *Note 15281 Function Attributes::, for more information. 15282 15283 `-mflip-mips16' 15284 Generate MIPS16 code on alternating functions. This option is 15285 provided for regression testing of mixed MIPS16/non-MIPS16 code 15286 generation, and is not intended for ordinary use in compiling user 15287 code. 15288 15289 `-minterlink-mips16' 15290 `-mno-interlink-mips16' 15291 Require (do not require) that non-MIPS16 code be link-compatible 15292 with MIPS16 code. 15293 15294 For example, non-MIPS16 code cannot jump directly to MIPS16 code; 15295 it must either use a call or an indirect jump. 15296 `-minterlink-mips16' therefore disables direct jumps unless GCC 15297 knows that the target of the jump is not MIPS16. 15298 15299 `-mabi=32' 15300 `-mabi=o64' 15301 `-mabi=n32' 15302 `-mabi=64' 15303 `-mabi=eabi' 15304 Generate code for the given ABI. 15305 15306 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 15307 generates 64-bit code when you select a 64-bit architecture, but 15308 you can use `-mgp32' to get 32-bit code instead. 15309 15310 For information about the O64 ABI, see 15311 `http://gcc.gnu.org/projects/mipso64-abi.html'. 15312 15313 GCC supports a variant of the o32 ABI in which floating-point 15314 registers are 64 rather than 32 bits wide. You can select this 15315 combination with `-mabi=32' `-mfp64'. This ABI relies on the 15316 `mthc1' and `mfhc1' instructions and is therefore only supported 15317 for MIPS32R2 processors. 15318 15319 The register assignments for arguments and return values remain the 15320 same, but each scalar value is passed in a single 64-bit register 15321 rather than a pair of 32-bit registers. For example, scalar 15322 floating-point values are returned in `$f0' only, not a 15323 `$f0'/`$f1' pair. The set of call-saved registers also remains 15324 the same, but all 64 bits are saved. 15325 15326 `-mabicalls' 15327 `-mno-abicalls' 15328 Generate (do not generate) code that is suitable for SVR4-style 15329 dynamic objects. `-mabicalls' is the default for SVR4-based 15330 systems. 15331 15332 `-mshared' 15333 `-mno-shared' 15334 Generate (do not generate) code that is fully position-independent, 15335 and that can therefore be linked into shared libraries. This 15336 option only affects `-mabicalls'. 15337 15338 All `-mabicalls' code has traditionally been position-independent, 15339 regardless of options like `-fPIC' and `-fpic'. However, as an 15340 extension, the GNU toolchain allows executables to use absolute 15341 accesses for locally-binding symbols. It can also use shorter GP 15342 initialization sequences and generate direct calls to 15343 locally-defined functions. This mode is selected by `-mno-shared'. 15344 15345 `-mno-shared' depends on binutils 2.16 or higher and generates 15346 objects that can only be linked by the GNU linker. However, the 15347 option does not affect the ABI of the final executable; it only 15348 affects the ABI of relocatable objects. Using `-mno-shared' 15349 generally makes executables both smaller and quicker. 15350 15351 `-mshared' is the default. 15352 15353 `-mplt' 15354 `-mno-plt' 15355 Assume (do not assume) that the static and dynamic linkers support 15356 PLTs and copy relocations. This option only affects `-mno-shared 15357 -mabicalls'. For the n64 ABI, this option has no effect without 15358 `-msym32'. 15359 15360 You can make `-mplt' the default by configuring GCC with 15361 `--with-mips-plt'. The default is `-mno-plt' otherwise. 15362 15363 `-mxgot' 15364 `-mno-xgot' 15365 Lift (do not lift) the usual restrictions on the size of the global 15366 offset table. 15367 15368 GCC normally uses a single instruction to load values from the GOT. 15369 While this is relatively efficient, it only works if the GOT is 15370 smaller than about 64k. Anything larger causes the linker to 15371 report an error such as: 15372 15373 relocation truncated to fit: R_MIPS_GOT16 foobar 15374 15375 If this happens, you should recompile your code with `-mxgot'. 15376 This works with very large GOTs, although the code is also less 15377 efficient, since it takes three instructions to fetch the value of 15378 a global symbol. 15379 15380 Note that some linkers can create multiple GOTs. If you have such 15381 a linker, you should only need to use `-mxgot' when a single object 15382 file accesses more than 64k's worth of GOT entries. Very few do. 15383 15384 These options have no effect unless GCC is generating position 15385 independent code. 15386 15387 `-mgp32' 15388 Assume that general-purpose registers are 32 bits wide. 15389 15390 `-mgp64' 15391 Assume that general-purpose registers are 64 bits wide. 15392 15393 `-mfp32' 15394 Assume that floating-point registers are 32 bits wide. 15395 15396 `-mfp64' 15397 Assume that floating-point registers are 64 bits wide. 15398 15399 `-mhard-float' 15400 Use floating-point coprocessor instructions. 15401 15402 `-msoft-float' 15403 Do not use floating-point coprocessor instructions. Implement 15404 floating-point calculations using library calls instead. 15405 15406 `-mno-float' 15407 Equivalent to `-msoft-float', but additionally asserts that the 15408 program being compiled does not perform any floating-point 15409 operations. This option is presently supported only by some 15410 bare-metal MIPS configurations, where it may select a special set 15411 of libraries that lack all floating-point support (including, for 15412 example, the floating-point `printf' formats). If code compiled 15413 with `-mno-float' accidentally contains floating-point operations, 15414 it is likely to suffer a link-time or run-time failure. 15415 15416 `-msingle-float' 15417 Assume that the floating-point coprocessor only supports 15418 single-precision operations. 15419 15420 `-mdouble-float' 15421 Assume that the floating-point coprocessor supports 15422 double-precision operations. This is the default. 15423 15424 `-mllsc' 15425 `-mno-llsc' 15426 Use (do not use) `ll', `sc', and `sync' instructions to implement 15427 atomic memory built-in functions. When neither option is 15428 specified, GCC uses the instructions if the target architecture 15429 supports them. 15430 15431 `-mllsc' is useful if the runtime environment can emulate the 15432 instructions and `-mno-llsc' can be useful when compiling for 15433 nonstandard ISAs. You can make either option the default by 15434 configuring GCC with `--with-llsc' and `--without-llsc' 15435 respectively. `--with-llsc' is the default for some 15436 configurations; see the installation documentation for details. 15437 15438 `-mdsp' 15439 `-mno-dsp' 15440 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 15441 Built-in Functions::. This option defines the preprocessor macro 15442 `__mips_dsp'. It also defines `__mips_dsp_rev' to 1. 15443 15444 `-mdspr2' 15445 `-mno-dspr2' 15446 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 15447 Built-in Functions::. This option defines the preprocessor macros 15448 `__mips_dsp' and `__mips_dspr2'. It also defines `__mips_dsp_rev' 15449 to 2. 15450 15451 `-msmartmips' 15452 `-mno-smartmips' 15453 Use (do not use) the MIPS SmartMIPS ASE. 15454 15455 `-mpaired-single' 15456 `-mno-paired-single' 15457 Use (do not use) paired-single floating-point instructions. *Note 15458 MIPS Paired-Single Support::. This option requires hardware 15459 floating-point support to be enabled. 15460 15461 `-mdmx' 15462 `-mno-mdmx' 15463 Use (do not use) MIPS Digital Media Extension instructions. This 15464 option can only be used when generating 64-bit code and requires 15465 hardware floating-point support to be enabled. 15466 15467 `-mips3d' 15468 `-mno-mips3d' 15469 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 15470 Functions::. The option `-mips3d' implies `-mpaired-single'. 15471 15472 `-mmt' 15473 `-mno-mt' 15474 Use (do not use) MT Multithreading instructions. 15475 15476 `-mmcu' 15477 `-mno-mcu' 15478 Use (do not use) the MIPS MCU ASE instructions. 15479 15480 `-mlong64' 15481 Force `long' types to be 64 bits wide. See `-mlong32' for an 15482 explanation of the default and the way that the pointer size is 15483 determined. 15484 15485 `-mlong32' 15486 Force `long', `int', and pointer types to be 32 bits wide. 15487 15488 The default size of `int's, `long's and pointers depends on the 15489 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 15490 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 15491 `long's. Pointers are the same size as `long's, or the same size 15492 as integer registers, whichever is smaller. 15493 15494 `-msym32' 15495 `-mno-sym32' 15496 Assume (do not assume) that all symbols have 32-bit values, 15497 regardless of the selected ABI. This option is useful in 15498 combination with `-mabi=64' and `-mno-abicalls' because it allows 15499 GCC to generate shorter and faster references to symbolic 15500 addresses. 15501 15502 `-G NUM' 15503 Put definitions of externally-visible data in a small data section 15504 if that data is no bigger than NUM bytes. GCC can then generate 15505 more efficient accesses to the data; see `-mgpopt' for details. 15506 15507 The default `-G' option depends on the configuration. 15508 15509 `-mlocal-sdata' 15510 `-mno-local-sdata' 15511 Extend (do not extend) the `-G' behavior to local data too, such 15512 as to static variables in C. `-mlocal-sdata' is the default for 15513 all configurations. 15514 15515 If the linker complains that an application is using too much 15516 small data, you might want to try rebuilding the less 15517 performance-critical parts with `-mno-local-sdata'. You might 15518 also want to build large libraries with `-mno-local-sdata', so 15519 that the libraries leave more room for the main program. 15520 15521 `-mextern-sdata' 15522 `-mno-extern-sdata' 15523 Assume (do not assume) that externally-defined data is in a small 15524 data section if the size of that data is within the `-G' limit. 15525 `-mextern-sdata' is the default for all configurations. 15526 15527 If you compile a module MOD with `-mextern-sdata' `-G NUM' 15528 `-mgpopt', and MOD references a variable VAR that is no bigger 15529 than NUM bytes, you must make sure that VAR is placed in a small 15530 data section. If VAR is defined by another module, you must 15531 either compile that module with a high-enough `-G' setting or 15532 attach a `section' attribute to VAR's definition. If VAR is 15533 common, you must link the application with a high-enough `-G' 15534 setting. 15535 15536 The easiest way of satisfying these restrictions is to compile and 15537 link every module with the same `-G' option. However, you may 15538 wish to build a library that supports several different small data 15539 limits. You can do this by compiling the library with the highest 15540 supported `-G' setting and additionally using `-mno-extern-sdata' 15541 to stop the library from making assumptions about 15542 externally-defined data. 15543 15544 `-mgpopt' 15545 `-mno-gpopt' 15546 Use (do not use) GP-relative accesses for symbols that are known 15547 to be in a small data section; see `-G', `-mlocal-sdata' and 15548 `-mextern-sdata'. `-mgpopt' is the default for all configurations. 15549 15550 `-mno-gpopt' is useful for cases where the `$gp' register might 15551 not hold the value of `_gp'. For example, if the code is part of 15552 a library that might be used in a boot monitor, programs that call 15553 boot monitor routines pass an unknown value in `$gp'. (In such 15554 situations, the boot monitor itself is usually compiled with 15555 `-G0'.) 15556 15557 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'. 15558 15559 `-membedded-data' 15560 `-mno-embedded-data' 15561 Allocate variables to the read-only data section first if 15562 possible, then next in the small data section if possible, 15563 otherwise in data. This gives slightly slower code than the 15564 default, but reduces the amount of RAM required when executing, 15565 and thus may be preferred for some embedded systems. 15566 15567 `-muninit-const-in-rodata' 15568 `-mno-uninit-const-in-rodata' 15569 Put uninitialized `const' variables in the read-only data section. 15570 This option is only meaningful in conjunction with 15571 `-membedded-data'. 15572 15573 `-mcode-readable=SETTING' 15574 Specify whether GCC may generate code that reads from executable 15575 sections. There are three possible settings: 15576 15577 `-mcode-readable=yes' 15578 Instructions may freely access executable sections. This is 15579 the default setting. 15580 15581 `-mcode-readable=pcrel' 15582 MIPS16 PC-relative load instructions can access executable 15583 sections, but other instructions must not do so. This option 15584 is useful on 4KSc and 4KSd processors when the code TLBs have 15585 the Read Inhibit bit set. It is also useful on processors 15586 that can be configured to have a dual instruction/data SRAM 15587 interface and that, like the M4K, automatically redirect 15588 PC-relative loads to the instruction RAM. 15589 15590 `-mcode-readable=no' 15591 Instructions must not access executable sections. This 15592 option can be useful on targets that are configured to have a 15593 dual instruction/data SRAM interface but that (unlike the 15594 M4K) do not automatically redirect PC-relative loads to the 15595 instruction RAM. 15596 15597 `-msplit-addresses' 15598 `-mno-split-addresses' 15599 Enable (disable) use of the `%hi()' and `%lo()' assembler 15600 relocation operators. This option has been superseded by 15601 `-mexplicit-relocs' but is retained for backwards compatibility. 15602 15603 `-mexplicit-relocs' 15604 `-mno-explicit-relocs' 15605 Use (do not use) assembler relocation operators when dealing with 15606 symbolic addresses. The alternative, selected by 15607 `-mno-explicit-relocs', is to use assembler macros instead. 15608 15609 `-mexplicit-relocs' is the default if GCC was configured to use an 15610 assembler that supports relocation operators. 15611 15612 `-mcheck-zero-division' 15613 `-mno-check-zero-division' 15614 Trap (do not trap) on integer division by zero. 15615 15616 The default is `-mcheck-zero-division'. 15617 15618 `-mdivide-traps' 15619 `-mdivide-breaks' 15620 MIPS systems check for division by zero by generating either a 15621 conditional trap or a break instruction. Using traps results in 15622 smaller code, but is only supported on MIPS II and later. Also, 15623 some versions of the Linux kernel have a bug that prevents trap 15624 from generating the proper signal (`SIGFPE'). Use 15625 `-mdivide-traps' to allow conditional traps on architectures that 15626 support them and `-mdivide-breaks' to force the use of breaks. 15627 15628 The default is usually `-mdivide-traps', but this can be 15629 overridden at configure time using `--with-divide=breaks'. 15630 Divide-by-zero checks can be completely disabled using 15631 `-mno-check-zero-division'. 15632 15633 `-mmemcpy' 15634 `-mno-memcpy' 15635 Force (do not force) the use of `memcpy()' for non-trivial block 15636 moves. The default is `-mno-memcpy', which allows GCC to inline 15637 most constant-sized copies. 15638 15639 `-mlong-calls' 15640 `-mno-long-calls' 15641 Disable (do not disable) use of the `jal' instruction. Calling 15642 functions using `jal' is more efficient but requires the caller 15643 and callee to be in the same 256 megabyte segment. 15644 15645 This option has no effect on abicalls code. The default is 15646 `-mno-long-calls'. 15647 15648 `-mmad' 15649 `-mno-mad' 15650 Enable (disable) use of the `mad', `madu' and `mul' instructions, 15651 as provided by the R4650 ISA. 15652 15653 `-mfused-madd' 15654 `-mno-fused-madd' 15655 Enable (disable) use of the floating-point multiply-accumulate 15656 instructions, when they are available. The default is 15657 `-mfused-madd'. 15658 15659 On the R8000 CPU when multiply-accumulate instructions are used, 15660 the intermediate product is calculated to infinite precision and 15661 is not subject to the FCSR Flush to Zero bit. This may be 15662 undesirable in some circumstances. On other processors the result 15663 is numerically identical to the equivalent computation using 15664 separate multiply, add, subtract and negate instructions. 15665 15666 `-nocpp' 15667 Tell the MIPS assembler to not run its preprocessor over user 15668 assembler files (with a `.s' suffix) when assembling them. 15669 15670 `-mfix-24k' 15671 15672 `-mno-fix-24k' 15673 Work around the 24K E48 (lost data on stores during refill) errata. 15674 The workarounds are implemented by the assembler rather than by 15675 GCC. 15676 15677 `-mfix-r4000' 15678 `-mno-fix-r4000' 15679 Work around certain R4000 CPU errata: 15680 - A double-word or a variable shift may give an incorrect 15681 result if executed immediately after starting an integer 15682 division. 15683 15684 - A double-word or a variable shift may give an incorrect 15685 result if executed while an integer multiplication is in 15686 progress. 15687 15688 - An integer division may give an incorrect result if started 15689 in a delay slot of a taken branch or a jump. 15690 15691 `-mfix-r4400' 15692 `-mno-fix-r4400' 15693 Work around certain R4400 CPU errata: 15694 - A double-word or a variable shift may give an incorrect 15695 result if executed immediately after starting an integer 15696 division. 15697 15698 `-mfix-r10000' 15699 `-mno-fix-r10000' 15700 Work around certain R10000 errata: 15701 - `ll'/`sc' sequences may not behave atomically on revisions 15702 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 15703 15704 This option can only be used if the target architecture supports 15705 branch-likely instructions. `-mfix-r10000' is the default when 15706 `-march=r10000' is used; `-mno-fix-r10000' is the default 15707 otherwise. 15708 15709 `-mfix-vr4120' 15710 `-mno-fix-vr4120' 15711 Work around certain VR4120 errata: 15712 - `dmultu' does not always produce the correct result. 15713 15714 - `div' and `ddiv' do not always produce the correct result if 15715 one of the operands is negative. 15716 The workarounds for the division errata rely on special functions 15717 in `libgcc.a'. At present, these functions are only provided by 15718 the `mips64vr*-elf' configurations. 15719 15720 Other VR4120 errata require a NOP to be inserted between certain 15721 pairs of instructions. These errata are handled by the assembler, 15722 not by GCC itself. 15723 15724 `-mfix-vr4130' 15725 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 15726 implemented by the assembler rather than by GCC, although GCC 15727 avoids using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 15728 `dmacc' and `dmacchi' instructions are available instead. 15729 15730 `-mfix-sb1' 15731 `-mno-fix-sb1' 15732 Work around certain SB-1 CPU core errata. (This flag currently 15733 works around the SB-1 revision 2 "F1" and "F2" floating-point 15734 errata.) 15735 15736 `-mr10k-cache-barrier=SETTING' 15737 Specify whether GCC should insert cache barriers to avoid the 15738 side-effects of speculation on R10K processors. 15739 15740 In common with many processors, the R10K tries to predict the 15741 outcome of a conditional branch and speculatively executes 15742 instructions from the "taken" branch. It later aborts these 15743 instructions if the predicted outcome is wrong. However, on the 15744 R10K, even aborted instructions can have side effects. 15745 15746 This problem only affects kernel stores and, depending on the 15747 system, kernel loads. As an example, a speculatively-executed 15748 store may load the target memory into cache and mark the cache 15749 line as dirty, even if the store itself is later aborted. If a 15750 DMA operation writes to the same area of memory before the "dirty" 15751 line is flushed, the cached data overwrites the DMA-ed data. See 15752 the R10K processor manual for a full description, including other 15753 potential problems. 15754 15755 One workaround is to insert cache barrier instructions before 15756 every memory access that might be speculatively executed and that 15757 might have side effects even if aborted. 15758 `-mr10k-cache-barrier=SETTING' controls GCC's implementation of 15759 this workaround. It assumes that aborted accesses to any byte in 15760 the following regions does not have side effects: 15761 15762 1. the memory occupied by the current function's stack frame; 15763 15764 2. the memory occupied by an incoming stack argument; 15765 15766 3. the memory occupied by an object with a link-time-constant 15767 address. 15768 15769 It is the kernel's responsibility to ensure that speculative 15770 accesses to these regions are indeed safe. 15771 15772 If the input program contains a function declaration such as: 15773 15774 void foo (void); 15775 15776 then the implementation of `foo' must allow `j foo' and `jal foo' 15777 to be executed speculatively. GCC honors this restriction for 15778 functions it compiles itself. It expects non-GCC functions (such 15779 as hand-written assembly code) to do the same. 15780 15781 The option has three forms: 15782 15783 `-mr10k-cache-barrier=load-store' 15784 Insert a cache barrier before a load or store that might be 15785 speculatively executed and that might have side effects even 15786 if aborted. 15787 15788 `-mr10k-cache-barrier=store' 15789 Insert a cache barrier before a store that might be 15790 speculatively executed and that might have side effects even 15791 if aborted. 15792 15793 `-mr10k-cache-barrier=none' 15794 Disable the insertion of cache barriers. This is the default 15795 setting. 15796 15797 `-mflush-func=FUNC' 15798 `-mno-flush-func' 15799 Specifies the function to call to flush the I and D caches, or to 15800 not call any such function. If called, the function must take the 15801 same arguments as the common `_flush_func()', that is, the address 15802 of the memory range for which the cache is being flushed, the size 15803 of the memory range, and the number 3 (to flush both caches). The 15804 default depends on the target GCC was configured for, but commonly 15805 is either `_flush_func' or `__cpu_flush'. 15806 15807 `mbranch-cost=NUM' 15808 Set the cost of branches to roughly NUM "simple" instructions. 15809 This cost is only a heuristic and is not guaranteed to produce 15810 consistent results across releases. A zero cost redundantly 15811 selects the default, which is based on the `-mtune' setting. 15812 15813 `-mbranch-likely' 15814 `-mno-branch-likely' 15815 Enable or disable use of Branch Likely instructions, regardless of 15816 the default for the selected architecture. By default, Branch 15817 Likely instructions may be generated if they are supported by the 15818 selected architecture. An exception is for the MIPS32 and MIPS64 15819 architectures and processors that implement those architectures; 15820 for those, Branch Likely instructions are not be generated by 15821 default because the MIPS32 and MIPS64 architectures specifically 15822 deprecate their use. 15823 15824 `-mfp-exceptions' 15825 `-mno-fp-exceptions' 15826 Specifies whether FP exceptions are enabled. This affects how FP 15827 instructions are scheduled for some processors. The default is 15828 that FP exceptions are enabled. 15829 15830 For instance, on the SB-1, if FP exceptions are disabled, and we 15831 are emitting 64-bit code, then we can use both FP pipes. 15832 Otherwise, we can only use one FP pipe. 15833 15834 `-mvr4130-align' 15835 `-mno-vr4130-align' 15836 The VR4130 pipeline is two-way superscalar, but can only issue two 15837 instructions together if the first one is 8-byte aligned. When 15838 this option is enabled, GCC aligns pairs of instructions that it 15839 thinks should execute in parallel. 15840 15841 This option only has an effect when optimizing for the VR4130. It 15842 normally makes code faster, but at the expense of making it bigger. 15843 It is enabled by default at optimization level `-O3'. 15844 15845 `-msynci' 15846 `-mno-synci' 15847 Enable (disable) generation of `synci' instructions on 15848 architectures that support it. The `synci' instructions (if 15849 enabled) are generated when `__builtin___clear_cache()' is 15850 compiled. 15851 15852 This option defaults to `-mno-synci', but the default can be 15853 overridden by configuring with `--with-synci'. 15854 15855 When compiling code for single processor systems, it is generally 15856 safe to use `synci'. However, on many multi-core (SMP) systems, it 15857 does not invalidate the instruction caches on all cores and may 15858 lead to undefined behavior. 15859 15860 `-mrelax-pic-calls' 15861 `-mno-relax-pic-calls' 15862 Try to turn PIC calls that are normally dispatched via register 15863 `$25' into direct calls. This is only possible if the linker can 15864 resolve the destination at link-time and if the destination is 15865 within range for a direct call. 15866 15867 `-mrelax-pic-calls' is the default if GCC was configured to use an 15868 assembler and a linker that support the `.reloc' assembly 15869 directive and `-mexplicit-relocs' is in effect. With 15870 `-mno-explicit-relocs', this optimization can be performed by the 15871 assembler and the linker alone without help from the compiler. 15872 15873 `-mmcount-ra-address' 15874 `-mno-mcount-ra-address' 15875 Emit (do not emit) code that allows `_mcount' to modify the 15876 calling function's return address. When enabled, this option 15877 extends the usual `_mcount' interface with a new RA-ADDRESS 15878 parameter, which has type `intptr_t *' and is passed in register 15879 `$12'. `_mcount' can then modify the return address by doing both 15880 of the following: 15881 * Returning the new address in register `$31'. 15882 15883 * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is 15884 nonnull. 15885 15886 The default is `-mno-mcount-ra-address'. 15887 15888 15889 15890 File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 15891 15892 3.17.27 MMIX Options 15893 -------------------- 15894 15895 These options are defined for the MMIX: 15896 15897 `-mlibfuncs' 15898 `-mno-libfuncs' 15899 Specify that intrinsic library functions are being compiled, 15900 passing all values in registers, no matter the size. 15901 15902 `-mepsilon' 15903 `-mno-epsilon' 15904 Generate floating-point comparison instructions that compare with 15905 respect to the `rE' epsilon register. 15906 15907 `-mabi=mmixware' 15908 `-mabi=gnu' 15909 Generate code that passes function parameters and return values 15910 that (in the called function) are seen as registers `$0' and up, 15911 as opposed to the GNU ABI which uses global registers `$231' and 15912 up. 15913 15914 `-mzero-extend' 15915 `-mno-zero-extend' 15916 When reading data from memory in sizes shorter than 64 bits, use 15917 (do not use) zero-extending load instructions by default, rather 15918 than sign-extending ones. 15919 15920 `-mknuthdiv' 15921 `-mno-knuthdiv' 15922 Make the result of a division yielding a remainder have the same 15923 sign as the divisor. With the default, `-mno-knuthdiv', the sign 15924 of the remainder follows the sign of the dividend. Both methods 15925 are arithmetically valid, the latter being almost exclusively used. 15926 15927 `-mtoplevel-symbols' 15928 `-mno-toplevel-symbols' 15929 Prepend (do not prepend) a `:' to all global symbols, so the 15930 assembly code can be used with the `PREFIX' assembly directive. 15931 15932 `-melf' 15933 Generate an executable in the ELF format, rather than the default 15934 `mmo' format used by the `mmix' simulator. 15935 15936 `-mbranch-predict' 15937 `-mno-branch-predict' 15938 Use (do not use) the probable-branch instructions, when static 15939 branch prediction indicates a probable branch. 15940 15941 `-mbase-addresses' 15942 `-mno-base-addresses' 15943 Generate (do not generate) code that uses _base addresses_. Using 15944 a base address automatically generates a request (handled by the 15945 assembler and the linker) for a constant to be set up in a global 15946 register. The register is used for one or more base address 15947 requests within the range 0 to 255 from the value held in the 15948 register. The generally leads to short and fast code, but the 15949 number of different data items that can be addressed is limited. 15950 This means that a program that uses lots of static data may 15951 require `-mno-base-addresses'. 15952 15953 `-msingle-exit' 15954 `-mno-single-exit' 15955 Force (do not force) generated code to have a single exit point in 15956 each function. 15957 15958 15959 File: gcc.info, Node: MN10300 Options, Next: Moxie Options, Prev: MMIX Options, Up: Submodel Options 15960 15961 3.17.28 MN10300 Options 15962 ----------------------- 15963 15964 These `-m' options are defined for Matsushita MN10300 architectures: 15965 15966 `-mmult-bug' 15967 Generate code to avoid bugs in the multiply instructions for the 15968 MN10300 processors. This is the default. 15969 15970 `-mno-mult-bug' 15971 Do not generate code to avoid bugs in the multiply instructions 15972 for the MN10300 processors. 15973 15974 `-mam33' 15975 Generate code using features specific to the AM33 processor. 15976 15977 `-mno-am33' 15978 Do not generate code using features specific to the AM33 15979 processor. This is the default. 15980 15981 `-mam33-2' 15982 Generate code using features specific to the AM33/2.0 processor. 15983 15984 `-mam34' 15985 Generate code using features specific to the AM34 processor. 15986 15987 `-mtune=CPU-TYPE' 15988 Use the timing characteristics of the indicated CPU type when 15989 scheduling instructions. This does not change the targeted 15990 processor type. The CPU type must be one of `mn10300', `am33', 15991 `am33-2' or `am34'. 15992 15993 `-mreturn-pointer-on-d0' 15994 When generating a function that returns a pointer, return the 15995 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 15996 only in `a0', and attempts to call such functions without a 15997 prototype result in errors. Note that this option is on by 15998 default; use `-mno-return-pointer-on-d0' to disable it. 15999 16000 `-mno-crt0' 16001 Do not link in the C run-time initialization object file. 16002 16003 `-mrelax' 16004 Indicate to the linker that it should perform a relaxation 16005 optimization pass to shorten branches, calls and absolute memory 16006 addresses. This option only has an effect when used on the 16007 command line for the final link step. 16008 16009 This option makes symbolic debugging impossible. 16010 16011 `-mliw' 16012 Allow the compiler to generate _Long Instruction Word_ 16013 instructions if the target is the `AM33' or later. This is the 16014 default. This option defines the preprocessor macro `__LIW__'. 16015 16016 `-mnoliw' 16017 Do not allow the compiler to generate _Long Instruction Word_ 16018 instructions. This option defines the preprocessor macro 16019 `__NO_LIW__'. 16020 16021 `-msetlb' 16022 Allow the compiler to generate the _SETLB_ and _Lcc_ instructions 16023 if the target is the `AM33' or later. This is the default. This 16024 option defines the preprocessor macro `__SETLB__'. 16025 16026 `-mnosetlb' 16027 Do not allow the compiler to generate _SETLB_ or _Lcc_ 16028 instructions. This option defines the preprocessor macro 16029 `__NO_SETLB__'. 16030 16031 16032 16033 File: gcc.info, Node: Moxie Options, Next: PDP-11 Options, Prev: MN10300 Options, Up: Submodel Options 16034 16035 3.17.29 Moxie Options 16036 --------------------- 16037 16038 `-meb' 16039 Generate big-endian code. This is the default for `moxie-*-*' 16040 configurations. 16041 16042 `-mel' 16043 Generate little-endian code. 16044 16045 `-mno-crt0' 16046 Do not link in the C run-time initialization object file. 16047 16048 16049 16050 File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: Moxie Options, Up: Submodel Options 16051 16052 3.17.30 PDP-11 Options 16053 ---------------------- 16054 16055 These options are defined for the PDP-11: 16056 16057 `-mfpu' 16058 Use hardware FPP floating point. This is the default. (FIS 16059 floating point on the PDP-11/40 is not supported.) 16060 16061 `-msoft-float' 16062 Do not use hardware floating point. 16063 16064 `-mac0' 16065 Return floating-point results in ac0 (fr0 in Unix assembler 16066 syntax). 16067 16068 `-mno-ac0' 16069 Return floating-point results in memory. This is the default. 16070 16071 `-m40' 16072 Generate code for a PDP-11/40. 16073 16074 `-m45' 16075 Generate code for a PDP-11/45. This is the default. 16076 16077 `-m10' 16078 Generate code for a PDP-11/10. 16079 16080 `-mbcopy-builtin' 16081 Use inline `movmemhi' patterns for copying memory. This is the 16082 default. 16083 16084 `-mbcopy' 16085 Do not use inline `movmemhi' patterns for copying memory. 16086 16087 `-mint16' 16088 `-mno-int32' 16089 Use 16-bit `int'. This is the default. 16090 16091 `-mint32' 16092 `-mno-int16' 16093 Use 32-bit `int'. 16094 16095 `-mfloat64' 16096 `-mno-float32' 16097 Use 64-bit `float'. This is the default. 16098 16099 `-mfloat32' 16100 `-mno-float64' 16101 Use 32-bit `float'. 16102 16103 `-mabshi' 16104 Use `abshi2' pattern. This is the default. 16105 16106 `-mno-abshi' 16107 Do not use `abshi2' pattern. 16108 16109 `-mbranch-expensive' 16110 Pretend that branches are expensive. This is for experimenting 16111 with code generation only. 16112 16113 `-mbranch-cheap' 16114 Do not pretend that branches are expensive. This is the default. 16115 16116 `-munix-asm' 16117 Use Unix assembler syntax. This is the default when configured for 16118 `pdp11-*-bsd'. 16119 16120 `-mdec-asm' 16121 Use DEC assembler syntax. This is the default when configured for 16122 any PDP-11 target other than `pdp11-*-bsd'. 16123 16124 16125 File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 16126 16127 3.17.31 picoChip Options 16128 ------------------------ 16129 16130 These `-m' options are defined for picoChip implementations: 16131 16132 `-mae=AE_TYPE' 16133 Set the instruction set, register set, and instruction scheduling 16134 parameters for array element type AE_TYPE. Supported values for 16135 AE_TYPE are `ANY', `MUL', and `MAC'. 16136 16137 `-mae=ANY' selects a completely generic AE type. Code generated 16138 with this option runs on any of the other AE types. The code is 16139 not as efficient as it would be if compiled for a specific AE 16140 type, and some types of operation (e.g., multiplication) do not 16141 work properly on all types of AE. 16142 16143 `-mae=MUL' selects a MUL AE type. This is the most useful AE type 16144 for compiled code, and is the default. 16145 16146 `-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 16147 option may suffer from poor performance of byte (char) 16148 manipulation, since the DSP AE does not provide hardware support 16149 for byte load/stores. 16150 16151 `-msymbol-as-address' 16152 Enable the compiler to directly use a symbol name as an address in 16153 a load/store instruction, without first loading it into a 16154 register. Typically, the use of this option generates larger 16155 programs, which run faster than when the option isn't used. 16156 However, the results vary from program to program, so it is left 16157 as a user option, rather than being permanently enabled. 16158 16159 `-mno-inefficient-warnings' 16160 Disables warnings about the generation of inefficient code. These 16161 warnings can be generated, for example, when compiling code that 16162 performs byte-level memory operations on the MAC AE type. The MAC 16163 AE has no hardware support for byte-level memory operations, so 16164 all byte load/stores must be synthesized from word load/store 16165 operations. This is inefficient and a warning is generated to 16166 indicate that you should rewrite the code to avoid byte 16167 operations, or to target an AE type that has the necessary 16168 hardware support. This option disables these warnings. 16169 16170 16171 16172 File: gcc.info, Node: PowerPC Options, Next: RL78 Options, Prev: picoChip Options, Up: Submodel Options 16173 16174 3.17.32 PowerPC Options 16175 ----------------------- 16176 16177 These are listed under *Note RS/6000 and PowerPC Options::. 16178 16179 16180 File: gcc.info, Node: RL78 Options, Next: RS/6000 and PowerPC Options, Prev: PowerPC Options, Up: Submodel Options 16181 16182 3.17.33 RL78 Options 16183 -------------------- 16184 16185 `-msim' 16186 Links in additional target libraries to support operation within a 16187 simulator. 16188 16189 `-mmul=none' 16190 `-mmul=g13' 16191 `-mmul=rl78' 16192 Specifies the type of hardware multiplication support to be used. 16193 The default is `none', which uses software multiplication 16194 functions. The `g13' option is for the hardware multiply/divide 16195 peripheral only on the RL78/G13 targets. The `rl78' option is for 16196 the standard hardware multiplication defined in the RL78 software 16197 manual. 16198 16199 16200 16201 File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: RL78 Options, Up: Submodel Options 16202 16203 3.17.34 IBM RS/6000 and PowerPC Options 16204 --------------------------------------- 16205 16206 These `-m' options are defined for the IBM RS/6000 and PowerPC: 16207 `-mpowerpc-gpopt' 16208 `-mno-powerpc-gpopt' 16209 `-mpowerpc-gfxopt' 16210 `-mno-powerpc-gfxopt' 16211 `-mpowerpc64' 16212 `-mno-powerpc64' 16213 `-mmfcrf' 16214 `-mno-mfcrf' 16215 `-mpopcntb' 16216 `-mno-popcntb' 16217 `-mpopcntd' 16218 `-mno-popcntd' 16219 `-mfprnd' 16220 `-mno-fprnd' 16221 `-mcmpb' 16222 `-mno-cmpb' 16223 `-mmfpgpr' 16224 `-mno-mfpgpr' 16225 `-mhard-dfp' 16226 `-mno-hard-dfp' 16227 You use these options to specify which instructions are available 16228 on the processor you are using. The default value of these 16229 options is determined when configuring GCC. Specifying the 16230 `-mcpu=CPU_TYPE' overrides the specification of these options. We 16231 recommend you use the `-mcpu=CPU_TYPE' option rather than the 16232 options listed above. 16233 16234 Specifying `-mpowerpc-gpopt' allows GCC to use the optional 16235 PowerPC architecture instructions in the General Purpose group, 16236 including floating-point square root. Specifying 16237 `-mpowerpc-gfxopt' allows GCC to use the optional PowerPC 16238 architecture instructions in the Graphics group, including 16239 floating-point select. 16240 16241 The `-mmfcrf' option allows GCC to generate the move from 16242 condition register field instruction implemented on the POWER4 16243 processor and other processors that support the PowerPC V2.01 16244 architecture. The `-mpopcntb' option allows GCC to generate the 16245 popcount and double-precision FP reciprocal estimate instruction 16246 implemented on the POWER5 processor and other processors that 16247 support the PowerPC V2.02 architecture. The `-mpopcntd' option 16248 allows GCC to generate the popcount instruction implemented on the 16249 POWER7 processor and other processors that support the PowerPC 16250 V2.06 architecture. The `-mfprnd' option allows GCC to generate 16251 the FP round to integer instructions implemented on the POWER5+ 16252 processor and other processors that support the PowerPC V2.03 16253 architecture. The `-mcmpb' option allows GCC to generate the 16254 compare bytes instruction implemented on the POWER6 processor and 16255 other processors that support the PowerPC V2.05 architecture. The 16256 `-mmfpgpr' option allows GCC to generate the FP move to/from 16257 general-purpose register instructions implemented on the POWER6X 16258 processor and other processors that support the extended PowerPC 16259 V2.05 architecture. The `-mhard-dfp' option allows GCC to 16260 generate the decimal floating-point instructions implemented on 16261 some POWER processors. 16262 16263 The `-mpowerpc64' option allows GCC to generate the additional 16264 64-bit instructions that are found in the full PowerPC64 16265 architecture and to treat GPRs as 64-bit, doubleword quantities. 16266 GCC defaults to `-mno-powerpc64'. 16267 16268 `-mcpu=CPU_TYPE' 16269 Set architecture type, register usage, and instruction scheduling 16270 parameters for machine type CPU_TYPE. Supported values for 16271 CPU_TYPE are `401', `403', `405', `405fp', `440', `440fp', `464', 16272 `464fp', `476', `476fp', `505', `601', `602', `603', `603e', 16273 `604', `604e', `620', `630', `740', `7400', `7450', `750', `801', 16274 `821', `823', `860', `970', `8540', `a2', `e300c2', `e300c3', 16275 `e500mc', `e500mc64', `e5500', `e6500', `ec603e', `G3', `G4', `G5', 16276 `titan', `power3', `power4', `power5', `power5+', `power6', 16277 `power6x', `power7', `power8', `powerpc', `powerpc64', and `rs64'. 16278 16279 `-mcpu=powerpc', and `-mcpu=powerpc64' specify pure 32-bit PowerPC 16280 and 64-bit PowerPC architecture machine types, with an 16281 appropriate, generic processor model assumed for scheduling 16282 purposes. 16283 16284 The other options specify a specific processor. Code generated 16285 under those options runs best on that processor, and may not run 16286 at all on others. 16287 16288 The `-mcpu' options automatically enable or disable the following 16289 options: 16290 16291 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 16292 -mpopcntb -mpopcntd -mpowerpc64 16293 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 16294 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx 16295 -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector 16296 -mquad-memory -mquad-memory-atomic 16297 16298 The particular options set for any particular CPU varies between 16299 compiler versions, depending on what setting seems to produce 16300 optimal code for that CPU; it doesn't necessarily reflect the 16301 actual hardware's capabilities. If you wish to set an individual 16302 option to a particular value, you may specify it after the `-mcpu' 16303 option, like `-mcpu=970 -mno-altivec'. 16304 16305 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 16306 or disabled by the `-mcpu' option at present because AIX does not 16307 have full support for these options. You may still enable or 16308 disable them individually if you're sure it'll work in your 16309 environment. 16310 16311 `-mtune=CPU_TYPE' 16312 Set the instruction scheduling parameters for machine type 16313 CPU_TYPE, but do not set the architecture type or register usage, 16314 as `-mcpu=CPU_TYPE' does. The same values for CPU_TYPE are used 16315 for `-mtune' as for `-mcpu'. If both are specified, the code 16316 generated uses the architecture and registers set by `-mcpu', but 16317 the scheduling parameters set by `-mtune'. 16318 16319 `-mcmodel=small' 16320 Generate PowerPC64 code for the small model: The TOC is limited to 16321 64k. 16322 16323 `-mcmodel=medium' 16324 Generate PowerPC64 code for the medium model: The TOC and other 16325 static data may be up to a total of 4G in size. 16326 16327 `-mcmodel=large' 16328 Generate PowerPC64 code for the large model: The TOC may be up to 16329 4G in size. Other data and code is only limited by the 64-bit 16330 address space. 16331 16332 `-maltivec' 16333 `-mno-altivec' 16334 Generate code that uses (does not use) AltiVec instructions, and 16335 also enable the use of built-in functions that allow more direct 16336 access to the AltiVec instruction set. You may also need to set 16337 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 16338 enhancements. 16339 16340 When `-maltivec' is used, rather than `-maltivec=le' or 16341 `-maltivec=be', the element order for Altivec intrinsics such as 16342 `vec_splat', `vec_extract', and `vec_insert' will match array 16343 element order corresponding to the endianness of the target. That 16344 is, element zero identifies the leftmost element in a vector 16345 register when targeting a big-endian platform, and identifies the 16346 rightmost element in a vector register when targeting a 16347 little-endian platform. 16348 16349 `-maltivec=be' 16350 Generate Altivec instructions using big-endian element order, 16351 regardless of whether the target is big- or little-endian. This is 16352 the default when targeting a big-endian platform. 16353 16354 The element order is used to interpret element numbers in Altivec 16355 intrinsics such as `vec_splat', `vec_extract', and `vec_insert'. 16356 By default, these will match array element order corresponding to 16357 the endianness for the target. 16358 16359 `-maltivec=le' 16360 Generate Altivec instructions using little-endian element order, 16361 regardless of whether the target is big- or little-endian. This is 16362 the default when targeting a little-endian platform. This option 16363 is currently ignored when targeting a big-endian platform. 16364 16365 The element order is used to interpret element numbers in Altivec 16366 intrinsics such as `vec_splat', `vec_extract', and `vec_insert'. 16367 By default, these will match array element order corresponding to 16368 the endianness for the target. 16369 16370 `-mvrsave' 16371 `-mno-vrsave' 16372 Generate VRSAVE instructions when generating AltiVec code. 16373 16374 `-mgen-cell-microcode' 16375 Generate Cell microcode instructions. 16376 16377 `-mwarn-cell-microcode' 16378 Warn when a Cell microcode instruction is emitted. An example of 16379 a Cell microcode instruction is a variable shift. 16380 16381 `-msecure-plt' 16382 Generate code that allows `ld' and `ld.so' to build executables 16383 and shared libraries with non-executable `.plt' and `.got' 16384 sections. This is a PowerPC 32-bit SYSV ABI option. 16385 16386 `-mbss-plt' 16387 Generate code that uses a BSS `.plt' section that `ld.so' fills 16388 in, and requires `.plt' and `.got' sections that are both writable 16389 and executable. This is a PowerPC 32-bit SYSV ABI option. 16390 16391 `-misel' 16392 `-mno-isel' 16393 This switch enables or disables the generation of ISEL 16394 instructions. 16395 16396 `-misel=YES/NO' 16397 This switch has been deprecated. Use `-misel' and `-mno-isel' 16398 instead. 16399 16400 `-mspe' 16401 `-mno-spe' 16402 This switch enables or disables the generation of SPE simd 16403 instructions. 16404 16405 `-mpaired' 16406 `-mno-paired' 16407 This switch enables or disables the generation of PAIRED simd 16408 instructions. 16409 16410 `-mspe=YES/NO' 16411 This option has been deprecated. Use `-mspe' and `-mno-spe' 16412 instead. 16413 16414 `-mvsx' 16415 `-mno-vsx' 16416 Generate code that uses (does not use) vector/scalar (VSX) 16417 instructions, and also enable the use of built-in functions that 16418 allow more direct access to the VSX instruction set. 16419 16420 `-mcrypto' 16421 `-mno-crypto' 16422 Enable the use (disable) of the built-in functions that allow 16423 direct access to the cryptographic instructions that were added in 16424 version 2.07 of the PowerPC ISA. 16425 16426 `-mdirect-move' 16427 `-mno-direct-move' 16428 Generate code that uses (does not use) the instructions to move 16429 data between the general purpose registers and the vector/scalar 16430 (VSX) registers that were added in version 2.07 of the PowerPC ISA. 16431 16432 `-mpower8-fusion' 16433 `-mno-power8-fusion' 16434 Generate code that keeps (does not keeps) some integer operations 16435 adjacent so that the instructions can be fused together on power8 16436 and later processors. 16437 16438 `-mpower8-vector' 16439 `-mno-power8-vector' 16440 Generate code that uses (does not use) the vector and scalar 16441 instructions that were added in version 2.07 of the PowerPC ISA. 16442 Also enable the use of built-in functions that allow more direct 16443 access to the vector instructions. 16444 16445 `-mquad-memory' 16446 `-mno-quad-memory' 16447 Generate code that uses (does not use) the non-atomic quad word 16448 memory instructions. The `-mquad-memory' option requires use of 16449 64-bit mode. 16450 16451 `-mquad-memory-atomic' 16452 `-mno-quad-memory-atomic' 16453 Generate code that uses (does not use) the atomic quad word memory 16454 instructions. The `-mquad-memory-atomic' option requires use of 16455 64-bit mode. 16456 16457 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 16458 `-mfloat-gprs' 16459 This switch enables or disables the generation of floating-point 16460 operations on the general-purpose registers for architectures that 16461 support it. 16462 16463 The argument YES or SINGLE enables the use of single-precision 16464 floating-point operations. 16465 16466 The argument DOUBLE enables the use of single and double-precision 16467 floating-point operations. 16468 16469 The argument NO disables floating-point operations on the 16470 general-purpose registers. 16471 16472 This option is currently only available on the MPC854x. 16473 16474 `-m32' 16475 `-m64' 16476 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 16477 targets (including GNU/Linux). The 32-bit environment sets int, 16478 long and pointer to 32 bits and generates code that runs on any 16479 PowerPC variant. The 64-bit environment sets int to 32 bits and 16480 long and pointer to 64 bits, and generates code for PowerPC64, as 16481 for `-mpowerpc64'. 16482 16483 `-mfull-toc' 16484 `-mno-fp-in-toc' 16485 `-mno-sum-in-toc' 16486 `-mminimal-toc' 16487 Modify generation of the TOC (Table Of Contents), which is created 16488 for every executable file. The `-mfull-toc' option is selected by 16489 default. In that case, GCC allocates at least one TOC entry for 16490 each unique non-automatic variable reference in your program. GCC 16491 also places floating-point constants in the TOC. However, only 16492 16,384 entries are available in the TOC. 16493 16494 If you receive a linker error message that saying you have 16495 overflowed the available TOC space, you can reduce the amount of 16496 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 16497 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 16498 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 16499 code to calculate the sum of an address and a constant at run time 16500 instead of putting that sum into the TOC. You may specify one or 16501 both of these options. Each causes GCC to produce very slightly 16502 slower and larger code at the expense of conserving TOC space. 16503 16504 If you still run out of space in the TOC even when you specify 16505 both of these options, specify `-mminimal-toc' instead. This 16506 option causes GCC to make only one TOC entry for every file. When 16507 you specify this option, GCC produces code that is slower and 16508 larger but which uses extremely little TOC space. You may wish to 16509 use this option only on files that contain less 16510 frequently-executed code. 16511 16512 `-maix64' 16513 `-maix32' 16514 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 16515 64-bit `long' type, and the infrastructure needed to support them. 16516 Specifying `-maix64' implies `-mpowerpc64', while `-maix32' 16517 disables the 64-bit ABI and implies `-mno-powerpc64'. GCC 16518 defaults to `-maix32'. 16519 16520 `-mxl-compat' 16521 `-mno-xl-compat' 16522 Produce code that conforms more closely to IBM XL compiler 16523 semantics when using AIX-compatible ABI. Pass floating-point 16524 arguments to prototyped functions beyond the register save area 16525 (RSA) on the stack in addition to argument FPRs. Do not assume 16526 that most significant double in 128-bit long double value is 16527 properly rounded when comparing values and converting to double. 16528 Use XL symbol names for long double support routines. 16529 16530 The AIX calling convention was extended but not initially 16531 documented to handle an obscure K&R C case of calling a function 16532 that takes the address of its arguments with fewer arguments than 16533 declared. IBM XL compilers access floating-point arguments that 16534 do not fit in the RSA from the stack when a subroutine is compiled 16535 without optimization. Because always storing floating-point 16536 arguments on the stack is inefficient and rarely needed, this 16537 option is not enabled by default and only is necessary when 16538 calling subroutines compiled by IBM XL compilers without 16539 optimization. 16540 16541 `-mpe' 16542 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 16543 application written to use message passing with special startup 16544 code to enable the application to run. The system must have PE 16545 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 16546 `specs' file must be overridden with the `-specs=' option to 16547 specify the appropriate directory location. The Parallel 16548 Environment does not support threads, so the `-mpe' option and the 16549 `-pthread' option are incompatible. 16550 16551 `-malign-natural' 16552 `-malign-power' 16553 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 16554 `-malign-natural' overrides the ABI-defined alignment of larger 16555 types, such as floating-point doubles, on their natural size-based 16556 boundary. The option `-malign-power' instructs GCC to follow the 16557 ABI-specified alignment rules. GCC defaults to the standard 16558 alignment defined in the ABI. 16559 16560 On 64-bit Darwin, natural alignment is the default, and 16561 `-malign-power' is not supported. 16562 16563 `-msoft-float' 16564 `-mhard-float' 16565 Generate code that does not use (uses) the floating-point register 16566 set. Software floating-point emulation is provided if you use the 16567 `-msoft-float' option, and pass the option to GCC when linking. 16568 16569 `-msingle-float' 16570 `-mdouble-float' 16571 Generate code for single- or double-precision floating-point 16572 operations. `-mdouble-float' implies `-msingle-float'. 16573 16574 `-msimple-fpu' 16575 Do not generate `sqrt' and `div' instructions for hardware 16576 floating-point unit. 16577 16578 `-mfpu=NAME' 16579 Specify type of floating-point unit. Valid values for NAME are 16580 `sp_lite' (equivalent to `-msingle-float -msimple-fpu'), `dp_lite' 16581 (equivalent to `-mdouble-float -msimple-fpu'), `sp_full' 16582 (equivalent to `-msingle-float'), and `dp_full' (equivalent to 16583 `-mdouble-float'). 16584 16585 `-mxilinx-fpu' 16586 Perform optimizations for the floating-point unit on Xilinx PPC 16587 405/440. 16588 16589 `-mmultiple' 16590 `-mno-multiple' 16591 Generate code that uses (does not use) the load multiple word 16592 instructions and the store multiple word instructions. These 16593 instructions are generated by default on POWER systems, and not 16594 generated on PowerPC systems. Do not use `-mmultiple' on 16595 little-endian PowerPC systems, since those instructions do not 16596 work when the processor is in little-endian mode. The exceptions 16597 are PPC740 and PPC750 which permit these instructions in 16598 little-endian mode. 16599 16600 `-mstring' 16601 `-mno-string' 16602 Generate code that uses (does not use) the load string instructions 16603 and the store string word instructions to save multiple registers 16604 and do small block moves. These instructions are generated by 16605 default on POWER systems, and not generated on PowerPC systems. 16606 Do not use `-mstring' on little-endian PowerPC systems, since those 16607 instructions do not work when the processor is in little-endian 16608 mode. The exceptions are PPC740 and PPC750 which permit these 16609 instructions in little-endian mode. 16610 16611 `-mupdate' 16612 `-mno-update' 16613 Generate code that uses (does not use) the load or store 16614 instructions that update the base register to the address of the 16615 calculated memory location. These instructions are generated by 16616 default. If you use `-mno-update', there is a small window 16617 between the time that the stack pointer is updated and the address 16618 of the previous frame is stored, which means code that walks the 16619 stack frame across interrupts or signals may get corrupted data. 16620 16621 `-mavoid-indexed-addresses' 16622 `-mno-avoid-indexed-addresses' 16623 Generate code that tries to avoid (not avoid) the use of indexed 16624 load or store instructions. These instructions can incur a 16625 performance penalty on Power6 processors in certain situations, 16626 such as when stepping through large arrays that cross a 16M 16627 boundary. This option is enabled by default when targeting Power6 16628 and disabled otherwise. 16629 16630 `-mfused-madd' 16631 `-mno-fused-madd' 16632 Generate code that uses (does not use) the floating-point multiply 16633 and accumulate instructions. These instructions are generated by 16634 default if hardware floating point is used. The machine-dependent 16635 `-mfused-madd' option is now mapped to the machine-independent 16636 `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to 16637 `-ffp-contract=off'. 16638 16639 `-mmulhw' 16640 `-mno-mulhw' 16641 Generate code that uses (does not use) the half-word multiply and 16642 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 16643 processors. These instructions are generated by default when 16644 targeting those processors. 16645 16646 `-mdlmzb' 16647 `-mno-dlmzb' 16648 Generate code that uses (does not use) the string-search `dlmzb' 16649 instruction on the IBM 405, 440, 464 and 476 processors. This 16650 instruction is generated by default when targeting those 16651 processors. 16652 16653 `-mno-bit-align' 16654 `-mbit-align' 16655 On System V.4 and embedded PowerPC systems do not (do) force 16656 structures and unions that contain bit-fields to be aligned to the 16657 base type of the bit-field. 16658 16659 For example, by default a structure containing nothing but 8 16660 `unsigned' bit-fields of length 1 is aligned to a 4-byte boundary 16661 and has a size of 4 bytes. By using `-mno-bit-align', the 16662 structure is aligned to a 1-byte boundary and is 1 byte in size. 16663 16664 `-mno-strict-align' 16665 `-mstrict-align' 16666 On System V.4 and embedded PowerPC systems do not (do) assume that 16667 unaligned memory references are handled by the system. 16668 16669 `-mrelocatable' 16670 `-mno-relocatable' 16671 Generate code that allows (does not allow) a static executable to 16672 be relocated to a different address at run time. A simple embedded 16673 PowerPC system loader should relocate the entire contents of 16674 `.got2' and 4-byte locations listed in the `.fixup' section, a 16675 table of 32-bit addresses generated by this option. For this to 16676 work, all objects linked together must be compiled with 16677 `-mrelocatable' or `-mrelocatable-lib'. `-mrelocatable' code 16678 aligns the stack to an 8-byte boundary. 16679 16680 `-mrelocatable-lib' 16681 `-mno-relocatable-lib' 16682 Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup' 16683 section to allow static executables to be relocated at run time, 16684 but `-mrelocatable-lib' does not use the smaller stack alignment 16685 of `-mrelocatable'. Objects compiled with `-mrelocatable-lib' may 16686 be linked with objects compiled with any combination of the 16687 `-mrelocatable' options. 16688 16689 `-mno-toc' 16690 `-mtoc' 16691 On System V.4 and embedded PowerPC systems do not (do) assume that 16692 register 2 contains a pointer to a global area pointing to the 16693 addresses used in the program. 16694 16695 `-mlittle' 16696 `-mlittle-endian' 16697 On System V.4 and embedded PowerPC systems compile code for the 16698 processor in little-endian mode. The `-mlittle-endian' option is 16699 the same as `-mlittle'. 16700 16701 `-mbig' 16702 `-mbig-endian' 16703 On System V.4 and embedded PowerPC systems compile code for the 16704 processor in big-endian mode. The `-mbig-endian' option is the 16705 same as `-mbig'. 16706 16707 `-mdynamic-no-pic' 16708 On Darwin and Mac OS X systems, compile code so that it is not 16709 relocatable, but that its external references are relocatable. The 16710 resulting code is suitable for applications, but not shared 16711 libraries. 16712 16713 `-msingle-pic-base' 16714 Treat the register used for PIC addressing as read-only, rather 16715 than loading it in the prologue for each function. The runtime 16716 system is responsible for initializing this register with an 16717 appropriate value before execution begins. 16718 16719 `-mprioritize-restricted-insns=PRIORITY' 16720 This option controls the priority that is assigned to 16721 dispatch-slot restricted instructions during the second scheduling 16722 pass. The argument PRIORITY takes the value `0', `1', or `2' to 16723 assign no, highest, or second-highest (respectively) priority to 16724 dispatch-slot restricted instructions. 16725 16726 `-msched-costly-dep=DEPENDENCE_TYPE' 16727 This option controls which dependences are considered costly by 16728 the target during instruction scheduling. The argument 16729 DEPENDENCE_TYPE takes one of the following values: 16730 16731 `no' 16732 No dependence is costly. 16733 16734 `all' 16735 All dependences are costly. 16736 16737 `true_store_to_load' 16738 A true dependence from store to load is costly. 16739 16740 `store_to_load' 16741 Any dependence from store to load is costly. 16742 16743 NUMBER 16744 Any dependence for which the latency is greater than or equal 16745 to NUMBER is costly. 16746 16747 `-minsert-sched-nops=SCHEME' 16748 This option controls which NOP insertion scheme is used during the 16749 second scheduling pass. The argument SCHEME takes one of the 16750 following values: 16751 16752 `no' 16753 Don't insert NOPs. 16754 16755 `pad' 16756 Pad with NOPs any dispatch group that has vacant issue slots, 16757 according to the scheduler's grouping. 16758 16759 `regroup_exact' 16760 Insert NOPs to force costly dependent insns into separate 16761 groups. Insert exactly as many NOPs as needed to force an 16762 insn to a new group, according to the estimated processor 16763 grouping. 16764 16765 NUMBER 16766 Insert NOPs to force costly dependent insns into separate 16767 groups. Insert NUMBER NOPs to force an insn to a new group. 16768 16769 `-mcall-sysv' 16770 On System V.4 and embedded PowerPC systems compile code using 16771 calling conventions that adhere to the March 1995 draft of the 16772 System V Application Binary Interface, PowerPC processor 16773 supplement. This is the default unless you configured GCC using 16774 `powerpc-*-eabiaix'. 16775 16776 `-mcall-sysv-eabi' 16777 `-mcall-eabi' 16778 Specify both `-mcall-sysv' and `-meabi' options. 16779 16780 `-mcall-sysv-noeabi' 16781 Specify both `-mcall-sysv' and `-mno-eabi' options. 16782 16783 `-mcall-aixdesc' 16784 On System V.4 and embedded PowerPC systems compile code for the AIX 16785 operating system. 16786 16787 `-mcall-linux' 16788 On System V.4 and embedded PowerPC systems compile code for the 16789 Linux-based GNU system. 16790 16791 `-mcall-freebsd' 16792 On System V.4 and embedded PowerPC systems compile code for the 16793 FreeBSD operating system. 16794 16795 `-mcall-netbsd' 16796 On System V.4 and embedded PowerPC systems compile code for the 16797 NetBSD operating system. 16798 16799 `-mcall-openbsd' 16800 On System V.4 and embedded PowerPC systems compile code for the 16801 OpenBSD operating system. 16802 16803 `-maix-struct-return' 16804 Return all structures in memory (as specified by the AIX ABI). 16805 16806 `-msvr4-struct-return' 16807 Return structures smaller than 8 bytes in registers (as specified 16808 by the SVR4 ABI). 16809 16810 `-mabi=ABI-TYPE' 16811 Extend the current ABI with a particular extension, or remove such 16812 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 16813 IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2. 16814 16815 `-mabi=spe' 16816 Extend the current ABI with SPE ABI extensions. This does not 16817 change the default ABI, instead it adds the SPE ABI extensions to 16818 the current ABI. 16819 16820 `-mabi=no-spe' 16821 Disable Book-E SPE ABI extensions for the current ABI. 16822 16823 `-mabi=ibmlongdouble' 16824 Change the current ABI to use IBM extended-precision long double. 16825 This is a PowerPC 32-bit SYSV ABI option. 16826 16827 `-mabi=ieeelongdouble' 16828 Change the current ABI to use IEEE extended-precision long double. 16829 This is a PowerPC 32-bit Linux ABI option. 16830 16831 `-mabi=elfv1' 16832 Change the current ABI to use the ELFv1 ABI. This is the default 16833 ABI for big-endian PowerPC 64-bit Linux. Overriding the default 16834 ABI requires special system support and is likely to fail in 16835 spectacular ways. 16836 16837 `-mabi=elfv2' 16838 Change the current ABI to use the ELFv2 ABI. This is the default 16839 ABI for little-endian PowerPC 64-bit Linux. Overriding the 16840 default ABI requires special system support and is likely to fail 16841 in spectacular ways. 16842 16843 `-mprototype' 16844 `-mno-prototype' 16845 On System V.4 and embedded PowerPC systems assume that all calls to 16846 variable argument functions are properly prototyped. Otherwise, 16847 the compiler must insert an instruction before every 16848 non-prototyped call to set or clear bit 6 of the condition code 16849 register (CR) to indicate whether floating-point values are passed 16850 in the floating-point registers in case the function takes 16851 variable arguments. With `-mprototype', only calls to prototyped 16852 variable argument functions set or clear the bit. 16853 16854 `-msim' 16855 On embedded PowerPC systems, assume that the startup module is 16856 called `sim-crt0.o' and that the standard C libraries are 16857 `libsim.a' and `libc.a'. This is the default for 16858 `powerpc-*-eabisim' configurations. 16859 16860 `-mmvme' 16861 On embedded PowerPC systems, assume that the startup module is 16862 called `crt0.o' and the standard C libraries are `libmvme.a' and 16863 `libc.a'. 16864 16865 `-mads' 16866 On embedded PowerPC systems, assume that the startup module is 16867 called `crt0.o' and the standard C libraries are `libads.a' and 16868 `libc.a'. 16869 16870 `-myellowknife' 16871 On embedded PowerPC systems, assume that the startup module is 16872 called `crt0.o' and the standard C libraries are `libyk.a' and 16873 `libc.a'. 16874 16875 `-mvxworks' 16876 On System V.4 and embedded PowerPC systems, specify that you are 16877 compiling for a VxWorks system. 16878 16879 `-memb' 16880 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 16881 header to indicate that `eabi' extended relocations are used. 16882 16883 `-meabi' 16884 `-mno-eabi' 16885 On System V.4 and embedded PowerPC systems do (do not) adhere to 16886 the Embedded Applications Binary Interface (EABI), which is a set 16887 of modifications to the System V.4 specifications. Selecting 16888 `-meabi' means that the stack is aligned to an 8-byte boundary, a 16889 function `__eabi' is called from `main' to set up the EABI 16890 environment, and the `-msdata' option can use both `r2' and `r13' 16891 to point to two separate small data areas. Selecting `-mno-eabi' 16892 means that the stack is aligned to a 16-byte boundary, no EABI 16893 initialization function is called from `main', and the `-msdata' 16894 option only uses `r13' to point to a single small data area. The 16895 `-meabi' option is on by default if you configured GCC using one 16896 of the `powerpc*-*-eabi*' options. 16897 16898 `-msdata=eabi' 16899 On System V.4 and embedded PowerPC systems, put small initialized 16900 `const' global and static data in the `.sdata2' section, which is 16901 pointed to by register `r2'. Put small initialized non-`const' 16902 global and static data in the `.sdata' section, which is pointed 16903 to by register `r13'. Put small uninitialized global and static 16904 data in the `.sbss' section, which is adjacent to the `.sdata' 16905 section. The `-msdata=eabi' option is incompatible with the 16906 `-mrelocatable' option. The `-msdata=eabi' option also sets the 16907 `-memb' option. 16908 16909 `-msdata=sysv' 16910 On System V.4 and embedded PowerPC systems, put small global and 16911 static data in the `.sdata' section, which is pointed to by 16912 register `r13'. Put small uninitialized global and static data in 16913 the `.sbss' section, which is adjacent to the `.sdata' section. 16914 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 16915 option. 16916 16917 `-msdata=default' 16918 `-msdata' 16919 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 16920 compile code the same as `-msdata=eabi', otherwise compile code the 16921 same as `-msdata=sysv'. 16922 16923 `-msdata=data' 16924 On System V.4 and embedded PowerPC systems, put small global data 16925 in the `.sdata' section. Put small uninitialized global data in 16926 the `.sbss' section. Do not use register `r13' to address small 16927 data however. This is the default behavior unless other `-msdata' 16928 options are used. 16929 16930 `-msdata=none' 16931 `-mno-sdata' 16932 On embedded PowerPC systems, put all initialized global and static 16933 data in the `.data' section, and all uninitialized data in the 16934 `.bss' section. 16935 16936 `-mblock-move-inline-limit=NUM' 16937 Inline all block moves (such as calls to `memcpy' or structure 16938 copies) less than or equal to NUM bytes. The minimum value for 16939 NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. 16940 The default value is target-specific. 16941 16942 `-G NUM' 16943 On embedded PowerPC systems, put global and static items less than 16944 or equal to NUM bytes into the small data or BSS sections instead 16945 of the normal data or BSS section. By default, NUM is 8. The `-G 16946 NUM' switch is also passed to the linker. All modules should be 16947 compiled with the same `-G NUM' value. 16948 16949 `-mregnames' 16950 `-mno-regnames' 16951 On System V.4 and embedded PowerPC systems do (do not) emit 16952 register names in the assembly language output using symbolic 16953 forms. 16954 16955 `-mlongcall' 16956 `-mno-longcall' 16957 By default assume that all calls are far away so that a longer and 16958 more expensive calling sequence is required. This is required for 16959 calls farther than 32 megabytes (33,554,432 bytes) from the 16960 current location. A short call is generated if the compiler knows 16961 the call cannot be that far away. This setting can be overridden 16962 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 16963 16964 Some linkers are capable of detecting out-of-range calls and 16965 generating glue code on the fly. On these systems, long calls are 16966 unnecessary and generate slower code. As of this writing, the AIX 16967 linker can do this, as can the GNU linker for PowerPC/64. It is 16968 planned to add this feature to the GNU linker for 32-bit PowerPC 16969 systems as well. 16970 16971 On Darwin/PPC systems, `#pragma longcall' generates `jbsr callee, 16972 L42', plus a "branch island" (glue code). The two target 16973 addresses represent the callee and the branch island. The 16974 Darwin/PPC linker prefers the first address and generates a `bl 16975 callee' if the PPC `bl' instruction reaches the callee directly; 16976 otherwise, the linker generates `bl L42' to call the branch 16977 island. The branch island is appended to the body of the calling 16978 function; it computes the full 32-bit address of the callee and 16979 jumps to it. 16980 16981 On Mach-O (Darwin) systems, this option directs the compiler emit 16982 to the glue for every direct call, and the Darwin linker decides 16983 whether to use or discard it. 16984 16985 In the future, GCC may ignore all longcall specifications when the 16986 linker is known to generate glue. 16987 16988 `-mtls-markers' 16989 `-mno-tls-markers' 16990 Mark (do not mark) calls to `__tls_get_addr' with a relocation 16991 specifying the function argument. The relocation allows the 16992 linker to reliably associate function call with argument setup 16993 instructions for TLS optimization, which in turn allows GCC to 16994 better schedule the sequence. 16995 16996 `-pthread' 16997 Adds support for multithreading with the "pthreads" library. This 16998 option sets flags for both the preprocessor and linker. 16999 17000 `-mrecip' 17001 `-mno-recip' 17002 This option enables use of the reciprocal estimate and reciprocal 17003 square root estimate instructions with additional Newton-Raphson 17004 steps to increase precision instead of doing a divide or square 17005 root and divide for floating-point arguments. You should use the 17006 `-ffast-math' option when using `-mrecip' (or at least 17007 `-funsafe-math-optimizations', `-finite-math-only', 17008 `-freciprocal-math' and `-fno-trapping-math'). Note that while 17009 the throughput of the sequence is generally higher than the 17010 throughput of the non-reciprocal instruction, the precision of the 17011 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 17012 equals 0.99999994) for reciprocal square roots. 17013 17014 `-mrecip=OPT' 17015 This option controls which reciprocal estimate instructions may be 17016 used. OPT is a comma-separated list of options, which may be 17017 preceded by a `!' to invert the option: `all': enable all estimate 17018 instructions, `default': enable the default instructions, 17019 equivalent to `-mrecip', `none': disable all estimate 17020 instructions, equivalent to `-mno-recip'; `div': enable the 17021 reciprocal approximation instructions for both single and double 17022 precision; `divf': enable the single-precision reciprocal 17023 approximation instructions; `divd': enable the double-precision 17024 reciprocal approximation instructions; `rsqrt': enable the 17025 reciprocal square root approximation instructions for both single 17026 and double precision; `rsqrtf': enable the single-precision 17027 reciprocal square root approximation instructions; `rsqrtd': 17028 enable the double-precision reciprocal square root approximation 17029 instructions; 17030 17031 So, for example, `-mrecip=all,!rsqrtd' enables all of the 17032 reciprocal estimate instructions, except for the `FRSQRTE', 17033 `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the 17034 double-precision reciprocal square root calculations. 17035 17036 `-mrecip-precision' 17037 `-mno-recip-precision' 17038 Assume (do not assume) that the reciprocal estimate instructions 17039 provide higher-precision estimates than is mandated by the PowerPC 17040 ABI. Selecting `-mcpu=power6', `-mcpu=power7' or `-mcpu=power8' 17041 automatically selects `-mrecip-precision'. The double-precision 17042 square root estimate instructions are not generated by default on 17043 low-precision machines, since they do not provide an estimate that 17044 converges after three steps. 17045 17046 `-mveclibabi=TYPE' 17047 Specifies the ABI type to use for vectorizing intrinsics using an 17048 external library. The only type supported at present is `mass', 17049 which specifies to use IBM's Mathematical Acceleration Subsystem 17050 (MASS) libraries for vectorizing intrinsics using external 17051 libraries. GCC currently emits calls to `acosd2', `acosf4', 17052 `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4', 17053 `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4', 17054 `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4', 17055 `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2', 17056 `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2', 17057 `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2', 17058 `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4', 17059 `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4', 17060 `tanhd2', and `tanhf4' when generating code for power7. Both 17061 `-ftree-vectorize' and `-funsafe-math-optimizations' must also be 17062 enabled. The MASS libraries must be specified at link time. 17063 17064 `-mfriz' 17065 `-mno-friz' 17066 Generate (do not generate) the `friz' instruction when the 17067 `-funsafe-math-optimizations' option is used to optimize rounding 17068 of floating-point values to 64-bit integer and back to floating 17069 point. The `friz' instruction does not return the same value if 17070 the floating-point number is too large to fit in an integer. 17071 17072 `-mpointers-to-nested-functions' 17073 `-mno-pointers-to-nested-functions' 17074 Generate (do not generate) code to load up the static chain 17075 register (R11) when calling through a pointer on AIX and 64-bit 17076 Linux systems where a function pointer points to a 3-word 17077 descriptor giving the function address, TOC value to be loaded in 17078 register R2, and static chain value to be loaded in register R11. 17079 The `-mpointers-to-nested-functions' is on by default. You cannot 17080 call through pointers to nested functions or pointers to functions 17081 compiled in other languages that use the static chain if you use 17082 the `-mno-pointers-to-nested-functions'. 17083 17084 `-msave-toc-indirect' 17085 `-mno-save-toc-indirect' 17086 Generate (do not generate) code to save the TOC value in the 17087 reserved stack location in the function prologue if the function 17088 calls through a pointer on AIX and 64-bit Linux systems. If the 17089 TOC value is not saved in the prologue, it is saved just before 17090 the call through the pointer. The `-mno-save-toc-indirect' option 17091 is the default. 17092 17093 `-mcompat-align-parm' 17094 `-mno-compat-align-parm' 17095 Generate (do not generate) code to pass structure parameters with a 17096 maximum alignment of 64 bits, for compatibility with older versions 17097 of GCC. 17098 17099 Older versions of GCC (prior to 4.9.0) incorrectly did not align a 17100 structure parameter on a 128-bit boundary when that structure 17101 contained a member requiring 128-bit alignment. This is corrected 17102 in more recent versions of GCC. This option may be used to 17103 generate code that is compatible with functions compiled with 17104 older versions of GCC. 17105 17106 In this version of the compiler, the `-mcompat-align-parm' is the 17107 default, except when using the Linux ELFv2 ABI. 17108 17109 17110 File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 17111 17112 3.17.35 RX Options 17113 ------------------ 17114 17115 These command-line options are defined for RX targets: 17116 17117 `-m64bit-doubles' 17118 `-m32bit-doubles' 17119 Make the `double' data type be 64 bits (`-m64bit-doubles') or 32 17120 bits (`-m32bit-doubles') in size. The default is 17121 `-m32bit-doubles'. _Note_ RX floating-point hardware only works 17122 on 32-bit values, which is why the default is `-m32bit-doubles'. 17123 17124 `-fpu' 17125 `-nofpu' 17126 Enables (`-fpu') or disables (`-nofpu') the use of RX 17127 floating-point hardware. The default is enabled for the RX600 17128 series and disabled for the RX200 series. 17129 17130 Floating-point instructions are only generated for 32-bit 17131 floating-point values, however, so the FPU hardware is not used 17132 for doubles if the `-m64bit-doubles' option is used. 17133 17134 _Note_ If the `-fpu' option is enabled then 17135 `-funsafe-math-optimizations' is also enabled automatically. This 17136 is because the RX FPU instructions are themselves unsafe. 17137 17138 `-mcpu=NAME' 17139 Selects the type of RX CPU to be targeted. Currently three types 17140 are supported, the generic RX600 and RX200 series hardware and the 17141 specific RX610 CPU. The default is RX600. 17142 17143 The only difference between RX600 and RX610 is that the RX610 does 17144 not support the `MVTIPL' instruction. 17145 17146 The RX200 series does not have a hardware floating-point unit and 17147 so `-nofpu' is enabled by default when this type is selected. 17148 17149 `-mbig-endian-data' 17150 `-mlittle-endian-data' 17151 Store data (but not code) in the big-endian format. The default is 17152 `-mlittle-endian-data', i.e. to store data in the little-endian 17153 format. 17154 17155 `-msmall-data-limit=N' 17156 Specifies the maximum size in bytes of global and static variables 17157 which can be placed into the small data area. Using the small data 17158 area can lead to smaller and faster code, but the size of area is 17159 limited and it is up to the programmer to ensure that the area does 17160 not overflow. Also when the small data area is used one of the 17161 RX's registers (usually `r13') is reserved for use pointing to this 17162 area, so it is no longer available for use by the compiler. This 17163 could result in slower and/or larger code if variables are pushed 17164 onto the stack instead of being held in this register. 17165 17166 Note, common variables (variables that have not been initialized) 17167 and constants are not placed into the small data area as they are 17168 assigned to other sections in the output executable. 17169 17170 The default value is zero, which disables this feature. Note, this 17171 feature is not enabled by default with higher optimization levels 17172 (`-O2' etc) because of the potentially detrimental effects of 17173 reserving a register. It is up to the programmer to experiment and 17174 discover whether this feature is of benefit to their program. See 17175 the description of the `-mpid' option for a description of how the 17176 actual register to hold the small data area pointer is chosen. 17177 17178 `-msim' 17179 `-mno-sim' 17180 Use the simulator runtime. The default is to use the libgloss 17181 board-specific runtime. 17182 17183 `-mas100-syntax' 17184 `-mno-as100-syntax' 17185 When generating assembler output use a syntax that is compatible 17186 with Renesas's AS100 assembler. This syntax can also be handled 17187 by the GAS assembler, but it has some restrictions so it is not 17188 generated by default. 17189 17190 `-mmax-constant-size=N' 17191 Specifies the maximum size, in bytes, of a constant that can be 17192 used as an operand in a RX instruction. Although the RX 17193 instruction set does allow constants of up to 4 bytes in length to 17194 be used in instructions, a longer value equates to a longer 17195 instruction. Thus in some circumstances it can be beneficial to 17196 restrict the size of constants that are used in instructions. 17197 Constants that are too big are instead placed into a constant pool 17198 and referenced via register indirection. 17199 17200 The value N can be between 0 and 4. A value of 0 (the default) or 17201 4 means that constants of any size are allowed. 17202 17203 `-mrelax' 17204 Enable linker relaxation. Linker relaxation is a process whereby 17205 the linker attempts to reduce the size of a program by finding 17206 shorter versions of various instructions. Disabled by default. 17207 17208 `-mint-register=N' 17209 Specify the number of registers to reserve for fast interrupt 17210 handler functions. The value N can be between 0 and 4. A value 17211 of 1 means that register `r13' is reserved for the exclusive use 17212 of fast interrupt handlers. A value of 2 reserves `r13' and 17213 `r12'. A value of 3 reserves `r13', `r12' and `r11', and a value 17214 of 4 reserves `r13' through `r10'. A value of 0, the default, 17215 does not reserve any registers. 17216 17217 `-msave-acc-in-interrupts' 17218 Specifies that interrupt handler functions should preserve the 17219 accumulator register. This is only necessary if normal code might 17220 use the accumulator register, for example because it performs 17221 64-bit multiplications. The default is to ignore the accumulator 17222 as this makes the interrupt handlers faster. 17223 17224 `-mpid' 17225 `-mno-pid' 17226 Enables the generation of position independent data. When enabled 17227 any access to constant data is done via an offset from a base 17228 address held in a register. This allows the location of constant 17229 data to be determined at run time without requiring the executable 17230 to be relocated, which is a benefit to embedded applications with 17231 tight memory constraints. Data that can be modified is not 17232 affected by this option. 17233 17234 Note, using this feature reserves a register, usually `r13', for 17235 the constant data base address. This can result in slower and/or 17236 larger code, especially in complicated functions. 17237 17238 The actual register chosen to hold the constant data base address 17239 depends upon whether the `-msmall-data-limit' and/or the 17240 `-mint-register' command-line options are enabled. Starting with 17241 register `r13' and proceeding downwards, registers are allocated 17242 first to satisfy the requirements of `-mint-register', then 17243 `-mpid' and finally `-msmall-data-limit'. Thus it is possible for 17244 the small data area register to be `r8' if both `-mint-register=4' 17245 and `-mpid' are specified on the command line. 17246 17247 By default this feature is not enabled. The default can be 17248 restored via the `-mno-pid' command-line option. 17249 17250 `-mno-warn-multiple-fast-interrupts' 17251 `-mwarn-multiple-fast-interrupts' 17252 Prevents GCC from issuing a warning message if it finds more than 17253 one fast interrupt handler when it is compiling a file. The 17254 default is to issue a warning for each extra fast interrupt 17255 handler found, as the RX only supports one such interrupt. 17256 17257 17258 _Note:_ The generic GCC command-line option `-ffixed-REG' has special 17259 significance to the RX port when used with the `interrupt' function 17260 attribute. This attribute indicates a function intended to process 17261 fast interrupts. GCC ensures that it only uses the registers `r10', 17262 `r11', `r12' and/or `r13' and only provided that the normal use of the 17263 corresponding registers have been restricted via the `-ffixed-REG' or 17264 `-mint-register' command-line options. 17265 17266 17267 File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options 17268 17269 3.17.36 S/390 and zSeries Options 17270 --------------------------------- 17271 17272 These are the `-m' options defined for the S/390 and zSeries 17273 architecture. 17274 17275 `-mhard-float' 17276 `-msoft-float' 17277 Use (do not use) the hardware floating-point instructions and 17278 registers for floating-point operations. When `-msoft-float' is 17279 specified, functions in `libgcc.a' are used to perform 17280 floating-point operations. When `-mhard-float' is specified, the 17281 compiler generates IEEE floating-point instructions. This is the 17282 default. 17283 17284 `-mhard-dfp' 17285 `-mno-hard-dfp' 17286 Use (do not use) the hardware decimal-floating-point instructions 17287 for decimal-floating-point operations. When `-mno-hard-dfp' is 17288 specified, functions in `libgcc.a' are used to perform 17289 decimal-floating-point operations. When `-mhard-dfp' is 17290 specified, the compiler generates decimal-floating-point hardware 17291 instructions. This is the default for `-march=z9-ec' or higher. 17292 17293 `-mlong-double-64' 17294 `-mlong-double-128' 17295 These switches control the size of `long double' type. A size of 17296 64 bits makes the `long double' type equivalent to the `double' 17297 type. This is the default. 17298 17299 `-mbackchain' 17300 `-mno-backchain' 17301 Store (do not store) the address of the caller's frame as 17302 backchain pointer into the callee's stack frame. A backchain may 17303 be needed to allow debugging using tools that do not understand 17304 DWARF 2 call frame information. When `-mno-packed-stack' is in 17305 effect, the backchain pointer is stored at the bottom of the stack 17306 frame; when `-mpacked-stack' is in effect, the backchain is placed 17307 into the topmost word of the 96/160 byte register save area. 17308 17309 In general, code compiled with `-mbackchain' is call-compatible 17310 with code compiled with `-mmo-backchain'; however, use of the 17311 backchain for debugging purposes usually requires that the whole 17312 binary is built with `-mbackchain'. Note that the combination of 17313 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 17314 supported. In order to build a linux kernel use `-msoft-float'. 17315 17316 The default is to not maintain the backchain. 17317 17318 `-mpacked-stack' 17319 `-mno-packed-stack' 17320 Use (do not use) the packed stack layout. When 17321 `-mno-packed-stack' is specified, the compiler uses the all fields 17322 of the 96/160 byte register save area only for their default 17323 purpose; unused fields still take up stack space. When 17324 `-mpacked-stack' is specified, register save slots are densely 17325 packed at the top of the register save area; unused space is 17326 reused for other purposes, allowing for more efficient use of the 17327 available stack space. However, when `-mbackchain' is also in 17328 effect, the topmost word of the save area is always used to store 17329 the backchain, and the return address register is always saved two 17330 words below the backchain. 17331 17332 As long as the stack frame backchain is not used, code generated 17333 with `-mpacked-stack' is call-compatible with code generated with 17334 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 17335 for S/390 or zSeries generated code that uses the stack frame 17336 backchain at run time, not just for debugging purposes. Such code 17337 is not call-compatible with code compiled with `-mpacked-stack'. 17338 Also, note that the combination of `-mbackchain', `-mpacked-stack' 17339 and `-mhard-float' is not supported. In order to build a linux 17340 kernel use `-msoft-float'. 17341 17342 The default is to not use the packed stack layout. 17343 17344 `-msmall-exec' 17345 `-mno-small-exec' 17346 Generate (or do not generate) code using the `bras' instruction to 17347 do subroutine calls. This only works reliably if the total 17348 executable size does not exceed 64k. The default is to use the 17349 `basr' instruction instead, which does not have this limitation. 17350 17351 `-m64' 17352 `-m31' 17353 When `-m31' is specified, generate code compliant to the GNU/Linux 17354 for S/390 ABI. When `-m64' is specified, generate code compliant 17355 to the GNU/Linux for zSeries ABI. This allows GCC in particular 17356 to generate 64-bit instructions. For the `s390' targets, the 17357 default is `-m31', while the `s390x' targets default to `-m64'. 17358 17359 `-mzarch' 17360 `-mesa' 17361 When `-mzarch' is specified, generate code using the instructions 17362 available on z/Architecture. When `-mesa' is specified, generate 17363 code using the instructions available on ESA/390. Note that 17364 `-mesa' is not possible with `-m64'. When generating code 17365 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 17366 When generating code compliant to the GNU/Linux for zSeries ABI, 17367 the default is `-mzarch'. 17368 17369 `-mmvcle' 17370 `-mno-mvcle' 17371 Generate (or do not generate) code using the `mvcle' instruction 17372 to perform block moves. When `-mno-mvcle' is specified, use a 17373 `mvc' loop instead. This is the default unless optimizing for 17374 size. 17375 17376 `-mdebug' 17377 `-mno-debug' 17378 Print (or do not print) additional debug information when 17379 compiling. The default is to not print debug information. 17380 17381 `-march=CPU-TYPE' 17382 Generate code that runs on CPU-TYPE, which is the name of a system 17383 representing a certain processor type. Possible values for 17384 CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and 17385 `z10'. When generating code using the instructions available on 17386 z/Architecture, the default is `-march=z900'. Otherwise, the 17387 default is `-march=g5'. 17388 17389 `-mtune=CPU-TYPE' 17390 Tune to CPU-TYPE everything applicable about the generated code, 17391 except for the ABI and the set of available instructions. The 17392 list of CPU-TYPE values is the same as for `-march'. The default 17393 is the value used for `-march'. 17394 17395 `-mtpf-trace' 17396 `-mno-tpf-trace' 17397 Generate code that adds (does not add) in TPF OS specific branches 17398 to trace routines in the operating system. This option is off by 17399 default, even when compiling for the TPF OS. 17400 17401 `-mfused-madd' 17402 `-mno-fused-madd' 17403 Generate code that uses (does not use) the floating-point multiply 17404 and accumulate instructions. These instructions are generated by 17405 default if hardware floating point is used. 17406 17407 `-mwarn-framesize=FRAMESIZE' 17408 Emit a warning if the current function exceeds the given frame 17409 size. Because this is a compile-time check it doesn't need to be 17410 a real problem when the program runs. It is intended to identify 17411 functions that most probably cause a stack overflow. It is useful 17412 to be used in an environment with limited stack size e.g. the 17413 linux kernel. 17414 17415 `-mwarn-dynamicstack' 17416 Emit a warning if the function calls `alloca' or uses 17417 dynamically-sized arrays. This is generally a bad idea with a 17418 limited stack size. 17419 17420 `-mstack-guard=STACK-GUARD' 17421 `-mstack-size=STACK-SIZE' 17422 If these options are provided the S/390 back end emits additional 17423 instructions in the function prologue that trigger a trap if the 17424 stack size is STACK-GUARD bytes above the STACK-SIZE (remember 17425 that the stack on S/390 grows downward). If the STACK-GUARD 17426 option is omitted the smallest power of 2 larger than the frame 17427 size of the compiled function is chosen. These options are 17428 intended to be used to help debugging stack overflow problems. 17429 The additionally emitted code causes only little overhead and 17430 hence can also be used in production-like systems without greater 17431 performance degradation. The given values have to be exact powers 17432 of 2 and STACK-SIZE has to be greater than STACK-GUARD without 17433 exceeding 64k. In order to be efficient the extra code makes the 17434 assumption that the stack starts at an address aligned to the 17435 value given by STACK-SIZE. The STACK-GUARD option can only be 17436 used in conjunction with STACK-SIZE. 17437 17438 `-mhotpatch[=HALFWORDS]' 17439 `-mno-hotpatch' 17440 If the hotpatch option is enabled, a "hot-patching" function 17441 prologue is generated for all functions in the compilation unit. 17442 The funtion label is prepended with the given number of two-byte 17443 Nop instructions (HALFWORDS, maximum 1000000) or 12 Nop 17444 instructions if no argument is present. Functions with a 17445 hot-patching prologue are never inlined automatically, and a 17446 hot-patching prologue is never generated for functions functions 17447 that are explicitly inline. 17448 17449 This option can be overridden for individual functions with the 17450 `hotpatch' attribute. 17451 17452 17453 File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 17454 17455 3.17.37 Score Options 17456 --------------------- 17457 17458 These options are defined for Score implementations: 17459 17460 `-meb' 17461 Compile code for big-endian mode. This is the default. 17462 17463 `-mel' 17464 Compile code for little-endian mode. 17465 17466 `-mnhwloop' 17467 Disable generation of `bcnz' instructions. 17468 17469 `-muls' 17470 Enable generation of unaligned load and store instructions. 17471 17472 `-mmac' 17473 Enable the use of multiply-accumulate instructions. Disabled by 17474 default. 17475 17476 `-mscore5' 17477 Specify the SCORE5 as the target architecture. 17478 17479 `-mscore5u' 17480 Specify the SCORE5U of the target architecture. 17481 17482 `-mscore7' 17483 Specify the SCORE7 as the target architecture. This is the default. 17484 17485 `-mscore7d' 17486 Specify the SCORE7D as the target architecture. 17487 17488 17489 File: gcc.info, Node: SH Options, Next: Solaris 2 Options, Prev: Score Options, Up: Submodel Options 17490 17491 3.17.38 SH Options 17492 ------------------ 17493 17494 These `-m' options are defined for the SH implementations: 17495 17496 `-m1' 17497 Generate code for the SH1. 17498 17499 `-m2' 17500 Generate code for the SH2. 17501 17502 `-m2e' 17503 Generate code for the SH2e. 17504 17505 `-m2a-nofpu' 17506 Generate code for the SH2a without FPU, or for a SH2a-FPU in such 17507 a way that the floating-point unit is not used. 17508 17509 `-m2a-single-only' 17510 Generate code for the SH2a-FPU, in such a way that no 17511 double-precision floating-point operations are used. 17512 17513 `-m2a-single' 17514 Generate code for the SH2a-FPU assuming the floating-point unit is 17515 in single-precision mode by default. 17516 17517 `-m2a' 17518 Generate code for the SH2a-FPU assuming the floating-point unit is 17519 in double-precision mode by default. 17520 17521 `-m3' 17522 Generate code for the SH3. 17523 17524 `-m3e' 17525 Generate code for the SH3e. 17526 17527 `-m4-nofpu' 17528 Generate code for the SH4 without a floating-point unit. 17529 17530 `-m4-single-only' 17531 Generate code for the SH4 with a floating-point unit that only 17532 supports single-precision arithmetic. 17533 17534 `-m4-single' 17535 Generate code for the SH4 assuming the floating-point unit is in 17536 single-precision mode by default. 17537 17538 `-m4' 17539 Generate code for the SH4. 17540 17541 `-m4a-nofpu' 17542 Generate code for the SH4al-dsp, or for a SH4a in such a way that 17543 the floating-point unit is not used. 17544 17545 `-m4a-single-only' 17546 Generate code for the SH4a, in such a way that no double-precision 17547 floating-point operations are used. 17548 17549 `-m4a-single' 17550 Generate code for the SH4a assuming the floating-point unit is in 17551 single-precision mode by default. 17552 17553 `-m4a' 17554 Generate code for the SH4a. 17555 17556 `-m4al' 17557 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 17558 the assembler. GCC doesn't generate any DSP instructions at the 17559 moment. 17560 17561 `-mb' 17562 Compile code for the processor in big-endian mode. 17563 17564 `-ml' 17565 Compile code for the processor in little-endian mode. 17566 17567 `-mdalign' 17568 Align doubles at 64-bit boundaries. Note that this changes the 17569 calling conventions, and thus some functions from the standard C 17570 library do not work unless you recompile it first with `-mdalign'. 17571 17572 `-mrelax' 17573 Shorten some address references at link time, when possible; uses 17574 the linker option `-relax'. 17575 17576 `-mbigtable' 17577 Use 32-bit offsets in `switch' tables. The default is to use 17578 16-bit offsets. 17579 17580 `-mbitops' 17581 Enable the use of bit manipulation instructions on SH2A. 17582 17583 `-mfmovd' 17584 Enable the use of the instruction `fmovd'. Check `-mdalign' for 17585 alignment constraints. 17586 17587 `-mhitachi' 17588 Comply with the calling conventions defined by Renesas. 17589 17590 `-mrenesas' 17591 Comply with the calling conventions defined by Renesas. 17592 17593 `-mno-renesas' 17594 Comply with the calling conventions defined for GCC before the 17595 Renesas conventions were available. This option is the default 17596 for all targets of the SH toolchain. 17597 17598 `-mnomacsave' 17599 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 17600 given. 17601 17602 `-mieee' 17603 `-mno-ieee' 17604 Control the IEEE compliance of floating-point comparisons, which 17605 affects the handling of cases where the result of a comparison is 17606 unordered. By default `-mieee' is implicitly enabled. If 17607 `-ffinite-math-only' is enabled `-mno-ieee' is implicitly set, 17608 which results in faster floating-point greater-equal and 17609 less-equal comparisons. The implcit settings can be overridden by 17610 specifying either `-mieee' or `-mno-ieee'. 17611 17612 `-minline-ic_invalidate' 17613 Inline code to invalidate instruction cache entries after setting 17614 up nested function trampolines. This option has no effect if 17615 `-musermode' is in effect and the selected code generation option 17616 (e.g. `-m4') does not allow the use of the `icbi' instruction. If 17617 the selected code generation option does not allow the use of the 17618 `icbi' instruction, and `-musermode' is not in effect, the inlined 17619 code manipulates the instruction cache address array directly with 17620 an associative write. This not only requires privileged mode at 17621 run time, but it also fails if the cache line had been mapped via 17622 the TLB and has become unmapped. 17623 17624 `-misize' 17625 Dump instruction size and location in the assembly code. 17626 17627 `-mpadstruct' 17628 This option is deprecated. It pads structures to multiple of 4 17629 bytes, which is incompatible with the SH ABI. 17630 17631 `-matomic-model=MODEL' 17632 Sets the model of atomic operations and additional parameters as a 17633 comma separated list. For details on the atomic built-in 17634 functions see *note __atomic Builtins::. The following models and 17635 parameters are supported: 17636 17637 `none' 17638 Disable compiler generated atomic sequences and emit library 17639 calls for atomic operations. This is the default if the 17640 target is not `sh-*-linux*'. 17641 17642 `soft-gusa' 17643 Generate GNU/Linux compatible gUSA software atomic sequences 17644 for the atomic built-in functions. The generated atomic 17645 sequences require additional support from the 17646 interrupt/exception handling code of the system and are only 17647 suitable for SH3* and SH4* single-core systems. This option 17648 is enabled by default when the target is `sh-*-linux*' and 17649 SH3* or SH4*. When the target is SH4A, this option will also 17650 partially utilize the hardware atomic instructions `movli.l' 17651 and `movco.l' to create more efficient code, unless `strict' 17652 is specified. 17653 17654 `soft-tcb' 17655 Generate software atomic sequences that use a variable in the 17656 thread control block. This is a variation of the gUSA 17657 sequences which can also be used on SH1* and SH2* targets. 17658 The generated atomic sequences require additional support 17659 from the interrupt/exception handling code of the system and 17660 are only suitable for single-core systems. When using this 17661 model, the `gbr-offset=' parameter has to be specified as 17662 well. 17663 17664 `soft-imask' 17665 Generate software atomic sequences that temporarily disable 17666 interrupts by setting `SR.IMASK = 1111'. This model works 17667 only when the program runs in privileged mode and is only 17668 suitable for single-core systems. Additional support from 17669 the interrupt/exception handling code of the system is not 17670 required. This model is enabled by default when the target is 17671 `sh-*-linux*' and SH1* or SH2*. 17672 17673 `hard-llcs' 17674 Generate hardware atomic sequences using the `movli.l' and 17675 `movco.l' instructions only. This is only available on SH4A 17676 and is suitable for multi-core systems. Since the hardware 17677 instructions support only 32 bit atomic variables access to 8 17678 or 16 bit variables is emulated with 32 bit accesses. Code 17679 compiled with this option will also be compatible with other 17680 software atomic model interrupt/exception handling systems if 17681 executed on an SH4A system. Additional support from the 17682 interrupt/exception handling code of the system is not 17683 required for this model. 17684 17685 `gbr-offset=' 17686 This parameter specifies the offset in bytes of the variable 17687 in the thread control block structure that should be used by 17688 the generated atomic sequences when the `soft-tcb' model has 17689 been selected. For other models this parameter is ignored. 17690 The specified value must be an integer multiple of four and 17691 in the range 0-1020. 17692 17693 `strict' 17694 This parameter prevents mixed usage of multiple atomic 17695 models, even though they would be compatible, and will make 17696 the compiler generate atomic sequences of the specified model 17697 only. 17698 17699 17700 `-mtas' 17701 Generate the `tas.b' opcode for `__atomic_test_and_set'. Notice 17702 that depending on the particular hardware and software 17703 configuration this can degrade overall performance due to the 17704 operand cache line flushes that are implied by the `tas.b' 17705 instruction. On multi-core SH4A processors the `tas.b' 17706 instruction must be used with caution since it can result in data 17707 corruption for certain cache configurations. 17708 17709 `-mspace' 17710 Optimize for space instead of speed. Implied by `-Os'. 17711 17712 `-mprefergot' 17713 When generating position-independent code, emit function calls 17714 using the Global Offset Table instead of the Procedure Linkage 17715 Table. 17716 17717 `-musermode' 17718 Don't generate privileged mode only code. This option implies 17719 `-mno-inline-ic_invalidate' if the inlined code would not work in 17720 user mode. This is the default when the target is `sh-*-linux*'. 17721 17722 `-multcost=NUMBER' 17723 Set the cost to assume for a multiply insn. 17724 17725 `-mdiv=STRATEGY' 17726 Set the division strategy to be used for integer division 17727 operations. For SHmedia STRATEGY can be one of: 17728 17729 `fp' 17730 Performs the operation in floating point. This has a very 17731 high latency, but needs only a few instructions, so it might 17732 be a good choice if your code has enough easily-exploitable 17733 ILP to allow the compiler to schedule the floating-point 17734 instructions together with other instructions. Division by 17735 zero causes a floating-point exception. 17736 17737 `inv' 17738 Uses integer operations to calculate the inverse of the 17739 divisor, and then multiplies the dividend with the inverse. 17740 This strategy allows CSE and hoisting of the inverse 17741 calculation. Division by zero calculates an unspecified 17742 result, but does not trap. 17743 17744 `inv:minlat' 17745 A variant of `inv' where, if no CSE or hoisting opportunities 17746 have been found, or if the entire operation has been hoisted 17747 to the same place, the last stages of the inverse calculation 17748 are intertwined with the final multiply to reduce the overall 17749 latency, at the expense of using a few more instructions, and 17750 thus offering fewer scheduling opportunities with other code. 17751 17752 `call' 17753 Calls a library function that usually implements the 17754 `inv:minlat' strategy. This gives high code density for 17755 `m5-*media-nofpu' compilations. 17756 17757 `call2' 17758 Uses a different entry point of the same library function, 17759 where it assumes that a pointer to a lookup table has already 17760 been set up, which exposes the pointer load to CSE and code 17761 hoisting optimizations. 17762 17763 `inv:call' 17764 `inv:call2' 17765 `inv:fp' 17766 Use the `inv' algorithm for initial code generation, but if 17767 the code stays unoptimized, revert to the `call', `call2', or 17768 `fp' strategies, respectively. Note that the 17769 potentially-trapping side effect of division by zero is 17770 carried by a separate instruction, so it is possible that all 17771 the integer instructions are hoisted out, but the marker for 17772 the side effect stays where it is. A recombination to 17773 floating-point operations or a call is not possible in that 17774 case. 17775 17776 `inv20u' 17777 `inv20l' 17778 Variants of the `inv:minlat' strategy. In the case that the 17779 inverse calculation is not separated from the multiply, they 17780 speed up division where the dividend fits into 20 bits (plus 17781 sign where applicable) by inserting a test to skip a number 17782 of operations in this case; this test slows down the case of 17783 larger dividends. `inv20u' assumes the case of a such a 17784 small dividend to be unlikely, and `inv20l' assumes it to be 17785 likely. 17786 17787 17788 For targets other than SHmedia STRATEGY can be one of: 17789 17790 `call-div1' 17791 Calls a library function that uses the single-step division 17792 instruction `div1' to perform the operation. Division by 17793 zero calculates an unspecified result and does not trap. 17794 This is the default except for SH4, SH2A and SHcompact. 17795 17796 `call-fp' 17797 Calls a library function that performs the operation in 17798 double precision floating point. Division by zero causes a 17799 floating-point exception. This is the default for SHcompact 17800 with FPU. Specifying this for targets that do not have a 17801 double precision FPU will default to `call-div1'. 17802 17803 `call-table' 17804 Calls a library function that uses a lookup table for small 17805 divisors and the `div1' instruction with case distinction for 17806 larger divisors. Division by zero calculates an unspecified 17807 result and does not trap. This is the default for SH4. 17808 Specifying this for targets that do not have dynamic shift 17809 instructions will default to `call-div1'. 17810 17811 17812 When a division strategy has not been specified the default 17813 strategy will be selected based on the current target. For SH2A 17814 the default strategy is to use the `divs' and `divu' instructions 17815 instead of library function calls. 17816 17817 `-maccumulate-outgoing-args' 17818 Reserve space once for outgoing arguments in the function prologue 17819 rather than around each call. Generally beneficial for 17820 performance and size. Also needed for unwinding to avoid changing 17821 the stack frame around conditional code. 17822 17823 `-mdivsi3_libfunc=NAME' 17824 Set the name of the library function used for 32-bit signed 17825 division to NAME. This only affects the name used in the `call' 17826 and `inv:call' division strategies, and the compiler still expects 17827 the same sets of input/output/clobbered registers as if this 17828 option were not present. 17829 17830 `-mfixed-range=REGISTER-RANGE' 17831 Generate code treating the given register range as fixed registers. 17832 A fixed register is one that the register allocator can not use. 17833 This is useful when compiling kernel code. A register range is 17834 specified as two registers separated by a dash. Multiple register 17835 ranges can be specified separated by a comma. 17836 17837 `-mindexed-addressing' 17838 Enable the use of the indexed addressing mode for 17839 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 17840 implement 32-bit wrap-around semantics for the indexed addressing 17841 mode. The architecture allows the implementation of processors 17842 with 64-bit MMU, which the OS could use to get 32-bit addressing, 17843 but since no current hardware implementation supports this or any 17844 other way to make the indexed addressing mode safe to use in the 17845 32-bit ABI, the default is `-mno-indexed-addressing'. 17846 17847 `-mgettrcost=NUMBER' 17848 Set the cost assumed for the `gettr' instruction to NUMBER. The 17849 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 17850 17851 `-mpt-fixed' 17852 Assume `pt*' instructions won't trap. This generally generates 17853 better-scheduled code, but is unsafe on current hardware. The 17854 current architecture definition says that `ptabs' and `ptrel' trap 17855 when the target anded with 3 is 3. This has the unintentional 17856 effect of making it unsafe to schedule these instructions before a 17857 branch, or hoist them out of a loop. For example, 17858 `__do_global_ctors', a part of `libgcc' that runs constructors at 17859 program startup, calls functions in a list which is delimited by 17860 -1. With the `-mpt-fixed' option, the `ptabs' is done before 17861 testing against -1. That means that all the constructors run a 17862 bit more quickly, but when the loop comes to the end of the list, 17863 the program crashes because `ptabs' loads -1 into a target 17864 register. 17865 17866 Since this option is unsafe for any hardware implementing the 17867 current architecture specification, the default is 17868 `-mno-pt-fixed'. Unless specified explicitly with `-mgettrcost', 17869 `-mno-pt-fixed' also implies `-mgettrcost=100'; this deters 17870 register allocation from using target registers for storing 17871 ordinary integers. 17872 17873 `-minvalid-symbols' 17874 Assume symbols might be invalid. Ordinary function symbols 17875 generated by the compiler are always valid to load with 17876 `movi'/`shori'/`ptabs' or `movi'/`shori'/`ptrel', but with 17877 assembler and/or linker tricks it is possible to generate symbols 17878 that cause `ptabs' or `ptrel' to trap. This option is only 17879 meaningful when `-mno-pt-fixed' is in effect. It prevents 17880 cross-basic-block CSE, hoisting and most scheduling of symbol 17881 loads. The default is `-mno-invalid-symbols'. 17882 17883 `-mbranch-cost=NUM' 17884 Assume NUM to be the cost for a branch instruction. Higher numbers 17885 make the compiler try to generate more branch-free code if 17886 possible. If not specified the value is selected depending on the 17887 processor type that is being compiled for. 17888 17889 `-mzdcbranch' 17890 `-mno-zdcbranch' 17891 Assume (do not assume) that zero displacement conditional branch 17892 instructions `bt' and `bf' are fast. If `-mzdcbranch' is 17893 specified, the compiler will try to prefer zero displacement 17894 branch code sequences. This is enabled by default when generating 17895 code for SH4 and SH4A. It can be explicitly disabled by 17896 specifying `-mno-zdcbranch'. 17897 17898 `-mcbranchdi' 17899 Enable the `cbranchdi4' instruction pattern. 17900 17901 `-mcmpeqdi' 17902 Emit the `cmpeqdi_t' instruction pattern even when `-mcbranchdi' 17903 is in effect. 17904 17905 `-mfused-madd' 17906 `-mno-fused-madd' 17907 Generate code that uses (does not use) the floating-point multiply 17908 and accumulate instructions. These instructions are generated by 17909 default if hardware floating point is used. The machine-dependent 17910 `-mfused-madd' option is now mapped to the machine-independent 17911 `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to 17912 `-ffp-contract=off'. 17913 17914 `-mfsca' 17915 `-mno-fsca' 17916 Allow or disallow the compiler to emit the `fsca' instruction for 17917 sine and cosine approximations. The option `-mfsca' must be used 17918 in combination with `-funsafe-math-optimizations'. It is enabled 17919 by default when generating code for SH4A. Using `-mno-fsca' 17920 disables sine and cosine approximations even if 17921 `-funsafe-math-optimizations' is in effect. 17922 17923 `-mfsrra' 17924 `-mno-fsrra' 17925 Allow or disallow the compiler to emit the `fsrra' instruction for 17926 reciprocal square root approximations. The option `-mfsrra' must 17927 be used in combination with `-funsafe-math-optimizations' and 17928 `-ffinite-math-only'. It is enabled by default when generating 17929 code for SH4A. Using `-mno-fsrra' disables reciprocal square root 17930 approximations even if `-funsafe-math-optimizations' and 17931 `-ffinite-math-only' are in effect. 17932 17933 `-mpretend-cmove' 17934 Prefer zero-displacement conditional branches for conditional move 17935 instruction patterns. This can result in faster code on the SH4 17936 processor. 17937 17938 17939 17940 File: gcc.info, Node: Solaris 2 Options, Next: SPARC Options, Prev: SH Options, Up: Submodel Options 17941 17942 3.17.39 Solaris 2 Options 17943 ------------------------- 17944 17945 These `-m' options are supported on Solaris 2: 17946 17947 `-mimpure-text' 17948 `-mimpure-text', used in addition to `-shared', tells the compiler 17949 to not pass `-z text' to the linker when linking a shared object. 17950 Using this option, you can link position-dependent code into a 17951 shared object. 17952 17953 `-mimpure-text' suppresses the "relocations remain against 17954 allocatable but non-writable sections" linker error message. 17955 However, the necessary relocations trigger copy-on-write, and the 17956 shared object is not actually shared across processes. Instead of 17957 using `-mimpure-text', you should compile all source code with 17958 `-fpic' or `-fPIC'. 17959 17960 17961 These switches are supported in addition to the above on Solaris 2: 17962 17963 `-pthreads' 17964 Add support for multithreading using the POSIX threads library. 17965 This option sets flags for both the preprocessor and linker. This 17966 option does not affect the thread safety of object code produced 17967 by the compiler or that of libraries supplied with it. 17968 17969 `-pthread' 17970 This is a synonym for `-pthreads'. 17971 17972 17973 File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: Solaris 2 Options, Up: Submodel Options 17974 17975 3.17.40 SPARC Options 17976 --------------------- 17977 17978 These `-m' options are supported on the SPARC: 17979 17980 `-mno-app-regs' 17981 `-mapp-regs' 17982 Specify `-mapp-regs' to generate output using the global registers 17983 2 through 4, which the SPARC SVR4 ABI reserves for applications. 17984 Like the global register 1, each global register 2 through 4 is 17985 then treated as an allocable register that is clobbered by 17986 function calls. This is the default. 17987 17988 To be fully SVR4 ABI-compliant at the cost of some performance 17989 loss, specify `-mno-app-regs'. You should compile libraries and 17990 system software with this option. 17991 17992 `-mflat' 17993 `-mno-flat' 17994 With `-mflat', the compiler does not generate save/restore 17995 instructions and uses a "flat" or single register window model. 17996 This model is compatible with the regular register window model. 17997 The local registers and the input registers (0-5) are still 17998 treated as "call-saved" registers and are saved on the stack as 17999 needed. 18000 18001 With `-mno-flat' (the default), the compiler generates save/restore 18002 instructions (except for leaf functions). This is the normal 18003 operating mode. 18004 18005 `-mfpu' 18006 `-mhard-float' 18007 Generate output containing floating-point instructions. This is 18008 the default. 18009 18010 `-mno-fpu' 18011 `-msoft-float' 18012 Generate output containing library calls for floating point. 18013 *Warning:* the requisite libraries are not available for all SPARC 18014 targets. Normally the facilities of the machine's usual C 18015 compiler are used, but this cannot be done directly in 18016 cross-compilation. You must make your own arrangements to provide 18017 suitable library functions for cross-compilation. The embedded 18018 targets `sparc-*-aout' and `sparclite-*-*' do provide software 18019 floating-point support. 18020 18021 `-msoft-float' changes the calling convention in the output file; 18022 therefore, it is only useful if you compile _all_ of a program with 18023 this option. In particular, you need to compile `libgcc.a', the 18024 library that comes with GCC, with `-msoft-float' in order for this 18025 to work. 18026 18027 `-mhard-quad-float' 18028 Generate output containing quad-word (long double) floating-point 18029 instructions. 18030 18031 `-msoft-quad-float' 18032 Generate output containing library calls for quad-word (long 18033 double) floating-point instructions. The functions called are 18034 those specified in the SPARC ABI. This is the default. 18035 18036 As of this writing, there are no SPARC implementations that have 18037 hardware support for the quad-word floating-point instructions. 18038 They all invoke a trap handler for one of these instructions, and 18039 then the trap handler emulates the effect of the instruction. 18040 Because of the trap handler overhead, this is much slower than 18041 calling the ABI library routines. Thus the `-msoft-quad-float' 18042 option is the default. 18043 18044 `-mno-unaligned-doubles' 18045 `-munaligned-doubles' 18046 Assume that doubles have 8-byte alignment. This is the default. 18047 18048 With `-munaligned-doubles', GCC assumes that doubles have 8-byte 18049 alignment only if they are contained in another type, or if they 18050 have an absolute address. Otherwise, it assumes they have 4-byte 18051 alignment. Specifying this option avoids some rare compatibility 18052 problems with code generated by other compilers. It is not the 18053 default because it results in a performance loss, especially for 18054 floating-point code. 18055 18056 `-muser-mode' 18057 `-mno-user-mode' 18058 Do not generate code that can only run in supervisor mode. This 18059 is relevant only for the `casa' instruction emitted for the LEON3 18060 processor. The default is `-mno-user-mode'. 18061 18062 `-mno-faster-structs' 18063 `-mfaster-structs' 18064 With `-mfaster-structs', the compiler assumes that structures 18065 should have 8-byte alignment. This enables the use of pairs of 18066 `ldd' and `std' instructions for copies in structure assignment, 18067 in place of twice as many `ld' and `st' pairs. However, the use 18068 of this changed alignment directly violates the SPARC ABI. Thus, 18069 it's intended only for use on targets where the developer 18070 acknowledges that their resulting code is not directly in line with 18071 the rules of the ABI. 18072 18073 `-mcpu=CPU_TYPE' 18074 Set the instruction set, register set, and instruction scheduling 18075 parameters for machine type CPU_TYPE. Supported values for 18076 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc', 18077 `leon', `leon3', `sparclite', `f930', `f934', `sparclite86x', 18078 `sparclet', `tsc701', `v9', `ultrasparc', `ultrasparc3', 18079 `niagara', `niagara2', `niagara3' and `niagara4'. 18080 18081 Native Solaris and GNU/Linux toolchains also support the value 18082 `native', which selects the best architecture option for the host 18083 processor. `-mcpu=native' has no effect if GCC does not recognize 18084 the processor. 18085 18086 Default instruction scheduling parameters are used for values that 18087 select an architecture and not an implementation. These are `v7', 18088 `v8', `sparclite', `sparclet', `v9'. 18089 18090 Here is a list of each supported architecture and their supported 18091 implementations. 18092 18093 v7 18094 cypress 18095 18096 v8 18097 supersparc, hypersparc, leon, leon3 18098 18099 sparclite 18100 f930, f934, sparclite86x 18101 18102 sparclet 18103 tsc701 18104 18105 v9 18106 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4 18107 18108 By default (unless configured otherwise), GCC generates code for 18109 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 18110 the compiler additionally optimizes it for the Cypress CY7C602 18111 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 18112 also appropriate for the older SPARCStation 1, 2, IPX etc. 18113 18114 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 18115 architecture. The only difference from V7 code is that the 18116 compiler emits the integer multiply and integer divide 18117 instructions which exist in SPARC-V8 but not in SPARC-V7. With 18118 `-mcpu=supersparc', the compiler additionally optimizes it for the 18119 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 18120 series. 18121 18122 With `-mcpu=sparclite', GCC generates code for the SPARClite 18123 variant of the SPARC architecture. This adds the integer 18124 multiply, integer divide step and scan (`ffs') instructions which 18125 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 18126 compiler additionally optimizes it for the Fujitsu MB86930 chip, 18127 which is the original SPARClite, with no FPU. With `-mcpu=f934', 18128 the compiler additionally optimizes it for the Fujitsu MB86934 18129 chip, which is the more recent SPARClite with FPU. 18130 18131 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 18132 of the SPARC architecture. This adds the integer multiply, 18133 multiply/accumulate, integer divide step and scan (`ffs') 18134 instructions which exist in SPARClet but not in SPARC-V7. With 18135 `-mcpu=tsc701', the compiler additionally optimizes it for the 18136 TEMIC SPARClet chip. 18137 18138 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 18139 architecture. This adds 64-bit integer and floating-point move 18140 instructions, 3 additional floating-point condition code registers 18141 and conditional move instructions. With `-mcpu=ultrasparc', the 18142 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 18143 chips. With `-mcpu=ultrasparc3', the compiler additionally 18144 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 18145 chips. With `-mcpu=niagara', the compiler additionally optimizes 18146 it for Sun UltraSPARC T1 chips. With `-mcpu=niagara2', the 18147 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 18148 With `-mcpu=niagara3', the compiler additionally optimizes it for 18149 Sun UltraSPARC T3 chips. With `-mcpu=niagara4', the compiler 18150 additionally optimizes it for Sun UltraSPARC T4 chips. 18151 18152 `-mtune=CPU_TYPE' 18153 Set the instruction scheduling parameters for machine type 18154 CPU_TYPE, but do not set the instruction set or register set that 18155 the option `-mcpu=CPU_TYPE' does. 18156 18157 The same values for `-mcpu=CPU_TYPE' can be used for 18158 `-mtune=CPU_TYPE', but the only useful values are those that 18159 select a particular CPU implementation. Those are `cypress', 18160 `supersparc', `hypersparc', `leon', `leon3', `f930', `f934', 18161 `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', `niagara', 18162 `niagara2', `niagara3' and `niagara4'. With native Solaris and 18163 GNU/Linux toolchains, `native' can also be used. 18164 18165 `-mv8plus' 18166 `-mno-v8plus' 18167 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 18168 difference from the V8 ABI is that the global and out registers are 18169 considered 64 bits wide. This is enabled by default on Solaris in 18170 32-bit mode for all SPARC-V9 processors. 18171 18172 `-mvis' 18173 `-mno-vis' 18174 With `-mvis', GCC generates code that takes advantage of the 18175 UltraSPARC Visual Instruction Set extensions. The default is 18176 `-mno-vis'. 18177 18178 `-mvis2' 18179 `-mno-vis2' 18180 With `-mvis2', GCC generates code that takes advantage of version 18181 2.0 of the UltraSPARC Visual Instruction Set extensions. The 18182 default is `-mvis2' when targeting a cpu that supports such 18183 instructions, such as UltraSPARC-III and later. Setting `-mvis2' 18184 also sets `-mvis'. 18185 18186 `-mvis3' 18187 `-mno-vis3' 18188 With `-mvis3', GCC generates code that takes advantage of version 18189 3.0 of the UltraSPARC Visual Instruction Set extensions. The 18190 default is `-mvis3' when targeting a cpu that supports such 18191 instructions, such as niagara-3 and later. Setting `-mvis3' also 18192 sets `-mvis2' and `-mvis'. 18193 18194 `-mcbcond' 18195 `-mno-cbcond' 18196 With `-mcbcond', GCC generates code that takes advantage of 18197 compare-and-branch instructions, as defined in the Sparc 18198 Architecture 2011. The default is `-mcbcond' when targeting a cpu 18199 that supports such instructions, such as niagara-4 and later. 18200 18201 `-mpopc' 18202 `-mno-popc' 18203 With `-mpopc', GCC generates code that takes advantage of the 18204 UltraSPARC population count instruction. The default is `-mpopc' 18205 when targeting a cpu that supports such instructions, such as 18206 Niagara-2 and later. 18207 18208 `-mfmaf' 18209 `-mno-fmaf' 18210 With `-mfmaf', GCC generates code that takes advantage of the 18211 UltraSPARC Fused Multiply-Add Floating-point extensions. The 18212 default is `-mfmaf' when targeting a cpu that supports such 18213 instructions, such as Niagara-3 and later. 18214 18215 `-mfix-at697f' 18216 Enable the documented workaround for the single erratum of the 18217 Atmel AT697F processor (which corresponds to erratum #13 of the 18218 AT697E processor). 18219 18220 `-mfix-ut699' 18221 Enable the documented workarounds for the floating-point errata 18222 and the data cache nullify errata of the UT699 processor. 18223 18224 These `-m' options are supported in addition to the above on SPARC-V9 18225 processors in 64-bit environments: 18226 18227 `-m32' 18228 `-m64' 18229 Generate code for a 32-bit or 64-bit environment. The 32-bit 18230 environment sets int, long and pointer to 32 bits. The 64-bit 18231 environment sets int to 32 bits and long and pointer to 64 bits. 18232 18233 `-mcmodel=WHICH' 18234 Set the code model to one of 18235 18236 `medlow' 18237 The Medium/Low code model: 64-bit addresses, programs must be 18238 linked in the low 32 bits of memory. Programs can be 18239 statically or dynamically linked. 18240 18241 `medmid' 18242 The Medium/Middle code model: 64-bit addresses, programs must 18243 be linked in the low 44 bits of memory, the text and data 18244 segments must be less than 2GB in size and the data segment 18245 must be located within 2GB of the text segment. 18246 18247 `medany' 18248 The Medium/Anywhere code model: 64-bit addresses, programs 18249 may be linked anywhere in memory, the text and data segments 18250 must be less than 2GB in size and the data segment must be 18251 located within 2GB of the text segment. 18252 18253 `embmedany' 18254 The Medium/Anywhere code model for embedded systems: 64-bit 18255 addresses, the text and data segments must be less than 2GB in 18256 size, both starting anywhere in memory (determined at link 18257 time). The global register %g4 points to the base of the 18258 data segment. Programs are statically linked and PIC is not 18259 supported. 18260 18261 `-mmemory-model=MEM-MODEL' 18262 Set the memory model in force on the processor to one of 18263 18264 `default' 18265 The default memory model for the processor and operating 18266 system. 18267 18268 `rmo' 18269 Relaxed Memory Order 18270 18271 `pso' 18272 Partial Store Order 18273 18274 `tso' 18275 Total Store Order 18276 18277 `sc' 18278 Sequential Consistency 18279 18280 These memory models are formally defined in Appendix D of the 18281 Sparc V9 architecture manual, as set in the processor's 18282 `PSTATE.MM' field. 18283 18284 `-mstack-bias' 18285 `-mno-stack-bias' 18286 With `-mstack-bias', GCC assumes that the stack pointer, and frame 18287 pointer if present, are offset by -2047 which must be added back 18288 when making stack frame references. This is the default in 64-bit 18289 mode. Otherwise, assume no such offset is present. 18290 18291 18292 File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 18293 18294 3.17.41 SPU Options 18295 ------------------- 18296 18297 These `-m' options are supported on the SPU: 18298 18299 `-mwarn-reloc' 18300 `-merror-reloc' 18301 The loader for SPU does not handle dynamic relocations. By 18302 default, GCC gives an error when it generates code that requires a 18303 dynamic relocation. `-mno-error-reloc' disables the error, 18304 `-mwarn-reloc' generates a warning instead. 18305 18306 `-msafe-dma' 18307 `-munsafe-dma' 18308 Instructions that initiate or test completion of DMA must not be 18309 reordered with respect to loads and stores of the memory that is 18310 being accessed. With `-munsafe-dma' you must use the `volatile' 18311 keyword to protect memory accesses, but that can lead to 18312 inefficient code in places where the memory is known to not 18313 change. Rather than mark the memory as volatile, you can use 18314 `-msafe-dma' to tell the compiler to treat the DMA instructions as 18315 potentially affecting all memory. 18316 18317 `-mbranch-hints' 18318 By default, GCC generates a branch hint instruction to avoid 18319 pipeline stalls for always-taken or probably-taken branches. A 18320 hint is not generated closer than 8 instructions away from its 18321 branch. There is little reason to disable them, except for 18322 debugging purposes, or to make an object a little bit smaller. 18323 18324 `-msmall-mem' 18325 `-mlarge-mem' 18326 By default, GCC generates code assuming that addresses are never 18327 larger than 18 bits. With `-mlarge-mem' code is generated that 18328 assumes a full 32-bit address. 18329 18330 `-mstdmain' 18331 By default, GCC links against startup code that assumes the 18332 SPU-style main function interface (which has an unconventional 18333 parameter list). With `-mstdmain', GCC links your program against 18334 startup code that assumes a C99-style interface to `main', 18335 including a local copy of `argv' strings. 18336 18337 `-mfixed-range=REGISTER-RANGE' 18338 Generate code treating the given register range as fixed registers. 18339 A fixed register is one that the register allocator cannot use. 18340 This is useful when compiling kernel code. A register range is 18341 specified as two registers separated by a dash. Multiple register 18342 ranges can be specified separated by a comma. 18343 18344 `-mea32' 18345 `-mea64' 18346 Compile code assuming that pointers to the PPU address space 18347 accessed via the `__ea' named address space qualifier are either 18348 32 or 64 bits wide. The default is 32 bits. As this is an 18349 ABI-changing option, all object code in an executable must be 18350 compiled with the same setting. 18351 18352 `-maddress-space-conversion' 18353 `-mno-address-space-conversion' 18354 Allow/disallow treating the `__ea' address space as superset of 18355 the generic address space. This enables explicit type casts 18356 between `__ea' and generic pointer as well as implicit conversions 18357 of generic pointers to `__ea' pointers. The default is to allow 18358 address space pointer conversions. 18359 18360 `-mcache-size=CACHE-SIZE' 18361 This option controls the version of libgcc that the compiler links 18362 to an executable and selects a software-managed cache for 18363 accessing variables in the `__ea' address space with a particular 18364 cache size. Possible options for CACHE-SIZE are `8', `16', `32', 18365 `64' and `128'. The default cache size is 64KB. 18366 18367 `-matomic-updates' 18368 `-mno-atomic-updates' 18369 This option controls the version of libgcc that the compiler links 18370 to an executable and selects whether atomic updates to the 18371 software-managed cache of PPU-side variables are used. If you use 18372 atomic updates, changes to a PPU variable from SPU code using the 18373 `__ea' named address space qualifier do not interfere with changes 18374 to other PPU variables residing in the same cache line from PPU 18375 code. If you do not use atomic updates, such interference may 18376 occur; however, writing back cache lines is more efficient. The 18377 default behavior is to use atomic updates. 18378 18379 `-mdual-nops' 18380 `-mdual-nops=N' 18381 By default, GCC inserts nops to increase dual issue when it expects 18382 it to increase performance. N can be a value from 0 to 10. A 18383 smaller N inserts fewer nops. 10 is the default, 0 is the same as 18384 `-mno-dual-nops'. Disabled with `-Os'. 18385 18386 `-mhint-max-nops=N' 18387 Maximum number of nops to insert for a branch hint. A branch hint 18388 must be at least 8 instructions away from the branch it is 18389 affecting. GCC inserts up to N nops to enforce this, otherwise it 18390 does not generate the branch hint. 18391 18392 `-mhint-max-distance=N' 18393 The encoding of the branch hint instruction limits the hint to be 18394 within 256 instructions of the branch it is affecting. By 18395 default, GCC makes sure it is within 125. 18396 18397 `-msafe-hints' 18398 Work around a hardware bug that causes the SPU to stall 18399 indefinitely. By default, GCC inserts the `hbrp' instruction to 18400 make sure this stall won't happen. 18401 18402 18403 18404 File: gcc.info, Node: System V Options, Next: TILE-Gx Options, Prev: SPU Options, Up: Submodel Options 18405 18406 3.17.42 Options for System V 18407 ---------------------------- 18408 18409 These additional options are available on System V Release 4 for 18410 compatibility with other compilers on those systems: 18411 18412 `-G' 18413 Create a shared object. It is recommended that `-symbolic' or 18414 `-shared' be used instead. 18415 18416 `-Qy' 18417 Identify the versions of each tool used by the compiler, in a 18418 `.ident' assembler directive in the output. 18419 18420 `-Qn' 18421 Refrain from adding `.ident' directives to the output file (this is 18422 the default). 18423 18424 `-YP,DIRS' 18425 Search the directories DIRS, and no others, for libraries 18426 specified with `-l'. 18427 18428 `-Ym,DIR' 18429 Look in the directory DIR to find the M4 preprocessor. The 18430 assembler uses this option. 18431 18432 18433 File: gcc.info, Node: TILE-Gx Options, Next: TILEPro Options, Prev: System V Options, Up: Submodel Options 18434 18435 3.17.43 TILE-Gx Options 18436 ----------------------- 18437 18438 These `-m' options are supported on the TILE-Gx: 18439 18440 `-mcmodel=small' 18441 Generate code for the small model. The distance for direct calls 18442 is limited to 500M in either direction. PC-relative addresses are 18443 32 bits. Absolute addresses support the full address range. 18444 18445 `-mcmodel=large' 18446 Generate code for the large model. There is no limitation on call 18447 distance, pc-relative addresses, or absolute addresses. 18448 18449 `-mcpu=NAME' 18450 Selects the type of CPU to be targeted. Currently the only 18451 supported type is `tilegx'. 18452 18453 `-m32' 18454 `-m64' 18455 Generate code for a 32-bit or 64-bit environment. The 32-bit 18456 environment sets int, long, and pointer to 32 bits. The 64-bit 18457 environment sets int to 32 bits and long and pointer to 64 bits. 18458 18459 18460 File: gcc.info, Node: TILEPro Options, Next: V850 Options, Prev: TILE-Gx Options, Up: Submodel Options 18461 18462 3.17.44 TILEPro Options 18463 ----------------------- 18464 18465 These `-m' options are supported on the TILEPro: 18466 18467 `-mcpu=NAME' 18468 Selects the type of CPU to be targeted. Currently the only 18469 supported type is `tilepro'. 18470 18471 `-m32' 18472 Generate code for a 32-bit environment, which sets int, long, and 18473 pointer to 32 bits. This is the only supported behavior so the 18474 flag is essentially ignored. 18475 18476 18477 File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TILEPro Options, Up: Submodel Options 18478 18479 3.17.45 V850 Options 18480 -------------------- 18481 18482 These `-m' options are defined for V850 implementations: 18483 18484 `-mlong-calls' 18485 `-mno-long-calls' 18486 Treat all calls as being far away (near). If calls are assumed to 18487 be far away, the compiler always loads the function's address into 18488 a register, and calls indirect through the pointer. 18489 18490 `-mno-ep' 18491 `-mep' 18492 Do not optimize (do optimize) basic blocks that use the same index 18493 pointer 4 or more times to copy pointer into the `ep' register, and 18494 use the shorter `sld' and `sst' instructions. The `-mep' option 18495 is on by default if you optimize. 18496 18497 `-mno-prolog-function' 18498 `-mprolog-function' 18499 Do not use (do use) external functions to save and restore 18500 registers at the prologue and epilogue of a function. The 18501 external functions are slower, but use less code space if more 18502 than one function saves the same number of registers. The 18503 `-mprolog-function' option is on by default if you optimize. 18504 18505 `-mspace' 18506 Try to make the code as small as possible. At present, this just 18507 turns on the `-mep' and `-mprolog-function' options. 18508 18509 `-mtda=N' 18510 Put static or global variables whose size is N bytes or less into 18511 the tiny data area that register `ep' points to. The tiny data 18512 area can hold up to 256 bytes in total (128 bytes for byte 18513 references). 18514 18515 `-msda=N' 18516 Put static or global variables whose size is N bytes or less into 18517 the small data area that register `gp' points to. The small data 18518 area can hold up to 64 kilobytes. 18519 18520 `-mzda=N' 18521 Put static or global variables whose size is N bytes or less into 18522 the first 32 kilobytes of memory. 18523 18524 `-mv850' 18525 Specify that the target processor is the V850. 18526 18527 `-mv850e3v5' 18528 Specify that the target processor is the V850E3V5. The 18529 preprocessor constant `__v850e3v5__' is defined if this option is 18530 used. 18531 18532 `-mv850e2v4' 18533 Specify that the target processor is the V850E3V5. This is an 18534 alias for the `-mv850e3v5' option. 18535 18536 `-mv850e2v3' 18537 Specify that the target processor is the V850E2V3. The 18538 preprocessor constant `__v850e2v3__' is defined if this option is 18539 used. 18540 18541 `-mv850e2' 18542 Specify that the target processor is the V850E2. The preprocessor 18543 constant `__v850e2__' is defined if this option is used. 18544 18545 `-mv850e1' 18546 Specify that the target processor is the V850E1. The preprocessor 18547 constants `__v850e1__' and `__v850e__' are defined if this option 18548 is used. 18549 18550 `-mv850es' 18551 Specify that the target processor is the V850ES. This is an alias 18552 for the `-mv850e1' option. 18553 18554 `-mv850e' 18555 Specify that the target processor is the V850E. The preprocessor 18556 constant `__v850e__' is defined if this option is used. 18557 18558 If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2' 18559 nor `-mv850e2v3' nor `-mv850e3v5' are defined then a default 18560 target processor is chosen and the relevant `__v850*__' 18561 preprocessor constant is defined. 18562 18563 The preprocessor constants `__v850' and `__v851__' are always 18564 defined, regardless of which processor variant is the target. 18565 18566 `-mdisable-callt' 18567 `-mno-disable-callt' 18568 This option suppresses generation of the `CALLT' instruction for 18569 the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the 18570 v850 architecture. 18571 18572 This option is enabled by default when the RH850 ABI is in use 18573 (see `-mrh850-abi'), and disabled by default when the GCC ABI is 18574 in use. If `CALLT' instructions are being generated then the C 18575 preprocessor symbol `__V850_CALLT__' will be defined. 18576 18577 `-mrelax' 18578 `-mno-relax' 18579 Pass on (or do not pass on) the `-mrelax' command line option to 18580 the assembler. 18581 18582 `-mlong-jumps' 18583 `-mno-long-jumps' 18584 Disable (or re-enable) the generation of PC-relative jump 18585 instructions. 18586 18587 `-msoft-float' 18588 `-mhard-float' 18589 Disable (or re-enable) the generation of hardware floating point 18590 instructions. This option is only significant when the target 18591 architecture is `V850E2V3' or higher. If hardware floating point 18592 instructions are being generated then the C preprocessor symbol 18593 `__FPU_OK__' will be defined, otherwise the symbol `__NO_FPU__' 18594 will be defined. 18595 18596 `-mloop' 18597 Enables the use of the e3v5 LOOP instruction. The use of this 18598 instruction is not enabled by default when the e3v5 architecture is 18599 selected because its use is still experimental. 18600 18601 `-mrh850-abi' 18602 `-mghs' 18603 Enables support for the RH850 version of the V850 ABI. This is the 18604 default. With this version of the ABI the following rules apply: 18605 18606 * Integer sized structures and unions are returned via a memory 18607 pointer rather than a register. 18608 18609 * Large structures and unions (more than 8 bytes in size) are 18610 passed by value. 18611 18612 * Functions are aligned to 16-bit boundaries. 18613 18614 * The `-m8byte-align' command line option is supported. 18615 18616 * The `-mdisable-callt' command line option is enabled by 18617 default. The `-mno-disable-callt' command line option is not 18618 supported. 18619 18620 When this version of the ABI is enabled the C preprocessor symbol 18621 `__V850_RH850_ABI__' is defined. 18622 18623 `-mgcc-abi' 18624 Enables support for the old GCC version of the V850 ABI. With this 18625 version of the ABI the following rules apply: 18626 18627 * Integer sized structures and unions are returned in register 18628 `r10'. 18629 18630 * Large structures and unions (more than 8 bytes in size) are 18631 passed by reference. 18632 18633 * Functions are aligned to 32-bit boundaries, unless optimizing 18634 for size. 18635 18636 * The `-m8byte-align' command line option is not supported. 18637 18638 * The `-mdisable-callt' command line option is supported but not 18639 enabled by default. 18640 18641 When this version of the ABI is enabled the C preprocessor symbol 18642 `__V850_GCC_ABI__' is defined. 18643 18644 `-m8byte-align' 18645 `-mno-8byte-align' 18646 Enables support for `doubles' and `long long' types to be aligned 18647 on 8-byte boundaries. The default is to restrict the alignment of 18648 all objects to at most 4-bytes. When `-m8byte-align' is in effect 18649 the C preprocessor symbol `__V850_8BYTE_ALIGN__' will be defined. 18650 18651 `-mbig-switch' 18652 Generate code suitable for big switch tables. Use this option 18653 only if the assembler/linker complain about out of range branches 18654 within a switch table. 18655 18656 `-mapp-regs' 18657 This option causes r2 and r5 to be used in the code generated by 18658 the compiler. This setting is the default. 18659 18660 `-mno-app-regs' 18661 This option causes r2 and r5 to be treated as fixed registers. 18662 18663 18664 18665 File: gcc.info, Node: VAX Options, Next: VMS Options, Prev: V850 Options, Up: Submodel Options 18666 18667 3.17.46 VAX Options 18668 ------------------- 18669 18670 These `-m' options are defined for the VAX: 18671 18672 `-munix' 18673 Do not output certain jump instructions (`aobleq' and so on) that 18674 the Unix assembler for the VAX cannot handle across long ranges. 18675 18676 `-mgnu' 18677 Do output those jump instructions, on the assumption that the GNU 18678 assembler is being used. 18679 18680 `-mg' 18681 Output code for G-format floating-point numbers instead of 18682 D-format. 18683 18684 18685 File: gcc.info, Node: VMS Options, Next: VxWorks Options, Prev: VAX Options, Up: Submodel Options 18686 18687 3.17.47 VMS Options 18688 ------------------- 18689 18690 These `-m' options are defined for the VMS implementations: 18691 18692 `-mvms-return-codes' 18693 Return VMS condition codes from `main'. The default is to return 18694 POSIX-style condition (e.g. error) codes. 18695 18696 `-mdebug-main=PREFIX' 18697 Flag the first routine whose name starts with PREFIX as the main 18698 routine for the debugger. 18699 18700 `-mmalloc64' 18701 Default to 64-bit memory allocation routines. 18702 18703 `-mpointer-size=SIZE' 18704 Set the default size of pointers. Possible options for SIZE are 18705 `32' or `short' for 32 bit pointers, `64' or `long' for 64 bit 18706 pointers, and `no' for supporting only 32 bit pointers. The later 18707 option disables `pragma pointer_size'. 18708 18709 18710 File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VMS Options, Up: Submodel Options 18711 18712 3.17.48 VxWorks Options 18713 ----------------------- 18714 18715 The options in this section are defined for all VxWorks targets. 18716 Options specific to the target hardware are listed with the other 18717 options for that target. 18718 18719 `-mrtp' 18720 GCC can generate code for both VxWorks kernels and real time 18721 processes (RTPs). This option switches from the former to the 18722 latter. It also defines the preprocessor macro `__RTP__'. 18723 18724 `-non-static' 18725 Link an RTP executable against shared libraries rather than static 18726 libraries. The options `-static' and `-shared' can also be used 18727 for RTPs (*note Link Options::); `-static' is the default. 18728 18729 `-Bstatic' 18730 `-Bdynamic' 18731 These options are passed down to the linker. They are defined for 18732 compatibility with Diab. 18733 18734 `-Xbind-lazy' 18735 Enable lazy binding of function calls. This option is equivalent 18736 to `-Wl,-z,now' and is defined for compatibility with Diab. 18737 18738 `-Xbind-now' 18739 Disable lazy binding of function calls. This option is the 18740 default and is defined for compatibility with Diab. 18741 18742 18743 File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options 18744 18745 3.17.49 x86-64 Options 18746 ---------------------- 18747 18748 These are listed under *Note i386 and x86-64 Options::. 18749 18750 18751 File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 18752 18753 3.17.50 Xstormy16 Options 18754 ------------------------- 18755 18756 These options are defined for Xstormy16: 18757 18758 `-msim' 18759 Choose startup files and linker script suitable for the simulator. 18760 18761 18762 File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 18763 18764 3.17.51 Xtensa Options 18765 ---------------------- 18766 18767 These options are supported for Xtensa targets: 18768 18769 `-mconst16' 18770 `-mno-const16' 18771 Enable or disable use of `CONST16' instructions for loading 18772 constant values. The `CONST16' instruction is currently not a 18773 standard option from Tensilica. When enabled, `CONST16' 18774 instructions are always used in place of the standard `L32R' 18775 instructions. The use of `CONST16' is enabled by default only if 18776 the `L32R' instruction is not available. 18777 18778 `-mfused-madd' 18779 `-mno-fused-madd' 18780 Enable or disable use of fused multiply/add and multiply/subtract 18781 instructions in the floating-point option. This has no effect if 18782 the floating-point option is not also enabled. Disabling fused 18783 multiply/add and multiply/subtract instructions forces the 18784 compiler to use separate instructions for the multiply and 18785 add/subtract operations. This may be desirable in some cases 18786 where strict IEEE 754-compliant results are required: the fused 18787 multiply add/subtract instructions do not round the intermediate 18788 result, thereby producing results with _more_ bits of precision 18789 than specified by the IEEE standard. Disabling fused multiply 18790 add/subtract instructions also ensures that the program output is 18791 not sensitive to the compiler's ability to combine multiply and 18792 add/subtract operations. 18793 18794 `-mserialize-volatile' 18795 `-mno-serialize-volatile' 18796 When this option is enabled, GCC inserts `MEMW' instructions before 18797 `volatile' memory references to guarantee sequential consistency. 18798 The default is `-mserialize-volatile'. Use 18799 `-mno-serialize-volatile' to omit the `MEMW' instructions. 18800 18801 `-mforce-no-pic' 18802 For targets, like GNU/Linux, where all user-mode Xtensa code must 18803 be position-independent code (PIC), this option disables PIC for 18804 compiling kernel code. 18805 18806 `-mtext-section-literals' 18807 `-mno-text-section-literals' 18808 Control the treatment of literal pools. The default is 18809 `-mno-text-section-literals', which places literals in a separate 18810 section in the output file. This allows the literal pool to be 18811 placed in a data RAM/ROM, and it also allows the linker to combine 18812 literal pools from separate object files to remove redundant 18813 literals and improve code size. With `-mtext-section-literals', 18814 the literals are interspersed in the text section in order to keep 18815 them as close as possible to their references. This may be 18816 necessary for large assembly files. 18817 18818 `-mtarget-align' 18819 `-mno-target-align' 18820 When this option is enabled, GCC instructs the assembler to 18821 automatically align instructions to reduce branch penalties at the 18822 expense of some code density. The assembler attempts to widen 18823 density instructions to align branch targets and the instructions 18824 following call instructions. If there are not enough preceding 18825 safe density instructions to align a target, no widening is 18826 performed. The default is `-mtarget-align'. These options do not 18827 affect the treatment of auto-aligned instructions like `LOOP', 18828 which the assembler always aligns, either by widening density 18829 instructions or by inserting NOP instructions. 18830 18831 `-mlongcalls' 18832 `-mno-longcalls' 18833 When this option is enabled, GCC instructs the assembler to 18834 translate direct calls to indirect calls unless it can determine 18835 that the target of a direct call is in the range allowed by the 18836 call instruction. This translation typically occurs for calls to 18837 functions in other source files. Specifically, the assembler 18838 translates a direct `CALL' instruction into an `L32R' followed by 18839 a `CALLX' instruction. The default is `-mno-longcalls'. This 18840 option should be used in programs where the call target can 18841 potentially be out of range. This option is implemented in the 18842 assembler, not the compiler, so the assembly code generated by GCC 18843 still shows direct call instructions--look at the disassembled 18844 object code to see the actual instructions. Note that the 18845 assembler uses an indirect call for every cross-file call, not 18846 just those that really are out of range. 18847 18848 18849 File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 18850 18851 3.17.52 zSeries Options 18852 ----------------------- 18853 18854 These are listed under *Note S/390 and zSeries Options::. 18855 18856 18857 File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 18858 18859 3.18 Options for Code Generation Conventions 18860 ============================================ 18861 18862 These machine-independent options control the interface conventions 18863 used in code generation. 18864 18865 Most of them have both positive and negative forms; the negative form 18866 of `-ffoo' is `-fno-foo'. In the table below, only one of the forms is 18867 listed--the one that is not the default. You can figure out the other 18868 form by either removing `no-' or adding it. 18869 18870 `-fbounds-check' 18871 For front ends that support it, generate additional code to check 18872 that indices used to access arrays are within the declared range. 18873 This is currently only supported by the Java and Fortran front 18874 ends, where this option defaults to true and false respectively. 18875 18876 `-fstack-reuse=REUSE-LEVEL' 18877 This option controls stack space reuse for user declared 18878 local/auto variables and compiler generated temporaries. 18879 REUSE_LEVEL can be `all', `named_vars', or `none'. `all' enables 18880 stack reuse for all local variables and temporaries, `named_vars' 18881 enables the reuse only for user defined local variables with 18882 names, and `none' disables stack reuse completely. The default 18883 value is `all'. The option is needed when the program extends the 18884 lifetime of a scoped local variable or a compiler generated 18885 temporary beyond the end point defined by the language. When a 18886 lifetime of a variable ends, and if the variable lives in memory, 18887 the optimizing compiler has the freedom to reuse its stack space 18888 with other temporaries or scoped local variables whose live range 18889 does not overlap with it. Legacy code extending local lifetime 18890 will likely to break with the stack reuse optimization. 18891 18892 For example, 18893 18894 int *p; 18895 { 18896 int local1; 18897 18898 p = &local1; 18899 local1 = 10; 18900 .... 18901 } 18902 { 18903 int local2; 18904 local2 = 20; 18905 ... 18906 } 18907 18908 if (*p == 10) // out of scope use of local1 18909 { 18910 18911 } 18912 18913 Another example: 18914 18915 struct A 18916 { 18917 A(int k) : i(k), j(k) { } 18918 int i; 18919 int j; 18920 }; 18921 18922 A *ap; 18923 18924 void foo(const A& ar) 18925 { 18926 ap = &ar; 18927 } 18928 18929 void bar() 18930 { 18931 foo(A(10)); // temp object's lifetime ends when foo returns 18932 18933 { 18934 A a(20); 18935 .... 18936 } 18937 ap->i+= 10; // ap references out of scope temp whose space 18938 // is reused with a. What is the value of ap->i? 18939 } 18940 18941 The lifetime of a compiler generated temporary is well defined by 18942 the C++ standard. When a lifetime of a temporary ends, and if the 18943 temporary lives in memory, the optimizing compiler has the freedom 18944 to reuse its stack space with other temporaries or scoped local 18945 variables whose live range does not overlap with it. However some 18946 of the legacy code relies on the behavior of older compilers in 18947 which temporaries' stack space is not reused, the aggressive stack 18948 reuse can lead to runtime errors. This option is used to control 18949 the temporary stack reuse optimization. 18950 18951 `-ftrapv' 18952 This option generates traps for signed overflow on addition, 18953 subtraction, multiplication operations. 18954 18955 `-fwrapv' 18956 This option instructs the compiler to assume that signed arithmetic 18957 overflow of addition, subtraction and multiplication wraps around 18958 using twos-complement representation. This flag enables some 18959 optimizations and disables others. This option is enabled by 18960 default for the Java front end, as required by the Java language 18961 specification. 18962 18963 `-fexceptions' 18964 Enable exception handling. Generates extra code needed to 18965 propagate exceptions. For some targets, this implies GCC 18966 generates frame unwind information for all functions, which can 18967 produce significant data size overhead, although it does not 18968 affect execution. If you do not specify this option, GCC enables 18969 it by default for languages like C++ that normally require 18970 exception handling, and disables it for languages like C that do 18971 not normally require it. However, you may need to enable this 18972 option when compiling C code that needs to interoperate properly 18973 with exception handlers written in C++. You may also wish to 18974 disable this option if you are compiling older C++ programs that 18975 don't use exception handling. 18976 18977 `-fnon-call-exceptions' 18978 Generate code that allows trapping instructions to throw 18979 exceptions. Note that this requires platform-specific runtime 18980 support that does not exist everywhere. Moreover, it only allows 18981 _trapping_ instructions to throw exceptions, i.e. memory 18982 references or floating-point instructions. It does not allow 18983 exceptions to be thrown from arbitrary signal handlers such as 18984 `SIGALRM'. 18985 18986 `-fdelete-dead-exceptions' 18987 Consider that instructions that may throw exceptions but don't 18988 otherwise contribute to the execution of the program can be 18989 optimized away. This option is enabled by default for the Ada 18990 front end, as permitted by the Ada language specification. 18991 Optimization passes that cause dead exceptions to be removed are 18992 enabled independently at different optimization levels. 18993 18994 `-funwind-tables' 18995 Similar to `-fexceptions', except that it just generates any needed 18996 static data, but does not affect the generated code in any other 18997 way. You normally do not need to enable this option; instead, a 18998 language processor that needs this handling enables it on your 18999 behalf. 19000 19001 `-fasynchronous-unwind-tables' 19002 Generate unwind table in DWARF 2 format, if supported by target 19003 machine. The table is exact at each instruction boundary, so it 19004 can be used for stack unwinding from asynchronous events (such as 19005 debugger or garbage collector). 19006 19007 `-fpcc-struct-return' 19008 Return "short" `struct' and `union' values in memory like longer 19009 ones, rather than in registers. This convention is less 19010 efficient, but it has the advantage of allowing intercallability 19011 between GCC-compiled files and files compiled with other 19012 compilers, particularly the Portable C Compiler (pcc). 19013 19014 The precise convention for returning structures in memory depends 19015 on the target configuration macros. 19016 19017 Short structures and unions are those whose size and alignment 19018 match that of some integer type. 19019 19020 *Warning:* code compiled with the `-fpcc-struct-return' switch is 19021 not binary compatible with code compiled with the 19022 `-freg-struct-return' switch. Use it to conform to a non-default 19023 application binary interface. 19024 19025 `-freg-struct-return' 19026 Return `struct' and `union' values in registers when possible. 19027 This is more efficient for small structures than 19028 `-fpcc-struct-return'. 19029 19030 If you specify neither `-fpcc-struct-return' nor 19031 `-freg-struct-return', GCC defaults to whichever convention is 19032 standard for the target. If there is no standard convention, GCC 19033 defaults to `-fpcc-struct-return', except on targets where GCC is 19034 the principal compiler. In those cases, we can choose the 19035 standard, and we chose the more efficient register return 19036 alternative. 19037 19038 *Warning:* code compiled with the `-freg-struct-return' switch is 19039 not binary compatible with code compiled with the 19040 `-fpcc-struct-return' switch. Use it to conform to a non-default 19041 application binary interface. 19042 19043 `-fshort-enums' 19044 Allocate to an `enum' type only as many bytes as it needs for the 19045 declared range of possible values. Specifically, the `enum' type 19046 is equivalent to the smallest integer type that has enough room. 19047 19048 *Warning:* the `-fshort-enums' switch causes GCC to generate code 19049 that is not binary compatible with code generated without that 19050 switch. Use it to conform to a non-default application binary 19051 interface. 19052 19053 `-fshort-double' 19054 Use the same size for `double' as for `float'. 19055 19056 *Warning:* the `-fshort-double' switch causes GCC to generate code 19057 that is not binary compatible with code generated without that 19058 switch. Use it to conform to a non-default application binary 19059 interface. 19060 19061 `-fshort-wchar' 19062 Override the underlying type for `wchar_t' to be `short unsigned 19063 int' instead of the default for the target. This option is useful 19064 for building programs to run under WINE. 19065 19066 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 19067 that is not binary compatible with code generated without that 19068 switch. Use it to conform to a non-default application binary 19069 interface. 19070 19071 `-fno-common' 19072 In C code, controls the placement of uninitialized global 19073 variables. Unix C compilers have traditionally permitted multiple 19074 definitions of such variables in different compilation units by 19075 placing the variables in a common block. This is the behavior 19076 specified by `-fcommon', and is the default for GCC on most 19077 targets. On the other hand, this behavior is not required by ISO 19078 C, and on some targets may carry a speed or code size penalty on 19079 variable references. The `-fno-common' option specifies that the 19080 compiler should place uninitialized global variables in the data 19081 section of the object file, rather than generating them as common 19082 blocks. This has the effect that if the same variable is declared 19083 (without `extern') in two different compilations, you get a 19084 multiple-definition error when you link them. In this case, you 19085 must compile with `-fcommon' instead. Compiling with 19086 `-fno-common' is useful on targets for which it provides better 19087 performance, or if you wish to verify that the program will work 19088 on other systems that always treat uninitialized variable 19089 declarations this way. 19090 19091 `-fno-ident' 19092 Ignore the `#ident' directive. 19093 19094 `-finhibit-size-directive' 19095 Don't output a `.size' assembler directive, or anything else that 19096 would cause trouble if the function is split in the middle, and the 19097 two halves are placed at locations far apart in memory. This 19098 option is used when compiling `crtstuff.c'; you should not need to 19099 use it for anything else. 19100 19101 `-fverbose-asm' 19102 Put extra commentary information in the generated assembly code to 19103 make it more readable. This option is generally only of use to 19104 those who actually need to read the generated assembly code 19105 (perhaps while debugging the compiler itself). 19106 19107 `-fno-verbose-asm', the default, causes the extra information to 19108 be omitted and is useful when comparing two assembler files. 19109 19110 `-frecord-gcc-switches' 19111 This switch causes the command line used to invoke the compiler to 19112 be recorded into the object file that is being created. This 19113 switch is only implemented on some targets and the exact format of 19114 the recording is target and binary file format dependent, but it 19115 usually takes the form of a section containing ASCII text. This 19116 switch is related to the `-fverbose-asm' switch, but that switch 19117 only records information in the assembler output file as comments, 19118 so it never reaches the object file. See also 19119 `-grecord-gcc-switches' for another way of storing compiler 19120 options into the object file. 19121 19122 `-fpic' 19123 Generate position-independent code (PIC) suitable for use in a 19124 shared library, if supported for the target machine. Such code 19125 accesses all constant addresses through a global offset table 19126 (GOT). The dynamic loader resolves the GOT entries when the 19127 program starts (the dynamic loader is not part of GCC; it is part 19128 of the operating system). If the GOT size for the linked 19129 executable exceeds a machine-specific maximum size, you get an 19130 error message from the linker indicating that `-fpic' does not 19131 work; in that case, recompile with `-fPIC' instead. (These 19132 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 19133 386 has no such limit.) 19134 19135 Position-independent code requires special support, and therefore 19136 works only on certain machines. For the 386, GCC supports PIC for 19137 System V but not for the Sun 386i. Code generated for the IBM 19138 RS/6000 is always position-independent. 19139 19140 When this flag is set, the macros `__pic__' and `__PIC__' are 19141 defined to 1. 19142 19143 `-fPIC' 19144 If supported for the target machine, emit position-independent 19145 code, suitable for dynamic linking and avoiding any limit on the 19146 size of the global offset table. This option makes a difference 19147 on the m68k, PowerPC and SPARC. 19148 19149 Position-independent code requires special support, and therefore 19150 works only on certain machines. 19151 19152 When this flag is set, the macros `__pic__' and `__PIC__' are 19153 defined to 2. 19154 19155 `-fpie' 19156 `-fPIE' 19157 These options are similar to `-fpic' and `-fPIC', but generated 19158 position independent code can be only linked into executables. 19159 Usually these options are used when `-pie' GCC option is used 19160 during linking. 19161 19162 `-fpie' and `-fPIE' both define the macros `__pie__' and 19163 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for 19164 `-fPIE'. 19165 19166 `-fno-jump-tables' 19167 Do not use jump tables for switch statements even where it would be 19168 more efficient than other code generation strategies. This option 19169 is of use in conjunction with `-fpic' or `-fPIC' for building code 19170 that forms part of a dynamic linker and cannot reference the 19171 address of a jump table. On some targets, jump tables do not 19172 require a GOT and this option is not needed. 19173 19174 `-ffixed-REG' 19175 Treat the register named REG as a fixed register; generated code 19176 should never refer to it (except perhaps as a stack pointer, frame 19177 pointer or in some other fixed role). 19178 19179 REG must be the name of a register. The register names accepted 19180 are machine-specific and are defined in the `REGISTER_NAMES' macro 19181 in the machine description macro file. 19182 19183 This flag does not have a negative form, because it specifies a 19184 three-way choice. 19185 19186 `-fcall-used-REG' 19187 Treat the register named REG as an allocable register that is 19188 clobbered by function calls. It may be allocated for temporaries 19189 or variables that do not live across a call. Functions compiled 19190 this way do not save and restore the register REG. 19191 19192 It is an error to use this flag with the frame pointer or stack 19193 pointer. Use of this flag for other registers that have fixed 19194 pervasive roles in the machine's execution model produces 19195 disastrous results. 19196 19197 This flag does not have a negative form, because it specifies a 19198 three-way choice. 19199 19200 `-fcall-saved-REG' 19201 Treat the register named REG as an allocable register saved by 19202 functions. It may be allocated even for temporaries or variables 19203 that live across a call. Functions compiled this way save and 19204 restore the register REG if they use it. 19205 19206 It is an error to use this flag with the frame pointer or stack 19207 pointer. Use of this flag for other registers that have fixed 19208 pervasive roles in the machine's execution model produces 19209 disastrous results. 19210 19211 A different sort of disaster results from the use of this flag for 19212 a register in which function values may be returned. 19213 19214 This flag does not have a negative form, because it specifies a 19215 three-way choice. 19216 19217 `-fpack-struct[=N]' 19218 Without a value specified, pack all structure members together 19219 without holes. When a value is specified (which must be a small 19220 power of two), pack structure members according to this value, 19221 representing the maximum alignment (that is, objects with default 19222 alignment requirements larger than this are output potentially 19223 unaligned at the next fitting location. 19224 19225 *Warning:* the `-fpack-struct' switch causes GCC to generate code 19226 that is not binary compatible with code generated without that 19227 switch. Additionally, it makes the code suboptimal. Use it to 19228 conform to a non-default application binary interface. 19229 19230 `-finstrument-functions' 19231 Generate instrumentation calls for entry and exit to functions. 19232 Just after function entry and just before function exit, the 19233 following profiling functions are called with the address of the 19234 current function and its call site. (On some platforms, 19235 `__builtin_return_address' does not work beyond the current 19236 function, so the call site information may not be available to the 19237 profiling functions otherwise.) 19238 19239 void __cyg_profile_func_enter (void *this_fn, 19240 void *call_site); 19241 void __cyg_profile_func_exit (void *this_fn, 19242 void *call_site); 19243 19244 The first argument is the address of the start of the current 19245 function, which may be looked up exactly in the symbol table. 19246 19247 This instrumentation is also done for functions expanded inline in 19248 other functions. The profiling calls indicate where, 19249 conceptually, the inline function is entered and exited. This 19250 means that addressable versions of such functions must be 19251 available. If all your uses of a function are expanded inline, 19252 this may mean an additional expansion of code size. If you use 19253 `extern inline' in your C code, an addressable version of such 19254 functions must be provided. (This is normally the case anyway, 19255 but if you get lucky and the optimizer always expands the 19256 functions inline, you might have gotten away without providing 19257 static copies.) 19258 19259 A function may be given the attribute `no_instrument_function', in 19260 which case this instrumentation is not done. This can be used, for 19261 example, for the profiling functions listed above, high-priority 19262 interrupt routines, and any functions from which the profiling 19263 functions cannot safely be called (perhaps signal handlers, if the 19264 profiling routines generate output or allocate memory). 19265 19266 `-finstrument-functions-exclude-file-list=FILE,FILE,...' 19267 Set the list of functions that are excluded from instrumentation 19268 (see the description of `-finstrument-functions'). If the file 19269 that contains a function definition matches with one of FILE, then 19270 that function is not instrumented. The match is done on 19271 substrings: if the FILE parameter is a substring of the file name, 19272 it is considered to be a match. 19273 19274 For example: 19275 19276 -finstrument-functions-exclude-file-list=/bits/stl,include/sys 19277 19278 excludes any inline function defined in files whose pathnames 19279 contain `/bits/stl' or `include/sys'. 19280 19281 If, for some reason, you want to include letter `','' in one of 19282 SYM, write `'\,''. For example, 19283 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 19284 single quote surrounding the option). 19285 19286 `-finstrument-functions-exclude-function-list=SYM,SYM,...' 19287 This is similar to `-finstrument-functions-exclude-file-list', but 19288 this option sets the list of function names to be excluded from 19289 instrumentation. The function name to be matched is its 19290 user-visible name, such as `vector<int> blah(const vector<int> 19291 &)', not the internal mangled name (e.g., 19292 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 19293 the SYM parameter is a substring of the function name, it is 19294 considered to be a match. For C99 and C++ extended identifiers, 19295 the function name must be given in UTF-8, not using universal 19296 character names. 19297 19298 `-fstack-check' 19299 Generate code to verify that you do not go beyond the boundary of 19300 the stack. You should specify this flag if you are running in an 19301 environment with multiple threads, but you only rarely need to 19302 specify it in a single-threaded environment since stack overflow 19303 is automatically detected on nearly all systems if there is only 19304 one stack. 19305 19306 Note that this switch does not actually cause checking to be done; 19307 the operating system or the language runtime must do that. The 19308 switch causes generation of code to ensure that they see the stack 19309 being extended. 19310 19311 You can additionally specify a string parameter: `no' means no 19312 checking, `generic' means force the use of old-style checking, 19313 `specific' means use the best checking method and is equivalent to 19314 bare `-fstack-check'. 19315 19316 Old-style checking is a generic mechanism that requires no specific 19317 target support in the compiler but comes with the following 19318 drawbacks: 19319 19320 1. Modified allocation strategy for large objects: they are 19321 always allocated dynamically if their size exceeds a fixed 19322 threshold. 19323 19324 2. Fixed limit on the size of the static frame of functions: 19325 when it is topped by a particular function, stack checking is 19326 not reliable and a warning is issued by the compiler. 19327 19328 3. Inefficiency: because of both the modified allocation 19329 strategy and the generic implementation, code performance is 19330 hampered. 19331 19332 Note that old-style stack checking is also the fallback method for 19333 `specific' if no target support has been added in the compiler. 19334 19335 `-fstack-limit-register=REG' 19336 `-fstack-limit-symbol=SYM' 19337 `-fno-stack-limit' 19338 Generate code to ensure that the stack does not grow beyond a 19339 certain value, either the value of a register or the address of a 19340 symbol. If a larger stack is required, a signal is raised at run 19341 time. For most targets, the signal is raised before the stack 19342 overruns the boundary, so it is possible to catch the signal 19343 without taking special precautions. 19344 19345 For instance, if the stack starts at absolute address `0x80000000' 19346 and grows downwards, you can use the flags 19347 `-fstack-limit-symbol=__stack_limit' and 19348 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 19349 of 128KB. Note that this may only work with the GNU linker. 19350 19351 `-fsplit-stack' 19352 Generate code to automatically split the stack before it overflows. 19353 The resulting program has a discontiguous stack which can only 19354 overflow if the program is unable to allocate any more memory. 19355 This is most useful when running threaded programs, as it is no 19356 longer necessary to calculate a good stack size to use for each 19357 thread. This is currently only implemented for the i386 and 19358 x86_64 back ends running GNU/Linux. 19359 19360 When code compiled with `-fsplit-stack' calls code compiled 19361 without `-fsplit-stack', there may not be much stack space 19362 available for the latter code to run. If compiling all code, 19363 including library code, with `-fsplit-stack' is not an option, 19364 then the linker can fix up these calls so that the code compiled 19365 without `-fsplit-stack' always has a large stack. Support for 19366 this is implemented in the gold linker in GNU binutils release 2.21 19367 and later. 19368 19369 `-fleading-underscore' 19370 This option and its counterpart, `-fno-leading-underscore', 19371 forcibly change the way C symbols are represented in the object 19372 file. One use is to help link with legacy assembly code. 19373 19374 *Warning:* the `-fleading-underscore' switch causes GCC to 19375 generate code that is not binary compatible with code generated 19376 without that switch. Use it to conform to a non-default 19377 application binary interface. Not all targets provide complete 19378 support for this switch. 19379 19380 `-ftls-model=MODEL' 19381 Alter the thread-local storage model to be used (*note 19382 Thread-Local::). The MODEL argument should be one of 19383 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 19384 19385 The default without `-fpic' is `initial-exec'; with `-fpic' the 19386 default is `global-dynamic'. 19387 19388 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 19389 Set the default ELF image symbol visibility to the specified 19390 option--all symbols are marked with this unless overridden within 19391 the code. Using this feature can very substantially improve 19392 linking and load times of shared object libraries, produce more 19393 optimized code, provide near-perfect API export and prevent symbol 19394 clashes. It is *strongly* recommended that you use this in any 19395 shared objects you distribute. 19396 19397 Despite the nomenclature, `default' always means public; i.e., 19398 available to be linked against from outside the shared object. 19399 `protected' and `internal' are pretty useless in real-world usage 19400 so the only other commonly used option is `hidden'. The default 19401 if `-fvisibility' isn't specified is `default', i.e., make every 19402 symbol public--this causes the same behavior as previous versions 19403 of GCC. 19404 19405 A good explanation of the benefits offered by ensuring ELF symbols 19406 have the correct visibility is given by "How To Write Shared 19407 Libraries" by Ulrich Drepper (which can be found at 19408 `http://people.redhat.com/~drepper/')--however a superior solution 19409 made possible by this option to marking things hidden when the 19410 default is public is to make the default hidden and mark things 19411 public. This is the norm with DLLs on Windows and with 19412 `-fvisibility=hidden' and `__attribute__ 19413 ((visibility("default")))' instead of `__declspec(dllexport)' you 19414 get almost identical semantics with identical syntax. This is a 19415 great boon to those working with cross-platform projects. 19416 19417 For those adding visibility support to existing code, you may find 19418 `#pragma GCC visibility' of use. This works by you enclosing the 19419 declarations you wish to set visibility for with (for example) 19420 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 19421 pop'. Bear in mind that symbol visibility should be viewed *as 19422 part of the API interface contract* and thus all new code should 19423 always specify visibility when it is not the default; i.e., 19424 declarations only for use within the local DSO should *always* be 19425 marked explicitly as hidden as so to avoid PLT indirection 19426 overheads--making this abundantly clear also aids readability and 19427 self-documentation of the code. Note that due to ISO C++ 19428 specification requirements, `operator new' and `operator delete' 19429 must always be of default visibility. 19430 19431 Be aware that headers from outside your project, in particular 19432 system headers and headers from any other library you use, may not 19433 be expecting to be compiled with visibility other than the 19434 default. You may need to explicitly say `#pragma GCC visibility 19435 push(default)' before including any such headers. 19436 19437 `extern' declarations are not affected by `-fvisibility', so a lot 19438 of code can be recompiled with `-fvisibility=hidden' with no 19439 modifications. However, this means that calls to `extern' 19440 functions with no explicit visibility use the PLT, so it is more 19441 effective to use `__attribute ((visibility))' and/or `#pragma GCC 19442 visibility' to tell the compiler which `extern' declarations 19443 should be treated as hidden. 19444 19445 Note that `-fvisibility' does affect C++ vague linkage entities. 19446 This means that, for instance, an exception class that is be 19447 thrown between DSOs must be explicitly marked with default 19448 visibility so that the `type_info' nodes are unified between the 19449 DSOs. 19450 19451 An overview of these techniques, their benefits and how to use them 19452 is at `http://gcc.gnu.org/wiki/Visibility'. 19453 19454 `-fstrict-volatile-bitfields' 19455 This option should be used if accesses to volatile bit-fields (or 19456 other structure fields, although the compiler usually honors those 19457 types anyway) should use a single access of the width of the 19458 field's type, aligned to a natural alignment if possible. For 19459 example, targets with memory-mapped peripheral registers might 19460 require all such accesses to be 16 bits wide; with this flag you 19461 can declare all peripheral bit-fields as `unsigned short' 19462 (assuming short is 16 bits on these targets) to force GCC to use 19463 16-bit accesses instead of, perhaps, a more efficient 32-bit 19464 access. 19465 19466 If this option is disabled, the compiler uses the most efficient 19467 instruction. In the previous example, that might be a 32-bit load 19468 instruction, even though that accesses bytes that do not contain 19469 any portion of the bit-field, or memory-mapped registers unrelated 19470 to the one being updated. 19471 19472 If the target requires strict alignment, and honoring the field 19473 type would require violating this alignment, a warning is issued. 19474 If the field has `packed' attribute, the access is done without 19475 honoring the field type. If the field doesn't have `packed' 19476 attribute, the access is done honoring the field type. In both 19477 cases, GCC assumes that the user knows something about the target 19478 hardware that it is unaware of. 19479 19480 The default value of this option is determined by the application 19481 binary interface for the target processor. 19482 19483 `-fsync-libcalls' 19484 This option controls whether any out-of-line instance of the 19485 `__sync' family of functions may be used to implement the C++11 19486 `__atomic' family of functions. 19487 19488 The default value of this option is enabled, thus the only useful 19489 form of the option is `-fno-sync-libcalls'. This option is used in 19490 the implementation of the `libatomic' runtime library. 19491 19492 19493 19494 File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 19495 19496 3.19 Environment Variables Affecting GCC 19497 ======================================== 19498 19499 This section describes several environment variables that affect how GCC 19500 operates. Some of them work by specifying directories or prefixes to 19501 use when searching for various kinds of files. Some are used to 19502 specify other aspects of the compilation environment. 19503 19504 Note that you can also specify places to search using options such as 19505 `-B', `-I' and `-L' (*note Directory Options::). These take precedence 19506 over places specified using environment variables, which in turn take 19507 precedence over those specified by the configuration of GCC. *Note 19508 Controlling the Compilation Driver `gcc': (gccint)Driver. 19509 19510 `LANG' 19511 `LC_CTYPE' 19512 `LC_MESSAGES' 19513 `LC_ALL' 19514 These environment variables control the way that GCC uses 19515 localization information which allows GCC to work with different 19516 national conventions. GCC inspects the locale categories 19517 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 19518 These locale categories can be set to any value supported by your 19519 installation. A typical value is `en_GB.UTF-8' for English in the 19520 United Kingdom encoded in UTF-8. 19521 19522 The `LC_CTYPE' environment variable specifies character 19523 classification. GCC uses it to determine the character boundaries 19524 in a string; this is needed for some multibyte encodings that 19525 contain quote and escape characters that are otherwise interpreted 19526 as a string end or escape. 19527 19528 The `LC_MESSAGES' environment variable specifies the language to 19529 use in diagnostic messages. 19530 19531 If the `LC_ALL' environment variable is set, it overrides the value 19532 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 19533 `LC_MESSAGES' default to the value of the `LANG' environment 19534 variable. If none of these variables are set, GCC defaults to 19535 traditional C English behavior. 19536 19537 `TMPDIR' 19538 If `TMPDIR' is set, it specifies the directory to use for temporary 19539 files. GCC uses temporary files to hold the output of one stage of 19540 compilation which is to be used as input to the next stage: for 19541 example, the output of the preprocessor, which is the input to the 19542 compiler proper. 19543 19544 `GCC_COMPARE_DEBUG' 19545 Setting `GCC_COMPARE_DEBUG' is nearly equivalent to passing 19546 `-fcompare-debug' to the compiler driver. See the documentation 19547 of this option for more details. 19548 19549 `GCC_EXEC_PREFIX' 19550 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 19551 names of the subprograms executed by the compiler. No slash is 19552 added when this prefix is combined with the name of a subprogram, 19553 but you can specify a prefix that ends with a slash if you wish. 19554 19555 If `GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an 19556 appropriate prefix to use based on the pathname it is invoked with. 19557 19558 If GCC cannot find the subprogram using the specified prefix, it 19559 tries looking in the usual places for the subprogram. 19560 19561 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 19562 PREFIX is the prefix to the installed compiler. In many cases 19563 PREFIX is the value of `prefix' when you ran the `configure' 19564 script. 19565 19566 Other prefixes specified with `-B' take precedence over this 19567 prefix. 19568 19569 This prefix is also used for finding files such as `crt0.o' that 19570 are used for linking. 19571 19572 In addition, the prefix is used in an unusual way in finding the 19573 directories to search for header files. For each of the standard 19574 directories whose name normally begins with `/usr/local/lib/gcc' 19575 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 19576 replacing that beginning with the specified prefix to produce an 19577 alternate directory name. Thus, with `-Bfoo/', GCC searches 19578 `foo/bar' just before it searches the standard directory 19579 `/usr/local/lib/bar'. If a standard directory begins with the 19580 configured PREFIX then the value of PREFIX is replaced by 19581 `GCC_EXEC_PREFIX' when looking for header files. 19582 19583 `COMPILER_PATH' 19584 The value of `COMPILER_PATH' is a colon-separated list of 19585 directories, much like `PATH'. GCC tries the directories thus 19586 specified when searching for subprograms, if it can't find the 19587 subprograms using `GCC_EXEC_PREFIX'. 19588 19589 `LIBRARY_PATH' 19590 The value of `LIBRARY_PATH' is a colon-separated list of 19591 directories, much like `PATH'. When configured as a native 19592 compiler, GCC tries the directories thus specified when searching 19593 for special linker files, if it can't find them using 19594 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 19595 when searching for ordinary libraries for the `-l' option (but 19596 directories specified with `-L' come first). 19597 19598 `LANG' 19599 This variable is used to pass locale information to the compiler. 19600 One way in which this information is used is to determine the 19601 character set to be used when character literals, string literals 19602 and comments are parsed in C and C++. When the compiler is 19603 configured to allow multibyte characters, the following values for 19604 `LANG' are recognized: 19605 19606 `C-JIS' 19607 Recognize JIS characters. 19608 19609 `C-SJIS' 19610 Recognize SJIS characters. 19611 19612 `C-EUCJP' 19613 Recognize EUCJP characters. 19614 19615 If `LANG' is not defined, or if it has some other value, then the 19616 compiler uses `mblen' and `mbtowc' as defined by the default 19617 locale to recognize and translate multibyte characters. 19618 19619 Some additional environment variables affect the behavior of the 19620 preprocessor. 19621 19622 `CPATH' 19623 `C_INCLUDE_PATH' 19624 `CPLUS_INCLUDE_PATH' 19625 `OBJC_INCLUDE_PATH' 19626 Each variable's value is a list of directories separated by a 19627 special character, much like `PATH', in which to look for header 19628 files. The special character, `PATH_SEPARATOR', is 19629 target-dependent and determined at GCC build time. For Microsoft 19630 Windows-based targets it is a semicolon, and for almost all other 19631 targets it is a colon. 19632 19633 `CPATH' specifies a list of directories to be searched as if 19634 specified with `-I', but after any paths given with `-I' options 19635 on the command line. This environment variable is used regardless 19636 of which language is being preprocessed. 19637 19638 The remaining environment variables apply only when preprocessing 19639 the particular language indicated. Each specifies a list of 19640 directories to be searched as if specified with `-isystem', but 19641 after any paths given with `-isystem' options on the command line. 19642 19643 In all these variables, an empty element instructs the compiler to 19644 search its current working directory. Empty elements can appear 19645 at the beginning or end of a path. For instance, if the value of 19646 `CPATH' is `:/special/include', that has the same effect as 19647 `-I. -I/special/include'. 19648 19649 `DEPENDENCIES_OUTPUT' 19650 If this variable is set, its value specifies how to output 19651 dependencies for Make based on the non-system header files 19652 processed by the compiler. System header files are ignored in the 19653 dependency output. 19654 19655 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 19656 which case the Make rules are written to that file, guessing the 19657 target name from the source file name. Or the value can have the 19658 form `FILE TARGET', in which case the rules are written to file 19659 FILE using TARGET as the target name. 19660 19661 In other words, this environment variable is equivalent to 19662 combining the options `-MM' and `-MF' (*note Preprocessor 19663 Options::), with an optional `-MT' switch too. 19664 19665 `SUNPRO_DEPENDENCIES' 19666 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 19667 except that system header files are not ignored, so it implies 19668 `-M' rather than `-MM'. However, the dependence on the main input 19669 file is omitted. *Note Preprocessor Options::. 19670 19671 19672 File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC 19673 19674 3.20 Using Precompiled Headers 19675 ============================== 19676 19677 Often large projects have many header files that are included in every 19678 source file. The time the compiler takes to process these header files 19679 over and over again can account for nearly all of the time required to 19680 build the project. To make builds faster, GCC allows you to 19681 "precompile" a header file. 19682 19683 To create a precompiled header file, simply compile it as you would any 19684 other file, if necessary using the `-x' option to make the driver treat 19685 it as a C or C++ header file. You may want to use a tool like `make' 19686 to keep the precompiled header up-to-date when the headers it contains 19687 change. 19688 19689 A precompiled header file is searched for when `#include' is seen in 19690 the compilation. As it searches for the included file (*note Search 19691 Path: (cpp)Search Path.) the compiler looks for a precompiled header in 19692 each directory just before it looks for the include file in that 19693 directory. The name searched for is the name specified in the 19694 `#include' with `.gch' appended. If the precompiled header file can't 19695 be used, it is ignored. 19696 19697 For instance, if you have `#include "all.h"', and you have `all.h.gch' 19698 in the same directory as `all.h', then the precompiled header file is 19699 used if possible, and the original header is used otherwise. 19700 19701 Alternatively, you might decide to put the precompiled header file in a 19702 directory and use `-I' to ensure that directory is searched before (or 19703 instead of) the directory containing the original header. Then, if you 19704 want to check that the precompiled header file is always used, you can 19705 put a file of the same name as the original header in this directory 19706 containing an `#error' command. 19707 19708 This also works with `-include'. So yet another way to use 19709 precompiled headers, good for projects not designed with precompiled 19710 header files in mind, is to simply take most of the header files used by 19711 a project, include them from another header file, precompile that header 19712 file, and `-include' the precompiled header. If the header files have 19713 guards against multiple inclusion, they are skipped because they've 19714 already been included (in the precompiled header). 19715 19716 If you need to precompile the same header file for different 19717 languages, targets, or compiler options, you can instead make a 19718 _directory_ named like `all.h.gch', and put each precompiled header in 19719 the directory, perhaps using `-o'. It doesn't matter what you call the 19720 files in the directory; every precompiled header in the directory is 19721 considered. The first precompiled header encountered in the directory 19722 that is valid for this compilation is used; they're searched in no 19723 particular order. 19724 19725 There are many other possibilities, limited only by your imagination, 19726 good sense, and the constraints of your build system. 19727 19728 A precompiled header file can be used only when these conditions apply: 19729 19730 * Only one precompiled header can be used in a particular 19731 compilation. 19732 19733 * A precompiled header can't be used once the first C token is seen. 19734 You can have preprocessor directives before a precompiled header; 19735 you cannot include a precompiled header from inside another header. 19736 19737 * The precompiled header file must be produced for the same language 19738 as the current compilation. You can't use a C precompiled header 19739 for a C++ compilation. 19740 19741 * The precompiled header file must have been produced by the same 19742 compiler binary as the current compilation is using. 19743 19744 * Any macros defined before the precompiled header is included must 19745 either be defined in the same way as when the precompiled header 19746 was generated, or must not affect the precompiled header, which 19747 usually means that they don't appear in the precompiled header at 19748 all. 19749 19750 The `-D' option is one way to define a macro before a precompiled 19751 header is included; using a `#define' can also do it. There are 19752 also some options that define macros implicitly, like `-O' and 19753 `-Wdeprecated'; the same rule applies to macros defined this way. 19754 19755 * If debugging information is output when using the precompiled 19756 header, using `-g' or similar, the same kind of debugging 19757 information must have been output when building the precompiled 19758 header. However, a precompiled header built using `-g' can be 19759 used in a compilation when no debugging information is being 19760 output. 19761 19762 * The same `-m' options must generally be used when building and 19763 using the precompiled header. *Note Submodel Options::, for any 19764 cases where this rule is relaxed. 19765 19766 * Each of the following options must be the same when building and 19767 using the precompiled header: 19768 19769 -fexceptions 19770 19771 * Some other command-line options starting with `-f', `-p', or `-O' 19772 must be defined in the same way as when the precompiled header was 19773 generated. At present, it's not clear which options are safe to 19774 change and which are not; the safest choice is to use exactly the 19775 same options when generating and using the precompiled header. 19776 The following are known to be safe: 19777 19778 -fmessage-length= -fpreprocessed -fsched-interblock 19779 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 19780 -fsched-verbose=NUMBER -fschedule-insns -fvisibility= 19781 -pedantic-errors 19782 19783 19784 For all of these except the last, the compiler automatically ignores 19785 the precompiled header if the conditions aren't met. If you find an 19786 option combination that doesn't work and doesn't cause the precompiled 19787 header to be ignored, please consider filing a bug report, see *note 19788 Bugs::. 19789 19790 If you do use differing options when generating and using the 19791 precompiled header, the actual behavior is a mixture of the behavior 19792 for the options. For instance, if you use `-g' to generate the 19793 precompiled header but not when using it, you may or may not get 19794 debugging information for routines in the precompiled header. 19795 19796 19797 File: gcc.info, Node: C Implementation, Next: C++ Implementation, Prev: Invoking GCC, Up: Top 19798 19799 4 C Implementation-defined behavior 19800 *********************************** 19801 19802 A conforming implementation of ISO C is required to document its choice 19803 of behavior in each of the areas that are designated "implementation 19804 defined". The following lists all such areas, along with the section 19805 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 19806 Some areas are only implementation-defined in one version of the 19807 standard. 19808 19809 Some choices depend on the externally determined ABI for the platform 19810 (including standard character encodings) which GCC follows; these are 19811 listed as "determined by ABI" below. *Note Binary Compatibility: 19812 Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 19813 are documented in the preprocessor manual. *Note 19814 Implementation-defined behavior: (cpp)Implementation-defined behavior. 19815 Some choices are made by the library and operating system (or other 19816 environment when compiling for a freestanding environment); refer to 19817 their documentation for details. 19818 19819 * Menu: 19820 19821 * Translation implementation:: 19822 * Environment implementation:: 19823 * Identifiers implementation:: 19824 * Characters implementation:: 19825 * Integers implementation:: 19826 * Floating point implementation:: 19827 * Arrays and pointers implementation:: 19828 * Hints implementation:: 19829 * Structures unions enumerations and bit-fields implementation:: 19830 * Qualifiers implementation:: 19831 * Declarators implementation:: 19832 * Statements implementation:: 19833 * Preprocessing directives implementation:: 19834 * Library functions implementation:: 19835 * Architecture implementation:: 19836 * Locale-specific behavior implementation:: 19837 19838 19839 File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 19840 19841 4.1 Translation 19842 =============== 19843 19844 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 19845 5.1.1.3).' 19846 19847 Diagnostics consist of all the output sent to stderr by GCC. 19848 19849 * `Whether each nonempty sequence of white-space characters other 19850 than new-line is retained or replaced by one space character in 19851 translation phase 3 (C90 and C99 5.1.1.2).' 19852 19853 *Note Implementation-defined behavior: (cpp)Implementation-defined 19854 behavior. 19855 19856 19857 19858 File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 19859 19860 4.2 Environment 19861 =============== 19862 19863 The behavior of most of these points are dependent on the implementation 19864 of the C library, and are not defined by GCC itself. 19865 19866 * `The mapping between physical source file multibyte characters and 19867 the source character set in translation phase 1 (C90 and C99 19868 5.1.1.2).' 19869 19870 *Note Implementation-defined behavior: (cpp)Implementation-defined 19871 behavior. 19872 19873 19874 19875 File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 19876 19877 4.3 Identifiers 19878 =============== 19879 19880 * `Which additional multibyte characters may appear in identifiers 19881 and their correspondence to universal character names (C99 6.4.2).' 19882 19883 *Note Implementation-defined behavior: (cpp)Implementation-defined 19884 behavior. 19885 19886 * `The number of significant initial characters in an identifier 19887 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 19888 19889 For internal names, all characters are significant. For external 19890 names, the number of significant characters are defined by the 19891 linker; for almost all targets, all characters are significant. 19892 19893 * `Whether case distinctions are significant in an identifier with 19894 external linkage (C90 6.1.2).' 19895 19896 This is a property of the linker. C99 requires that case 19897 distinctions are always significant in identifiers with external 19898 linkage and systems without this property are not supported by GCC. 19899 19900 19901 19902 File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 19903 19904 4.4 Characters 19905 ============== 19906 19907 * `The number of bits in a byte (C90 3.4, C99 3.6).' 19908 19909 Determined by ABI. 19910 19911 * `The values of the members of the execution character set (C90 and 19912 C99 5.2.1).' 19913 19914 Determined by ABI. 19915 19916 * `The unique value of the member of the execution character set 19917 produced for each of the standard alphabetic escape sequences (C90 19918 and C99 5.2.2).' 19919 19920 Determined by ABI. 19921 19922 * `The value of a `char' object into which has been stored any 19923 character other than a member of the basic execution character set 19924 (C90 6.1.2.5, C99 6.2.5).' 19925 19926 Determined by ABI. 19927 19928 * `Which of `signed char' or `unsigned char' has the same range, 19929 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 19930 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 19931 19932 Determined by ABI. The options `-funsigned-char' and 19933 `-fsigned-char' change the default. *Note Options Controlling C 19934 Dialect: C Dialect Options. 19935 19936 * `The mapping of members of the source character set (in character 19937 constants and string literals) to members of the execution 19938 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 19939 19940 Determined by ABI. 19941 19942 * `The value of an integer character constant containing more than 19943 one character or containing a character or escape sequence that 19944 does not map to a single-byte execution character (C90 6.1.3.4, 19945 C99 6.4.4.4).' 19946 19947 *Note Implementation-defined behavior: (cpp)Implementation-defined 19948 behavior. 19949 19950 * `The value of a wide character constant containing more than one 19951 multibyte character, or containing a multibyte character or escape 19952 sequence not represented in the extended execution character set 19953 (C90 6.1.3.4, C99 6.4.4.4).' 19954 19955 *Note Implementation-defined behavior: (cpp)Implementation-defined 19956 behavior. 19957 19958 * `The current locale used to convert a wide character constant 19959 consisting of a single multibyte character that maps to a member 19960 of the extended execution character set into a corresponding wide 19961 character code (C90 6.1.3.4, C99 6.4.4.4).' 19962 19963 *Note Implementation-defined behavior: (cpp)Implementation-defined 19964 behavior. 19965 19966 * `The current locale used to convert a wide string literal into 19967 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 19968 19969 *Note Implementation-defined behavior: (cpp)Implementation-defined 19970 behavior. 19971 19972 * `The value of a string literal containing a multibyte character or 19973 escape sequence not represented in the execution character set 19974 (C90 6.1.4, C99 6.4.5).' 19975 19976 *Note Implementation-defined behavior: (cpp)Implementation-defined 19977 behavior. 19978 19979 19980 File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 19981 19982 4.5 Integers 19983 ============ 19984 19985 * `Any extended integer types that exist in the implementation (C99 19986 6.2.5).' 19987 19988 GCC does not support any extended integer types. 19989 19990 * `Whether signed integer types are represented using sign and 19991 magnitude, two's complement, or one's complement, and whether the 19992 extraordinary value is a trap representation or an ordinary value 19993 (C99 6.2.6.2).' 19994 19995 GCC supports only two's complement integer types, and all bit 19996 patterns are ordinary values. 19997 19998 * `The rank of any extended integer type relative to another extended 19999 integer type with the same precision (C99 6.3.1.1).' 20000 20001 GCC does not support any extended integer types. 20002 20003 * `The result of, or the signal raised by, converting an integer to a 20004 signed integer type when the value cannot be represented in an 20005 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 20006 20007 For conversion to a type of width N, the value is reduced modulo 20008 2^N to be within range of the type; no signal is raised. 20009 20010 * `The results of some bitwise operations on signed integers (C90 20011 6.3, C99 6.5).' 20012 20013 Bitwise operators act on the representation of the value including 20014 both the sign and value bits, where the sign bit is considered 20015 immediately above the highest-value value bit. Signed `>>' acts 20016 on negative numbers by sign extension. 20017 20018 GCC does not use the latitude given in C99 only to treat certain 20019 aspects of signed `<<' as undefined, but this is subject to change. 20020 20021 * `The sign of the remainder on integer division (C90 6.3.5).' 20022 20023 GCC always follows the C99 requirement that the result of division 20024 is truncated towards zero. 20025 20026 20027 20028 File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 20029 20030 4.6 Floating point 20031 ================== 20032 20033 * `The accuracy of the floating-point operations and of the library 20034 functions in `<math.h>' and `<complex.h>' that return 20035 floating-point results (C90 and C99 5.2.4.2.2).' 20036 20037 The accuracy is unknown. 20038 20039 * `The rounding behaviors characterized by non-standard values of 20040 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 20041 20042 GCC does not use such values. 20043 20044 * `The evaluation methods characterized by non-standard negative 20045 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 20046 20047 GCC does not use such values. 20048 20049 * `The direction of rounding when an integer is converted to a 20050 floating-point number that cannot exactly represent the original 20051 value (C90 6.2.1.3, C99 6.3.1.4).' 20052 20053 C99 Annex F is followed. 20054 20055 * `The direction of rounding when a floating-point number is 20056 converted to a narrower floating-point number (C90 6.2.1.4, C99 20057 6.3.1.5).' 20058 20059 C99 Annex F is followed. 20060 20061 * `How the nearest representable value or the larger or smaller 20062 representable value immediately adjacent to the nearest 20063 representable value is chosen for certain floating constants (C90 20064 6.1.3.1, C99 6.4.4.2).' 20065 20066 C99 Annex F is followed. 20067 20068 * `Whether and how floating expressions are contracted when not 20069 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 20070 20071 Expressions are currently only contracted if 20072 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 20073 subject to change. 20074 20075 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 20076 20077 This pragma is not implemented, but the default is to "off" unless 20078 `-frounding-math' is used in which case it is "on". 20079 20080 * `Additional floating-point exceptions, rounding modes, 20081 environments, and classifications, and their macro names (C99 7.6, 20082 C99 7.12).' 20083 20084 This is dependent on the implementation of the C library, and is 20085 not defined by GCC itself. 20086 20087 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 20088 20089 This pragma is not implemented. Expressions are currently only 20090 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 20091 used. This is subject to change. 20092 20093 * `Whether the "inexact" floating-point exception can be raised when 20094 the rounded result actually does equal the mathematical result in 20095 an IEC 60559 conformant implementation (C99 F.9).' 20096 20097 This is dependent on the implementation of the C library, and is 20098 not defined by GCC itself. 20099 20100 * `Whether the "underflow" (and "inexact") floating-point exception 20101 can be raised when a result is tiny but not inexact in an IEC 20102 60559 conformant implementation (C99 F.9).' 20103 20104 This is dependent on the implementation of the C library, and is 20105 not defined by GCC itself. 20106 20107 20108 20109 File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 20110 20111 4.7 Arrays and pointers 20112 ======================= 20113 20114 * `The result of converting a pointer to an integer or vice versa 20115 (C90 6.3.4, C99 6.3.2.3).' 20116 20117 A cast from pointer to integer discards most-significant bits if 20118 the pointer representation is larger than the integer type, 20119 sign-extends(1) if the pointer representation is smaller than the 20120 integer type, otherwise the bits are unchanged. 20121 20122 A cast from integer to pointer discards most-significant bits if 20123 the pointer representation is smaller than the integer type, 20124 extends according to the signedness of the integer type if the 20125 pointer representation is larger than the integer type, otherwise 20126 the bits are unchanged. 20127 20128 When casting from pointer to integer and back again, the resulting 20129 pointer must reference the same object as the original pointer, 20130 otherwise the behavior is undefined. That is, one may not use 20131 integer arithmetic to avoid the undefined behavior of pointer 20132 arithmetic as proscribed in C99 6.5.6/8. 20133 20134 * `The size of the result of subtracting two pointers to elements of 20135 the same array (C90 6.3.6, C99 6.5.6).' 20136 20137 The value is as specified in the standard and the type is 20138 determined by the ABI. 20139 20140 20141 ---------- Footnotes ---------- 20142 20143 (1) Future versions of GCC may zero-extend, or use a target-defined 20144 `ptr_extend' pattern. Do not rely on sign extension. 20145 20146 20147 File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 20148 20149 4.8 Hints 20150 ========= 20151 20152 * `The extent to which suggestions made by using the `register' 20153 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 20154 20155 The `register' specifier affects code generation only in these 20156 ways: 20157 20158 * When used as part of the register variable extension, see 20159 *note Explicit Reg Vars::. 20160 20161 * When `-O0' is in use, the compiler allocates distinct stack 20162 memory for all variables that do not have the `register' 20163 storage-class specifier; if `register' is specified, the 20164 variable may have a shorter lifespan than the code would 20165 indicate and may never be placed in memory. 20166 20167 * On some rare x86 targets, `setjmp' doesn't save the registers 20168 in all circumstances. In those cases, GCC doesn't allocate 20169 any variables in registers unless they are marked `register'. 20170 20171 20172 * `The extent to which suggestions made by using the inline function 20173 specifier are effective (C99 6.7.4).' 20174 20175 GCC will not inline any functions if the `-fno-inline' option is 20176 used or if `-O0' is used. Otherwise, GCC may still be unable to 20177 inline a function for many reasons; the `-Winline' option may be 20178 used to determine if a function has not been inlined and why not. 20179 20180 20181 20182 File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 20183 20184 4.9 Structures, unions, enumerations, and bit-fields 20185 ==================================================== 20186 20187 * `A member of a union object is accessed using a member of a 20188 different type (C90 6.3.2.3).' 20189 20190 The relevant bytes of the representation of the object are treated 20191 as an object of the type used for the access. *Note 20192 Type-punning::. This may be a trap representation. 20193 20194 * `Whether a "plain" `int' bit-field is treated as a `signed int' 20195 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 20196 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 20197 20198 By default it is treated as `signed int' but this may be changed 20199 by the `-funsigned-bitfields' option. 20200 20201 * `Allowable bit-field types other than `_Bool', `signed int', and 20202 `unsigned int' (C99 6.7.2.1).' 20203 20204 No other types are permitted in strictly conforming mode. 20205 20206 * `Whether a bit-field can straddle a storage-unit boundary (C90 20207 6.5.2.1, C99 6.7.2.1).' 20208 20209 Determined by ABI. 20210 20211 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 20212 C99 6.7.2.1).' 20213 20214 Determined by ABI. 20215 20216 * `The alignment of non-bit-field members of structures (C90 20217 6.5.2.1, C99 6.7.2.1).' 20218 20219 Determined by ABI. 20220 20221 * `The integer type compatible with each enumerated type (C90 20222 6.5.2.2, C99 6.7.2.2).' 20223 20224 Normally, the type is `unsigned int' if there are no negative 20225 values in the enumeration, otherwise `int'. If `-fshort-enums' is 20226 specified, then if there are negative values it is the first of 20227 `signed char', `short' and `int' that can represent all the 20228 values, otherwise it is the first of `unsigned char', `unsigned 20229 short' and `unsigned int' that can represent all the values. 20230 20231 On some targets, `-fshort-enums' is the default; this is 20232 determined by the ABI. 20233 20234 20235 20236 File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 20237 20238 4.10 Qualifiers 20239 =============== 20240 20241 * `What constitutes an access to an object that has 20242 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 20243 20244 Such an object is normally accessed by pointers and used for 20245 accessing hardware. In most expressions, it is intuitively 20246 obvious what is a read and what is a write. For example 20247 20248 volatile int *dst = SOMEVALUE; 20249 volatile int *src = SOMEOTHERVALUE; 20250 *dst = *src; 20251 20252 will cause a read of the volatile object pointed to by SRC and 20253 store the value into the volatile object pointed to by DST. There 20254 is no guarantee that these reads and writes are atomic, especially 20255 for objects larger than `int'. 20256 20257 However, if the volatile storage is not being modified, and the 20258 value of the volatile storage is not used, then the situation is 20259 less obvious. For example 20260 20261 volatile int *src = SOMEVALUE; 20262 *src; 20263 20264 According to the C standard, such an expression is an rvalue whose 20265 type is the unqualified version of its original type, i.e. `int'. 20266 Whether GCC interprets this as a read of the volatile object being 20267 pointed to or only as a request to evaluate the expression for its 20268 side-effects depends on this type. 20269 20270 If it is a scalar type, or on most targets an aggregate type whose 20271 only member object is of a scalar type, or a union type whose 20272 member objects are of scalar types, the expression is interpreted 20273 by GCC as a read of the volatile object; in the other cases, the 20274 expression is only evaluated for its side-effects. 20275 20276 20277 20278 File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 20279 20280 4.11 Declarators 20281 ================ 20282 20283 * `The maximum number of declarators that may modify an arithmetic, 20284 structure or union type (C90 6.5.4).' 20285 20286 GCC is only limited by available memory. 20287 20288 20289 20290 File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 20291 20292 4.12 Statements 20293 =============== 20294 20295 * `The maximum number of `case' values in a `switch' statement (C90 20296 6.6.4.2).' 20297 20298 GCC is only limited by available memory. 20299 20300 20301 20302 File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 20303 20304 4.13 Preprocessing directives 20305 ============================= 20306 20307 *Note Implementation-defined behavior: (cpp)Implementation-defined 20308 behavior, for details of these aspects of implementation-defined 20309 behavior. 20310 20311 * `How sequences in both forms of header names are mapped to headers 20312 or external source file names (C90 6.1.7, C99 6.4.7).' 20313 20314 * `Whether the value of a character constant in a constant expression 20315 that controls conditional inclusion matches the value of the same 20316 character constant in the execution character set (C90 6.8.1, C99 20317 6.10.1).' 20318 20319 * `Whether the value of a single-character character constant in a 20320 constant expression that controls conditional inclusion may have a 20321 negative value (C90 6.8.1, C99 6.10.1).' 20322 20323 * `The places that are searched for an included `<>' delimited 20324 header, and how the places are specified or the header is 20325 identified (C90 6.8.2, C99 6.10.2).' 20326 20327 * `How the named source file is searched for in an included `""' 20328 delimited header (C90 6.8.2, C99 6.10.2).' 20329 20330 * `The method by which preprocessing tokens (possibly resulting from 20331 macro expansion) in a `#include' directive are combined into a 20332 header name (C90 6.8.2, C99 6.10.2).' 20333 20334 * `The nesting limit for `#include' processing (C90 6.8.2, C99 20335 6.10.2).' 20336 20337 * `Whether the `#' operator inserts a `\' character before the `\' 20338 character that begins a universal character name in a character 20339 constant or string literal (C99 6.10.3.2).' 20340 20341 * `The behavior on each recognized non-`STDC #pragma' directive (C90 20342 6.8.6, C99 6.10.6).' 20343 20344 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 20345 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 20346 details of target-specific pragmas. 20347 20348 * `The definitions for `__DATE__' and `__TIME__' when respectively, 20349 the date and time of translation are not available (C90 6.8.8, C99 20350 6.10.8).' 20351 20352 20353 20354 File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 20355 20356 4.14 Library functions 20357 ====================== 20358 20359 The behavior of most of these points are dependent on the implementation 20360 of the C library, and are not defined by GCC itself. 20361 20362 * `The null pointer constant to which the macro `NULL' expands (C90 20363 7.1.6, C99 7.17).' 20364 20365 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 20366 provide the other headers which define `NULL' and some library 20367 implementations may use other definitions in those headers. 20368 20369 20370 20371 File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 20372 20373 4.15 Architecture 20374 ================= 20375 20376 * `The values or expressions assigned to the macros specified in the 20377 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 20378 5.2.4.2, C99 7.18.2, C99 7.18.3).' 20379 20380 Determined by ABI. 20381 20382 * `The number, order, and encoding of bytes in any object (when not 20383 explicitly specified in this International Standard) (C99 20384 6.2.6.1).' 20385 20386 Determined by ABI. 20387 20388 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 20389 C99 6.5.3.4).' 20390 20391 Determined by ABI. 20392 20393 20394 20395 File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 20396 20397 4.16 Locale-specific behavior 20398 ============================= 20399 20400 The behavior of these points are dependent on the implementation of the 20401 C library, and are not defined by GCC itself. 20402 20403 20404 File: gcc.info, Node: C++ Implementation, Next: C Extensions, Prev: C Implementation, Up: Top 20405 20406 5 C++ Implementation-defined behavior 20407 ************************************* 20408 20409 A conforming implementation of ISO C++ is required to document its 20410 choice of behavior in each of the areas that are designated 20411 "implementation defined". The following lists all such areas, along 20412 with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC 20413 14882:2003 standards. Some areas are only implementation-defined in 20414 one version of the standard. 20415 20416 Some choices depend on the externally determined ABI for the platform 20417 (including standard character encodings) which GCC follows; these are 20418 listed as "determined by ABI" below. *Note Binary Compatibility: 20419 Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 20420 are documented in the preprocessor manual. *Note 20421 Implementation-defined behavior: (cpp)Implementation-defined behavior. 20422 Some choices are documented in the corresponding document for the C 20423 language. *Note C Implementation::. Some choices are made by the 20424 library and operating system (or other environment when compiling for a 20425 freestanding environment); refer to their documentation for details. 20426 20427 * Menu: 20428 20429 * Conditionally-supported behavior:: 20430 * Exception handling:: 20431 20432 20433 File: gcc.info, Node: Conditionally-supported behavior, Next: Exception handling, Up: C++ Implementation 20434 20435 5.1 Conditionally-supported behavior 20436 ==================================== 20437 20438 `Each implementation shall include documentation that identifies all 20439 conditionally-supported constructs that it does not support (C++0x 20440 1.4).' 20441 20442 * `Whether an argument of class type with a non-trivial copy 20443 constructor or destructor can be passed to ... (C++0x 5.2.2).' 20444 20445 Such argument passing is not supported. 20446 20447 20448 20449 File: gcc.info, Node: Exception handling, Prev: Conditionally-supported behavior, Up: C++ Implementation 20450 20451 5.2 Exception handling 20452 ====================== 20453 20454 * `In the situation where no matching handler is found, it is 20455 implementation-defined whether or not the stack is unwound before 20456 std::terminate() is called (C++98 15.5.1).' 20457 20458 The stack is not unwound before std::terminate is called. 20459 20460 20461 20462 File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C++ Implementation, Up: Top 20463 20464 6 Extensions to the C Language Family 20465 ************************************* 20466 20467 GNU C provides several language features not found in ISO standard C. 20468 (The `-pedantic' option directs GCC to print a warning message if any 20469 of these features is used.) To test for the availability of these 20470 features in conditional compilation, check for a predefined macro 20471 `__GNUC__', which is always defined under GCC. 20472 20473 These extensions are available in C and Objective-C. Most of them are 20474 also available in C++. *Note Extensions to the C++ Language: C++ 20475 Extensions, for extensions that apply _only_ to C++. 20476 20477 Some features that are in ISO C99 but not C90 or C++ are also, as 20478 extensions, accepted by GCC in C90 mode and in C++. 20479 20480 * Menu: 20481 20482 * Statement Exprs:: Putting statements and declarations inside expressions. 20483 * Local Labels:: Labels local to a block. 20484 * Labels as Values:: Getting pointers to labels, and computed gotos. 20485 * Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 20486 * Constructing Calls:: Dispatching a call to another function. 20487 * Typeof:: `typeof': referring to the type of an expression. 20488 * Conditionals:: Omitting the middle operand of a `?:' expression. 20489 * __int128:: 128-bit integers---`__int128'. 20490 * Long Long:: Double-word integers---`long long int'. 20491 * Complex:: Data types for complex numbers. 20492 * Floating Types:: Additional Floating Types. 20493 * Half-Precision:: Half-Precision Floating Point. 20494 * Decimal Float:: Decimal Floating Types. 20495 * Hex Floats:: Hexadecimal floating-point constants. 20496 * Fixed-Point:: Fixed-Point Types. 20497 * Named Address Spaces::Named address spaces. 20498 * Zero Length:: Zero-length arrays. 20499 * Empty Structures:: Structures with no members. 20500 * Variable Length:: Arrays whose length is computed at run time. 20501 * Variadic Macros:: Macros with a variable number of arguments. 20502 * Escaped Newlines:: Slightly looser rules for escaped newlines. 20503 * Subscripting:: Any array can be subscripted, even if not an lvalue. 20504 * Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 20505 * Initializers:: Non-constant initializers. 20506 * Compound Literals:: Compound literals give structures, unions 20507 or arrays as values. 20508 * Designated Inits:: Labeling elements of initializers. 20509 * Case Ranges:: `case 1 ... 9' and such. 20510 * Cast to Union:: Casting to union type from any member of the union. 20511 * Mixed Declarations:: Mixing declarations and code. 20512 * Function Attributes:: Declaring that functions have no side effects, 20513 or that they can never return. 20514 * Attribute Syntax:: Formal syntax for attributes. 20515 * Function Prototypes:: Prototype declarations and old-style definitions. 20516 * C++ Comments:: C++ comments are recognized. 20517 * Dollar Signs:: Dollar sign is allowed in identifiers. 20518 * Character Escapes:: `\e' stands for the character <ESC>. 20519 * Variable Attributes:: Specifying attributes of variables. 20520 * Type Attributes:: Specifying attributes of types. 20521 * Alignment:: Inquiring about the alignment of a type or variable. 20522 * Inline:: Defining inline functions (as fast as macros). 20523 * Volatiles:: What constitutes an access to a volatile object. 20524 * Extended Asm:: Assembler instructions with C expressions as operands. 20525 (With them you can define ``built-in'' functions.) 20526 * Constraints:: Constraints for asm operands 20527 * Asm Labels:: Specifying the assembler name to use for a C symbol. 20528 * Explicit Reg Vars:: Defining variables residing in specified registers. 20529 * Alternate Keywords:: `__const__', `__asm__', etc., for header files. 20530 * Incomplete Enums:: `enum foo;', with details to follow. 20531 * Function Names:: Printable strings which are the name of the current 20532 function. 20533 * Return Address:: Getting the return or frame address of a function. 20534 * Vector Extensions:: Using vector instructions through built-in functions. 20535 * Offsetof:: Special syntax for implementing `offsetof'. 20536 * __sync Builtins:: Legacy built-in functions for atomic memory access. 20537 * __atomic Builtins:: Atomic built-in functions with memory model. 20538 * x86 specific memory model extensions for transactional memory:: x86 memory models. 20539 * Object Size Checking:: Built-in functions for limited buffer overflow 20540 checking. 20541 * Other Builtins:: Other built-in functions. 20542 * Target Builtins:: Built-in functions specific to particular targets. 20543 * Target Format Checks:: Format checks specific to particular targets. 20544 * Pragmas:: Pragmas accepted by GCC. 20545 * Unnamed Fields:: Unnamed struct/union fields within structs/unions. 20546 * Thread-Local:: Per-thread variables. 20547 * Binary constants:: Binary constants using the `0b' prefix. 20548 20549 20550 File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 20551 20552 6.1 Statements and Declarations in Expressions 20553 ============================================== 20554 20555 A compound statement enclosed in parentheses may appear as an expression 20556 in GNU C. This allows you to use loops, switches, and local variables 20557 within an expression. 20558 20559 Recall that a compound statement is a sequence of statements surrounded 20560 by braces; in this construct, parentheses go around the braces. For 20561 example: 20562 20563 ({ int y = foo (); int z; 20564 if (y > 0) z = y; 20565 else z = - y; 20566 z; }) 20567 20568 is a valid (though slightly more complex than necessary) expression for 20569 the absolute value of `foo ()'. 20570 20571 The last thing in the compound statement should be an expression 20572 followed by a semicolon; the value of this subexpression serves as the 20573 value of the entire construct. (If you use some other kind of statement 20574 last within the braces, the construct has type `void', and thus 20575 effectively no value.) 20576 20577 This feature is especially useful in making macro definitions "safe" 20578 (so that they evaluate each operand exactly once). For example, the 20579 "maximum" function is commonly defined as a macro in standard C as 20580 follows: 20581 20582 #define max(a,b) ((a) > (b) ? (a) : (b)) 20583 20584 But this definition computes either A or B twice, with bad results if 20585 the operand has side effects. In GNU C, if you know the type of the 20586 operands (here taken as `int'), you can define the macro safely as 20587 follows: 20588 20589 #define maxint(a,b) \ 20590 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 20591 20592 Embedded statements are not allowed in constant expressions, such as 20593 the value of an enumeration constant, the width of a bit-field, or the 20594 initial value of a static variable. 20595 20596 If you don't know the type of the operand, you can still do this, but 20597 you must use `typeof' (*note Typeof::). 20598 20599 In G++, the result value of a statement expression undergoes array and 20600 function pointer decay, and is returned by value to the enclosing 20601 expression. For instance, if `A' is a class, then 20602 20603 A a; 20604 20605 ({a;}).Foo () 20606 20607 constructs a temporary `A' object to hold the result of the statement 20608 expression, and that is used to invoke `Foo'. Therefore the `this' 20609 pointer observed by `Foo' is not the address of `a'. 20610 20611 In a statement expression, any temporaries created within a statement 20612 are destroyed at that statement's end. This makes statement 20613 expressions inside macros slightly different from function calls. In 20614 the latter case temporaries introduced during argument evaluation are 20615 destroyed at the end of the statement that includes the function call. 20616 In the statement expression case they are destroyed during the 20617 statement expression. For instance, 20618 20619 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 20620 template<typename T> T function(T a) { T b = a; return b + 3; } 20621 20622 void foo () 20623 { 20624 macro (X ()); 20625 function (X ()); 20626 } 20627 20628 has different places where temporaries are destroyed. For the `macro' 20629 case, the temporary `X' is destroyed just after the initialization of 20630 `b'. In the `function' case that temporary is destroyed when the 20631 function returns. 20632 20633 These considerations mean that it is probably a bad idea to use 20634 statement expressions of this form in header files that are designed to 20635 work with C++. (Note that some versions of the GNU C Library contained 20636 header files using statement expressions that lead to precisely this 20637 bug.) 20638 20639 Jumping into a statement expression with `goto' or using a `switch' 20640 statement outside the statement expression with a `case' or `default' 20641 label inside the statement expression is not permitted. Jumping into a 20642 statement expression with a computed `goto' (*note Labels as Values::) 20643 has undefined behavior. Jumping out of a statement expression is 20644 permitted, but if the statement expression is part of a larger 20645 expression then it is unspecified which other subexpressions of that 20646 expression have been evaluated except where the language definition 20647 requires certain subexpressions to be evaluated before or after the 20648 statement expression. In any case, as with a function call, the 20649 evaluation of a statement expression is not interleaved with the 20650 evaluation of other parts of the containing expression. For example, 20651 20652 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 20653 20654 calls `foo' and `bar1' and does not call `baz' but may or may not call 20655 `bar2'. If `bar2' is called, it is called after `foo' and before 20656 `bar1'. 20657 20658 20659 File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 20660 20661 6.2 Locally Declared Labels 20662 =========================== 20663 20664 GCC allows you to declare "local labels" in any nested block scope. A 20665 local label is just like an ordinary label, but you can only reference 20666 it (with a `goto' statement, or by taking its address) within the block 20667 in which it is declared. 20668 20669 A local label declaration looks like this: 20670 20671 __label__ LABEL; 20672 20673 or 20674 20675 __label__ LABEL1, LABEL2, /* ... */; 20676 20677 Local label declarations must come at the beginning of the block, 20678 before any ordinary declarations or statements. 20679 20680 The label declaration defines the label _name_, but does not define 20681 the label itself. You must do this in the usual way, with `LABEL:', 20682 within the statements of the statement expression. 20683 20684 The local label feature is useful for complex macros. If a macro 20685 contains nested loops, a `goto' can be useful for breaking out of them. 20686 However, an ordinary label whose scope is the whole function cannot be 20687 used: if the macro can be expanded several times in one function, the 20688 label is multiply defined in that function. A local label avoids this 20689 problem. For example: 20690 20691 #define SEARCH(value, array, target) \ 20692 do { \ 20693 __label__ found; \ 20694 typeof (target) _SEARCH_target = (target); \ 20695 typeof (*(array)) *_SEARCH_array = (array); \ 20696 int i, j; \ 20697 int value; \ 20698 for (i = 0; i < max; i++) \ 20699 for (j = 0; j < max; j++) \ 20700 if (_SEARCH_array[i][j] == _SEARCH_target) \ 20701 { (value) = i; goto found; } \ 20702 (value) = -1; \ 20703 found:; \ 20704 } while (0) 20705 20706 This could also be written using a statement expression: 20707 20708 #define SEARCH(array, target) \ 20709 ({ \ 20710 __label__ found; \ 20711 typeof (target) _SEARCH_target = (target); \ 20712 typeof (*(array)) *_SEARCH_array = (array); \ 20713 int i, j; \ 20714 int value; \ 20715 for (i = 0; i < max; i++) \ 20716 for (j = 0; j < max; j++) \ 20717 if (_SEARCH_array[i][j] == _SEARCH_target) \ 20718 { value = i; goto found; } \ 20719 value = -1; \ 20720 found: \ 20721 value; \ 20722 }) 20723 20724 Local label declarations also make the labels they declare visible to 20725 nested functions, if there are any. *Note Nested Functions::, for 20726 details. 20727 20728 20729 File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 20730 20731 6.3 Labels as Values 20732 ==================== 20733 20734 You can get the address of a label defined in the current function (or 20735 a containing function) with the unary operator `&&'. The value has 20736 type `void *'. This value is a constant and can be used wherever a 20737 constant of that type is valid. For example: 20738 20739 void *ptr; 20740 /* ... */ 20741 ptr = &&foo; 20742 20743 To use these values, you need to be able to jump to one. This is done 20744 with the computed goto statement(1), `goto *EXP;'. For example, 20745 20746 goto *ptr; 20747 20748 Any expression of type `void *' is allowed. 20749 20750 One way of using these constants is in initializing a static array that 20751 serves as a jump table: 20752 20753 static void *array[] = { &&foo, &&bar, &&hack }; 20754 20755 Then you can select a label with indexing, like this: 20756 20757 goto *array[i]; 20758 20759 Note that this does not check whether the subscript is in bounds--array 20760 indexing in C never does that. 20761 20762 Such an array of label values serves a purpose much like that of the 20763 `switch' statement. The `switch' statement is cleaner, so use that 20764 rather than an array unless the problem does not fit a `switch' 20765 statement very well. 20766 20767 Another use of label values is in an interpreter for threaded code. 20768 The labels within the interpreter function can be stored in the 20769 threaded code for super-fast dispatching. 20770 20771 You may not use this mechanism to jump to code in a different function. 20772 If you do that, totally unpredictable things happen. The best way to 20773 avoid this is to store the label address only in automatic variables and 20774 never pass it as an argument. 20775 20776 An alternate way to write the above example is 20777 20778 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 20779 &&hack - &&foo }; 20780 goto *(&&foo + array[i]); 20781 20782 This is more friendly to code living in shared libraries, as it reduces 20783 the number of dynamic relocations that are needed, and by consequence, 20784 allows the data to be read-only. 20785 20786 The `&&foo' expressions for the same label might have different values 20787 if the containing function is inlined or cloned. If a program relies 20788 on them being always the same, 20789 `__attribute__((__noinline__,__noclone__))' should be used to prevent 20790 inlining and cloning. If `&&foo' is used in a static variable 20791 initializer, inlining and cloning is forbidden. 20792 20793 ---------- Footnotes ---------- 20794 20795 (1) The analogous feature in Fortran is called an assigned goto, but 20796 that name seems inappropriate in C, where one can do more than simply 20797 store label addresses in label variables. 20798 20799 20800 File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 20801 20802 6.4 Nested Functions 20803 ==================== 20804 20805 A "nested function" is a function defined inside another function. 20806 Nested functions are supported as an extension in GNU C, but are not 20807 supported by GNU C++. 20808 20809 The nested function's name is local to the block where it is defined. 20810 For example, here we define a nested function named `square', and call 20811 it twice: 20812 20813 foo (double a, double b) 20814 { 20815 double square (double z) { return z * z; } 20816 20817 return square (a) + square (b); 20818 } 20819 20820 The nested function can access all the variables of the containing 20821 function that are visible at the point of its definition. This is 20822 called "lexical scoping". For example, here we show a nested function 20823 which uses an inherited variable named `offset': 20824 20825 bar (int *array, int offset, int size) 20826 { 20827 int access (int *array, int index) 20828 { return array[index + offset]; } 20829 int i; 20830 /* ... */ 20831 for (i = 0; i < size; i++) 20832 /* ... */ access (array, i) /* ... */ 20833 } 20834 20835 Nested function definitions are permitted within functions in the 20836 places where variable definitions are allowed; that is, in any block, 20837 mixed with the other declarations and statements in the block. 20838 20839 It is possible to call the nested function from outside the scope of 20840 its name by storing its address or passing the address to another 20841 function: 20842 20843 hack (int *array, int size) 20844 { 20845 void store (int index, int value) 20846 { array[index] = value; } 20847 20848 intermediate (store, size); 20849 } 20850 20851 Here, the function `intermediate' receives the address of `store' as 20852 an argument. If `intermediate' calls `store', the arguments given to 20853 `store' are used to store into `array'. But this technique works only 20854 so long as the containing function (`hack', in this example) does not 20855 exit. 20856 20857 If you try to call the nested function through its address after the 20858 containing function exits, all hell breaks loose. If you try to call 20859 it after a containing scope level exits, and if it refers to some of 20860 the variables that are no longer in scope, you may be lucky, but it's 20861 not wise to take the risk. If, however, the nested function does not 20862 refer to anything that has gone out of scope, you should be safe. 20863 20864 GCC implements taking the address of a nested function using a 20865 technique called "trampolines". This technique was described in 20866 `Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference 20867 Proceedings, October 17-21, 1988). 20868 20869 A nested function can jump to a label inherited from a containing 20870 function, provided the label is explicitly declared in the containing 20871 function (*note Local Labels::). Such a jump returns instantly to the 20872 containing function, exiting the nested function that did the `goto' 20873 and any intermediate functions as well. Here is an example: 20874 20875 bar (int *array, int offset, int size) 20876 { 20877 __label__ failure; 20878 int access (int *array, int index) 20879 { 20880 if (index > size) 20881 goto failure; 20882 return array[index + offset]; 20883 } 20884 int i; 20885 /* ... */ 20886 for (i = 0; i < size; i++) 20887 /* ... */ access (array, i) /* ... */ 20888 /* ... */ 20889 return 0; 20890 20891 /* Control comes here from `access' 20892 if it detects an error. */ 20893 failure: 20894 return -1; 20895 } 20896 20897 A nested function always has no linkage. Declaring one with `extern' 20898 or `static' is erroneous. If you need to declare the nested function 20899 before its definition, use `auto' (which is otherwise meaningless for 20900 function declarations). 20901 20902 bar (int *array, int offset, int size) 20903 { 20904 __label__ failure; 20905 auto int access (int *, int); 20906 /* ... */ 20907 int access (int *array, int index) 20908 { 20909 if (index > size) 20910 goto failure; 20911 return array[index + offset]; 20912 } 20913 /* ... */ 20914 } 20915 20916 20917 File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 20918 20919 6.5 Constructing Function Calls 20920 =============================== 20921 20922 Using the built-in functions described below, you can record the 20923 arguments a function received, and call another function with the same 20924 arguments, without knowing the number or types of the arguments. 20925 20926 You can also record the return value of that function call, and later 20927 return that value, without knowing what data type the function tried to 20928 return (as long as your caller expects that data type). 20929 20930 However, these built-in functions may interact badly with some 20931 sophisticated features or other extensions of the language. It is, 20932 therefore, not recommended to use them outside very simple functions 20933 acting as mere forwarders for their arguments. 20934 20935 -- Built-in Function: void * __builtin_apply_args () 20936 This built-in function returns a pointer to data describing how to 20937 perform a call with the same arguments as are passed to the 20938 current function. 20939 20940 The function saves the arg pointer register, structure value 20941 address, and all registers that might be used to pass arguments to 20942 a function into a block of memory allocated on the stack. Then it 20943 returns the address of that block. 20944 20945 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 20946 *ARGUMENTS, size_t SIZE) 20947 This built-in function invokes FUNCTION with a copy of the 20948 parameters described by ARGUMENTS and SIZE. 20949 20950 The value of ARGUMENTS should be the value returned by 20951 `__builtin_apply_args'. The argument SIZE specifies the size of 20952 the stack argument data, in bytes. 20953 20954 This function returns a pointer to data describing how to return 20955 whatever value is returned by FUNCTION. The data is saved in a 20956 block of memory allocated on the stack. 20957 20958 It is not always simple to compute the proper value for SIZE. The 20959 value is used by `__builtin_apply' to compute the amount of data 20960 that should be pushed on the stack and copied from the incoming 20961 argument area. 20962 20963 -- Built-in Function: void __builtin_return (void *RESULT) 20964 This built-in function returns the value described by RESULT from 20965 the containing function. You should specify, for RESULT, a value 20966 returned by `__builtin_apply'. 20967 20968 -- Built-in Function: __builtin_va_arg_pack () 20969 This built-in function represents all anonymous arguments of an 20970 inline function. It can be used only in inline functions that are 20971 always inlined, never compiled as a separate function, such as 20972 those using `__attribute__ ((__always_inline__))' or 20973 `__attribute__ ((__gnu_inline__))' extern inline functions. It 20974 must be only passed as last argument to some other function with 20975 variable arguments. This is useful for writing small wrapper 20976 inlines for variable argument functions, when using preprocessor 20977 macros is undesirable. For example: 20978 extern int myprintf (FILE *f, const char *format, ...); 20979 extern inline __attribute__ ((__gnu_inline__)) int 20980 myprintf (FILE *f, const char *format, ...) 20981 { 20982 int r = fprintf (f, "myprintf: "); 20983 if (r < 0) 20984 return r; 20985 int s = fprintf (f, format, __builtin_va_arg_pack ()); 20986 if (s < 0) 20987 return s; 20988 return r + s; 20989 } 20990 20991 -- Built-in Function: size_t __builtin_va_arg_pack_len () 20992 This built-in function returns the number of anonymous arguments of 20993 an inline function. It can be used only in inline functions that 20994 are always inlined, never compiled as a separate function, such as 20995 those using `__attribute__ ((__always_inline__))' or 20996 `__attribute__ ((__gnu_inline__))' extern inline functions. For 20997 example following does link- or run-time checking of open 20998 arguments for optimized code: 20999 #ifdef __OPTIMIZE__ 21000 extern inline __attribute__((__gnu_inline__)) int 21001 myopen (const char *path, int oflag, ...) 21002 { 21003 if (__builtin_va_arg_pack_len () > 1) 21004 warn_open_too_many_arguments (); 21005 21006 if (__builtin_constant_p (oflag)) 21007 { 21008 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 21009 { 21010 warn_open_missing_mode (); 21011 return __open_2 (path, oflag); 21012 } 21013 return open (path, oflag, __builtin_va_arg_pack ()); 21014 } 21015 21016 if (__builtin_va_arg_pack_len () < 1) 21017 return __open_2 (path, oflag); 21018 21019 return open (path, oflag, __builtin_va_arg_pack ()); 21020 } 21021 #endif 21022 21023 21024 File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 21025 21026 6.6 Referring to a Type with `typeof' 21027 ===================================== 21028 21029 Another way to refer to the type of an expression is with `typeof'. 21030 The syntax of using of this keyword looks like `sizeof', but the 21031 construct acts semantically like a type name defined with `typedef'. 21032 21033 There are two ways of writing the argument to `typeof': with an 21034 expression or with a type. Here is an example with an expression: 21035 21036 typeof (x[0](1)) 21037 21038 This assumes that `x' is an array of pointers to functions; the type 21039 described is that of the values of the functions. 21040 21041 Here is an example with a typename as the argument: 21042 21043 typeof (int *) 21044 21045 Here the type described is that of pointers to `int'. 21046 21047 If you are writing a header file that must work when included in ISO C 21048 programs, write `__typeof__' instead of `typeof'. *Note Alternate 21049 Keywords::. 21050 21051 A `typeof' construct can be used anywhere a typedef name can be used. 21052 For example, you can use it in a declaration, in a cast, or inside of 21053 `sizeof' or `typeof'. 21054 21055 The operand of `typeof' is evaluated for its side effects if and only 21056 if it is an expression of variably modified type or the name of such a 21057 type. 21058 21059 `typeof' is often useful in conjunction with statement expressions 21060 (*note Statement Exprs::). Here is how the two together can be used to 21061 define a safe "maximum" macro which operates on any arithmetic type and 21062 evaluates each of its arguments exactly once: 21063 21064 #define max(a,b) \ 21065 ({ typeof (a) _a = (a); \ 21066 typeof (b) _b = (b); \ 21067 _a > _b ? _a : _b; }) 21068 21069 The reason for using names that start with underscores for the local 21070 variables is to avoid conflicts with variable names that occur within 21071 the expressions that are substituted for `a' and `b'. Eventually we 21072 hope to design a new form of declaration syntax that allows you to 21073 declare variables whose scopes start only after their initializers; 21074 this will be a more reliable way to prevent such conflicts. 21075 21076 Some more examples of the use of `typeof': 21077 21078 * This declares `y' with the type of what `x' points to. 21079 21080 typeof (*x) y; 21081 21082 * This declares `y' as an array of such values. 21083 21084 typeof (*x) y[4]; 21085 21086 * This declares `y' as an array of pointers to characters: 21087 21088 typeof (typeof (char *)[4]) y; 21089 21090 It is equivalent to the following traditional C declaration: 21091 21092 char *y[4]; 21093 21094 To see the meaning of the declaration using `typeof', and why it 21095 might be a useful way to write, rewrite it with these macros: 21096 21097 #define pointer(T) typeof(T *) 21098 #define array(T, N) typeof(T [N]) 21099 21100 Now the declaration can be rewritten this way: 21101 21102 array (pointer (char), 4) y; 21103 21104 Thus, `array (pointer (char), 4)' is the type of arrays of 4 21105 pointers to `char'. 21106 21107 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 21108 limited extension that permitted one to write 21109 21110 typedef T = EXPR; 21111 21112 with the effect of declaring T to have the type of the expression EXPR. 21113 This extension does not work with GCC 3 (versions between 3.0 and 3.2 21114 crash; 3.2.1 and later give an error). Code that relies on it should 21115 be rewritten to use `typeof': 21116 21117 typedef typeof(EXPR) T; 21118 21119 This works with all versions of GCC. 21120 21121 21122 File: gcc.info, Node: Conditionals, Next: __int128, Prev: Typeof, Up: C Extensions 21123 21124 6.7 Conditionals with Omitted Operands 21125 ====================================== 21126 21127 The middle operand in a conditional expression may be omitted. Then if 21128 the first operand is nonzero, its value is the value of the conditional 21129 expression. 21130 21131 Therefore, the expression 21132 21133 x ? : y 21134 21135 has the value of `x' if that is nonzero; otherwise, the value of `y'. 21136 21137 This example is perfectly equivalent to 21138 21139 x ? x : y 21140 21141 In this simple case, the ability to omit the middle operand is not 21142 especially useful. When it becomes useful is when the first operand 21143 does, or may (if it is a macro argument), contain a side effect. Then 21144 repeating the operand in the middle would perform the side effect 21145 twice. Omitting the middle operand uses the value already computed 21146 without the undesirable effects of recomputing it. 21147 21148 21149 File: gcc.info, Node: __int128, Next: Long Long, Prev: Conditionals, Up: C Extensions 21150 21151 6.8 128-bit integers 21152 ==================== 21153 21154 As an extension the integer scalar type `__int128' is supported for 21155 targets which have an integer mode wide enough to hold 128 bits. 21156 Simply write `__int128' for a signed 128-bit integer, or `unsigned 21157 __int128' for an unsigned 128-bit integer. There is no support in GCC 21158 for expressing an integer constant of type `__int128' for targets with 21159 `long long' integer less than 128 bits wide. 21160 21161 21162 File: gcc.info, Node: Long Long, Next: Complex, Prev: __int128, Up: C Extensions 21163 21164 6.9 Double-Word Integers 21165 ======================== 21166 21167 ISO C99 supports data types for integers that are at least 64 bits wide, 21168 and as an extension GCC supports them in C90 mode and in C++. Simply 21169 write `long long int' for a signed integer, or `unsigned long long int' 21170 for an unsigned integer. To make an integer constant of type `long 21171 long int', add the suffix `LL' to the integer. To make an integer 21172 constant of type `unsigned long long int', add the suffix `ULL' to the 21173 integer. 21174 21175 You can use these types in arithmetic like any other integer types. 21176 Addition, subtraction, and bitwise boolean operations on these types 21177 are open-coded on all types of machines. Multiplication is open-coded 21178 if the machine supports a fullword-to-doubleword widening multiply 21179 instruction. Division and shifts are open-coded only on machines that 21180 provide special support. The operations that are not open-coded use 21181 special library routines that come with GCC. 21182 21183 There may be pitfalls when you use `long long' types for function 21184 arguments without function prototypes. If a function expects type 21185 `int' for its argument, and you pass a value of type `long long int', 21186 confusion results because the caller and the subroutine disagree about 21187 the number of bytes for the argument. Likewise, if the function 21188 expects `long long int' and you pass `int'. The best way to avoid such 21189 problems is to use prototypes. 21190 21191 21192 File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions 21193 21194 6.10 Complex Numbers 21195 ==================== 21196 21197 ISO C99 supports complex floating data types, and as an extension GCC 21198 supports them in C90 mode and in C++. GCC also supports complex 21199 integer data types which are not part of ISO C99. You can declare 21200 complex types using the keyword `_Complex'. As an extension, the older 21201 GNU keyword `__complex__' is also supported. 21202 21203 For example, `_Complex double x;' declares `x' as a variable whose 21204 real part and imaginary part are both of type `double'. `_Complex 21205 short int y;' declares `y' to have real and imaginary parts of type 21206 `short int'; this is not likely to be useful, but it shows that the set 21207 of complex types is complete. 21208 21209 To write a constant with a complex data type, use the suffix `i' or 21210 `j' (either one; they are equivalent). For example, `2.5fi' has type 21211 `_Complex float' and `3i' has type `_Complex int'. Such a constant 21212 always has a pure imaginary value, but you can form any complex value 21213 you like by adding one to a real constant. This is a GNU extension; if 21214 you have an ISO C99 conforming C library (such as the GNU C Library), 21215 and want to construct complex constants of floating type, you should 21216 include `<complex.h>' and use the macros `I' or `_Complex_I' instead. 21217 21218 To extract the real part of a complex-valued expression EXP, write 21219 `__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 21220 part. This is a GNU extension; for values of floating type, you should 21221 use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 21222 `cimag' and `cimagl', declared in `<complex.h>' and also provided as 21223 built-in functions by GCC. 21224 21225 The operator `~' performs complex conjugation when used on a value 21226 with a complex type. This is a GNU extension; for values of floating 21227 type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 21228 declared in `<complex.h>' and also provided as built-in functions by 21229 GCC. 21230 21231 GCC can allocate complex automatic variables in a noncontiguous 21232 fashion; it's even possible for the real part to be in a register while 21233 the imaginary part is on the stack (or vice versa). Only the DWARF 2 21234 debug info format can represent this, so use of DWARF 2 is recommended. 21235 If you are using the stabs debug info format, GCC describes a 21236 noncontiguous complex variable as if it were two separate variables of 21237 noncomplex type. If the variable's actual name is `foo', the two 21238 fictitious variables are named `foo$real' and `foo$imag'. You can 21239 examine and set these two fictitious variables with your debugger. 21240 21241 21242 File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions 21243 21244 6.11 Additional Floating Types 21245 ============================== 21246 21247 As an extension, GNU C supports additional floating types, `__float80' 21248 and `__float128' to support 80-bit (`XFmode') and 128-bit (`TFmode') 21249 floating types. Support for additional types includes the arithmetic 21250 operators: add, subtract, multiply, divide; unary arithmetic operators; 21251 relational operators; equality operators; and conversions to and from 21252 integer and other floating types. Use a suffix `w' or `W' in a literal 21253 constant of type `__float80' and `q' or `Q' for `_float128'. You can 21254 declare complex types using the corresponding internal complex type, 21255 `XCmode' for `__float80' type and `TCmode' for `__float128' type: 21256 21257 typedef _Complex float __attribute__((mode(TC))) _Complex128; 21258 typedef _Complex float __attribute__((mode(XC))) _Complex80; 21259 21260 Not all targets support additional floating-point types. `__float80' 21261 and `__float128' types are supported on i386, x86_64 and IA-64 targets. 21262 The `__float128' type is supported on hppa HP-UX targets. 21263 21264 21265 File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions 21266 21267 6.12 Half-Precision Floating Point 21268 ================================== 21269 21270 On ARM targets, GCC supports half-precision (16-bit) floating point via 21271 the `__fp16' type. You must enable this type explicitly with the 21272 `-mfp16-format' command-line option in order to use it. 21273 21274 ARM supports two incompatible representations for half-precision 21275 floating-point values. You must choose one of the representations and 21276 use it consistently in your program. 21277 21278 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format. 21279 This format can represent normalized values in the range of 2^-14 to 21280 65504. There are 11 bits of significand precision, approximately 3 21281 decimal digits. 21282 21283 Specifying `-mfp16-format=alternative' selects the ARM alternative 21284 format. This representation is similar to the IEEE format, but does 21285 not support infinities or NaNs. Instead, the range of exponents is 21286 extended, so that this format can represent normalized values in the 21287 range of 2^-14 to 131008. 21288 21289 The `__fp16' type is a storage format only. For purposes of 21290 arithmetic and other operations, `__fp16' values in C or C++ 21291 expressions are automatically promoted to `float'. In addition, you 21292 cannot declare a function with a return value or parameters of type 21293 `__fp16'. 21294 21295 Note that conversions from `double' to `__fp16' involve an 21296 intermediate conversion to `float'. Because of rounding, this can 21297 sometimes produce a different result than a direct conversion. 21298 21299 ARM provides hardware support for conversions between `__fp16' and 21300 `float' values as an extension to VFP and NEON (Advanced SIMD). GCC 21301 generates code using these hardware instructions if you compile with 21302 options to select an FPU that provides them; for example, 21303 `-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the 21304 `-mfp16-format' option to select a half-precision format. 21305 21306 Language-level support for the `__fp16' data type is independent of 21307 whether GCC generates code using hardware floating-point instructions. 21308 In cases where hardware support is not specified, GCC implements 21309 conversions between `__fp16' and `float' values as library calls. 21310 21311 21312 File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions 21313 21314 6.13 Decimal Floating Types 21315 =========================== 21316 21317 As an extension, GNU C supports decimal floating types as defined in 21318 the N1312 draft of ISO/IEC WDTR24732. Support for decimal floating 21319 types in GCC will evolve as the draft technical report changes. 21320 Calling conventions for any target might also change. Not all targets 21321 support decimal floating types. 21322 21323 The decimal floating types are `_Decimal32', `_Decimal64', and 21324 `_Decimal128'. They use a radix of ten, unlike the floating types 21325 `float', `double', and `long double' whose radix is not specified by 21326 the C standard but is usually two. 21327 21328 Support for decimal floating types includes the arithmetic operators 21329 add, subtract, multiply, divide; unary arithmetic operators; relational 21330 operators; equality operators; and conversions to and from integer and 21331 other floating types. Use a suffix `df' or `DF' in a literal constant 21332 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 21333 for `_Decimal128'. 21334 21335 GCC support of decimal float as specified by the draft technical report 21336 is incomplete: 21337 21338 * When the value of a decimal floating type cannot be represented in 21339 the integer type to which it is being converted, the result is 21340 undefined rather than the result value specified by the draft 21341 technical report. 21342 21343 * GCC does not provide the C library functionality associated with 21344 `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which 21345 must come from a separate C library implementation. Because of 21346 this the GNU C compiler does not define macro `__STDC_DEC_FP__' to 21347 indicate that the implementation conforms to the technical report. 21348 21349 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 21350 the DWARF 2 debug information format. 21351 21352 21353 File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 21354 21355 6.14 Hex Floats 21356 =============== 21357 21358 ISO C99 supports floating-point numbers written not only in the usual 21359 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 21360 written in hexadecimal format. As a GNU extension, GCC supports this 21361 in C90 mode (except in some cases when strictly conforming) and in C++. 21362 In that format the `0x' hex introducer and the `p' or `P' exponent 21363 field are mandatory. The exponent is a decimal number that indicates 21364 the power of 2 by which the significant part is multiplied. Thus 21365 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 21366 is the same as `1.55e1'. 21367 21368 Unlike for floating-point numbers in the decimal notation the exponent 21369 is always required in the hexadecimal notation. Otherwise the compiler 21370 would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 21371 could mean `1.0f' or `1.9375' since `f' is also the extension for 21372 floating-point constants of type `float'. 21373 21374 21375 File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions 21376 21377 6.15 Fixed-Point Types 21378 ====================== 21379 21380 As an extension, GNU C supports fixed-point types as defined in the 21381 N1169 draft of ISO/IEC DTR 18037. Support for fixed-point types in GCC 21382 will evolve as the draft technical report changes. Calling conventions 21383 for any target might also change. Not all targets support fixed-point 21384 types. 21385 21386 The fixed-point types are `short _Fract', `_Fract', `long _Fract', 21387 `long long _Fract', `unsigned short _Fract', `unsigned _Fract', 21388 `unsigned long _Fract', `unsigned long long _Fract', `_Sat short 21389 _Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract', 21390 `_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned 21391 long _Fract', `_Sat unsigned long long _Fract', `short _Accum', 21392 `_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum', 21393 `unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum', 21394 `_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long 21395 _Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat 21396 unsigned long _Accum', `_Sat unsigned long long _Accum'. 21397 21398 Fixed-point data values contain fractional and optional integral parts. 21399 The format of fixed-point data varies and depends on the target machine. 21400 21401 Support for fixed-point types includes: 21402 * prefix and postfix increment and decrement operators (`++', `--') 21403 21404 * unary arithmetic operators (`+', `-', `!') 21405 21406 * binary arithmetic operators (`+', `-', `*', `/') 21407 21408 * binary shift operators (`<<', `>>') 21409 21410 * relational operators (`<', `<=', `>=', `>') 21411 21412 * equality operators (`==', `!=') 21413 21414 * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=') 21415 21416 * conversions to and from integer, floating-point, or fixed-point 21417 types 21418 21419 Use a suffix in a fixed-point literal constant: 21420 * `hr' or `HR' for `short _Fract' and `_Sat short _Fract' 21421 21422 * `r' or `R' for `_Fract' and `_Sat _Fract' 21423 21424 * `lr' or `LR' for `long _Fract' and `_Sat long _Fract' 21425 21426 * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract' 21427 21428 * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned 21429 short _Fract' 21430 21431 * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract' 21432 21433 * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long 21434 _Fract' 21435 21436 * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat 21437 unsigned long long _Fract' 21438 21439 * `hk' or `HK' for `short _Accum' and `_Sat short _Accum' 21440 21441 * `k' or `K' for `_Accum' and `_Sat _Accum' 21442 21443 * `lk' or `LK' for `long _Accum' and `_Sat long _Accum' 21444 21445 * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum' 21446 21447 * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned 21448 short _Accum' 21449 21450 * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum' 21451 21452 * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long 21453 _Accum' 21454 21455 * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat 21456 unsigned long long _Accum' 21457 21458 GCC support of fixed-point types as specified by the draft technical 21459 report is incomplete: 21460 21461 * Pragmas to control overflow and rounding behaviors are not 21462 implemented. 21463 21464 Fixed-point types are supported by the DWARF 2 debug information 21465 format. 21466 21467 21468 File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions 21469 21470 6.16 Named Address Spaces 21471 ========================= 21472 21473 As an extension, GNU C supports named address spaces as defined in the 21474 N1275 draft of ISO/IEC DTR 18037. Support for named address spaces in 21475 GCC will evolve as the draft technical report changes. Calling 21476 conventions for any target might also change. At present, only the 21477 AVR, SPU, M32C, and RL78 targets support address spaces other than the 21478 generic address space. 21479 21480 Address space identifiers may be used exactly like any other C type 21481 qualifier (e.g., `const' or `volatile'). See the N1275 document for 21482 more details. 21483 21484 6.16.1 AVR Named Address Spaces 21485 ------------------------------- 21486 21487 On the AVR target, there are several address spaces that can be used in 21488 order to put read-only data into the flash memory and access that data 21489 by means of the special instructions `LPM' or `ELPM' needed to read 21490 from flash. 21491 21492 Per default, any data including read-only data is located in RAM (the 21493 generic address space) so that non-generic address spaces are needed to 21494 locate read-only data in flash memory _and_ to generate the right 21495 instructions to access this data without using (inline) assembler code. 21496 21497 `__flash' 21498 The `__flash' qualifier locates data in the `.progmem.data' 21499 section. Data is read using the `LPM' instruction. Pointers to 21500 this address space are 16 bits wide. 21501 21502 `__flash1' 21503 `__flash2' 21504 `__flash3' 21505 `__flash4' 21506 `__flash5' 21507 These are 16-bit address spaces locating data in section 21508 `.progmemN.data' where N refers to address space `__flashN'. The 21509 compiler sets the `RAMPZ' segment register appropriately before 21510 reading data by means of the `ELPM' instruction. 21511 21512 `__memx' 21513 This is a 24-bit address space that linearizes flash and RAM: If 21514 the high bit of the address is set, data is read from RAM using 21515 the lower two bytes as RAM address. If the high bit of the 21516 address is clear, data is read from flash with `RAMPZ' set 21517 according to the high byte of the address. *Note 21518 `__builtin_avr_flash_segment': AVR Built-in Functions. 21519 21520 Objects in this address space are located in `.progmemx.data'. 21521 21522 Example 21523 21524 char my_read (const __flash char ** p) 21525 { 21526 /* p is a pointer to RAM that points to a pointer to flash. 21527 The first indirection of p reads that flash pointer 21528 from RAM and the second indirection reads a char from this 21529 flash address. */ 21530 21531 return **p; 21532 } 21533 21534 /* Locate array[] in flash memory */ 21535 const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 }; 21536 21537 int i = 1; 21538 21539 int main (void) 21540 { 21541 /* Return 17 by reading from flash memory */ 21542 return array[array[i]]; 21543 } 21544 21545 For each named address space supported by avr-gcc there is an equally 21546 named but uppercase built-in macro defined. The purpose is to 21547 facilitate testing if respective address space support is available or 21548 not: 21549 21550 #ifdef __FLASH 21551 const __flash int var = 1; 21552 21553 int read_var (void) 21554 { 21555 return var; 21556 } 21557 #else 21558 #include <avr/pgmspace.h> /* From AVR-LibC */ 21559 21560 const int var PROGMEM = 1; 21561 21562 int read_var (void) 21563 { 21564 return (int) pgm_read_word (&var); 21565 } 21566 #endif /* __FLASH */ 21567 21568 Notice that attribute *note `progmem': AVR Variable Attributes. 21569 locates data in flash but accesses to these data read from generic 21570 address space, i.e. from RAM, so that you need special accessors like 21571 `pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) 21572 together with attribute `progmem'. 21573 21574 Limitations and caveats 21575 21576 * Reading across the 64 KiB section boundary of the `__flash' or 21577 `__flashN' address spaces shows undefined behavior. The only 21578 address space that supports reading across the 64 KiB flash 21579 segment boundaries is `__memx'. 21580 21581 * If you use one of the `__flashN' address spaces you must arrange 21582 your linker script to locate the `.progmemN.data' sections 21583 according to your needs. 21584 21585 * Any data or pointers to the non-generic address spaces must be 21586 qualified as `const', i.e. as read-only data. This still applies 21587 if the data in one of these address spaces like software version 21588 number or calibration lookup table are intended to be changed 21589 after load time by, say, a boot loader. In this case the right 21590 qualification is `const' `volatile' so that the compiler must not 21591 optimize away known values or insert them as immediates into 21592 operands of instructions. 21593 21594 * The following code initializes a variable `pfoo' located in static 21595 storage with a 24-bit address: 21596 extern const __memx char foo; 21597 const __memx void *pfoo = &foo; 21598 21599 Such code requires at least binutils 2.23, see 21600 PR13503 (http://sourceware.org/PR13503). 21601 21602 21603 6.16.2 M32C Named Address Spaces 21604 -------------------------------- 21605 21606 On the M32C target, with the R8C and M16C CPU variants, variables 21607 qualified with `__far' are accessed using 32-bit addresses in order to 21608 access memory beyond the first 64 Ki bytes. If `__far' is used with 21609 the M32CM or M32C CPU variants, it has no effect. 21610 21611 6.16.3 RL78 Named Address Spaces 21612 -------------------------------- 21613 21614 On the RL78 target, variables qualified with `__far' are accessed with 21615 32-bit pointers (20-bit addresses) rather than the default 16-bit 21616 addresses. Non-far variables are assumed to appear in the topmost 21617 64 KiB of the address space. 21618 21619 6.16.4 SPU Named Address Spaces 21620 ------------------------------- 21621 21622 On the SPU target variables may be declared as belonging to another 21623 address space by qualifying the type with the `__ea' address space 21624 identifier: 21625 21626 extern int __ea i; 21627 21628 The compiler generates special code to access the variable `i'. It may 21629 use runtime library support, or generate special machine instructions 21630 to access that address space. 21631 21632 21633 File: gcc.info, Node: Zero Length, Next: Empty Structures, Prev: Named Address Spaces, Up: C Extensions 21634 21635 6.17 Arrays of Length Zero 21636 ========================== 21637 21638 Zero-length arrays are allowed in GNU C. They are very useful as the 21639 last element of a structure that is really a header for a 21640 variable-length object: 21641 21642 struct line { 21643 int length; 21644 char contents[0]; 21645 }; 21646 21647 struct line *thisline = (struct line *) 21648 malloc (sizeof (struct line) + this_length); 21649 thisline->length = this_length; 21650 21651 In ISO C90, you would have to give `contents' a length of 1, which 21652 means either you waste space or complicate the argument to `malloc'. 21653 21654 In ISO C99, you would use a "flexible array member", which is slightly 21655 different in syntax and semantics: 21656 21657 * Flexible array members are written as `contents[]' without the `0'. 21658 21659 * Flexible array members have incomplete type, and so the `sizeof' 21660 operator may not be applied. As a quirk of the original 21661 implementation of zero-length arrays, `sizeof' evaluates to zero. 21662 21663 * Flexible array members may only appear as the last member of a 21664 `struct' that is otherwise non-empty. 21665 21666 * A structure containing a flexible array member, or a union 21667 containing such a structure (possibly recursively), may not be a 21668 member of a structure or an element of an array. (However, these 21669 uses are permitted by GCC as extensions.) 21670 21671 GCC versions before 3.0 allowed zero-length arrays to be statically 21672 initialized, as if they were flexible arrays. In addition to those 21673 cases that were useful, it also allowed initializations in situations 21674 that would corrupt later data. Non-empty initialization of zero-length 21675 arrays is now treated like any case where there are more initializer 21676 elements than the array holds, in that a suitable warning about "excess 21677 elements in array" is given, and the excess elements (all of them, in 21678 this case) are ignored. 21679 21680 Instead GCC allows static initialization of flexible array members. 21681 This is equivalent to defining a new structure containing the original 21682 structure followed by an array of sufficient size to contain the data. 21683 E.g. in the following, `f1' is constructed as if it were declared like 21684 `f2'. 21685 21686 struct f1 { 21687 int x; int y[]; 21688 } f1 = { 1, { 2, 3, 4 } }; 21689 21690 struct f2 { 21691 struct f1 f1; int data[3]; 21692 } f2 = { { 1 }, { 2, 3, 4 } }; 21693 21694 The convenience of this extension is that `f1' has the desired type, 21695 eliminating the need to consistently refer to `f2.f1'. 21696 21697 This has symmetry with normal static arrays, in that an array of 21698 unknown size is also written with `[]'. 21699 21700 Of course, this extension only makes sense if the extra data comes at 21701 the end of a top-level object, as otherwise we would be overwriting 21702 data at subsequent offsets. To avoid undue complication and confusion 21703 with initialization of deeply nested arrays, we simply disallow any 21704 non-empty initialization except when the structure is the top-level 21705 object. For example: 21706 21707 struct foo { int x; int y[]; }; 21708 struct bar { struct foo z; }; 21709 21710 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 21711 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 21712 struct bar c = { { 1, { } } }; // Valid. 21713 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 21714 21715 21716 File: gcc.info, Node: Empty Structures, Next: Variable Length, Prev: Zero Length, Up: C Extensions 21717 21718 6.18 Structures With No Members 21719 =============================== 21720 21721 GCC permits a C structure to have no members: 21722 21723 struct empty { 21724 }; 21725 21726 The structure has size zero. In C++, empty structures are part of the 21727 language. G++ treats empty structures as if they had a single member 21728 of type `char'. 21729 21730 21731 File: gcc.info, Node: Variable Length, Next: Variadic Macros, Prev: Empty Structures, Up: C Extensions 21732 21733 6.19 Arrays of Variable Length 21734 ============================== 21735 21736 Variable-length automatic arrays are allowed in ISO C99, and as an 21737 extension GCC accepts them in C90 mode and in C++. These arrays are 21738 declared like any other automatic arrays, but with a length that is not 21739 a constant expression. The storage is allocated at the point of 21740 declaration and deallocated when the block scope containing the 21741 declaration exits. For example: 21742 21743 FILE * 21744 concat_fopen (char *s1, char *s2, char *mode) 21745 { 21746 char str[strlen (s1) + strlen (s2) + 1]; 21747 strcpy (str, s1); 21748 strcat (str, s2); 21749 return fopen (str, mode); 21750 } 21751 21752 Jumping or breaking out of the scope of the array name deallocates the 21753 storage. Jumping into the scope is not allowed; you get an error 21754 message for it. 21755 21756 You can use the function `alloca' to get an effect much like 21757 variable-length arrays. The function `alloca' is available in many 21758 other C implementations (but not in all). On the other hand, 21759 variable-length arrays are more elegant. 21760 21761 There are other differences between these two methods. Space allocated 21762 with `alloca' exists until the containing _function_ returns. The 21763 space for a variable-length array is deallocated as soon as the array 21764 name's scope ends. (If you use both variable-length arrays and 21765 `alloca' in the same function, deallocation of a variable-length array 21766 also deallocates anything more recently allocated with `alloca'.) 21767 21768 You can also use variable-length arrays as arguments to functions: 21769 21770 struct entry 21771 tester (int len, char data[len][len]) 21772 { 21773 /* ... */ 21774 } 21775 21776 The length of an array is computed once when the storage is allocated 21777 and is remembered for the scope of the array in case you access it with 21778 `sizeof'. 21779 21780 If you want to pass the array first and the length afterward, you can 21781 use a forward declaration in the parameter list--another GNU extension. 21782 21783 struct entry 21784 tester (int len; char data[len][len], int len) 21785 { 21786 /* ... */ 21787 } 21788 21789 The `int len' before the semicolon is a "parameter forward 21790 declaration", and it serves the purpose of making the name `len' known 21791 when the declaration of `data' is parsed. 21792 21793 You can write any number of such parameter forward declarations in the 21794 parameter list. They can be separated by commas or semicolons, but the 21795 last one must end with a semicolon, which is followed by the "real" 21796 parameter declarations. Each forward declaration must match a "real" 21797 declaration in parameter name and data type. ISO C99 does not support 21798 parameter forward declarations. 21799 21800 21801 File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Variable Length, Up: C Extensions 21802 21803 6.20 Macros with a Variable Number of Arguments. 21804 ================================================ 21805 21806 In the ISO C standard of 1999, a macro can be declared to accept a 21807 variable number of arguments much as a function can. The syntax for 21808 defining the macro is similar to that of a function. Here is an 21809 example: 21810 21811 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 21812 21813 Here `...' is a "variable argument". In the invocation of such a 21814 macro, it represents the zero or more tokens until the closing 21815 parenthesis that ends the invocation, including any commas. This set of 21816 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 21817 it appears. See the CPP manual for more information. 21818 21819 GCC has long supported variadic macros, and used a different syntax 21820 that allowed you to give a name to the variable arguments just like any 21821 other argument. Here is an example: 21822 21823 #define debug(format, args...) fprintf (stderr, format, args) 21824 21825 This is in all ways equivalent to the ISO C example above, but arguably 21826 more readable and descriptive. 21827 21828 GNU CPP has two further variadic macro extensions, and permits them to 21829 be used with either of the above forms of macro definition. 21830 21831 In standard C, you are not allowed to leave the variable argument out 21832 entirely; but you are allowed to pass an empty argument. For example, 21833 this invocation is invalid in ISO C, because there is no comma after 21834 the string: 21835 21836 debug ("A message") 21837 21838 GNU CPP permits you to completely omit the variable arguments in this 21839 way. In the above examples, the compiler would complain, though since 21840 the expansion of the macro still has the extra comma after the format 21841 string. 21842 21843 To help solve this problem, CPP behaves specially for variable 21844 arguments used with the token paste operator, `##'. If instead you 21845 write 21846 21847 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 21848 21849 and if the variable arguments are omitted or empty, the `##' operator 21850 causes the preprocessor to remove the comma before it. If you do 21851 provide some variable arguments in your macro invocation, GNU CPP does 21852 not complain about the paste operation and instead places the variable 21853 arguments after the comma. Just like any other pasted macro argument, 21854 these arguments are not macro expanded. 21855 21856 21857 File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 21858 21859 6.21 Slightly Looser Rules for Escaped Newlines 21860 =============================================== 21861 21862 Recently, the preprocessor has relaxed its treatment of escaped 21863 newlines. Previously, the newline had to immediately follow a 21864 backslash. The current implementation allows whitespace in the form of 21865 spaces, horizontal and vertical tabs, and form feeds between the 21866 backslash and the subsequent newline. The preprocessor issues a 21867 warning, but treats it as a valid escaped newline and combines the two 21868 lines to form a single logical line. This works within comments and 21869 tokens, as well as between tokens. Comments are _not_ treated as 21870 whitespace for the purposes of this relaxation, since they have not yet 21871 been replaced with spaces. 21872 21873 21874 File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 21875 21876 6.22 Non-Lvalue Arrays May Have Subscripts 21877 ========================================== 21878 21879 In ISO C99, arrays that are not lvalues still decay to pointers, and 21880 may be subscripted, although they may not be modified or used after the 21881 next sequence point and the unary `&' operator may not be applied to 21882 them. As an extension, GNU C allows such arrays to be subscripted in 21883 C90 mode, though otherwise they do not decay to pointers outside C99 21884 mode. For example, this is valid in GNU C though not valid in C90: 21885 21886 struct foo {int a[4];}; 21887 21888 struct foo f(); 21889 21890 bar (int index) 21891 { 21892 return f().a[index]; 21893 } 21894 21895 21896 File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 21897 21898 6.23 Arithmetic on `void'- and Function-Pointers 21899 ================================================ 21900 21901 In GNU C, addition and subtraction operations are supported on pointers 21902 to `void' and on pointers to functions. This is done by treating the 21903 size of a `void' or of a function as 1. 21904 21905 A consequence of this is that `sizeof' is also allowed on `void' and 21906 on function types, and returns 1. 21907 21908 The option `-Wpointer-arith' requests a warning if these extensions 21909 are used. 21910 21911 21912 File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 21913 21914 6.24 Non-Constant Initializers 21915 ============================== 21916 21917 As in standard C++ and ISO C99, the elements of an aggregate 21918 initializer for an automatic variable are not required to be constant 21919 expressions in GNU C. Here is an example of an initializer with 21920 run-time varying elements: 21921 21922 foo (float f, float g) 21923 { 21924 float beat_freqs[2] = { f-g, f+g }; 21925 /* ... */ 21926 } 21927 21928 21929 File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 21930 21931 6.25 Compound Literals 21932 ====================== 21933 21934 ISO C99 supports compound literals. A compound literal looks like a 21935 cast containing an initializer. Its value is an object of the type 21936 specified in the cast, containing the elements specified in the 21937 initializer; it is an lvalue. As an extension, GCC supports compound 21938 literals in C90 mode and in C++, though the semantics are somewhat 21939 different in C++. 21940 21941 Usually, the specified type is a structure. Assume that `struct foo' 21942 and `structure' are declared as shown: 21943 21944 struct foo {int a; char b[2];} structure; 21945 21946 Here is an example of constructing a `struct foo' with a compound 21947 literal: 21948 21949 structure = ((struct foo) {x + y, 'a', 0}); 21950 21951 This is equivalent to writing the following: 21952 21953 { 21954 struct foo temp = {x + y, 'a', 0}; 21955 structure = temp; 21956 } 21957 21958 You can also construct an array, though this is dangerous in C++, as 21959 explained below. If all the elements of the compound literal are (made 21960 up of) simple constant expressions, suitable for use in initializers of 21961 objects of static storage duration, then the compound literal can be 21962 coerced to a pointer to its first element and used in such an 21963 initializer, as shown here: 21964 21965 char **foo = (char *[]) { "x", "y", "z" }; 21966 21967 Compound literals for scalar types and union types are also allowed, 21968 but then the compound literal is equivalent to a cast. 21969 21970 As a GNU extension, GCC allows initialization of objects with static 21971 storage duration by compound literals (which is not possible in ISO 21972 C99, because the initializer is not a constant). It is handled as if 21973 the object is initialized only with the bracket enclosed list if the 21974 types of the compound literal and the object match. The initializer 21975 list of the compound literal must be constant. If the object being 21976 initialized has array type of unknown size, the size is determined by 21977 compound literal size. 21978 21979 static struct foo x = (struct foo) {1, 'a', 'b'}; 21980 static int y[] = (int []) {1, 2, 3}; 21981 static int z[] = (int [3]) {1}; 21982 21983 The above lines are equivalent to the following: 21984 static struct foo x = {1, 'a', 'b'}; 21985 static int y[] = {1, 2, 3}; 21986 static int z[] = {1, 0, 0}; 21987 21988 In C, a compound literal designates an unnamed object with static or 21989 automatic storage duration. In C++, a compound literal designates a 21990 temporary object, which only lives until the end of its 21991 full-expression. As a result, well-defined C code that takes the 21992 address of a subobject of a compound literal can be undefined in C++. 21993 For instance, if the array compound literal example above appeared 21994 inside a function, any subsequent use of `foo' in C++ has undefined 21995 behavior because the lifetime of the array ends after the declaration 21996 of `foo'. As a result, the C++ compiler now rejects the conversion of 21997 a temporary array to a pointer. 21998 21999 As an optimization, the C++ compiler sometimes gives array compound 22000 literals longer lifetimes: when the array either appears outside a 22001 function or has const-qualified type. If `foo' and its initializer had 22002 elements of `char *const' type rather than `char *', or if `foo' were a 22003 global variable, the array would have static storage duration. But it 22004 is probably safest just to avoid the use of array compound literals in 22005 code compiled as C++. 22006 22007 22008 File: gcc.info, Node: Designated Inits, Next: Case Ranges, Prev: Compound Literals, Up: C Extensions 22009 22010 6.26 Designated Initializers 22011 ============================ 22012 22013 Standard C90 requires the elements of an initializer to appear in a 22014 fixed order, the same as the order of the elements in the array or 22015 structure being initialized. 22016 22017 In ISO C99 you can give the elements in any order, specifying the array 22018 indices or structure field names they apply to, and GNU C allows this as 22019 an extension in C90 mode as well. This extension is not implemented in 22020 GNU C++. 22021 22022 To specify an array index, write `[INDEX] =' before the element value. 22023 For example, 22024 22025 int a[6] = { [4] = 29, [2] = 15 }; 22026 22027 is equivalent to 22028 22029 int a[6] = { 0, 0, 15, 0, 29, 0 }; 22030 22031 The index values must be constant expressions, even if the array being 22032 initialized is automatic. 22033 22034 An alternative syntax for this that has been obsolete since GCC 2.5 but 22035 GCC still accepts is to write `[INDEX]' before the element value, with 22036 no `='. 22037 22038 To initialize a range of elements to the same value, write `[FIRST ... 22039 LAST] = VALUE'. This is a GNU extension. For example, 22040 22041 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 22042 22043 If the value in it has side-effects, the side-effects happen only once, 22044 not for each initialized field by the range initializer. 22045 22046 Note that the length of the array is the highest value specified plus 22047 one. 22048 22049 In a structure initializer, specify the name of a field to initialize 22050 with `.FIELDNAME =' before the element value. For example, given the 22051 following structure, 22052 22053 struct point { int x, y; }; 22054 22055 the following initialization 22056 22057 struct point p = { .y = yvalue, .x = xvalue }; 22058 22059 is equivalent to 22060 22061 struct point p = { xvalue, yvalue }; 22062 22063 Another syntax that has the same meaning, obsolete since GCC 2.5, is 22064 `FIELDNAME:', as shown here: 22065 22066 struct point p = { y: yvalue, x: xvalue }; 22067 22068 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 22069 also use a designator (or the obsolete colon syntax) when initializing 22070 a union, to specify which element of the union should be used. For 22071 example, 22072 22073 union foo { int i; double d; }; 22074 22075 union foo f = { .d = 4 }; 22076 22077 converts 4 to a `double' to store it in the union using the second 22078 element. By contrast, casting 4 to type `union foo' stores it into the 22079 union as the integer `i', since it is an integer. (*Note Cast to 22080 Union::.) 22081 22082 You can combine this technique of naming elements with ordinary C 22083 initialization of successive elements. Each initializer element that 22084 does not have a designator applies to the next consecutive element of 22085 the array or structure. For example, 22086 22087 int a[6] = { [1] = v1, v2, [4] = v4 }; 22088 22089 is equivalent to 22090 22091 int a[6] = { 0, v1, v2, 0, v4, 0 }; 22092 22093 Labeling the elements of an array initializer is especially useful 22094 when the indices are characters or belong to an `enum' type. For 22095 example: 22096 22097 int whitespace[256] 22098 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 22099 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 22100 22101 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 22102 before an `=' to specify a nested subobject to initialize; the list is 22103 taken relative to the subobject corresponding to the closest 22104 surrounding brace pair. For example, with the `struct point' 22105 declaration above: 22106 22107 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 22108 22109 If the same field is initialized multiple times, it has the value from 22110 the last initialization. If any such overridden initialization has 22111 side-effect, it is unspecified whether the side-effect happens or not. 22112 Currently, GCC discards them and issues a warning. 22113 22114 22115 File: gcc.info, Node: Case Ranges, Next: Cast to Union, Prev: Designated Inits, Up: C Extensions 22116 22117 6.27 Case Ranges 22118 ================ 22119 22120 You can specify a range of consecutive values in a single `case' label, 22121 like this: 22122 22123 case LOW ... HIGH: 22124 22125 This has the same effect as the proper number of individual `case' 22126 labels, one for each integer value from LOW to HIGH, inclusive. 22127 22128 This feature is especially useful for ranges of ASCII character codes: 22129 22130 case 'A' ... 'Z': 22131 22132 *Be careful:* Write spaces around the `...', for otherwise it may be 22133 parsed wrong when you use it with integer values. For example, write 22134 this: 22135 22136 case 1 ... 5: 22137 22138 rather than this: 22139 22140 case 1...5: 22141 22142 22143 File: gcc.info, Node: Cast to Union, Next: Mixed Declarations, Prev: Case Ranges, Up: C Extensions 22144 22145 6.28 Cast to a Union Type 22146 ========================= 22147 22148 A cast to union type is similar to other casts, except that the type 22149 specified is a union type. You can specify the type either with `union 22150 TAG' or with a typedef name. A cast to union is actually a 22151 constructor, not a cast, and hence does not yield an lvalue like normal 22152 casts. (*Note Compound Literals::.) 22153 22154 The types that may be cast to the union type are those of the members 22155 of the union. Thus, given the following union and variables: 22156 22157 union foo { int i; double d; }; 22158 int x; 22159 double y; 22160 22161 both `x' and `y' can be cast to type `union foo'. 22162 22163 Using the cast as the right-hand side of an assignment to a variable of 22164 union type is equivalent to storing in a member of the union: 22165 22166 union foo u; 22167 /* ... */ 22168 u = (union foo) x == u.i = x 22169 u = (union foo) y == u.d = y 22170 22171 You can also use the union cast as a function argument: 22172 22173 void hack (union foo); 22174 /* ... */ 22175 hack ((union foo) x); 22176 22177 22178 File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Cast to Union, Up: C Extensions 22179 22180 6.29 Mixed Declarations and Code 22181 ================================ 22182 22183 ISO C99 and ISO C++ allow declarations and code to be freely mixed 22184 within compound statements. As an extension, GNU C also allows this in 22185 C90 mode. For example, you could do: 22186 22187 int i; 22188 /* ... */ 22189 i++; 22190 int j = i + 2; 22191 22192 Each identifier is visible from where it is declared until the end of 22193 the enclosing block. 22194 22195 22196 File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 22197 22198 6.30 Declaring Attributes of Functions 22199 ====================================== 22200 22201 In GNU C, you declare certain things about functions called in your 22202 program which help the compiler optimize function calls and check your 22203 code more carefully. 22204 22205 The keyword `__attribute__' allows you to specify special attributes 22206 when making a declaration. This keyword is followed by an attribute 22207 specification inside double parentheses. The following attributes are 22208 currently defined for functions on all targets: `aligned', 22209 `alloc_size', `noreturn', `returns_twice', `noinline', `noclone', 22210 `always_inline', `flatten', `pure', `const', `nothrow', `sentinel', 22211 `format', `format_arg', `no_instrument_function', `no_split_stack', 22212 `section', `constructor', `destructor', `used', `unused', `deprecated', 22213 `weak', `malloc', `alias', `ifunc', `warn_unused_result', `nonnull', 22214 `gnu_inline', `externally_visible', `hot', `cold', `artificial', 22215 `no_sanitize_address', `no_address_safety_analysis', `error' and 22216 `warning'. Several other attributes are defined for functions on 22217 particular target systems. Other attributes, including `section' are 22218 supported for variables declarations (*note Variable Attributes::) and 22219 for types (*note Type Attributes::). 22220 22221 GCC plugins may provide their own attributes. 22222 22223 You may also specify attributes with `__' preceding and following each 22224 keyword. This allows you to use them in header files without being 22225 concerned about a possible macro of the same name. For example, you 22226 may use `__noreturn__' instead of `noreturn'. 22227 22228 *Note Attribute Syntax::, for details of the exact syntax for using 22229 attributes. 22230 22231 `alias ("TARGET")' 22232 The `alias' attribute causes the declaration to be emitted as an 22233 alias for another symbol, which must be specified. For instance, 22234 22235 void __f () { /* Do something. */; } 22236 void f () __attribute__ ((weak, alias ("__f"))); 22237 22238 defines `f' to be a weak alias for `__f'. In C++, the mangled 22239 name for the target must be used. It is an error if `__f' is not 22240 defined in the same translation unit. 22241 22242 Not all target machines support this attribute. 22243 22244 `aligned (ALIGNMENT)' 22245 This attribute specifies a minimum alignment for the function, 22246 measured in bytes. 22247 22248 You cannot use this attribute to decrease the alignment of a 22249 function, only to increase it. However, when you explicitly 22250 specify a function alignment this overrides the effect of the 22251 `-falign-functions' (*note Optimize Options::) option for this 22252 function. 22253 22254 Note that the effectiveness of `aligned' attributes may be limited 22255 by inherent limitations in your linker. On many systems, the 22256 linker is only able to arrange for functions to be aligned up to a 22257 certain maximum alignment. (For some linkers, the maximum 22258 supported alignment may be very very small.) See your linker 22259 documentation for further information. 22260 22261 The `aligned' attribute can also be used for variables and fields 22262 (*note Variable Attributes::.) 22263 22264 `alloc_size' 22265 The `alloc_size' attribute is used to tell the compiler that the 22266 function return value points to memory, where the size is given by 22267 one or two of the functions parameters. GCC uses this information 22268 to improve the correctness of `__builtin_object_size'. 22269 22270 The function parameter(s) denoting the allocated size are 22271 specified by one or two integer arguments supplied to the 22272 attribute. The allocated size is either the value of the single 22273 function argument specified or the product of the two function 22274 arguments specified. Argument numbering starts at one. 22275 22276 For instance, 22277 22278 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 22279 void my_realloc(void*, size_t) __attribute__((alloc_size(2))) 22280 22281 declares that `my_calloc' returns memory of the size given by the 22282 product of parameter 1 and 2 and that `my_realloc' returns memory 22283 of the size given by parameter 2. 22284 22285 `always_inline' 22286 Generally, functions are not inlined unless optimization is 22287 specified. For functions declared inline, this attribute inlines 22288 the function even if no optimization level is specified. 22289 22290 `gnu_inline' 22291 This attribute should be used with a function that is also declared 22292 with the `inline' keyword. It directs GCC to treat the function 22293 as if it were defined in gnu90 mode even when compiling in C99 or 22294 gnu99 mode. 22295 22296 If the function is declared `extern', then this definition of the 22297 function is used only for inlining. In no case is the function 22298 compiled as a standalone function, not even if you take its address 22299 explicitly. Such an address becomes an external reference, as if 22300 you had only declared the function, and had not defined it. This 22301 has almost the effect of a macro. The way to use this is to put a 22302 function definition in a header file with this attribute, and put 22303 another copy of the function, without `extern', in a library file. 22304 The definition in the header file causes most calls to the 22305 function to be inlined. If any uses of the function remain, they 22306 refer to the single copy in the library. Note that the two 22307 definitions of the functions need not be precisely the same, 22308 although if they do not have the same effect your program may 22309 behave oddly. 22310 22311 In C, if the function is neither `extern' nor `static', then the 22312 function is compiled as a standalone function, as well as being 22313 inlined where possible. 22314 22315 This is how GCC traditionally handled functions declared `inline'. 22316 Since ISO C99 specifies a different semantics for `inline', this 22317 function attribute is provided as a transition measure and as a 22318 useful feature in its own right. This attribute is available in 22319 GCC 4.1.3 and later. It is available if either of the 22320 preprocessor macros `__GNUC_GNU_INLINE__' or 22321 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 22322 As Fast As a Macro: Inline. 22323 22324 In C++, this attribute does not depend on `extern' in any way, but 22325 it still requires the `inline' keyword to enable its special 22326 behavior. 22327 22328 `artificial' 22329 This attribute is useful for small inline wrappers that if possible 22330 should appear during debugging as a unit. Depending on the debug 22331 info format it either means marking the function as artificial or 22332 using the caller location for all instructions within the inlined 22333 body. 22334 22335 `bank_switch' 22336 When added to an interrupt handler with the M32C port, causes the 22337 prologue and epilogue to use bank switching to preserve the 22338 registers rather than saving them on the stack. 22339 22340 `flatten' 22341 Generally, inlining into a function is limited. For a function 22342 marked with this attribute, every call inside this function is 22343 inlined, if possible. Whether the function itself is considered 22344 for inlining depends on its size and the current inlining 22345 parameters. 22346 22347 `error ("MESSAGE")' 22348 If this attribute is used on a function declaration and a call to 22349 such a function is not eliminated through dead code elimination or 22350 other optimizations, an error that includes MESSAGE is diagnosed. 22351 This is useful for compile-time checking, especially together with 22352 `__builtin_constant_p' and inline functions where checking the 22353 inline function arguments is not possible through `extern char 22354 [(condition) ? 1 : -1];' tricks. While it is possible to leave 22355 the function undefined and thus invoke a link failure, when using 22356 this attribute the problem is diagnosed earlier and with exact 22357 location of the call even in presence of inline functions or when 22358 not emitting debugging information. 22359 22360 `warning ("MESSAGE")' 22361 If this attribute is used on a function declaration and a call to 22362 such a function is not eliminated through dead code elimination or 22363 other optimizations, a warning that includes MESSAGE is diagnosed. 22364 This is useful for compile-time checking, especially together with 22365 `__builtin_constant_p' and inline functions. While it is possible 22366 to define the function with a message in `.gnu.warning*' section, 22367 when using this attribute the problem is diagnosed earlier and 22368 with exact location of the call even in presence of inline 22369 functions or when not emitting debugging information. 22370 22371 `cdecl' 22372 On the Intel 386, the `cdecl' attribute causes the compiler to 22373 assume that the calling function pops off the stack space used to 22374 pass arguments. This is useful to override the effects of the 22375 `-mrtd' switch. 22376 22377 `const' 22378 Many functions do not examine any values except their arguments, 22379 and have no effects except the return value. Basically this is 22380 just slightly more strict class than the `pure' attribute below, 22381 since function is not allowed to read global memory. 22382 22383 Note that a function that has pointer arguments and examines the 22384 data pointed to must _not_ be declared `const'. Likewise, a 22385 function that calls a non-`const' function usually must not be 22386 `const'. It does not make sense for a `const' function to return 22387 `void'. 22388 22389 The attribute `const' is not implemented in GCC versions earlier 22390 than 2.5. An alternative way to declare that a function has no 22391 side effects, which works in the current version and in some older 22392 versions, is as follows: 22393 22394 typedef int intfn (); 22395 22396 extern const intfn square; 22397 22398 This approach does not work in GNU C++ from 2.6.0 on, since the 22399 language specifies that the `const' must be attached to the return 22400 value. 22401 22402 `constructor' 22403 `destructor' 22404 `constructor (PRIORITY)' 22405 `destructor (PRIORITY)' 22406 The `constructor' attribute causes the function to be called 22407 automatically before execution enters `main ()'. Similarly, the 22408 `destructor' attribute causes the function to be called 22409 automatically after `main ()' completes or `exit ()' is called. 22410 Functions with these attributes are useful for initializing data 22411 that is used implicitly during the execution of the program. 22412 22413 You may provide an optional integer priority to control the order 22414 in which constructor and destructor functions are run. A 22415 constructor with a smaller priority number runs before a 22416 constructor with a larger priority number; the opposite 22417 relationship holds for destructors. So, if you have a constructor 22418 that allocates a resource and a destructor that deallocates the 22419 same resource, both functions typically have the same priority. 22420 The priorities for constructor and destructor functions are the 22421 same as those specified for namespace-scope C++ objects (*note C++ 22422 Attributes::). 22423 22424 These attributes are not currently implemented for Objective-C. 22425 22426 `deprecated' 22427 `deprecated (MSG)' 22428 The `deprecated' attribute results in a warning if the function is 22429 used anywhere in the source file. This is useful when identifying 22430 functions that are expected to be removed in a future version of a 22431 program. The warning also includes the location of the declaration 22432 of the deprecated function, to enable users to easily find further 22433 information about why the function is deprecated, or what they 22434 should do instead. Note that the warnings only occurs for uses: 22435 22436 int old_fn () __attribute__ ((deprecated)); 22437 int old_fn (); 22438 int (*fn_ptr)() = old_fn; 22439 22440 results in a warning on line 3 but not line 2. The optional MSG 22441 argument, which must be a string, is printed in the warning if 22442 present. 22443 22444 The `deprecated' attribute can also be used for variables and 22445 types (*note Variable Attributes::, *note Type Attributes::.) 22446 22447 `disinterrupt' 22448 On Epiphany and MeP targets, this attribute causes the compiler to 22449 emit instructions to disable interrupts for the duration of the 22450 given function. 22451 22452 `dllexport' 22453 On Microsoft Windows targets and Symbian OS targets the 22454 `dllexport' attribute causes the compiler to provide a global 22455 pointer to a pointer in a DLL, so that it can be referenced with 22456 the `dllimport' attribute. On Microsoft Windows targets, the 22457 pointer name is formed by combining `_imp__' and the function or 22458 variable name. 22459 22460 You can use `__declspec(dllexport)' as a synonym for 22461 `__attribute__ ((dllexport))' for compatibility with other 22462 compilers. 22463 22464 On systems that support the `visibility' attribute, this attribute 22465 also implies "default" visibility. It is an error to explicitly 22466 specify any other visibility. 22467 22468 In previous versions of GCC, the `dllexport' attribute was ignored 22469 for inlined functions, unless the `-fkeep-inline-functions' flag 22470 had been used. The default behavior now is to emit all dllexported 22471 inline functions; however, this can cause object file-size bloat, 22472 in which case the old behavior can be restored by using 22473 `-fno-keep-inline-dllexport'. 22474 22475 The attribute is also ignored for undefined symbols. 22476 22477 When applied to C++ classes, the attribute marks defined 22478 non-inlined member functions and static data members as exports. 22479 Static consts initialized in-class are not marked unless they are 22480 also defined out-of-class. 22481 22482 For Microsoft Windows targets there are alternative methods for 22483 including the symbol in the DLL's export table such as using a 22484 `.def' file with an `EXPORTS' section or, with GNU ld, using the 22485 `--export-all' linker flag. 22486 22487 `dllimport' 22488 On Microsoft Windows and Symbian OS targets, the `dllimport' 22489 attribute causes the compiler to reference a function or variable 22490 via a global pointer to a pointer that is set up by the DLL 22491 exporting the symbol. The attribute implies `extern'. On 22492 Microsoft Windows targets, the pointer name is formed by combining 22493 `_imp__' and the function or variable name. 22494 22495 You can use `__declspec(dllimport)' as a synonym for 22496 `__attribute__ ((dllimport))' for compatibility with other 22497 compilers. 22498 22499 On systems that support the `visibility' attribute, this attribute 22500 also implies "default" visibility. It is an error to explicitly 22501 specify any other visibility. 22502 22503 Currently, the attribute is ignored for inlined functions. If the 22504 attribute is applied to a symbol _definition_, an error is 22505 reported. If a symbol previously declared `dllimport' is later 22506 defined, the attribute is ignored in subsequent references, and a 22507 warning is emitted. The attribute is also overridden by a 22508 subsequent declaration as `dllexport'. 22509 22510 When applied to C++ classes, the attribute marks non-inlined 22511 member functions and static data members as imports. However, the 22512 attribute is ignored for virtual methods to allow creation of 22513 vtables using thunks. 22514 22515 On the SH Symbian OS target the `dllimport' attribute also has 22516 another affect--it can cause the vtable and run-time type 22517 information for a class to be exported. This happens when the 22518 class has a dllimported constructor or a non-inline, non-pure 22519 virtual function and, for either of those two conditions, the 22520 class also has an inline constructor or destructor and has a key 22521 function that is defined in the current translation unit. 22522 22523 For Microsoft Windows targets the use of the `dllimport' attribute 22524 on functions is not necessary, but provides a small performance 22525 benefit by eliminating a thunk in the DLL. The use of the 22526 `dllimport' attribute on imported variables was required on older 22527 versions of the GNU linker, but can now be avoided by passing the 22528 `--enable-auto-import' switch to the GNU linker. As with 22529 functions, using the attribute for a variable eliminates a thunk in 22530 the DLL. 22531 22532 One drawback to using this attribute is that a pointer to a 22533 _variable_ marked as `dllimport' cannot be used as a constant 22534 address. However, a pointer to a _function_ with the `dllimport' 22535 attribute can be used as a constant initializer; in this case, the 22536 address of a stub function in the import lib is referenced. On 22537 Microsoft Windows targets, the attribute can be disabled for 22538 functions by setting the `-mnop-fun-dllimport' flag. 22539 22540 `eightbit_data' 22541 Use this attribute on the H8/300, H8/300H, and H8S to indicate 22542 that the specified variable should be placed into the eight-bit 22543 data section. The compiler generates more efficient code for 22544 certain operations on data in the eight-bit data area. Note the 22545 eight-bit data area is limited to 256 bytes of data. 22546 22547 You must use GAS and GLD from GNU binutils version 2.7 or later for 22548 this attribute to work correctly. 22549 22550 `exception_handler' 22551 Use this attribute on the Blackfin to indicate that the specified 22552 function is an exception handler. The compiler generates function 22553 entry and exit sequences suitable for use in an exception handler 22554 when this attribute is present. 22555 22556 `externally_visible' 22557 This attribute, attached to a global variable or function, 22558 nullifies the effect of the `-fwhole-program' command-line option, 22559 so the object remains visible outside the current compilation unit. 22560 22561 If `-fwhole-program' is used together with `-flto' and `gold' is 22562 used as the linker plugin, `externally_visible' attributes are 22563 automatically added to functions (not variable yet due to a 22564 current `gold' issue) that are accessed outside of LTO objects 22565 according to resolution file produced by `gold'. For other 22566 linkers that cannot generate resolution file, explicit 22567 `externally_visible' attributes are still necessary. 22568 22569 `far' 22570 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 22571 use a calling convention that takes care of switching memory banks 22572 when entering and leaving a function. This calling convention is 22573 also the default when using the `-mlong-calls' option. 22574 22575 On 68HC12 the compiler uses the `call' and `rtc' instructions to 22576 call and return from a function. 22577 22578 On 68HC11 the compiler generates a sequence of instructions to 22579 invoke a board-specific routine to switch the memory bank and call 22580 the real function. The board-specific routine simulates a `call'. 22581 At the end of a function, it jumps to a board-specific routine 22582 instead of using `rts'. The board-specific return routine 22583 simulates the `rtc'. 22584 22585 On MeP targets this causes the compiler to use a calling convention 22586 that assumes the called function is too far away for the built-in 22587 addressing modes. 22588 22589 `fast_interrupt' 22590 Use this attribute on the M32C and RX ports to indicate that the 22591 specified function is a fast interrupt handler. This is just like 22592 the `interrupt' attribute, except that `freit' is used to return 22593 instead of `reit'. 22594 22595 `fastcall' 22596 On the Intel 386, the `fastcall' attribute causes the compiler to 22597 pass the first argument (if of integral type) in the register ECX 22598 and the second argument (if of integral type) in the register EDX. 22599 Subsequent and other typed arguments are passed on the stack. The 22600 called function pops the arguments off the stack. If the number 22601 of arguments is variable all arguments are pushed on the stack. 22602 22603 `thiscall' 22604 On the Intel 386, the `thiscall' attribute causes the compiler to 22605 pass the first argument (if of integral type) in the register ECX. 22606 Subsequent and other typed arguments are passed on the stack. The 22607 called function pops the arguments off the stack. If the number 22608 of arguments is variable all arguments are pushed on the stack. 22609 The `thiscall' attribute is intended for C++ non-static member 22610 functions. As a GCC extension, this calling convention can be 22611 used for C functions and for static member methods. 22612 22613 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 22614 The `format' attribute specifies that a function takes `printf', 22615 `scanf', `strftime' or `strfmon' style arguments that should be 22616 type-checked against a format string. For example, the 22617 declaration: 22618 22619 extern int 22620 my_printf (void *my_object, const char *my_format, ...) 22621 __attribute__ ((format (printf, 2, 3))); 22622 22623 causes the compiler to check the arguments in calls to `my_printf' 22624 for consistency with the `printf' style format string argument 22625 `my_format'. 22626 22627 The parameter ARCHETYPE determines how the format string is 22628 interpreted, and should be `printf', `scanf', `strftime', 22629 `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'. (You can 22630 also use `__printf__', `__scanf__', `__strftime__' or 22631 `__strfmon__'.) On MinGW targets, `ms_printf', `ms_scanf', and 22632 `ms_strftime' are also present. ARCHETYPE values such as `printf' 22633 refer to the formats accepted by the system's C runtime library, 22634 while values prefixed with `gnu_' always refer to the formats 22635 accepted by the GNU C Library. On Microsoft Windows targets, 22636 values prefixed with `ms_' refer to the formats accepted by the 22637 `msvcrt.dll' library. The parameter STRING-INDEX specifies which 22638 argument is the format string argument (starting from 1), while 22639 FIRST-TO-CHECK is the number of the first argument to check 22640 against the format string. For functions where the arguments are 22641 not available to be checked (such as `vprintf'), specify the third 22642 parameter as zero. In this case the compiler only checks the 22643 format string for consistency. For `strftime' formats, the third 22644 parameter is required to be zero. Since non-static C++ methods 22645 have an implicit `this' argument, the arguments of such methods 22646 should be counted from two, not one, when giving values for 22647 STRING-INDEX and FIRST-TO-CHECK. 22648 22649 In the example above, the format string (`my_format') is the second 22650 argument of the function `my_print', and the arguments to check 22651 start with the third argument, so the correct parameters for the 22652 format attribute are 2 and 3. 22653 22654 The `format' attribute allows you to identify your own functions 22655 that take format strings as arguments, so that GCC can check the 22656 calls to these functions for errors. The compiler always (unless 22657 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 22658 standard library functions `printf', `fprintf', `sprintf', 22659 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 22660 `vsprintf' whenever such warnings are requested (using 22661 `-Wformat'), so there is no need to modify the header file 22662 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 22663 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 22664 strictly conforming C standard modes, the X/Open function 22665 `strfmon' is also checked as are `printf_unlocked' and 22666 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 22667 Dialect Options. 22668 22669 For Objective-C dialects, `NSString' (or `__NSString__') is 22670 recognized in the same context. Declarations including these 22671 format attributes are parsed for correct syntax, however the 22672 result of checking of such format strings is not yet defined, and 22673 is not carried out by this version of the compiler. 22674 22675 The target may also provide additional types of format checks. 22676 *Note Format Checks Specific to Particular Target Machines: Target 22677 Format Checks. 22678 22679 `format_arg (STRING-INDEX)' 22680 The `format_arg' attribute specifies that a function takes a format 22681 string for a `printf', `scanf', `strftime' or `strfmon' style 22682 function and modifies it (for example, to translate it into 22683 another language), so the result can be passed to a `printf', 22684 `scanf', `strftime' or `strfmon' style function (with the 22685 remaining arguments to the format function the same as they would 22686 have been for the unmodified string). For example, the 22687 declaration: 22688 22689 extern char * 22690 my_dgettext (char *my_domain, const char *my_format) 22691 __attribute__ ((format_arg (2))); 22692 22693 causes the compiler to check the arguments in calls to a `printf', 22694 `scanf', `strftime' or `strfmon' type function, whose format 22695 string argument is a call to the `my_dgettext' function, for 22696 consistency with the format string argument `my_format'. If the 22697 `format_arg' attribute had not been specified, all the compiler 22698 could tell in such calls to format functions would be that the 22699 format string argument is not constant; this would generate a 22700 warning when `-Wformat-nonliteral' is used, but the calls could 22701 not be checked without the attribute. 22702 22703 The parameter STRING-INDEX specifies which argument is the format 22704 string argument (starting from one). Since non-static C++ methods 22705 have an implicit `this' argument, the arguments of such methods 22706 should be counted from two. 22707 22708 The `format_arg' attribute allows you to identify your own 22709 functions that modify format strings, so that GCC can check the 22710 calls to `printf', `scanf', `strftime' or `strfmon' type function 22711 whose operands are a call to one of your own function. The 22712 compiler always treats `gettext', `dgettext', and `dcgettext' in 22713 this manner except when strict ISO C support is requested by 22714 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 22715 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 22716 Dialect Options. 22717 22718 For Objective-C dialects, the `format-arg' attribute may refer to 22719 an `NSString' reference for compatibility with the `format' 22720 attribute above. 22721 22722 The target may also allow additional types in `format-arg' 22723 attributes. *Note Format Checks Specific to Particular Target 22724 Machines: Target Format Checks. 22725 22726 `function_vector' 22727 Use this attribute on the H8/300, H8/300H, and H8S to indicate 22728 that the specified function should be called through the function 22729 vector. Calling a function through the function vector reduces 22730 code size, however; the function vector has a limited size 22731 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 22732 and H8S) and shares space with the interrupt vector. 22733 22734 On SH2A targets, this attribute declares a function to be called 22735 using the TBR relative addressing mode. The argument to this 22736 attribute is the entry number of the same function in a vector 22737 table containing all the TBR relative addressable functions. For 22738 correct operation the TBR must be setup accordingly to point to 22739 the start of the vector table before any functions with this 22740 attribute are invoked. Usually a good place to do the 22741 initialization is the startup routine. The TBR relative vector 22742 table can have at max 256 function entries. The jumps to these 22743 functions are generated using a SH2A specific, non delayed branch 22744 instruction JSR/N @(disp8,TBR). You must use GAS and GLD from GNU 22745 binutils version 2.7 or later for this attribute to work correctly. 22746 22747 Please refer the example of M16C target, to see the use of this 22748 attribute while declaring a function, 22749 22750 In an application, for a function being called once, this attribute 22751 saves at least 8 bytes of code; and if other successive calls are 22752 being made to the same function, it saves 2 bytes of code per each 22753 of these calls. 22754 22755 On M16C/M32C targets, the `function_vector' attribute declares a 22756 special page subroutine call function. Use of this attribute 22757 reduces the code size by 2 bytes for each call generated to the 22758 subroutine. The argument to the attribute is the vector number 22759 entry from the special page vector table which contains the 16 22760 low-order bits of the subroutine's entry address. Each vector 22761 table has special page number (18 to 255) that is used in `jsrs' 22762 instructions. Jump addresses of the routines are generated by 22763 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 22764 M32C targets), to the 2-byte addresses set in the vector table. 22765 Therefore you need to ensure that all the special page vector 22766 routines should get mapped within the address range 0x0F0000 to 22767 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 22768 22769 In the following example 2 bytes are saved for each call to 22770 function `foo'. 22771 22772 void foo (void) __attribute__((function_vector(0x18))); 22773 void foo (void) 22774 { 22775 } 22776 22777 void bar (void) 22778 { 22779 foo(); 22780 } 22781 22782 If functions are defined in one file and are called in another 22783 file, then be sure to write this declaration in both files. 22784 22785 This attribute is ignored for R8C target. 22786 22787 `ifunc ("RESOLVER")' 22788 The `ifunc' attribute is used to mark a function as an indirect 22789 function using the STT_GNU_IFUNC symbol type extension to the ELF 22790 standard. This allows the resolution of the symbol value to be 22791 determined dynamically at load time, and an optimized version of 22792 the routine can be selected for the particular processor or other 22793 system characteristics determined then. To use this attribute, 22794 first define the implementation functions available, and a 22795 resolver function that returns a pointer to the selected 22796 implementation function. The implementation functions' 22797 declarations must match the API of the function being implemented, 22798 the resolver's declaration is be a function returning pointer to 22799 void function returning void: 22800 22801 void *my_memcpy (void *dst, const void *src, size_t len) 22802 { 22803 ... 22804 } 22805 22806 static void (*resolve_memcpy (void)) (void) 22807 { 22808 return my_memcpy; // we'll just always select this routine 22809 } 22810 22811 The exported header file declaring the function the user calls 22812 would contain: 22813 22814 extern void *memcpy (void *, const void *, size_t); 22815 22816 allowing the user to call this as a regular function, unaware of 22817 the implementation. Finally, the indirect function needs to be 22818 defined in the same translation unit as the resolver function: 22819 22820 void *memcpy (void *, const void *, size_t) 22821 __attribute__ ((ifunc ("resolve_memcpy"))); 22822 22823 Indirect functions cannot be weak, and require a recent binutils 22824 (at least version 2.20.1), and GNU C library (at least version 22825 2.11.1). 22826 22827 `interrupt' 22828 Use this attribute on the ARM, AVR, CR16, Epiphany, M32C, M32R/D, 22829 m68k, MeP, MIPS, RL78, RX and Xstormy16 ports to indicate that the 22830 specified function is an interrupt handler. The compiler 22831 generates function entry and exit sequences suitable for use in an 22832 interrupt handler when this attribute is present. With Epiphany 22833 targets it may also generate a special section with code to 22834 initialize the interrupt vector table. 22835 22836 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 22837 MicroBlaze, and SH processors can be specified via the 22838 `interrupt_handler' attribute. 22839 22840 Note, on the AVR, the hardware globally disables interrupts when an 22841 interrupt is executed. The first instruction of an interrupt 22842 handler declared with this attribute is a `SEI' instruction to 22843 re-enable interrupts. See also the `signal' function attribute 22844 that does not insert a `SEI' instruction. If both `signal' and 22845 `interrupt' are specified for the same function, `signal' is 22846 silently ignored. 22847 22848 Note, for the ARM, you can specify the kind of interrupt to be 22849 handled by adding an optional parameter to the interrupt attribute 22850 like this: 22851 22852 void f () __attribute__ ((interrupt ("IRQ"))); 22853 22854 Permissible values for this parameter are: `IRQ', `FIQ', `SWI', 22855 `ABORT' and `UNDEF'. 22856 22857 On ARMv7-M the interrupt type is ignored, and the attribute means 22858 the function may be called with a word-aligned stack pointer. 22859 22860 On Epiphany targets one or more optional parameters can be added 22861 like this: 22862 22863 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 22864 22865 Permissible values for these parameters are: `reset', 22866 `software_exception', `page_miss', `timer0', `timer1', `message', 22867 `dma0', `dma1', `wand' and `swi'. Multiple parameters indicate 22868 that multiple entries in the interrupt vector table should be 22869 initialized for this function, i.e. for each parameter NAME, a 22870 jump to the function is emitted in the section ivt_entry_NAME. 22871 The parameter(s) may be omitted entirely, in which case no 22872 interrupt vector table entry is provided. 22873 22874 Note, on Epiphany targets, interrupts are enabled inside the 22875 function unless the `disinterrupt' attribute is also specified. 22876 22877 On Epiphany targets, you can also use the following attribute to 22878 modify the behavior of an interrupt handler: 22879 `forwarder_section' 22880 The interrupt handler may be in external memory which cannot 22881 be reached by a branch instruction, so generate a local 22882 memory trampoline to transfer control. The single parameter 22883 identifies the section where the trampoline is placed. 22884 22885 The following examples are all valid uses of these attributes on 22886 Epiphany targets: 22887 void __attribute__ ((interrupt)) universal_handler (); 22888 void __attribute__ ((interrupt ("dma1"))) dma1_handler (); 22889 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 22890 void __attribute__ ((interrupt ("timer0"), disinterrupt)) 22891 fast_timer_handler (); 22892 void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp"))) 22893 external_dma_handler (); 22894 22895 On MIPS targets, you can use the following attributes to modify 22896 the behavior of an interrupt handler: 22897 `use_shadow_register_set' 22898 Assume that the handler uses a shadow register set, instead of 22899 the main general-purpose registers. 22900 22901 `keep_interrupts_masked' 22902 Keep interrupts masked for the whole function. Without this 22903 attribute, GCC tries to reenable interrupts for as much of 22904 the function as it can. 22905 22906 `use_debug_exception_return' 22907 Return using the `deret' instruction. Interrupt handlers 22908 that don't have this attribute return using `eret' instead. 22909 22910 You can use any combination of these attributes, as shown below: 22911 void __attribute__ ((interrupt)) v0 (); 22912 void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); 22913 void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); 22914 void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); 22915 void __attribute__ ((interrupt, use_shadow_register_set, 22916 keep_interrupts_masked)) v4 (); 22917 void __attribute__ ((interrupt, use_shadow_register_set, 22918 use_debug_exception_return)) v5 (); 22919 void __attribute__ ((interrupt, keep_interrupts_masked, 22920 use_debug_exception_return)) v6 (); 22921 void __attribute__ ((interrupt, use_shadow_register_set, 22922 keep_interrupts_masked, 22923 use_debug_exception_return)) v7 (); 22924 22925 On RL78, use `brk_interrupt' instead of `interrupt' for handlers 22926 intended to be used with the `BRK' opcode (i.e. those that must 22927 end with `RETB' instead of `RETI'). 22928 22929 `interrupt_handler' 22930 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 22931 and SH to indicate that the specified function is an interrupt 22932 handler. The compiler generates function entry and exit sequences 22933 suitable for use in an interrupt handler when this attribute is 22934 present. 22935 22936 `interrupt_thread' 22937 Use this attribute on fido, a subarchitecture of the m68k, to 22938 indicate that the specified function is an interrupt handler that 22939 is designed to run as a thread. The compiler omits generate 22940 prologue/epilogue sequences and replaces the return instruction 22941 with a `sleep' instruction. This attribute is available only on 22942 fido. 22943 22944 `isr' 22945 Use this attribute on ARM to write Interrupt Service Routines. 22946 This is an alias to the `interrupt' attribute above. 22947 22948 `kspisusp' 22949 When used together with `interrupt_handler', `exception_handler' 22950 or `nmi_handler', code is generated to load the stack pointer from 22951 the USP register in the function prologue. 22952 22953 `l1_text' 22954 This attribute specifies a function to be placed into L1 22955 Instruction SRAM. The function is put into a specific section 22956 named `.l1.text'. With `-mfdpic', function calls with a such 22957 function as the callee or caller uses inlined PLT. 22958 22959 `l2' 22960 On the Blackfin, this attribute specifies a function to be placed 22961 into L2 SRAM. The function is put into a specific section named 22962 `.l1.text'. With `-mfdpic', callers of such functions use an 22963 inlined PLT. 22964 22965 `leaf' 22966 Calls to external functions with this attribute must return to the 22967 current compilation unit only by return or by exception handling. 22968 In particular, leaf functions are not allowed to call callback 22969 function passed to it from the current compilation unit or 22970 directly call functions exported by the unit or longjmp into the 22971 unit. Leaf function might still call functions from other 22972 compilation units and thus they are not necessarily leaf in the 22973 sense that they contain no function calls at all. 22974 22975 The attribute is intended for library functions to improve 22976 dataflow analysis. The compiler takes the hint that any data not 22977 escaping the current compilation unit can not be used or modified 22978 by the leaf function. For example, the `sin' function is a leaf 22979 function, but `qsort' is not. 22980 22981 Note that leaf functions might invoke signals and signal handlers 22982 might be defined in the current compilation unit and use static 22983 variables. The only compliant way to write such a signal handler 22984 is to declare such variables `volatile'. 22985 22986 The attribute has no effect on functions defined within the 22987 current compilation unit. This is to allow easy merging of 22988 multiple compilation units into one, for example, by using the 22989 link-time optimization. For this reason the attribute is not 22990 allowed on types to annotate indirect calls. 22991 22992 `long_call/short_call' 22993 This attribute specifies how a particular function is called on 22994 ARM and Epiphany. Both attributes override the `-mlong-calls' 22995 (*note ARM Options::) command-line switch and `#pragma long_calls' 22996 settings. The `long_call' attribute indicates that the function 22997 might be far away from the call site and require a different (more 22998 expensive) calling sequence. The `short_call' attribute always 22999 places the offset to the function from the call site into the `BL' 23000 instruction directly. 23001 23002 `longcall/shortcall' 23003 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 23004 indicates that the function might be far away from the call site 23005 and require a different (more expensive) calling sequence. The 23006 `shortcall' attribute indicates that the function is always close 23007 enough for the shorter calling sequence to be used. These 23008 attributes override both the `-mlongcall' switch and, on the 23009 RS/6000 and PowerPC, the `#pragma longcall' setting. 23010 23011 *Note RS/6000 and PowerPC Options::, for more information on 23012 whether long calls are necessary. 23013 23014 `long_call/near/far' 23015 These attributes specify how a particular function is called on 23016 MIPS. The attributes override the `-mlong-calls' (*note MIPS 23017 Options::) command-line switch. The `long_call' and `far' 23018 attributes are synonyms, and cause the compiler to always call the 23019 function by first loading its address into a register, and then 23020 using the contents of that register. The `near' attribute has the 23021 opposite effect; it specifies that non-PIC calls should be made 23022 using the more efficient `jal' instruction. 23023 23024 `malloc' 23025 The `malloc' attribute is used to tell the compiler that a function 23026 may be treated as if any non-`NULL' pointer it returns cannot 23027 alias any other pointer valid when the function returns and that 23028 the memory has undefined content. This often improves 23029 optimization. Standard functions with this property include 23030 `malloc' and `calloc'. `realloc'-like functions do not have this 23031 property as the memory pointed to does not have undefined content. 23032 23033 `mips16/nomips16' 23034 On MIPS targets, you can use the `mips16' and `nomips16' function 23035 attributes to locally select or turn off MIPS16 code generation. 23036 A function with the `mips16' attribute is emitted as MIPS16 code, 23037 while MIPS16 code generation is disabled for functions with the 23038 `nomips16' attribute. These attributes override the `-mips16' and 23039 `-mno-mips16' options on the command line (*note MIPS Options::). 23040 23041 When compiling files containing mixed MIPS16 and non-MIPS16 code, 23042 the preprocessor symbol `__mips16' reflects the setting on the 23043 command line, not that within individual functions. Mixed MIPS16 23044 and non-MIPS16 code may interact badly with some GCC extensions 23045 such as `__builtin_apply' (*note Constructing Calls::). 23046 23047 `model (MODEL-NAME)' 23048 On the M32R/D, use this attribute to set the addressability of an 23049 object, and of the code generated for a function. The identifier 23050 MODEL-NAME is one of `small', `medium', or `large', representing 23051 each of the code models. 23052 23053 Small model objects live in the lower 16MB of memory (so that their 23054 addresses can be loaded with the `ld24' instruction), and are 23055 callable with the `bl' instruction. 23056 23057 Medium model objects may live anywhere in the 32-bit address space 23058 (the compiler generates `seth/add3' instructions to load their 23059 addresses), and are callable with the `bl' instruction. 23060 23061 Large model objects may live anywhere in the 32-bit address space 23062 (the compiler generates `seth/add3' instructions to load their 23063 addresses), and may not be reachable with the `bl' instruction 23064 (the compiler generates the much slower `seth/add3/jl' instruction 23065 sequence). 23066 23067 On IA-64, use this attribute to set the addressability of an 23068 object. At present, the only supported identifier for MODEL-NAME 23069 is `small', indicating addressability via "small" (22-bit) 23070 addresses (so that their addresses can be loaded with the `addl' 23071 instruction). Caveat: such addressing is by definition not 23072 position independent and hence this attribute must not be used for 23073 objects defined by shared libraries. 23074 23075 `ms_abi/sysv_abi' 23076 On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI 23077 attribute to indicate which calling convention should be used for 23078 a function. The `ms_abi' attribute tells the compiler to use the 23079 Microsoft ABI, while the `sysv_abi' attribute tells the compiler 23080 to use the ABI used on GNU/Linux and other systems. The default 23081 is to use the Microsoft ABI when targeting Windows. On all other 23082 systems, the default is the x86/AMD ABI. 23083 23084 Note, the `ms_abi' attribute for Microsoft Windows 64-bit targets 23085 currently requires the `-maccumulate-outgoing-args' option. 23086 23087 `callee_pop_aggregate_return (NUMBER)' 23088 On 32-bit i?86-*-* targets, you can use this attribute to control 23089 how aggregates are returned in memory. If the caller is 23090 responsible for popping the hidden pointer together with the rest 23091 of the arguments, specify NUMBER equal to zero. If callee is 23092 responsible for popping the hidden pointer, specify NUMBER equal 23093 to one. 23094 23095 The default i386 ABI assumes that the callee pops the stack for 23096 hidden pointer. However, on 32-bit i386 Microsoft Windows targets, 23097 the compiler assumes that the caller pops the stack for hidden 23098 pointer. 23099 23100 `ms_hook_prologue' 23101 On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets, 23102 you can use this function attribute to make GCC generate the 23103 "hot-patching" function prologue used in Win32 API functions in 23104 Microsoft Windows XP Service Pack 2 and newer. 23105 23106 `hotpatch [(PROLOGUE-HALFWORDS)]' 23107 On S/390 System z targets, you can use this function attribute to 23108 make GCC generate a "hot-patching" function prologue. The 23109 `hotpatch' has no effect on funtions that are explicitly inline. 23110 If the `-mhotpatch' or `-mno-hotpatch' command-line option is used 23111 at the same time, the `hotpatch' attribute takes precedence. If 23112 an argument is given, the maximum allowed value is 1000000. 23113 23114 `naked' 23115 Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to 23116 indicate that the specified function does not need 23117 prologue/epilogue sequences generated by the compiler. It is up 23118 to the programmer to provide these sequences. The only statements 23119 that can be safely included in naked functions are `asm' 23120 statements that do not have operands. All other statements, 23121 including declarations of local variables, `if' statements, and so 23122 forth, should be avoided. Naked functions should be used to 23123 implement the body of an assembly function, while allowing the 23124 compiler to construct the requisite function declaration for the 23125 assembler. 23126 23127 `near' 23128 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 23129 use the normal calling convention based on `jsr' and `rts'. This 23130 attribute can be used to cancel the effect of the `-mlong-calls' 23131 option. 23132 23133 On MeP targets this attribute causes the compiler to assume the 23134 called function is close enough to use the normal calling 23135 convention, overriding the `-mtf' command-line option. 23136 23137 `nesting' 23138 Use this attribute together with `interrupt_handler', 23139 `exception_handler' or `nmi_handler' to indicate that the function 23140 entry code should enable nested interrupts or exceptions. 23141 23142 `nmi_handler' 23143 Use this attribute on the Blackfin to indicate that the specified 23144 function is an NMI handler. The compiler generates function entry 23145 and exit sequences suitable for use in an NMI handler when this 23146 attribute is present. 23147 23148 `no_instrument_function' 23149 If `-finstrument-functions' is given, profiling function calls are 23150 generated at entry and exit of most user-compiled functions. 23151 Functions with this attribute are not so instrumented. 23152 23153 `no_split_stack' 23154 If `-fsplit-stack' is given, functions have a small prologue which 23155 decides whether to split the stack. Functions with the 23156 `no_split_stack' attribute do not have that prologue, and thus may 23157 run with only a small amount of stack space available. 23158 23159 `noinline' 23160 This function attribute prevents a function from being considered 23161 for inlining. If the function does not have side-effects, there 23162 are optimizations other than inlining that cause function calls to 23163 be optimized away, although the function call is live. To keep 23164 such calls from being optimized away, put 23165 asm (""); 23166 23167 (*note Extended Asm::) in the called function, to serve as a 23168 special side-effect. 23169 23170 `noclone' 23171 This function attribute prevents a function from being considered 23172 for cloning--a mechanism that produces specialized copies of 23173 functions and which is (currently) performed by interprocedural 23174 constant propagation. 23175 23176 `nonnull (ARG-INDEX, ...)' 23177 The `nonnull' attribute specifies that some function parameters 23178 should be non-null pointers. For instance, the declaration: 23179 23180 extern void * 23181 my_memcpy (void *dest, const void *src, size_t len) 23182 __attribute__((nonnull (1, 2))); 23183 23184 causes the compiler to check that, in calls to `my_memcpy', 23185 arguments DEST and SRC are non-null. If the compiler determines 23186 that a null pointer is passed in an argument slot marked as 23187 non-null, and the `-Wnonnull' option is enabled, a warning is 23188 issued. The compiler may also choose to make optimizations based 23189 on the knowledge that certain function arguments will never be 23190 null. 23191 23192 If no argument index list is given to the `nonnull' attribute, all 23193 pointer arguments are marked as non-null. To illustrate, the 23194 following declaration is equivalent to the previous example: 23195 23196 extern void * 23197 my_memcpy (void *dest, const void *src, size_t len) 23198 __attribute__((nonnull)); 23199 23200 `noreturn' 23201 A few standard library functions, such as `abort' and `exit', 23202 cannot return. GCC knows this automatically. Some programs define 23203 their own functions that never return. You can declare them 23204 `noreturn' to tell the compiler this fact. For example, 23205 23206 void fatal () __attribute__ ((noreturn)); 23207 23208 void 23209 fatal (/* ... */) 23210 { 23211 /* ... */ /* Print error message. */ /* ... */ 23212 exit (1); 23213 } 23214 23215 The `noreturn' keyword tells the compiler to assume that `fatal' 23216 cannot return. It can then optimize without regard to what would 23217 happen if `fatal' ever did return. This makes slightly better 23218 code. More importantly, it helps avoid spurious warnings of 23219 uninitialized variables. 23220 23221 The `noreturn' keyword does not affect the exceptional path when 23222 that applies: a `noreturn'-marked function may still return to the 23223 caller by throwing an exception or calling `longjmp'. 23224 23225 Do not assume that registers saved by the calling function are 23226 restored before calling the `noreturn' function. 23227 23228 It does not make sense for a `noreturn' function to have a return 23229 type other than `void'. 23230 23231 The attribute `noreturn' is not implemented in GCC versions 23232 earlier than 2.5. An alternative way to declare that a function 23233 does not return, which works in the current version and in some 23234 older versions, is as follows: 23235 23236 typedef void voidfn (); 23237 23238 volatile voidfn fatal; 23239 23240 This approach does not work in GNU C++. 23241 23242 `nothrow' 23243 The `nothrow' attribute is used to inform the compiler that a 23244 function cannot throw an exception. For example, most functions in 23245 the standard C library can be guaranteed not to throw an exception 23246 with the notable exceptions of `qsort' and `bsearch' that take 23247 function pointer arguments. The `nothrow' attribute is not 23248 implemented in GCC versions earlier than 3.3. 23249 23250 `nosave_low_regs' 23251 Use this attribute on SH targets to indicate that an 23252 `interrupt_handler' function should not save and restore registers 23253 R0..R7. This can be used on SH3* and SH4* targets that have a 23254 second R0..R7 register bank for non-reentrant interrupt handlers. 23255 23256 `optimize' 23257 The `optimize' attribute is used to specify that a function is to 23258 be compiled with different optimization options than specified on 23259 the command line. Arguments can either be numbers or strings. 23260 Numbers are assumed to be an optimization level. Strings that 23261 begin with `O' are assumed to be an optimization option, while 23262 other options are assumed to be used with a `-f' prefix. You can 23263 also use the `#pragma GCC optimize' pragma to set the optimization 23264 options that affect more than one function. *Note Function 23265 Specific Option Pragmas::, for details about the `#pragma GCC 23266 optimize' pragma. 23267 23268 This can be used for instance to have frequently-executed functions 23269 compiled with more aggressive optimization options that produce 23270 faster and larger code, while other functions can be compiled with 23271 less aggressive options. 23272 23273 `OS_main/OS_task' 23274 On AVR, functions with the `OS_main' or `OS_task' attribute do not 23275 save/restore any call-saved register in their prologue/epilogue. 23276 23277 The `OS_main' attribute can be used when there _is guarantee_ that 23278 interrupts are disabled at the time when the function is entered. 23279 This saves resources when the stack pointer has to be changed to 23280 set up a frame for local variables. 23281 23282 The `OS_task' attribute can be used when there is _no guarantee_ 23283 that interrupts are disabled at that time when the function is 23284 entered like for, e.g. task functions in a multi-threading 23285 operating system. In that case, changing the stack pointer 23286 register is guarded by save/clear/restore of the global interrupt 23287 enable flag. 23288 23289 The differences to the `naked' function attribute are: 23290 * `naked' functions do not have a return instruction whereas 23291 `OS_main' and `OS_task' functions have a `RET' or `RETI' 23292 return instruction. 23293 23294 * `naked' functions do not set up a frame for local variables 23295 or a frame pointer whereas `OS_main' and `OS_task' do this as 23296 needed. 23297 23298 `pcs' 23299 The `pcs' attribute can be used to control the calling convention 23300 used for a function on ARM. The attribute takes an argument that 23301 specifies the calling convention to use. 23302 23303 When compiling using the AAPCS ABI (or a variant of it) then valid 23304 values for the argument are `"aapcs"' and `"aapcs-vfp"'. In order 23305 to use a variant other than `"aapcs"' then the compiler must be 23306 permitted to use the appropriate co-processor registers (i.e., the 23307 VFP registers must be available in order to use `"aapcs-vfp"'). 23308 For example, 23309 23310 /* Argument passed in r0, and result returned in r0+r1. */ 23311 double f2d (float) __attribute__((pcs("aapcs"))); 23312 23313 Variadic functions always use the `"aapcs"' calling convention and 23314 the compiler rejects attempts to specify an alternative. 23315 23316 `pure' 23317 Many functions have no effects except the return value and their 23318 return value depends only on the parameters and/or global 23319 variables. Such a function can be subject to common subexpression 23320 elimination and loop optimization just as an arithmetic operator 23321 would be. These functions should be declared with the attribute 23322 `pure'. For example, 23323 23324 int square (int) __attribute__ ((pure)); 23325 23326 says that the hypothetical function `square' is safe to call fewer 23327 times than the program says. 23328 23329 Some of common examples of pure functions are `strlen' or `memcmp'. 23330 Interesting non-pure functions are functions with infinite loops 23331 or those depending on volatile memory or other system resource, 23332 that may change between two consecutive calls (such as `feof' in a 23333 multithreading environment). 23334 23335 The attribute `pure' is not implemented in GCC versions earlier 23336 than 2.96. 23337 23338 `hot' 23339 The `hot' attribute on a function is used to inform the compiler 23340 that the function is a hot spot of the compiled program. The 23341 function is optimized more aggressively and on many target it is 23342 placed into special subsection of the text section so all hot 23343 functions appears close together improving locality. 23344 23345 When profile feedback is available, via `-fprofile-use', hot 23346 functions are automatically detected and this attribute is ignored. 23347 23348 The `hot' attribute on functions is not implemented in GCC versions 23349 earlier than 4.3. 23350 23351 The `hot' attribute on a label is used to inform the compiler that 23352 path following the label are more likely than paths that are not so 23353 annotated. This attribute is used in cases where 23354 `__builtin_expect' cannot be used, for instance with computed goto 23355 or `asm goto'. 23356 23357 The `hot' attribute on labels is not implemented in GCC versions 23358 earlier than 4.8. 23359 23360 `cold' 23361 The `cold' attribute on functions is used to inform the compiler 23362 that the function is unlikely to be executed. The function is 23363 optimized for size rather than speed and on many targets it is 23364 placed into special subsection of the text section so all cold 23365 functions appears close together improving code locality of 23366 non-cold parts of program. The paths leading to call of cold 23367 functions within code are marked as unlikely by the branch 23368 prediction mechanism. It is thus useful to mark functions used to 23369 handle unlikely conditions, such as `perror', as cold to improve 23370 optimization of hot functions that do call marked functions in 23371 rare occasions. 23372 23373 When profile feedback is available, via `-fprofile-use', cold 23374 functions are automatically detected and this attribute is ignored. 23375 23376 The `cold' attribute on functions is not implemented in GCC 23377 versions earlier than 4.3. 23378 23379 The `cold' attribute on labels is used to inform the compiler that 23380 the path following the label is unlikely to be executed. This 23381 attribute is used in cases where `__builtin_expect' cannot be 23382 used, for instance with computed goto or `asm goto'. 23383 23384 The `cold' attribute on labels is not implemented in GCC versions 23385 earlier than 4.8. 23386 23387 `no_sanitize_address' 23388 `no_address_safety_analysis' 23389 The `no_sanitize_address' attribute on functions is used to inform 23390 the compiler that it should not instrument memory accesses in the 23391 function when compiling with the `-fsanitize=address' option. The 23392 `no_address_safety_analysis' is a deprecated alias of the 23393 `no_sanitize_address' attribute, new code should use 23394 `no_sanitize_address'. 23395 23396 `regparm (NUMBER)' 23397 On the Intel 386, the `regparm' attribute causes the compiler to 23398 pass arguments number one to NUMBER if they are of integral type 23399 in registers EAX, EDX, and ECX instead of on the stack. Functions 23400 that take a variable number of arguments continue to be passed all 23401 of their arguments on the stack. 23402 23403 Beware that on some ELF systems this attribute is unsuitable for 23404 global functions in shared libraries with lazy binding (which is 23405 the default). Lazy binding sends the first call via resolving 23406 code in the loader, which might assume EAX, EDX and ECX can be 23407 clobbered, as per the standard calling conventions. Solaris 8 is 23408 affected by this. Systems with the GNU C Library version 2.1 or 23409 higher and FreeBSD are believed to be safe since the loaders there 23410 save EAX, EDX and ECX. (Lazy binding can be disabled with the 23411 linker or the loader if desired, to avoid the problem.) 23412 23413 `sseregparm' 23414 On the Intel 386 with SSE support, the `sseregparm' attribute 23415 causes the compiler to pass up to 3 floating-point arguments in 23416 SSE registers instead of on the stack. Functions that take a 23417 variable number of arguments continue to pass all of their 23418 floating-point arguments on the stack. 23419 23420 `force_align_arg_pointer' 23421 On the Intel x86, the `force_align_arg_pointer' attribute may be 23422 applied to individual function definitions, generating an alternate 23423 prologue and epilogue that realigns the run-time stack if 23424 necessary. This supports mixing legacy codes that run with a 23425 4-byte aligned stack with modern codes that keep a 16-byte stack 23426 for SSE compatibility. 23427 23428 `renesas' 23429 On SH targets this attribute specifies that the function or struct 23430 follows the Renesas ABI. 23431 23432 `resbank' 23433 On the SH2A target, this attribute enables the high-speed register 23434 saving and restoration using a register bank for 23435 `interrupt_handler' routines. Saving to the bank is performed 23436 automatically after the CPU accepts an interrupt that uses a 23437 register bank. 23438 23439 The nineteen 32-bit registers comprising general register R0 to 23440 R14, control register GBR, and system registers MACH, MACL, and PR 23441 and the vector table address offset are saved into a register 23442 bank. Register banks are stacked in first-in last-out (FILO) 23443 sequence. Restoration from the bank is executed by issuing a 23444 RESBANK instruction. 23445 23446 `returns_twice' 23447 The `returns_twice' attribute tells the compiler that a function 23448 may return more than one time. The compiler ensures that all 23449 registers are dead before calling such a function and emits a 23450 warning about the variables that may be clobbered after the second 23451 return from the function. Examples of such functions are `setjmp' 23452 and `vfork'. The `longjmp'-like counterpart of such function, if 23453 any, might need to be marked with the `noreturn' attribute. 23454 23455 `saveall' 23456 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 23457 indicate that all registers except the stack pointer should be 23458 saved in the prologue regardless of whether they are used or not. 23459 23460 `save_volatiles' 23461 Use this attribute on the MicroBlaze to indicate that the function 23462 is an interrupt handler. All volatile registers (in addition to 23463 non-volatile registers) are saved in the function prologue. If 23464 the function is a leaf function, only volatiles used by the 23465 function are saved. A normal function return is generated instead 23466 of a return from interrupt. 23467 23468 `section ("SECTION-NAME")' 23469 Normally, the compiler places the code it generates in the `text' 23470 section. Sometimes, however, you need additional sections, or you 23471 need certain particular functions to appear in special sections. 23472 The `section' attribute specifies that a function lives in a 23473 particular section. For example, the declaration: 23474 23475 extern void foobar (void) __attribute__ ((section ("bar"))); 23476 23477 puts the function `foobar' in the `bar' section. 23478 23479 Some file formats do not support arbitrary sections so the 23480 `section' attribute is not available on all platforms. If you 23481 need to map the entire contents of a module to a particular 23482 section, consider using the facilities of the linker instead. 23483 23484 `sentinel' 23485 This function attribute ensures that a parameter in a function 23486 call is an explicit `NULL'. The attribute is only valid on 23487 variadic functions. By default, the sentinel is located at 23488 position zero, the last parameter of the function call. If an 23489 optional integer position argument P is supplied to the attribute, 23490 the sentinel must be located at position P counting backwards from 23491 the end of the argument list. 23492 23493 __attribute__ ((sentinel)) 23494 is equivalent to 23495 __attribute__ ((sentinel(0))) 23496 23497 The attribute is automatically set with a position of 0 for the 23498 built-in functions `execl' and `execlp'. The built-in function 23499 `execle' has the attribute set with a position of 1. 23500 23501 A valid `NULL' in this context is defined as zero with any pointer 23502 type. If your system defines the `NULL' macro with an integer type 23503 then you need to add an explicit cast. GCC replaces `stddef.h' 23504 with a copy that redefines NULL appropriately. 23505 23506 The warnings for missing or incorrect sentinels are enabled with 23507 `-Wformat'. 23508 23509 `short_call' 23510 See `long_call/short_call'. 23511 23512 `shortcall' 23513 See `longcall/shortcall'. 23514 23515 `signal' 23516 Use this attribute on the AVR to indicate that the specified 23517 function is an interrupt handler. The compiler generates function 23518 entry and exit sequences suitable for use in an interrupt handler 23519 when this attribute is present. 23520 23521 See also the `interrupt' function attribute. 23522 23523 The AVR hardware globally disables interrupts when an interrupt is 23524 executed. Interrupt handler functions defined with the `signal' 23525 attribute do not re-enable interrupts. It is save to enable 23526 interrupts in a `signal' handler. This "save" only applies to the 23527 code generated by the compiler and not to the IRQ layout of the 23528 application which is responsibility of the application. 23529 23530 If both `signal' and `interrupt' are specified for the same 23531 function, `signal' is silently ignored. 23532 23533 `sp_switch' 23534 Use this attribute on the SH to indicate an `interrupt_handler' 23535 function should switch to an alternate stack. It expects a string 23536 argument that names a global variable holding the address of the 23537 alternate stack. 23538 23539 void *alt_stack; 23540 void f () __attribute__ ((interrupt_handler, 23541 sp_switch ("alt_stack"))); 23542 23543 `stdcall' 23544 On the Intel 386, the `stdcall' attribute causes the compiler to 23545 assume that the called function pops off the stack space used to 23546 pass arguments, unless it takes a variable number of arguments. 23547 23548 `syscall_linkage' 23549 This attribute is used to modify the IA-64 calling convention by 23550 marking all input registers as live at all function exits. This 23551 makes it possible to restart a system call after an interrupt 23552 without having to save/restore the input registers. This also 23553 prevents kernel data from leaking into application code. 23554 23555 `target' 23556 The `target' attribute is used to specify that a function is to be 23557 compiled with different target options than specified on the 23558 command line. This can be used for instance to have functions 23559 compiled with a different ISA (instruction set architecture) than 23560 the default. You can also use the `#pragma GCC target' pragma to 23561 set more than one function to be compiled with specific target 23562 options. *Note Function Specific Option Pragmas::, for details 23563 about the `#pragma GCC target' pragma. 23564 23565 For instance on a 386, you could compile one function with 23566 `target("sse4.1,arch=core2")' and another with 23567 `target("sse4a,arch=amdfam10")'. This is equivalent to compiling 23568 the first function with `-msse4.1' and `-march=core2' options, and 23569 the second function with `-msse4a' and `-march=amdfam10' options. 23570 It is up to the user to make sure that a function is only invoked 23571 on a machine that supports the particular ISA it is compiled for 23572 (for example by using `cpuid' on 386 to determine what feature 23573 bits and architecture family are used). 23574 23575 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 23576 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 23577 23578 On the 386, the following options are allowed: 23579 23580 `abm' 23581 `no-abm' 23582 Enable/disable the generation of the advanced bit 23583 instructions. 23584 23585 `aes' 23586 `no-aes' 23587 Enable/disable the generation of the AES instructions. 23588 23589 `default' 23590 *Note Function Multiversioning::, where it is used to specify 23591 the default function version. 23592 23593 `mmx' 23594 `no-mmx' 23595 Enable/disable the generation of the MMX instructions. 23596 23597 `pclmul' 23598 `no-pclmul' 23599 Enable/disable the generation of the PCLMUL instructions. 23600 23601 `popcnt' 23602 `no-popcnt' 23603 Enable/disable the generation of the POPCNT instruction. 23604 23605 `sse' 23606 `no-sse' 23607 Enable/disable the generation of the SSE instructions. 23608 23609 `sse2' 23610 `no-sse2' 23611 Enable/disable the generation of the SSE2 instructions. 23612 23613 `sse3' 23614 `no-sse3' 23615 Enable/disable the generation of the SSE3 instructions. 23616 23617 `sse4' 23618 `no-sse4' 23619 Enable/disable the generation of the SSE4 instructions (both 23620 SSE4.1 and SSE4.2). 23621 23622 `sse4.1' 23623 `no-sse4.1' 23624 Enable/disable the generation of the sse4.1 instructions. 23625 23626 `sse4.2' 23627 `no-sse4.2' 23628 Enable/disable the generation of the sse4.2 instructions. 23629 23630 `sse4a' 23631 `no-sse4a' 23632 Enable/disable the generation of the SSE4A instructions. 23633 23634 `fma4' 23635 `no-fma4' 23636 Enable/disable the generation of the FMA4 instructions. 23637 23638 `xop' 23639 `no-xop' 23640 Enable/disable the generation of the XOP instructions. 23641 23642 `lwp' 23643 `no-lwp' 23644 Enable/disable the generation of the LWP instructions. 23645 23646 `ssse3' 23647 `no-ssse3' 23648 Enable/disable the generation of the SSSE3 instructions. 23649 23650 `cld' 23651 `no-cld' 23652 Enable/disable the generation of the CLD before string moves. 23653 23654 `fancy-math-387' 23655 `no-fancy-math-387' 23656 Enable/disable the generation of the `sin', `cos', and `sqrt' 23657 instructions on the 387 floating-point unit. 23658 23659 `fused-madd' 23660 `no-fused-madd' 23661 Enable/disable the generation of the fused multiply/add 23662 instructions. 23663 23664 `ieee-fp' 23665 `no-ieee-fp' 23666 Enable/disable the generation of floating point that depends 23667 on IEEE arithmetic. 23668 23669 `inline-all-stringops' 23670 `no-inline-all-stringops' 23671 Enable/disable inlining of string operations. 23672 23673 `inline-stringops-dynamically' 23674 `no-inline-stringops-dynamically' 23675 Enable/disable the generation of the inline code to do small 23676 string operations and calling the library routines for large 23677 operations. 23678 23679 `align-stringops' 23680 `no-align-stringops' 23681 Do/do not align destination of inlined string operations. 23682 23683 `recip' 23684 `no-recip' 23685 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 23686 RSQRTPS instructions followed an additional Newton-Raphson 23687 step instead of doing a floating-point division. 23688 23689 `arch=ARCH' 23690 Specify the architecture to generate code for in compiling 23691 the function. 23692 23693 `tune=TUNE' 23694 Specify the architecture to tune for in compiling the 23695 function. 23696 23697 `fpmath=FPMATH' 23698 Specify which floating-point unit to use. The 23699 `target("fpmath=sse,387")' option must be specified as 23700 `target("fpmath=sse+387")' because the comma would separate 23701 different options. 23702 23703 On the PowerPC, the following options are allowed: 23704 23705 `altivec' 23706 `no-altivec' 23707 Generate code that uses (does not use) AltiVec instructions. 23708 In 32-bit code, you cannot enable AltiVec instructions unless 23709 `-mabi=altivec' is used on the command line. 23710 23711 `cmpb' 23712 `no-cmpb' 23713 Generate code that uses (does not use) the compare bytes 23714 instruction implemented on the POWER6 processor and other 23715 processors that support the PowerPC V2.05 architecture. 23716 23717 `dlmzb' 23718 `no-dlmzb' 23719 Generate code that uses (does not use) the string-search 23720 `dlmzb' instruction on the IBM 405, 440, 464 and 476 23721 processors. This instruction is generated by default when 23722 targeting those processors. 23723 23724 `fprnd' 23725 `no-fprnd' 23726 Generate code that uses (does not use) the FP round to integer 23727 instructions implemented on the POWER5+ processor and other 23728 processors that support the PowerPC V2.03 architecture. 23729 23730 `hard-dfp' 23731 `no-hard-dfp' 23732 Generate code that uses (does not use) the decimal 23733 floating-point instructions implemented on some POWER 23734 processors. 23735 23736 `isel' 23737 `no-isel' 23738 Generate code that uses (does not use) ISEL instruction. 23739 23740 `mfcrf' 23741 `no-mfcrf' 23742 Generate code that uses (does not use) the move from condition 23743 register field instruction implemented on the POWER4 23744 processor and other processors that support the PowerPC V2.01 23745 architecture. 23746 23747 `mfpgpr' 23748 `no-mfpgpr' 23749 Generate code that uses (does not use) the FP move to/from 23750 general purpose register instructions implemented on the 23751 POWER6X processor and other processors that support the 23752 extended PowerPC V2.05 architecture. 23753 23754 `mulhw' 23755 `no-mulhw' 23756 Generate code that uses (does not use) the half-word multiply 23757 and multiply-accumulate instructions on the IBM 405, 440, 464 23758 and 476 processors. These instructions are generated by 23759 default when targeting those processors. 23760 23761 `multiple' 23762 `no-multiple' 23763 Generate code that uses (does not use) the load multiple word 23764 instructions and the store multiple word instructions. 23765 23766 `update' 23767 `no-update' 23768 Generate code that uses (does not use) the load or store 23769 instructions that update the base register to the address of 23770 the calculated memory location. 23771 23772 `popcntb' 23773 `no-popcntb' 23774 Generate code that uses (does not use) the popcount and 23775 double-precision FP reciprocal estimate instruction 23776 implemented on the POWER5 processor and other processors that 23777 support the PowerPC V2.02 architecture. 23778 23779 `popcntd' 23780 `no-popcntd' 23781 Generate code that uses (does not use) the popcount 23782 instruction implemented on the POWER7 processor and other 23783 processors that support the PowerPC V2.06 architecture. 23784 23785 `powerpc-gfxopt' 23786 `no-powerpc-gfxopt' 23787 Generate code that uses (does not use) the optional PowerPC 23788 architecture instructions in the Graphics group, including 23789 floating-point select. 23790 23791 `powerpc-gpopt' 23792 `no-powerpc-gpopt' 23793 Generate code that uses (does not use) the optional PowerPC 23794 architecture instructions in the General Purpose group, 23795 including floating-point square root. 23796 23797 `recip-precision' 23798 `no-recip-precision' 23799 Assume (do not assume) that the reciprocal estimate 23800 instructions provide higher-precision estimates than is 23801 mandated by the powerpc ABI. 23802 23803 `string' 23804 `no-string' 23805 Generate code that uses (does not use) the load string 23806 instructions and the store string word instructions to save 23807 multiple registers and do small block moves. 23808 23809 `vsx' 23810 `no-vsx' 23811 Generate code that uses (does not use) vector/scalar (VSX) 23812 instructions, and also enable the use of built-in functions 23813 that allow more direct access to the VSX instruction set. In 23814 32-bit code, you cannot enable VSX or AltiVec instructions 23815 unless `-mabi=altivec' is used on the command line. 23816 23817 `friz' 23818 `no-friz' 23819 Generate (do not generate) the `friz' instruction when the 23820 `-funsafe-math-optimizations' option is used to optimize 23821 rounding a floating-point value to 64-bit integer and back to 23822 floating point. The `friz' instruction does not return the 23823 same value if the floating-point number is too large to fit 23824 in an integer. 23825 23826 `avoid-indexed-addresses' 23827 `no-avoid-indexed-addresses' 23828 Generate code that tries to avoid (not avoid) the use of 23829 indexed load or store instructions. 23830 23831 `paired' 23832 `no-paired' 23833 Generate code that uses (does not use) the generation of 23834 PAIRED simd instructions. 23835 23836 `longcall' 23837 `no-longcall' 23838 Generate code that assumes (does not assume) that all calls 23839 are far away so that a longer more expensive calling sequence 23840 is required. 23841 23842 `cpu=CPU' 23843 Specify the architecture to generate code for when compiling 23844 the function. If you select the `target("cpu=power7")' 23845 attribute when generating 32-bit code, VSX and AltiVec 23846 instructions are not generated unless you use the 23847 `-mabi=altivec' option on the command line. 23848 23849 `tune=TUNE' 23850 Specify the architecture to tune for when compiling the 23851 function. If you do not specify the `target("tune=TUNE")' 23852 attribute and you do specify the `target("cpu=CPU")' 23853 attribute, compilation tunes for the CPU architecture, and 23854 not the default tuning specified on the command line. 23855 23856 On the 386/x86_64 and PowerPC back ends, you can use either 23857 multiple strings to specify multiple options, or you can separate 23858 the option with a comma (`,'). 23859 23860 On the 386/x86_64 and PowerPC back ends, the inliner does not 23861 inline a function that has different target options than the 23862 caller, unless the callee has a subset of the target options of 23863 the caller. For example a function declared with `target("sse3")' 23864 can inline a function with `target("sse2")', since `-msse3' 23865 implies `-msse2'. 23866 23867 The `target' attribute is not implemented in GCC versions earlier 23868 than 4.4 for the i386/x86_64 and 4.6 for the PowerPC back ends. 23869 It is not currently implemented for other back ends. 23870 23871 `tiny_data' 23872 Use this attribute on the H8/300H and H8S to indicate that the 23873 specified variable should be placed into the tiny data section. 23874 The compiler generates more efficient code for loads and stores on 23875 data in the tiny data section. Note the tiny data area is limited 23876 to slightly under 32KB of data. 23877 23878 `trap_exit' 23879 Use this attribute on the SH for an `interrupt_handler' to return 23880 using `trapa' instead of `rte'. This attribute expects an integer 23881 argument specifying the trap number to be used. 23882 23883 `trapa_handler' 23884 On SH targets this function attribute is similar to 23885 `interrupt_handler' but it does not save and restore all registers. 23886 23887 `unused' 23888 This attribute, attached to a function, means that the function is 23889 meant to be possibly unused. GCC does not produce a warning for 23890 this function. 23891 23892 `used' 23893 This attribute, attached to a function, means that code must be 23894 emitted for the function even if it appears that the function is 23895 not referenced. This is useful, for example, when the function is 23896 referenced only in inline assembly. 23897 23898 When applied to a member function of a C++ class template, the 23899 attribute also means that the function is instantiated if the 23900 class itself is instantiated. 23901 23902 `version_id' 23903 This IA-64 HP-UX attribute, attached to a global variable or 23904 function, renames a symbol to contain a version string, thus 23905 allowing for function level versioning. HP-UX system header files 23906 may use version level functioning for some system calls. 23907 23908 extern int foo () __attribute__((version_id ("20040821"))); 23909 23910 Calls to FOO are mapped to calls to FOO{20040821}. 23911 23912 `visibility ("VISIBILITY_TYPE")' 23913 This attribute affects the linkage of the declaration to which it 23914 is attached. There are four supported VISIBILITY_TYPE values: 23915 default, hidden, protected or internal visibility. 23916 23917 void __attribute__ ((visibility ("protected"))) 23918 f () { /* Do something. */; } 23919 int i __attribute__ ((visibility ("hidden"))); 23920 23921 The possible values of VISIBILITY_TYPE correspond to the 23922 visibility settings in the ELF gABI. 23923 23924 "default" 23925 Default visibility is the normal case for the object file 23926 format. This value is available for the visibility attribute 23927 to override other options that may change the assumed 23928 visibility of entities. 23929 23930 On ELF, default visibility means that the declaration is 23931 visible to other modules and, in shared libraries, means that 23932 the declared entity may be overridden. 23933 23934 On Darwin, default visibility means that the declaration is 23935 visible to other modules. 23936 23937 Default visibility corresponds to "external linkage" in the 23938 language. 23939 23940 "hidden" 23941 Hidden visibility indicates that the entity declared has a new 23942 form of linkage, which we call "hidden linkage". Two 23943 declarations of an object with hidden linkage refer to the 23944 same object if they are in the same shared object. 23945 23946 "internal" 23947 Internal visibility is like hidden visibility, but with 23948 additional processor specific semantics. Unless otherwise 23949 specified by the psABI, GCC defines internal visibility to 23950 mean that a function is _never_ called from another module. 23951 Compare this with hidden functions which, while they cannot 23952 be referenced directly by other modules, can be referenced 23953 indirectly via function pointers. By indicating that a 23954 function cannot be called from outside the module, GCC may 23955 for instance omit the load of a PIC register since it is known 23956 that the calling function loaded the correct value. 23957 23958 "protected" 23959 Protected visibility is like default visibility except that it 23960 indicates that references within the defining module bind to 23961 the definition in that module. That is, the declared entity 23962 cannot be overridden by another module. 23963 23964 23965 All visibilities are supported on many, but not all, ELF targets 23966 (supported when the assembler supports the `.visibility' 23967 pseudo-op). Default visibility is supported everywhere. Hidden 23968 visibility is supported on Darwin targets. 23969 23970 The visibility attribute should be applied only to declarations 23971 that would otherwise have external linkage. The attribute should 23972 be applied consistently, so that the same entity should not be 23973 declared with different settings of the attribute. 23974 23975 In C++, the visibility attribute applies to types as well as 23976 functions and objects, because in C++ types have linkage. A class 23977 must not have greater visibility than its non-static data member 23978 types and bases, and class members default to the visibility of 23979 their class. Also, a declaration without explicit visibility is 23980 limited to the visibility of its type. 23981 23982 In C++, you can mark member functions and static member variables 23983 of a class with the visibility attribute. This is useful if you 23984 know a particular method or static member variable should only be 23985 used from one shared object; then you can mark it hidden while the 23986 rest of the class has default visibility. Care must be taken to 23987 avoid breaking the One Definition Rule; for example, it is usually 23988 not useful to mark an inline method as hidden without marking the 23989 whole class as hidden. 23990 23991 A C++ namespace declaration can also have the visibility attribute. 23992 This attribute applies only to the particular namespace body, not 23993 to other definitions of the same namespace; it is equivalent to 23994 using `#pragma GCC visibility' before and after the namespace 23995 definition (*note Visibility Pragmas::). 23996 23997 In C++, if a template argument has limited visibility, this 23998 restriction is implicitly propagated to the template instantiation. 23999 Otherwise, template instantiations and specializations default to 24000 the visibility of their template. 24001 24002 If both the template and enclosing class have explicit visibility, 24003 the visibility from the template is used. 24004 24005 `vliw' 24006 On MeP, the `vliw' attribute tells the compiler to emit 24007 instructions in VLIW mode instead of core mode. Note that this 24008 attribute is not allowed unless a VLIW coprocessor has been 24009 configured and enabled through command-line options. 24010 24011 `warn_unused_result' 24012 The `warn_unused_result' attribute causes a warning to be emitted 24013 if a caller of the function with this attribute does not use its 24014 return value. This is useful for functions where not checking the 24015 result is either a security problem or always a bug, such as 24016 `realloc'. 24017 24018 int fn () __attribute__ ((warn_unused_result)); 24019 int foo () 24020 { 24021 if (fn () < 0) return -1; 24022 fn (); 24023 return 0; 24024 } 24025 24026 results in warning on line 5. 24027 24028 `weak' 24029 The `weak' attribute causes the declaration to be emitted as a weak 24030 symbol rather than a global. This is primarily useful in defining 24031 library functions that can be overridden in user code, though it 24032 can also be used with non-function declarations. Weak symbols are 24033 supported for ELF targets, and also for a.out targets when using 24034 the GNU assembler and linker. 24035 24036 `weakref' 24037 `weakref ("TARGET")' 24038 The `weakref' attribute marks a declaration as a weak reference. 24039 Without arguments, it should be accompanied by an `alias' attribute 24040 naming the target symbol. Optionally, the TARGET may be given as 24041 an argument to `weakref' itself. In either case, `weakref' 24042 implicitly marks the declaration as `weak'. Without a TARGET, 24043 given as an argument to `weakref' or to `alias', `weakref' is 24044 equivalent to `weak'. 24045 24046 static int x() __attribute__ ((weakref ("y"))); 24047 /* is equivalent to... */ 24048 static int x() __attribute__ ((weak, weakref, alias ("y"))); 24049 /* and to... */ 24050 static int x() __attribute__ ((weakref)); 24051 static int x() __attribute__ ((alias ("y"))); 24052 24053 A weak reference is an alias that does not by itself require a 24054 definition to be given for the target symbol. If the target 24055 symbol is only referenced through weak references, then it becomes 24056 a `weak' undefined symbol. If it is directly referenced, however, 24057 then such strong references prevail, and a definition is required 24058 for the symbol, not necessarily in the same translation unit. 24059 24060 The effect is equivalent to moving all references to the alias to a 24061 separate translation unit, renaming the alias to the aliased 24062 symbol, declaring it as weak, compiling the two separate 24063 translation units and performing a reloadable link on them. 24064 24065 At present, a declaration to which `weakref' is attached can only 24066 be `static'. 24067 24068 24069 You can specify multiple attributes in a declaration by separating them 24070 by commas within the double parentheses or by immediately following an 24071 attribute declaration with another attribute declaration. 24072 24073 Some people object to the `__attribute__' feature, suggesting that ISO 24074 C's `#pragma' should be used instead. At the time `__attribute__' was 24075 designed, there were two reasons for not doing this. 24076 24077 1. It is impossible to generate `#pragma' commands from a macro. 24078 24079 2. There is no telling what the same `#pragma' might mean in another 24080 compiler. 24081 24082 These two reasons applied to almost any application that might have 24083 been proposed for `#pragma'. It was basically a mistake to use 24084 `#pragma' for _anything_. 24085 24086 The ISO C99 standard includes `_Pragma', which now allows pragmas to 24087 be generated from macros. In addition, a `#pragma GCC' namespace is 24088 now in use for GCC-specific pragmas. However, it has been found 24089 convenient to use `__attribute__' to achieve a natural attachment of 24090 attributes to their corresponding declarations, whereas `#pragma GCC' 24091 is of use for constructs that do not naturally form part of the 24092 grammar. *Note Pragmas Accepted by GCC: Pragmas. 24093 24094 24095 File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 24096 24097 6.31 Attribute Syntax 24098 ===================== 24099 24100 This section describes the syntax with which `__attribute__' may be 24101 used, and the constructs to which attribute specifiers bind, for the C 24102 language. Some details may vary for C++ and Objective-C. Because of 24103 infelicities in the grammar for attributes, some forms described here 24104 may not be successfully parsed in all cases. 24105 24106 There are some problems with the semantics of attributes in C++. For 24107 example, there are no manglings for attributes, although they may affect 24108 code generation, so problems may arise when attributed types are used in 24109 conjunction with templates or overloading. Similarly, `typeid' does 24110 not distinguish between types with different attributes. Support for 24111 attributes in C++ may be restricted in future to attributes on 24112 declarations only, but not on nested declarators. 24113 24114 *Note Function Attributes::, for details of the semantics of attributes 24115 applying to functions. *Note Variable Attributes::, for details of the 24116 semantics of attributes applying to variables. *Note Type Attributes::, 24117 for details of the semantics of attributes applying to structure, union 24118 and enumerated types. 24119 24120 An "attribute specifier" is of the form `__attribute__ 24121 ((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 24122 comma-separated sequence of "attributes", where each attribute is one 24123 of the following: 24124 24125 * Empty. Empty attributes are ignored. 24126 24127 * A word (which may be an identifier such as `unused', or a reserved 24128 word such as `const'). 24129 24130 * A word, followed by, in parentheses, parameters for the attribute. 24131 These parameters take one of the following forms: 24132 24133 * An identifier. For example, `mode' attributes use this form. 24134 24135 * An identifier followed by a comma and a non-empty 24136 comma-separated list of expressions. For example, `format' 24137 attributes use this form. 24138 24139 * A possibly empty comma-separated list of expressions. For 24140 example, `format_arg' attributes use this form with the list 24141 being a single integer constant expression, and `alias' 24142 attributes use this form with the list being a single string 24143 constant. 24144 24145 An "attribute specifier list" is a sequence of one or more attribute 24146 specifiers, not separated by any other tokens. 24147 24148 In GNU C, an attribute specifier list may appear after the colon 24149 following a label, other than a `case' or `default' label. The only 24150 attribute it makes sense to use after a label is `unused'. This 24151 feature is intended for program-generated code that may contain unused 24152 labels, but which is compiled with `-Wall'. It is not normally 24153 appropriate to use in it human-written code, though it could be useful 24154 in cases where the code that jumps to the label is contained within an 24155 `#ifdef' conditional. GNU C++ only permits attributes on labels if the 24156 attribute specifier is immediately followed by a semicolon (i.e., the 24157 label applies to an empty statement). If the semicolon is missing, C++ 24158 label attributes are ambiguous, as it is permissible for a declaration, 24159 which could begin with an attribute list, to be labelled in C++. 24160 Declarations cannot be labelled in C90 or C99, so the ambiguity does 24161 not arise there. 24162 24163 An attribute specifier list may appear as part of a `struct', `union' 24164 or `enum' specifier. It may go either immediately after the `struct', 24165 `union' or `enum' keyword, or after the closing brace. The former 24166 syntax is preferred. Where attribute specifiers follow the closing 24167 brace, they are considered to relate to the structure, union or 24168 enumerated type defined, not to any enclosing declaration the type 24169 specifier appears in, and the type defined is not complete until after 24170 the attribute specifiers. 24171 24172 Otherwise, an attribute specifier appears as part of a declaration, 24173 counting declarations of unnamed parameters and type names, and relates 24174 to that declaration (which may be nested in another declaration, for 24175 example in the case of a parameter declaration), or to a particular 24176 declarator within a declaration. Where an attribute specifier is 24177 applied to a parameter declared as a function or an array, it should 24178 apply to the function or array rather than the pointer to which the 24179 parameter is implicitly converted, but this is not yet correctly 24180 implemented. 24181 24182 Any list of specifiers and qualifiers at the start of a declaration may 24183 contain attribute specifiers, whether or not such a list may in that 24184 context contain storage class specifiers. (Some attributes, however, 24185 are essentially in the nature of storage class specifiers, and only make 24186 sense where storage class specifiers may be used; for example, 24187 `section'.) There is one necessary limitation to this syntax: the 24188 first old-style parameter declaration in a function definition cannot 24189 begin with an attribute specifier, because such an attribute applies to 24190 the function instead by syntax described below (which, however, is not 24191 yet implemented in this case). In some other cases, attribute 24192 specifiers are permitted by this grammar but not yet supported by the 24193 compiler. All attribute specifiers in this place relate to the 24194 declaration as a whole. In the obsolescent usage where a type of `int' 24195 is implied by the absence of type specifiers, such a list of specifiers 24196 and qualifiers may be an attribute specifier list with no other 24197 specifiers or qualifiers. 24198 24199 At present, the first parameter in a function prototype must have some 24200 type specifier that is not an attribute specifier; this resolves an 24201 ambiguity in the interpretation of `void f(int (__attribute__((foo)) 24202 x))', but is subject to change. At present, if the parentheses of a 24203 function declarator contain only attributes then those attributes are 24204 ignored, rather than yielding an error or warning or implying a single 24205 parameter of type int, but this is subject to change. 24206 24207 An attribute specifier list may appear immediately before a declarator 24208 (other than the first) in a comma-separated list of declarators in a 24209 declaration of more than one identifier using a single list of 24210 specifiers and qualifiers. Such attribute specifiers apply only to the 24211 identifier before whose declarator they appear. For example, in 24212 24213 __attribute__((noreturn)) void d0 (void), 24214 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 24215 d2 (void) 24216 24217 the `noreturn' attribute applies to all the functions declared; the 24218 `format' attribute only applies to `d1'. 24219 24220 An attribute specifier list may appear immediately before the comma, 24221 `=' or semicolon terminating the declaration of an identifier other 24222 than a function definition. Such attribute specifiers apply to the 24223 declared object or function. Where an assembler name for an object or 24224 function is specified (*note Asm Labels::), the attribute must follow 24225 the `asm' specification. 24226 24227 An attribute specifier list may, in future, be permitted to appear 24228 after the declarator in a function definition (before any old-style 24229 parameter declarations or the function body). 24230 24231 Attribute specifiers may be mixed with type qualifiers appearing inside 24232 the `[]' of a parameter array declarator, in the C99 construct by which 24233 such qualifiers are applied to the pointer to which the array is 24234 implicitly converted. Such attribute specifiers apply to the pointer, 24235 not to the array, but at present this is not implemented and they are 24236 ignored. 24237 24238 An attribute specifier list may appear at the start of a nested 24239 declarator. At present, there are some limitations in this usage: the 24240 attributes correctly apply to the declarator, but for most individual 24241 attributes the semantics this implies are not implemented. When 24242 attribute specifiers follow the `*' of a pointer declarator, they may 24243 be mixed with any type qualifiers present. The following describes the 24244 formal semantics of this syntax. It makes the most sense if you are 24245 familiar with the formal specification of declarators in the ISO C 24246 standard. 24247 24248 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 24249 where `T' contains declaration specifiers that specify a type TYPE 24250 (such as `int') and `D1' is a declarator that contains an identifier 24251 IDENT. The type specified for IDENT for derived declarators whose type 24252 does not include an attribute specifier is as in the ISO C standard. 24253 24254 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 24255 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 24256 TYPE" for IDENT, then `T D1' specifies the type 24257 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 24258 24259 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 24260 D', and the declaration `T D' specifies the type 24261 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 24262 the type "DERIVED-DECLARATOR-TYPE-LIST 24263 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT. 24264 24265 For example, 24266 24267 void (__attribute__((noreturn)) ****f) (void); 24268 24269 specifies the type "pointer to pointer to pointer to pointer to 24270 non-returning function returning `void'". As another example, 24271 24272 char *__attribute__((aligned(8))) *f; 24273 24274 specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 24275 again that this does not work with most attributes; for example, the 24276 usage of `aligned' and `noreturn' attributes given above is not yet 24277 supported. 24278 24279 For compatibility with existing code written for compiler versions that 24280 did not implement attributes on nested declarators, some laxity is 24281 allowed in the placing of attributes. If an attribute that only applies 24282 to types is applied to a declaration, it is treated as applying to the 24283 type of that declaration. If an attribute that only applies to 24284 declarations is applied to the type of a declaration, it is treated as 24285 applying to that declaration; and, for compatibility with code placing 24286 the attributes immediately before the identifier declared, such an 24287 attribute applied to a function return type is treated as applying to 24288 the function type, and such an attribute applied to an array element 24289 type is treated as applying to the array type. If an attribute that 24290 only applies to function types is applied to a pointer-to-function 24291 type, it is treated as applying to the pointer target type; if such an 24292 attribute is applied to a function return type that is not a 24293 pointer-to-function type, it is treated as applying to the function 24294 type. 24295 24296 24297 File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 24298 24299 6.32 Prototypes and Old-Style Function Definitions 24300 ================================================== 24301 24302 GNU C extends ISO C to allow a function prototype to override a later 24303 old-style non-prototype definition. Consider the following example: 24304 24305 /* Use prototypes unless the compiler is old-fashioned. */ 24306 #ifdef __STDC__ 24307 #define P(x) x 24308 #else 24309 #define P(x) () 24310 #endif 24311 24312 /* Prototype function declaration. */ 24313 int isroot P((uid_t)); 24314 24315 /* Old-style function definition. */ 24316 int 24317 isroot (x) /* ??? lossage here ??? */ 24318 uid_t x; 24319 { 24320 return x == 0; 24321 } 24322 24323 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 24324 this example, because subword arguments in old-style non-prototype 24325 definitions are promoted. Therefore in this example the function 24326 definition's argument is really an `int', which does not match the 24327 prototype argument type of `short'. 24328 24329 This restriction of ISO C makes it hard to write code that is portable 24330 to traditional C compilers, because the programmer does not know 24331 whether the `uid_t' type is `short', `int', or `long'. Therefore, in 24332 cases like these GNU C allows a prototype to override a later old-style 24333 definition. More precisely, in GNU C, a function prototype argument 24334 type overrides the argument type specified by a later old-style 24335 definition if the former type is the same as the latter type before 24336 promotion. Thus in GNU C the above example is equivalent to the 24337 following: 24338 24339 int isroot (uid_t); 24340 24341 int 24342 isroot (uid_t x) 24343 { 24344 return x == 0; 24345 } 24346 24347 GNU C++ does not support old-style function definitions, so this 24348 extension is irrelevant. 24349 24350 24351 File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 24352 24353 6.33 C++ Style Comments 24354 ======================= 24355 24356 In GNU C, you may use C++ style comments, which start with `//' and 24357 continue until the end of the line. Many other C implementations allow 24358 such comments, and they are included in the 1999 C standard. However, 24359 C++ style comments are not recognized if you specify an `-std' option 24360 specifying a version of ISO C before C99, or `-ansi' (equivalent to 24361 `-std=c90'). 24362 24363 24364 File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 24365 24366 6.34 Dollar Signs in Identifier Names 24367 ===================================== 24368 24369 In GNU C, you may normally use dollar signs in identifier names. This 24370 is because many traditional C implementations allow such identifiers. 24371 However, dollar signs in identifiers are not supported on a few target 24372 machines, typically because the target assembler does not allow them. 24373 24374 24375 File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 24376 24377 6.35 The Character <ESC> in Constants 24378 ===================================== 24379 24380 You can use the sequence `\e' in a string or character constant to 24381 stand for the ASCII character <ESC>. 24382 24383 24384 File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 24385 24386 6.36 Specifying Attributes of Variables 24387 ======================================= 24388 24389 The keyword `__attribute__' allows you to specify special attributes of 24390 variables or structure fields. This keyword is followed by an 24391 attribute specification inside double parentheses. Some attributes are 24392 currently defined generically for variables. Other attributes are 24393 defined for variables on particular target systems. Other attributes 24394 are available for functions (*note Function Attributes::) and for types 24395 (*note Type Attributes::). Other front ends might define more 24396 attributes (*note Extensions to the C++ Language: C++ Extensions.). 24397 24398 You may also specify attributes with `__' preceding and following each 24399 keyword. This allows you to use them in header files without being 24400 concerned about a possible macro of the same name. For example, you 24401 may use `__aligned__' instead of `aligned'. 24402 24403 *Note Attribute Syntax::, for details of the exact syntax for using 24404 attributes. 24405 24406 `aligned (ALIGNMENT)' 24407 This attribute specifies a minimum alignment for the variable or 24408 structure field, measured in bytes. For example, the declaration: 24409 24410 int x __attribute__ ((aligned (16))) = 0; 24411 24412 causes the compiler to allocate the global variable `x' on a 24413 16-byte boundary. On a 68040, this could be used in conjunction 24414 with an `asm' expression to access the `move16' instruction which 24415 requires 16-byte aligned operands. 24416 24417 You can also specify the alignment of structure fields. For 24418 example, to create a double-word aligned `int' pair, you could 24419 write: 24420 24421 struct foo { int x[2] __attribute__ ((aligned (8))); }; 24422 24423 This is an alternative to creating a union with a `double' member, 24424 which forces the union to be double-word aligned. 24425 24426 As in the preceding examples, you can explicitly specify the 24427 alignment (in bytes) that you wish the compiler to use for a given 24428 variable or structure field. Alternatively, you can leave out the 24429 alignment factor and just ask the compiler to align a variable or 24430 field to the default alignment for the target architecture you are 24431 compiling for. The default alignment is sufficient for all scalar 24432 types, but may not be enough for all vector types on a target that 24433 supports vector operations. The default alignment is fixed for a 24434 particular target ABI. 24435 24436 GCC also provides a target specific macro `__BIGGEST_ALIGNMENT__', 24437 which is the largest alignment ever used for any data type on the 24438 target machine you are compiling for. For example, you could 24439 write: 24440 24441 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 24442 24443 The compiler automatically sets the alignment for the declared 24444 variable or field to `__BIGGEST_ALIGNMENT__'. Doing this can 24445 often make copy operations more efficient, because the compiler can 24446 use whatever instructions copy the biggest chunks of memory when 24447 performing copies to or from the variables or fields that you have 24448 aligned this way. Note that the value of `__BIGGEST_ALIGNMENT__' 24449 may change depending on command-line options. 24450 24451 When used on a struct, or struct member, the `aligned' attribute 24452 can only increase the alignment; in order to decrease it, the 24453 `packed' attribute must be specified as well. When used as part 24454 of a typedef, the `aligned' attribute can both increase and 24455 decrease alignment, and specifying the `packed' attribute 24456 generates a warning. 24457 24458 Note that the effectiveness of `aligned' attributes may be limited 24459 by inherent limitations in your linker. On many systems, the 24460 linker is only able to arrange for variables to be aligned up to a 24461 certain maximum alignment. (For some linkers, the maximum 24462 supported alignment may be very very small.) If your linker is 24463 only able to align variables up to a maximum of 8-byte alignment, 24464 then specifying `aligned(16)' in an `__attribute__' still only 24465 provides you with 8-byte alignment. See your linker documentation 24466 for further information. 24467 24468 The `aligned' attribute can also be used for functions (*note 24469 Function Attributes::.) 24470 24471 `cleanup (CLEANUP_FUNCTION)' 24472 The `cleanup' attribute runs a function when the variable goes out 24473 of scope. This attribute can only be applied to auto function 24474 scope variables; it may not be applied to parameters or variables 24475 with static storage duration. The function must take one 24476 parameter, a pointer to a type compatible with the variable. The 24477 return value of the function (if any) is ignored. 24478 24479 If `-fexceptions' is enabled, then CLEANUP_FUNCTION is run during 24480 the stack unwinding that happens during the processing of the 24481 exception. Note that the `cleanup' attribute does not allow the 24482 exception to be caught, only to perform an action. It is 24483 undefined what happens if CLEANUP_FUNCTION does not return 24484 normally. 24485 24486 `common' 24487 `nocommon' 24488 The `common' attribute requests GCC to place a variable in 24489 "common" storage. The `nocommon' attribute requests the 24490 opposite--to allocate space for it directly. 24491 24492 These attributes override the default chosen by the `-fno-common' 24493 and `-fcommon' flags respectively. 24494 24495 `deprecated' 24496 `deprecated (MSG)' 24497 The `deprecated' attribute results in a warning if the variable is 24498 used anywhere in the source file. This is useful when identifying 24499 variables that are expected to be removed in a future version of a 24500 program. The warning also includes the location of the declaration 24501 of the deprecated variable, to enable users to easily find further 24502 information about why the variable is deprecated, or what they 24503 should do instead. Note that the warning only occurs for uses: 24504 24505 extern int old_var __attribute__ ((deprecated)); 24506 extern int old_var; 24507 int new_fn () { return old_var; } 24508 24509 results in a warning on line 3 but not line 2. The optional MSG 24510 argument, which must be a string, is printed in the warning if 24511 present. 24512 24513 The `deprecated' attribute can also be used for functions and 24514 types (*note Function Attributes::, *note Type Attributes::.) 24515 24516 `mode (MODE)' 24517 This attribute specifies the data type for the 24518 declaration--whichever type corresponds to the mode MODE. This in 24519 effect lets you request an integer or floating-point type 24520 according to its width. 24521 24522 You may also specify a mode of `byte' or `__byte__' to indicate 24523 the mode corresponding to a one-byte integer, `word' or `__word__' 24524 for the mode of a one-word integer, and `pointer' or `__pointer__' 24525 for the mode used to represent pointers. 24526 24527 `packed' 24528 The `packed' attribute specifies that a variable or structure field 24529 should have the smallest possible alignment--one byte for a 24530 variable, and one bit for a field, unless you specify a larger 24531 value with the `aligned' attribute. 24532 24533 Here is a structure in which the field `x' is packed, so that it 24534 immediately follows `a': 24535 24536 struct foo 24537 { 24538 char a; 24539 int x[2] __attribute__ ((packed)); 24540 }; 24541 24542 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' 24543 attribute on bit-fields of type `char'. This has been fixed in 24544 GCC 4.4 but the change can lead to differences in the structure 24545 layout. See the documentation of `-Wpacked-bitfield-compat' for 24546 more information. 24547 24548 `section ("SECTION-NAME")' 24549 Normally, the compiler places the objects it generates in sections 24550 like `data' and `bss'. Sometimes, however, you need additional 24551 sections, or you need certain particular variables to appear in 24552 special sections, for example to map to special hardware. The 24553 `section' attribute specifies that a variable (or function) lives 24554 in a particular section. For example, this small program uses 24555 several specific section names: 24556 24557 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 24558 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 24559 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 24560 int init_data __attribute__ ((section ("INITDATA"))); 24561 24562 main() 24563 { 24564 /* Initialize stack pointer */ 24565 init_sp (stack + sizeof (stack)); 24566 24567 /* Initialize initialized data */ 24568 memcpy (&init_data, &data, &edata - &data); 24569 24570 /* Turn on the serial ports */ 24571 init_duart (&a); 24572 init_duart (&b); 24573 } 24574 24575 Use the `section' attribute with _global_ variables and not 24576 _local_ variables, as shown in the example. 24577 24578 You may use the `section' attribute with initialized or 24579 uninitialized global variables but the linker requires each object 24580 be defined once, with the exception that uninitialized variables 24581 tentatively go in the `common' (or `bss') section and can be 24582 multiply "defined". Using the `section' attribute changes what 24583 section the variable goes into and may cause the linker to issue 24584 an error if an uninitialized variable has multiple definitions. 24585 You can force a variable to be initialized with the `-fno-common' 24586 flag or the `nocommon' attribute. 24587 24588 Some file formats do not support arbitrary sections so the 24589 `section' attribute is not available on all platforms. If you 24590 need to map the entire contents of a module to a particular 24591 section, consider using the facilities of the linker instead. 24592 24593 `shared' 24594 On Microsoft Windows, in addition to putting variable definitions 24595 in a named section, the section can also be shared among all 24596 running copies of an executable or DLL. For example, this small 24597 program defines shared data by putting it in a named section 24598 `shared' and marking the section shareable: 24599 24600 int foo __attribute__((section ("shared"), shared)) = 0; 24601 24602 int 24603 main() 24604 { 24605 /* Read and write foo. All running 24606 copies see the same value. */ 24607 return 0; 24608 } 24609 24610 You may only use the `shared' attribute along with `section' 24611 attribute with a fully-initialized global definition because of 24612 the way linkers work. See `section' attribute for more 24613 information. 24614 24615 The `shared' attribute is only available on Microsoft Windows. 24616 24617 `tls_model ("TLS_MODEL")' 24618 The `tls_model' attribute sets thread-local storage model (*note 24619 Thread-Local::) of a particular `__thread' variable, overriding 24620 `-ftls-model=' command-line switch on a per-variable basis. The 24621 TLS_MODEL argument should be one of `global-dynamic', 24622 `local-dynamic', `initial-exec' or `local-exec'. 24623 24624 Not all targets support this attribute. 24625 24626 `unused' 24627 This attribute, attached to a variable, means that the variable is 24628 meant to be possibly unused. GCC does not produce a warning for 24629 this variable. 24630 24631 `used' 24632 This attribute, attached to a variable, means that the variable 24633 must be emitted even if it appears that the variable is not 24634 referenced. 24635 24636 When applied to a static data member of a C++ class template, the 24637 attribute also means that the member is instantiated if the class 24638 itself is instantiated. 24639 24640 `vector_size (BYTES)' 24641 This attribute specifies the vector size for the variable, 24642 measured in bytes. For example, the declaration: 24643 24644 int foo __attribute__ ((vector_size (16))); 24645 24646 causes the compiler to set the mode for `foo', to be 16 bytes, 24647 divided into `int' sized units. Assuming a 32-bit int (a vector of 24648 4 units of 4 bytes), the corresponding mode of `foo' is V4SI. 24649 24650 This attribute is only applicable to integral and float scalars, 24651 although arrays, pointers, and function return values are allowed 24652 in conjunction with this construct. 24653 24654 Aggregates with this attribute are invalid, even if they are of 24655 the same size as a corresponding scalar. For example, the 24656 declaration: 24657 24658 struct S { int a; }; 24659 struct S __attribute__ ((vector_size (16))) foo; 24660 24661 is invalid even if the size of the structure is the same as the 24662 size of the `int'. 24663 24664 `selectany' 24665 The `selectany' attribute causes an initialized global variable to 24666 have link-once semantics. When multiple definitions of the 24667 variable are encountered by the linker, the first is selected and 24668 the remainder are discarded. Following usage by the Microsoft 24669 compiler, the linker is told _not_ to warn about size or content 24670 differences of the multiple definitions. 24671 24672 Although the primary usage of this attribute is for POD types, the 24673 attribute can also be applied to global C++ objects that are 24674 initialized by a constructor. In this case, the static 24675 initialization and destruction code for the object is emitted in 24676 each translation defining the object, but the calls to the 24677 constructor and destructor are protected by a link-once guard 24678 variable. 24679 24680 The `selectany' attribute is only available on Microsoft Windows 24681 targets. You can use `__declspec (selectany)' as a synonym for 24682 `__attribute__ ((selectany))' for compatibility with other 24683 compilers. 24684 24685 `weak' 24686 The `weak' attribute is described in *note Function Attributes::. 24687 24688 `dllimport' 24689 The `dllimport' attribute is described in *note Function 24690 Attributes::. 24691 24692 `dllexport' 24693 The `dllexport' attribute is described in *note Function 24694 Attributes::. 24695 24696 24697 6.36.1 AVR Variable Attributes 24698 ------------------------------ 24699 24700 `progmem' 24701 The `progmem' attribute is used on the AVR to place read-only data 24702 in the non-volatile program memory (flash). The `progmem' 24703 attribute accomplishes this by putting respective variables into a 24704 section whose name starts with `.progmem'. 24705 24706 This attribute works similar to the `section' attribute but adds 24707 additional checking. Notice that just like the `section' 24708 attribute, `progmem' affects the location of the data but not how 24709 this data is accessed. 24710 24711 In order to read data located with the `progmem' attribute 24712 (inline) assembler must be used. 24713 /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */ 24714 #include <avr/pgmspace.h> 24715 24716 /* Locate var in flash memory */ 24717 const int var[2] PROGMEM = { 1, 2 }; 24718 24719 int read_var (int i) 24720 { 24721 /* Access var[] by accessor macro from avr/pgmspace.h */ 24722 return (int) pgm_read_word (& var[i]); 24723 } 24724 24725 AVR is a Harvard architecture processor and data and read-only data 24726 normally resides in the data memory (RAM). 24727 24728 See also the *note AVR Named Address Spaces:: section for an 24729 alternate way to locate and access data in flash memory. 24730 24731 6.36.2 Blackfin Variable Attributes 24732 ----------------------------------- 24733 24734 Three attributes are currently defined for the Blackfin. 24735 24736 `l1_data' 24737 `l1_data_A' 24738 `l1_data_B' 24739 Use these attributes on the Blackfin to place the variable into L1 24740 Data SRAM. Variables with `l1_data' attribute are put into the 24741 specific section named `.l1.data'. Those with `l1_data_A' 24742 attribute are put into the specific section named `.l1.data.A'. 24743 Those with `l1_data_B' attribute are put into the specific section 24744 named `.l1.data.B'. 24745 24746 `l2' 24747 Use this attribute on the Blackfin to place the variable into L2 24748 SRAM. Variables with `l2' attribute are put into the specific 24749 section named `.l2.data'. 24750 24751 6.36.3 M32R/D Variable Attributes 24752 --------------------------------- 24753 24754 One attribute is currently defined for the M32R/D. 24755 24756 `model (MODEL-NAME)' 24757 Use this attribute on the M32R/D to set the addressability of an 24758 object. The identifier MODEL-NAME is one of `small', `medium', or 24759 `large', representing each of the code models. 24760 24761 Small model objects live in the lower 16MB of memory (so that their 24762 addresses can be loaded with the `ld24' instruction). 24763 24764 Medium and large model objects may live anywhere in the 32-bit 24765 address space (the compiler generates `seth/add3' instructions to 24766 load their addresses). 24767 24768 6.36.4 MeP Variable Attributes 24769 ------------------------------ 24770 24771 The MeP target has a number of addressing modes and busses. The `near' 24772 space spans the standard memory space's first 16 megabytes (24 bits). 24773 The `far' space spans the entire 32-bit memory space. The `based' 24774 space is a 128-byte region in the memory space that is addressed 24775 relative to the `$tp' register. The `tiny' space is a 65536-byte 24776 region relative to the `$gp' register. In addition to these memory 24777 regions, the MeP target has a separate 16-bit control bus which is 24778 specified with `cb' attributes. 24779 24780 `based' 24781 Any variable with the `based' attribute is assigned to the 24782 `.based' section, and is accessed with relative to the `$tp' 24783 register. 24784 24785 `tiny' 24786 Likewise, the `tiny' attribute assigned variables to the `.tiny' 24787 section, relative to the `$gp' register. 24788 24789 `near' 24790 Variables with the `near' attribute are assumed to have addresses 24791 that fit in a 24-bit addressing mode. This is the default for 24792 large variables (`-mtiny=4' is the default) but this attribute can 24793 override `-mtiny=' for small variables, or override `-ml'. 24794 24795 `far' 24796 Variables with the `far' attribute are addressed using a full 24797 32-bit address. Since this covers the entire memory space, this 24798 allows modules to make no assumptions about where variables might 24799 be stored. 24800 24801 `io' 24802 `io (ADDR)' 24803 Variables with the `io' attribute are used to address 24804 memory-mapped peripherals. If an address is specified, the 24805 variable is assigned that address, else it is not assigned an 24806 address (it is assumed some other module assigns an address). 24807 Example: 24808 24809 int timer_count __attribute__((io(0x123))); 24810 24811 `cb' 24812 `cb (ADDR)' 24813 Variables with the `cb' attribute are used to access the control 24814 bus, using special instructions. `addr' indicates the control bus 24815 address. Example: 24816 24817 int cpu_clock __attribute__((cb(0x123))); 24818 24819 24820 6.36.5 i386 Variable Attributes 24821 ------------------------------- 24822 24823 Two attributes are currently defined for i386 configurations: 24824 `ms_struct' and `gcc_struct' 24825 24826 `ms_struct' 24827 `gcc_struct' 24828 If `packed' is used on a structure, or if bit-fields are used, it 24829 may be that the Microsoft ABI lays out the structure differently 24830 than the way GCC normally does. Particularly when moving packed 24831 data between functions compiled with GCC and the native Microsoft 24832 compiler (either via function call or as data in a file), it may 24833 be necessary to access either format. 24834 24835 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 24836 Windows X86 compilers to match the native Microsoft compiler. 24837 24838 The Microsoft structure layout algorithm is fairly simple with the 24839 exception of the bit-field packing. The padding and alignment of 24840 members of structures and whether a bit-field can straddle a 24841 storage-unit boundary are determine by these rules: 24842 24843 1. Structure members are stored sequentially in the order in 24844 which they are declared: the first member has the lowest 24845 memory address and the last member the highest. 24846 24847 2. Every data object has an alignment requirement. The 24848 alignment requirement for all data except structures, unions, 24849 and arrays is either the size of the object or the current 24850 packing size (specified with either the `aligned' attribute 24851 or the `pack' pragma), whichever is less. For structures, 24852 unions, and arrays, the alignment requirement is the largest 24853 alignment requirement of its members. Every object is 24854 allocated an offset so that: 24855 24856 offset % alignment_requirement == 0 24857 24858 3. Adjacent bit-fields are packed into the same 1-, 2-, or 24859 4-byte allocation unit if the integral types are the same 24860 size and if the next bit-field fits into the current 24861 allocation unit without crossing the boundary imposed by the 24862 common alignment requirements of the bit-fields. 24863 24864 MSVC interprets zero-length bit-fields in the following ways: 24865 24866 1. If a zero-length bit-field is inserted between two bit-fields 24867 that are normally coalesced, the bit-fields are not coalesced. 24868 24869 For example: 24870 24871 struct 24872 { 24873 unsigned long bf_1 : 12; 24874 unsigned long : 0; 24875 unsigned long bf_2 : 12; 24876 } t1; 24877 24878 The size of `t1' is 8 bytes with the zero-length bit-field. 24879 If the zero-length bit-field were removed, `t1''s size would 24880 be 4 bytes. 24881 24882 2. If a zero-length bit-field is inserted after a bit-field, 24883 `foo', and the alignment of the zero-length bit-field is 24884 greater than the member that follows it, `bar', `bar' is 24885 aligned as the type of the zero-length bit-field. 24886 24887 For example: 24888 24889 struct 24890 { 24891 char foo : 4; 24892 short : 0; 24893 char bar; 24894 } t2; 24895 24896 struct 24897 { 24898 char foo : 4; 24899 short : 0; 24900 double bar; 24901 } t3; 24902 24903 For `t2', `bar' is placed at offset 2, rather than offset 1. 24904 Accordingly, the size of `t2' is 4. For `t3', the zero-length 24905 bit-field does not affect the alignment of `bar' or, as a 24906 result, the size of the structure. 24907 24908 Taking this into account, it is important to note the 24909 following: 24910 24911 1. If a zero-length bit-field follows a normal bit-field, 24912 the type of the zero-length bit-field may affect the 24913 alignment of the structure as whole. For example, `t2' 24914 has a size of 4 bytes, since the zero-length bit-field 24915 follows a normal bit-field, and is of type short. 24916 24917 2. Even if a zero-length bit-field is not followed by a 24918 normal bit-field, it may still affect the alignment of 24919 the structure: 24920 24921 struct 24922 { 24923 char foo : 6; 24924 long : 0; 24925 } t4; 24926 24927 Here, `t4' takes up 4 bytes. 24928 24929 3. Zero-length bit-fields following non-bit-field members are 24930 ignored: 24931 24932 struct 24933 { 24934 char foo; 24935 long : 0; 24936 char bar; 24937 } t5; 24938 24939 Here, `t5' takes up 2 bytes. 24940 24941 6.36.6 PowerPC Variable Attributes 24942 ---------------------------------- 24943 24944 Three attributes currently are defined for PowerPC configurations: 24945 `altivec', `ms_struct' and `gcc_struct'. 24946 24947 For full documentation of the struct attributes please see the 24948 documentation in *note i386 Variable Attributes::. 24949 24950 For documentation of `altivec' attribute please see the documentation 24951 in *note PowerPC Type Attributes::. 24952 24953 6.36.7 SPU Variable Attributes 24954 ------------------------------ 24955 24956 The SPU supports the `spu_vector' attribute for variables. For 24957 documentation of this attribute please see the documentation in *note 24958 SPU Type Attributes::. 24959 24960 6.36.8 Xstormy16 Variable Attributes 24961 ------------------------------------ 24962 24963 One attribute is currently defined for xstormy16 configurations: 24964 `below100'. 24965 24966 `below100' 24967 If a variable has the `below100' attribute (`BELOW100' is allowed 24968 also), GCC places the variable in the first 0x100 bytes of memory 24969 and use special opcodes to access it. Such variables are placed 24970 in either the `.bss_below100' section or the `.data_below100' 24971 section. 24972 24973 24974 24975 File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 24976 24977 6.37 Specifying Attributes of Types 24978 =================================== 24979 24980 The keyword `__attribute__' allows you to specify special attributes of 24981 `struct' and `union' types when you define such types. This keyword is 24982 followed by an attribute specification inside double parentheses. 24983 Seven attributes are currently defined for types: `aligned', `packed', 24984 `transparent_union', `unused', `deprecated', `visibility', and 24985 `may_alias'. Other attributes are defined for functions (*note 24986 Function Attributes::) and for variables (*note Variable Attributes::). 24987 24988 You may also specify any one of these attributes with `__' preceding 24989 and following its keyword. This allows you to use these attributes in 24990 header files without being concerned about a possible macro of the same 24991 name. For example, you may use `__aligned__' instead of `aligned'. 24992 24993 You may specify type attributes in an enum, struct or union type 24994 declaration or definition, or for other types in a `typedef' 24995 declaration. 24996 24997 For an enum, struct or union type, you may specify attributes either 24998 between the enum, struct or union tag and the name of the type, or just 24999 past the closing curly brace of the _definition_. The former syntax is 25000 preferred. 25001 25002 *Note Attribute Syntax::, for details of the exact syntax for using 25003 attributes. 25004 25005 `aligned (ALIGNMENT)' 25006 This attribute specifies a minimum alignment (in bytes) for 25007 variables of the specified type. For example, the declarations: 25008 25009 struct S { short f[3]; } __attribute__ ((aligned (8))); 25010 typedef int more_aligned_int __attribute__ ((aligned (8))); 25011 25012 force the compiler to ensure (as far as it can) that each variable 25013 whose type is `struct S' or `more_aligned_int' is allocated and 25014 aligned _at least_ on a 8-byte boundary. On a SPARC, having all 25015 variables of type `struct S' aligned to 8-byte boundaries allows 25016 the compiler to use the `ldd' and `std' (doubleword load and 25017 store) instructions when copying one variable of type `struct S' to 25018 another, thus improving run-time efficiency. 25019 25020 Note that the alignment of any given `struct' or `union' type is 25021 required by the ISO C standard to be at least a perfect multiple of 25022 the lowest common multiple of the alignments of all of the members 25023 of the `struct' or `union' in question. This means that you _can_ 25024 effectively adjust the alignment of a `struct' or `union' type by 25025 attaching an `aligned' attribute to any one of the members of such 25026 a type, but the notation illustrated in the example above is a 25027 more obvious, intuitive, and readable way to request the compiler 25028 to adjust the alignment of an entire `struct' or `union' type. 25029 25030 As in the preceding example, you can explicitly specify the 25031 alignment (in bytes) that you wish the compiler to use for a given 25032 `struct' or `union' type. Alternatively, you can leave out the 25033 alignment factor and just ask the compiler to align a type to the 25034 maximum useful alignment for the target machine you are compiling 25035 for. For example, you could write: 25036 25037 struct S { short f[3]; } __attribute__ ((aligned)); 25038 25039 Whenever you leave out the alignment factor in an `aligned' 25040 attribute specification, the compiler automatically sets the 25041 alignment for the type to the largest alignment that is ever used 25042 for any data type on the target machine you are compiling for. 25043 Doing this can often make copy operations more efficient, because 25044 the compiler can use whatever instructions copy the biggest chunks 25045 of memory when performing copies to or from the variables that 25046 have types that you have aligned this way. 25047 25048 In the example above, if the size of each `short' is 2 bytes, then 25049 the size of the entire `struct S' type is 6 bytes. The smallest 25050 power of two that is greater than or equal to that is 8, so the 25051 compiler sets the alignment for the entire `struct S' type to 8 25052 bytes. 25053 25054 Note that although you can ask the compiler to select a 25055 time-efficient alignment for a given type and then declare only 25056 individual stand-alone objects of that type, the compiler's 25057 ability to select a time-efficient alignment is primarily useful 25058 only when you plan to create arrays of variables having the 25059 relevant (efficiently aligned) type. If you declare or use arrays 25060 of variables of an efficiently-aligned type, then it is likely 25061 that your program also does pointer arithmetic (or subscripting, 25062 which amounts to the same thing) on pointers to the relevant type, 25063 and the code that the compiler generates for these pointer 25064 arithmetic operations is often more efficient for 25065 efficiently-aligned types than for other types. 25066 25067 The `aligned' attribute can only increase the alignment; but you 25068 can decrease it by specifying `packed' as well. See below. 25069 25070 Note that the effectiveness of `aligned' attributes may be limited 25071 by inherent limitations in your linker. On many systems, the 25072 linker is only able to arrange for variables to be aligned up to a 25073 certain maximum alignment. (For some linkers, the maximum 25074 supported alignment may be very very small.) If your linker is 25075 only able to align variables up to a maximum of 8-byte alignment, 25076 then specifying `aligned(16)' in an `__attribute__' still only 25077 provides you with 8-byte alignment. See your linker documentation 25078 for further information. 25079 25080 `packed' 25081 This attribute, attached to `struct' or `union' type definition, 25082 specifies that each member (other than zero-width bit-fields) of 25083 the structure or union is placed to minimize the memory required. 25084 When attached to an `enum' definition, it indicates that the 25085 smallest integral type should be used. 25086 25087 Specifying this attribute for `struct' and `union' types is 25088 equivalent to specifying the `packed' attribute on each of the 25089 structure or union members. Specifying the `-fshort-enums' flag 25090 on the line is equivalent to specifying the `packed' attribute on 25091 all `enum' definitions. 25092 25093 In the following example `struct my_packed_struct''s members are 25094 packed closely together, but the internal layout of its `s' member 25095 is not packed--to do that, `struct my_unpacked_struct' needs to be 25096 packed too. 25097 25098 struct my_unpacked_struct 25099 { 25100 char c; 25101 int i; 25102 }; 25103 25104 struct __attribute__ ((__packed__)) my_packed_struct 25105 { 25106 char c; 25107 int i; 25108 struct my_unpacked_struct s; 25109 }; 25110 25111 You may only specify this attribute on the definition of an `enum', 25112 `struct' or `union', not on a `typedef' that does not also define 25113 the enumerated type, structure or union. 25114 25115 `transparent_union' 25116 This attribute, attached to a `union' type definition, indicates 25117 that any function parameter having that union type causes calls to 25118 that function to be treated in a special way. 25119 25120 First, the argument corresponding to a transparent union type can 25121 be of any type in the union; no cast is required. Also, if the 25122 union contains a pointer type, the corresponding argument can be a 25123 null pointer constant or a void pointer expression; and if the 25124 union contains a void pointer type, the corresponding argument can 25125 be any pointer expression. If the union member type is a pointer, 25126 qualifiers like `const' on the referenced type must be respected, 25127 just as with normal pointer conversions. 25128 25129 Second, the argument is passed to the function using the calling 25130 conventions of the first member of the transparent union, not the 25131 calling conventions of the union itself. All members of the union 25132 must have the same machine representation; this is necessary for 25133 this argument passing to work properly. 25134 25135 Transparent unions are designed for library functions that have 25136 multiple interfaces for compatibility reasons. For example, 25137 suppose the `wait' function must accept either a value of type 25138 `int *' to comply with POSIX, or a value of type `union wait *' to 25139 comply with the 4.1BSD interface. If `wait''s parameter were 25140 `void *', `wait' would accept both kinds of arguments, but it 25141 would also accept any other pointer type and this would make 25142 argument type checking less useful. Instead, `<sys/wait.h>' might 25143 define the interface as follows: 25144 25145 typedef union __attribute__ ((__transparent_union__)) 25146 { 25147 int *__ip; 25148 union wait *__up; 25149 } wait_status_ptr_t; 25150 25151 pid_t wait (wait_status_ptr_t); 25152 25153 This interface allows either `int *' or `union wait *' arguments 25154 to be passed, using the `int *' calling convention. The program 25155 can call `wait' with arguments of either type: 25156 25157 int w1 () { int w; return wait (&w); } 25158 int w2 () { union wait w; return wait (&w); } 25159 25160 With this interface, `wait''s implementation might look like this: 25161 25162 pid_t wait (wait_status_ptr_t p) 25163 { 25164 return waitpid (-1, p.__ip, 0); 25165 } 25166 25167 `unused' 25168 When attached to a type (including a `union' or a `struct'), this 25169 attribute means that variables of that type are meant to appear 25170 possibly unused. GCC does not produce a warning for any variables 25171 of that type, even if the variable appears to do nothing. This is 25172 often the case with lock or thread classes, which are usually 25173 defined and then not referenced, but contain constructors and 25174 destructors that have nontrivial bookkeeping functions. 25175 25176 `deprecated' 25177 `deprecated (MSG)' 25178 The `deprecated' attribute results in a warning if the type is 25179 used anywhere in the source file. This is useful when identifying 25180 types that are expected to be removed in a future version of a 25181 program. If possible, the warning also includes the location of 25182 the declaration of the deprecated type, to enable users to easily 25183 find further information about why the type is deprecated, or what 25184 they should do instead. Note that the warnings only occur for 25185 uses and then only if the type is being applied to an identifier 25186 that itself is not being declared as deprecated. 25187 25188 typedef int T1 __attribute__ ((deprecated)); 25189 T1 x; 25190 typedef T1 T2; 25191 T2 y; 25192 typedef T1 T3 __attribute__ ((deprecated)); 25193 T3 z __attribute__ ((deprecated)); 25194 25195 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 25196 warning is issued for line 4 because T2 is not explicitly 25197 deprecated. Line 5 has no warning because T3 is explicitly 25198 deprecated. Similarly for line 6. The optional MSG argument, 25199 which must be a string, is printed in the warning if present. 25200 25201 The `deprecated' attribute can also be used for functions and 25202 variables (*note Function Attributes::, *note Variable 25203 Attributes::.) 25204 25205 `may_alias' 25206 Accesses through pointers to types with this attribute are not 25207 subject to type-based alias analysis, but are instead assumed to 25208 be able to alias any other type of objects. In the context of 25209 section 6.5 paragraph 7 of the C99 standard, an lvalue expression 25210 dereferencing such a pointer is treated like having a character 25211 type. See `-fstrict-aliasing' for more information on aliasing 25212 issues. This extension exists to support some vector APIs, in 25213 which pointers to one vector type are permitted to alias pointers 25214 to a different vector type. 25215 25216 Note that an object of a type with this attribute does not have any 25217 special semantics. 25218 25219 Example of use: 25220 25221 typedef short __attribute__((__may_alias__)) short_a; 25222 25223 int 25224 main (void) 25225 { 25226 int a = 0x12345678; 25227 short_a *b = (short_a *) &a; 25228 25229 b[1] = 0; 25230 25231 if (a == 0x12345678) 25232 abort(); 25233 25234 exit(0); 25235 } 25236 25237 If you replaced `short_a' with `short' in the variable 25238 declaration, the above program would abort when compiled with 25239 `-fstrict-aliasing', which is on by default at `-O2' or above in 25240 recent GCC versions. 25241 25242 `visibility' 25243 In C++, attribute visibility (*note Function Attributes::) can 25244 also be applied to class, struct, union and enum types. Unlike 25245 other type attributes, the attribute must appear between the 25246 initial keyword and the name of the type; it cannot appear after 25247 the body of the type. 25248 25249 Note that the type visibility is applied to vague linkage entities 25250 associated with the class (vtable, typeinfo node, etc.). In 25251 particular, if a class is thrown as an exception in one shared 25252 object and caught in another, the class must have default 25253 visibility. Otherwise the two shared objects are unable to use 25254 the same typeinfo node and exception handling will break. 25255 25256 25257 To specify multiple attributes, separate them by commas within the 25258 double parentheses: for example, `__attribute__ ((aligned (16), 25259 packed))'. 25260 25261 6.37.1 ARM Type Attributes 25262 -------------------------- 25263 25264 On those ARM targets that support `dllimport' (such as Symbian OS), you 25265 can use the `notshared' attribute to indicate that the virtual table 25266 and other similar data for a class should not be exported from a DLL. 25267 For example: 25268 25269 class __declspec(notshared) C { 25270 public: 25271 __declspec(dllimport) C(); 25272 virtual void f(); 25273 } 25274 25275 __declspec(dllexport) 25276 C::C() {} 25277 25278 In this code, `C::C' is exported from the current DLL, but the virtual 25279 table for `C' is not exported. (You can use `__attribute__' instead of 25280 `__declspec' if you prefer, but most Symbian OS code uses `__declspec'.) 25281 25282 6.37.2 MeP Type Attributes 25283 -------------------------- 25284 25285 Many of the MeP variable attributes may be applied to types as well. 25286 Specifically, the `based', `tiny', `near', and `far' attributes may be 25287 applied to either. The `io' and `cb' attributes may not be applied to 25288 types. 25289 25290 6.37.3 i386 Type Attributes 25291 --------------------------- 25292 25293 Two attributes are currently defined for i386 configurations: 25294 `ms_struct' and `gcc_struct'. 25295 25296 `ms_struct' 25297 `gcc_struct' 25298 If `packed' is used on a structure, or if bit-fields are used it 25299 may be that the Microsoft ABI packs them differently than GCC 25300 normally packs them. Particularly when moving packed data between 25301 functions compiled with GCC and the native Microsoft compiler 25302 (either via function call or as data in a file), it may be 25303 necessary to access either format. 25304 25305 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 25306 Windows X86 compilers to match the native Microsoft compiler. 25307 25308 6.37.4 PowerPC Type Attributes 25309 ------------------------------ 25310 25311 Three attributes currently are defined for PowerPC configurations: 25312 `altivec', `ms_struct' and `gcc_struct'. 25313 25314 For full documentation of the `ms_struct' and `gcc_struct' attributes 25315 please see the documentation in *note i386 Type Attributes::. 25316 25317 The `altivec' attribute allows one to declare AltiVec vector data 25318 types supported by the AltiVec Programming Interface Manual. The 25319 attribute requires an argument to specify one of three vector types: 25320 `vector__', `pixel__' (always followed by unsigned short), and `bool__' 25321 (always followed by unsigned). 25322 25323 __attribute__((altivec(vector__))) 25324 __attribute__((altivec(pixel__))) unsigned short 25325 __attribute__((altivec(bool__))) unsigned 25326 25327 These attributes mainly are intended to support the `__vector', 25328 `__pixel', and `__bool' AltiVec keywords. 25329 25330 6.37.5 SPU Type Attributes 25331 -------------------------- 25332 25333 The SPU supports the `spu_vector' attribute for types. This attribute 25334 allows one to declare vector data types supported by the 25335 Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 25336 to support the `__vector' keyword. 25337 25338 25339 File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 25340 25341 6.38 Inquiring on Alignment of Types or Variables 25342 ================================================= 25343 25344 The keyword `__alignof__' allows you to inquire about how an object is 25345 aligned, or the minimum alignment usually required by a type. Its 25346 syntax is just like `sizeof'. 25347 25348 For example, if the target machine requires a `double' value to be 25349 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 25350 is true on many RISC machines. On more traditional machine designs, 25351 `__alignof__ (double)' is 4 or even 2. 25352 25353 Some machines never actually require alignment; they allow reference 25354 to any data type even at an odd address. For these machines, 25355 `__alignof__' reports the smallest alignment that GCC gives the data 25356 type, usually as mandated by the target ABI. 25357 25358 If the operand of `__alignof__' is an lvalue rather than a type, its 25359 value is the required alignment for its type, taking into account any 25360 minimum alignment specified with GCC's `__attribute__' extension (*note 25361 Variable Attributes::). For example, after this declaration: 25362 25363 struct foo { int x; char y; } foo1; 25364 25365 the value of `__alignof__ (foo1.y)' is 1, even though its actual 25366 alignment is probably 2 or 4, the same as `__alignof__ (int)'. 25367 25368 It is an error to ask for the alignment of an incomplete type. 25369 25370 25371 File: gcc.info, Node: Inline, Next: Volatiles, Prev: Alignment, Up: C Extensions 25372 25373 6.39 An Inline Function is As Fast As a Macro 25374 ============================================= 25375 25376 By declaring a function inline, you can direct GCC to make calls to 25377 that function faster. One way GCC can achieve this is to integrate 25378 that function's code into the code for its callers. This makes 25379 execution faster by eliminating the function-call overhead; in 25380 addition, if any of the actual argument values are constant, their 25381 known values may permit simplifications at compile time so that not all 25382 of the inline function's code needs to be included. The effect on code 25383 size is less predictable; object code may be larger or smaller with 25384 function inlining, depending on the particular case. You can also 25385 direct GCC to try to integrate all "simple enough" functions into their 25386 callers with the option `-finline-functions'. 25387 25388 GCC implements three different semantics of declaring a function 25389 inline. One is available with `-std=gnu89' or `-fgnu89-inline' or when 25390 `gnu_inline' attribute is present on all inline declarations, another 25391 when `-std=c99', `-std=c11', `-std=gnu99' or `-std=gnu11' (without 25392 `-fgnu89-inline'), and the third is used when compiling C++. 25393 25394 To declare a function inline, use the `inline' keyword in its 25395 declaration, like this: 25396 25397 static inline int 25398 inc (int *a) 25399 { 25400 return (*a)++; 25401 } 25402 25403 If you are writing a header file to be included in ISO C90 programs, 25404 write `__inline__' instead of `inline'. *Note Alternate Keywords::. 25405 25406 The three types of inlining behave similarly in two important cases: 25407 when the `inline' keyword is used on a `static' function, like the 25408 example above, and when a function is first declared without using the 25409 `inline' keyword and then is defined with `inline', like this: 25410 25411 extern int inc (int *a); 25412 inline int 25413 inc (int *a) 25414 { 25415 return (*a)++; 25416 } 25417 25418 In both of these common cases, the program behaves the same as if you 25419 had not used the `inline' keyword, except for its speed. 25420 25421 When a function is both inline and `static', if all calls to the 25422 function are integrated into the caller, and the function's address is 25423 never used, then the function's own assembler code is never referenced. 25424 In this case, GCC does not actually output assembler code for the 25425 function, unless you specify the option `-fkeep-inline-functions'. 25426 Some calls cannot be integrated for various reasons (in particular, 25427 calls that precede the function's definition cannot be integrated, and 25428 neither can recursive calls within the definition). If there is a 25429 nonintegrated call, then the function is compiled to assembler code as 25430 usual. The function must also be compiled as usual if the program 25431 refers to its address, because that can't be inlined. 25432 25433 Note that certain usages in a function definition can make it 25434 unsuitable for inline substitution. Among these usages are: variadic 25435 functions, use of `alloca', use of variable-length data types (*note 25436 Variable Length::), use of computed goto (*note Labels as Values::), 25437 use of nonlocal goto, and nested functions (*note Nested Functions::). 25438 Using `-Winline' warns when a function marked `inline' could not be 25439 substituted, and gives the reason for the failure. 25440 25441 As required by ISO C++, GCC considers member functions defined within 25442 the body of a class to be marked inline even if they are not explicitly 25443 declared with the `inline' keyword. You can override this with 25444 `-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 25445 Dialect Options. 25446 25447 GCC does not inline any functions when not optimizing unless you 25448 specify the `always_inline' attribute for the function, like this: 25449 25450 /* Prototype. */ 25451 inline void foo (const char) __attribute__((always_inline)); 25452 25453 The remainder of this section is specific to GNU C90 inlining. 25454 25455 When an inline function is not `static', then the compiler must assume 25456 that there may be calls from other source files; since a global symbol 25457 can be defined only once in any program, the function must not be 25458 defined in the other source files, so the calls therein cannot be 25459 integrated. Therefore, a non-`static' inline function is always 25460 compiled on its own in the usual fashion. 25461 25462 If you specify both `inline' and `extern' in the function definition, 25463 then the definition is used only for inlining. In no case is the 25464 function compiled on its own, not even if you refer to its address 25465 explicitly. Such an address becomes an external reference, as if you 25466 had only declared the function, and had not defined it. 25467 25468 This combination of `inline' and `extern' has almost the effect of a 25469 macro. The way to use it is to put a function definition in a header 25470 file with these keywords, and put another copy of the definition 25471 (lacking `inline' and `extern') in a library file. The definition in 25472 the header file causes most calls to the function to be inlined. If 25473 any uses of the function remain, they refer to the single copy in the 25474 library. 25475 25476 25477 File: gcc.info, Node: Volatiles, Next: Extended Asm, Prev: Inline, Up: C Extensions 25478 25479 6.40 When is a Volatile Object Accessed? 25480 ======================================== 25481 25482 C has the concept of volatile objects. These are normally accessed by 25483 pointers and used for accessing hardware or inter-thread communication. 25484 The standard encourages compilers to refrain from optimizations 25485 concerning accesses to volatile objects, but leaves it implementation 25486 defined as to what constitutes a volatile access. The minimum 25487 requirement is that at a sequence point all previous accesses to 25488 volatile objects have stabilized and no subsequent accesses have 25489 occurred. Thus an implementation is free to reorder and combine 25490 volatile accesses that occur between sequence points, but cannot do so 25491 for accesses across a sequence point. The use of volatile does not 25492 allow you to violate the restriction on updating objects multiple times 25493 between two sequence points. 25494 25495 Accesses to non-volatile objects are not ordered with respect to 25496 volatile accesses. You cannot use a volatile object as a memory 25497 barrier to order a sequence of writes to non-volatile memory. For 25498 instance: 25499 25500 int *ptr = SOMETHING; 25501 volatile int vobj; 25502 *ptr = SOMETHING; 25503 vobj = 1; 25504 25505 Unless *PTR and VOBJ can be aliased, it is not guaranteed that the 25506 write to *PTR occurs by the time the update of VOBJ happens. If you 25507 need this guarantee, you must use a stronger memory barrier such as: 25508 25509 int *ptr = SOMETHING; 25510 volatile int vobj; 25511 *ptr = SOMETHING; 25512 asm volatile ("" : : : "memory"); 25513 vobj = 1; 25514 25515 A scalar volatile object is read when it is accessed in a void context: 25516 25517 volatile int *src = SOMEVALUE; 25518 *src; 25519 25520 Such expressions are rvalues, and GCC implements this as a read of the 25521 volatile object being pointed to. 25522 25523 Assignments are also expressions and have an rvalue. However when 25524 assigning to a scalar volatile, the volatile object is not reread, 25525 regardless of whether the assignment expression's rvalue is used or 25526 not. If the assignment's rvalue is used, the value is that assigned to 25527 the volatile object. For instance, there is no read of VOBJ in all the 25528 following cases: 25529 25530 int obj; 25531 volatile int vobj; 25532 vobj = SOMETHING; 25533 obj = vobj = SOMETHING; 25534 obj ? vobj = ONETHING : vobj = ANOTHERTHING; 25535 obj = (SOMETHING, vobj = ANOTHERTHING); 25536 25537 If you need to read the volatile object after an assignment has 25538 occurred, you must use a separate expression with an intervening 25539 sequence point. 25540 25541 As bit-fields are not individually addressable, volatile bit-fields may 25542 be implicitly read when written to, or when adjacent bit-fields are 25543 accessed. Bit-field operations may be optimized such that adjacent 25544 bit-fields are only partially accessed, if they straddle a storage unit 25545 boundary. For these reasons it is unwise to use volatile bit-fields to 25546 access hardware. 25547 25548 25549 File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Volatiles, Up: C Extensions 25550 25551 6.41 Assembler Instructions with C Expression Operands 25552 ====================================================== 25553 25554 In an assembler instruction using `asm', you can specify the operands 25555 of the instruction using C expressions. This means you need not guess 25556 which registers or memory locations contain the data you want to use. 25557 25558 You must specify an assembler instruction template much like what 25559 appears in a machine description, plus an operand constraint string for 25560 each operand. 25561 25562 For example, here is how to use the 68881's `fsinx' instruction: 25563 25564 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 25565 25566 Here `angle' is the C expression for the input operand while `result' 25567 is that of the output operand. Each has `"f"' as its operand 25568 constraint, saying that a floating-point register is required. The `=' 25569 in `=f' indicates that the operand is an output; all output operands' 25570 constraints must use `='. The constraints use the same language used 25571 in the machine description (*note Constraints::). 25572 25573 Each operand is described by an operand-constraint string followed by 25574 the C expression in parentheses. A colon separates the assembler 25575 template from the first output operand and another separates the last 25576 output operand from the first input, if any. Commas separate the 25577 operands within each group. The total number of operands is currently 25578 limited to 30; this limitation may be lifted in some future version of 25579 GCC. 25580 25581 If there are no output operands but there are input operands, you must 25582 place two consecutive colons surrounding the place where the output 25583 operands would go. 25584 25585 As of GCC version 3.1, it is also possible to specify input and output 25586 operands using symbolic names which can be referenced within the 25587 assembler code. These names are specified inside square brackets 25588 preceding the constraint string, and can be referenced inside the 25589 assembler code using `%[NAME]' instead of a percentage sign followed by 25590 the operand number. Using named operands the above example could look 25591 like: 25592 25593 asm ("fsinx %[angle],%[output]" 25594 : [output] "=f" (result) 25595 : [angle] "f" (angle)); 25596 25597 Note that the symbolic operand names have no relation whatsoever to 25598 other C identifiers. You may use any name you like, even those of 25599 existing C symbols, but you must ensure that no two operands within the 25600 same assembler construct use the same symbolic name. 25601 25602 Output operand expressions must be lvalues; the compiler can check 25603 this. The input operands need not be lvalues. The compiler cannot 25604 check whether the operands have data types that are reasonable for the 25605 instruction being executed. It does not parse the assembler instruction 25606 template and does not know what it means or even whether it is valid 25607 assembler input. The extended `asm' feature is most often used for 25608 machine instructions the compiler itself does not know exist. If the 25609 output expression cannot be directly addressed (for example, it is a 25610 bit-field), your constraint must allow a register. In that case, GCC 25611 uses the register as the output of the `asm', and then stores that 25612 register into the output. 25613 25614 The ordinary output operands must be write-only; GCC assumes that the 25615 values in these operands before the instruction are dead and need not 25616 be generated. Extended asm supports input-output or read-write 25617 operands. Use the constraint character `+' to indicate such an operand 25618 and list it with the output operands. 25619 25620 You may, as an alternative, logically split its function into two 25621 separate operands, one input operand and one write-only output operand. 25622 The connection between them is expressed by constraints that say they 25623 need to be in the same location when the instruction executes. You can 25624 use the same C expression for both operands, or different expressions. 25625 For example, here we write the (fictitious) `combine' instruction with 25626 `bar' as its read-only source operand and `foo' as its read-write 25627 destination: 25628 25629 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 25630 25631 The constraint `"0"' for operand 1 says that it must occupy the same 25632 location as operand 0. A number in constraint is allowed only in an 25633 input operand and it must refer to an output operand. 25634 25635 Only a number in the constraint can guarantee that one operand is in 25636 the same place as another. The mere fact that `foo' is the value of 25637 both operands is not enough to guarantee that they are in the same 25638 place in the generated assembler code. The following does not work 25639 reliably: 25640 25641 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 25642 25643 Various optimizations or reloading could cause operands 0 and 1 to be 25644 in different registers; GCC knows no reason not to do so. For example, 25645 the compiler might find a copy of the value of `foo' in one register and 25646 use it for operand 1, but generate the output operand 0 in a different 25647 register (copying it afterward to `foo''s own address). Of course, 25648 since the register for operand 1 is not even mentioned in the assembler 25649 code, the result will not work, but GCC can't tell that. 25650 25651 As of GCC version 3.1, one may write `[NAME]' instead of the operand 25652 number for a matching constraint. For example: 25653 25654 asm ("cmoveq %1,%2,%[result]" 25655 : [result] "=r"(result) 25656 : "r" (test), "r"(new), "[result]"(old)); 25657 25658 Sometimes you need to make an `asm' operand be a specific register, 25659 but there's no matching constraint letter for that register _by 25660 itself_. To force the operand into that register, use a local variable 25661 for the operand and specify the register in the variable declaration. 25662 *Note Explicit Reg Vars::. Then for the `asm' operand, use any 25663 register constraint letter that matches the register: 25664 25665 register int *p1 asm ("r0") = ...; 25666 register int *p2 asm ("r1") = ...; 25667 register int *result asm ("r0"); 25668 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 25669 25670 In the above example, beware that a register that is call-clobbered by 25671 the target ABI will be overwritten by any function call in the 25672 assignment, including library calls for arithmetic operators. Also a 25673 register may be clobbered when generating some operations, like 25674 variable shift, memory copy or memory move on x86. Assuming it is a 25675 call-clobbered register, this may happen to `r0' above by the 25676 assignment to `p2'. If you have to use such a register, use temporary 25677 variables for expressions between the register assignment and use: 25678 25679 int t1 = ...; 25680 register int *p1 asm ("r0") = ...; 25681 register int *p2 asm ("r1") = t1; 25682 register int *result asm ("r0"); 25683 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 25684 25685 Some instructions clobber specific hard registers. To describe this, 25686 write a third colon after the input operands, followed by the names of 25687 the clobbered hard registers (given as strings). Here is a realistic 25688 example for the VAX: 25689 25690 asm volatile ("movc3 %0,%1,%2" 25691 : /* no outputs */ 25692 : "g" (from), "g" (to), "g" (count) 25693 : "r0", "r1", "r2", "r3", "r4", "r5"); 25694 25695 You may not write a clobber description in a way that overlaps with an 25696 input or output operand. For example, you may not have an operand 25697 describing a register class with one member if you mention that register 25698 in the clobber list. Variables declared to live in specific registers 25699 (*note Explicit Reg Vars::), and used as asm input or output operands 25700 must have no part mentioned in the clobber description. There is no 25701 way for you to specify that an input operand is modified without also 25702 specifying it as an output operand. Note that if all the output 25703 operands you specify are for this purpose (and hence unused), you then 25704 also need to specify `volatile' for the `asm' construct, as described 25705 below, to prevent GCC from deleting the `asm' statement as unused. 25706 25707 If you refer to a particular hardware register from the assembler code, 25708 you probably have to list the register after the third colon to tell 25709 the compiler the register's value is modified. In some assemblers, the 25710 register names begin with `%'; to produce one `%' in the assembler 25711 code, you must write `%%' in the input. 25712 25713 If your assembler instruction can alter the condition code register, 25714 add `cc' to the list of clobbered registers. GCC on some machines 25715 represents the condition codes as a specific hardware register; `cc' 25716 serves to name this register. On other machines, the condition code is 25717 handled differently, and specifying `cc' has no effect. But it is 25718 valid no matter what the machine. 25719 25720 If your assembler instructions access memory in an unpredictable 25721 fashion, add `memory' to the list of clobbered registers. This causes 25722 GCC to not keep memory values cached in registers across the assembler 25723 instruction and not optimize stores or loads to that memory. You also 25724 should add the `volatile' keyword if the memory affected is not listed 25725 in the inputs or outputs of the `asm', as the `memory' clobber does not 25726 count as a side-effect of the `asm'. If you know how large the 25727 accessed memory is, you can add it as input or output but if this is 25728 not known, you should add `memory'. As an example, if you access ten 25729 bytes of a string, you can use a memory input like: 25730 25731 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 25732 25733 Note that in the following example the memory input is necessary, 25734 otherwise GCC might optimize the store to `x' away: 25735 int foo () 25736 { 25737 int x = 42; 25738 int *y = &x; 25739 int result; 25740 asm ("magic stuff accessing an 'int' pointed to by '%1'" 25741 : "=&d" (r) : "a" (y), "m" (*y)); 25742 return result; 25743 } 25744 25745 You can put multiple assembler instructions together in a single `asm' 25746 template, separated by the characters normally used in assembly code 25747 for the system. A combination that works in most places is a newline 25748 to break the line, plus a tab character to move to the instruction field 25749 (written as `\n\t'). Sometimes semicolons can be used, if the 25750 assembler allows semicolons as a line-breaking character. Note that 25751 some assembler dialects use semicolons to start a comment. The input 25752 operands are guaranteed not to use any of the clobbered registers, and 25753 neither do the output operands' addresses, so you can read and write 25754 the clobbered registers as many times as you like. Here is an example 25755 of multiple instructions in a template; it assumes the subroutine 25756 `_foo' accepts arguments in registers 9 and 10: 25757 25758 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 25759 : /* no outputs */ 25760 : "g" (from), "g" (to) 25761 : "r9", "r10"); 25762 25763 Unless an output operand has the `&' constraint modifier, GCC may 25764 allocate it in the same register as an unrelated input operand, on the 25765 assumption the inputs are consumed before the outputs are produced. 25766 This assumption may be false if the assembler code actually consists of 25767 more than one instruction. In such a case, use `&' for each output 25768 operand that may not overlap an input. *Note Modifiers::. 25769 25770 If you want to test the condition code produced by an assembler 25771 instruction, you must include a branch and a label in the `asm' 25772 construct, as follows: 25773 25774 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 25775 : "g" (result) 25776 : "g" (input)); 25777 25778 This assumes your assembler supports local labels, as the GNU assembler 25779 and most Unix assemblers do. 25780 25781 Speaking of labels, jumps from one `asm' to another are not supported. 25782 The compiler's optimizers do not know about these jumps, and therefore 25783 they cannot take account of them when deciding how to optimize. *Note 25784 Extended asm with goto::. 25785 25786 Usually the most convenient way to use these `asm' instructions is to 25787 encapsulate them in macros that look like functions. For example, 25788 25789 #define sin(x) \ 25790 ({ double __value, __arg = (x); \ 25791 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 25792 __value; }) 25793 25794 Here the variable `__arg' is used to make sure that the instruction 25795 operates on a proper `double' value, and to accept only those arguments 25796 `x' that can convert automatically to a `double'. 25797 25798 Another way to make sure the instruction operates on the correct data 25799 type is to use a cast in the `asm'. This is different from using a 25800 variable `__arg' in that it converts more different types. For 25801 example, if the desired type is `int', casting the argument to `int' 25802 accepts a pointer with no complaint, while assigning the argument to an 25803 `int' variable named `__arg' warns about using a pointer unless the 25804 caller explicitly casts it. 25805 25806 If an `asm' has output operands, GCC assumes for optimization purposes 25807 the instruction has no side effects except to change the output 25808 operands. This does not mean instructions with a side effect cannot be 25809 used, but you must be careful, because the compiler may eliminate them 25810 if the output operands aren't used, or move them out of loops, or 25811 replace two with one if they constitute a common subexpression. Also, 25812 if your instruction does have a side effect on a variable that otherwise 25813 appears not to change, the old value of the variable may be reused later 25814 if it happens to be found in a register. 25815 25816 You can prevent an `asm' instruction from being deleted by writing the 25817 keyword `volatile' after the `asm'. For example: 25818 25819 #define get_and_set_priority(new) \ 25820 ({ int __old; \ 25821 asm volatile ("get_and_set_priority %0, %1" \ 25822 : "=g" (__old) : "g" (new)); \ 25823 __old; }) 25824 25825 The `volatile' keyword indicates that the instruction has important 25826 side-effects. GCC does not delete a volatile `asm' if it is reachable. 25827 (The instruction can still be deleted if GCC can prove that control 25828 flow never reaches the location of the instruction.) Note that even a 25829 volatile `asm' instruction can be moved relative to other code, 25830 including across jump instructions. For example, on many targets there 25831 is a system register that can be set to control the rounding mode of 25832 floating-point operations. You might try setting it with a volatile 25833 `asm', like this PowerPC example: 25834 25835 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 25836 sum = x + y; 25837 25838 This does not work reliably, as the compiler may move the addition back 25839 before the volatile `asm'. To make it work you need to add an 25840 artificial dependency to the `asm' referencing a variable in the code 25841 you don't want moved, for example: 25842 25843 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 25844 sum = x + y; 25845 25846 Similarly, you can't expect a sequence of volatile `asm' instructions 25847 to remain perfectly consecutive. If you want consecutive output, use a 25848 single `asm'. Also, GCC performs some optimizations across a volatile 25849 `asm' instruction; GCC does not "forget everything" when it encounters 25850 a volatile `asm' instruction the way some other compilers do. 25851 25852 An `asm' instruction without any output operands is treated 25853 identically to a volatile `asm' instruction. 25854 25855 It is a natural idea to look for a way to give access to the condition 25856 code left by the assembler instruction. However, when we attempted to 25857 implement this, we found no way to make it work reliably. The problem 25858 is that output operands might need reloading, which result in 25859 additional following "store" instructions. On most machines, these 25860 instructions alter the condition code before there is time to test it. 25861 This problem doesn't arise for ordinary "test" and "compare" 25862 instructions because they don't have any output operands. 25863 25864 For reasons similar to those described above, it is not possible to 25865 give an assembler instruction access to the condition code left by 25866 previous instructions. 25867 25868 As of GCC version 4.5, `asm goto' may be used to have the assembly 25869 jump to one or more C labels. In this form, a fifth section after the 25870 clobber list contains a list of all C labels to which the assembly may 25871 jump. Each label operand is implicitly self-named. The `asm' is also 25872 assumed to fall through to the next statement. 25873 25874 This form of `asm' is restricted to not have outputs. This is due to 25875 a internal restriction in the compiler that control transfer 25876 instructions cannot have outputs. This restriction on `asm goto' may 25877 be lifted in some future version of the compiler. In the meantime, 25878 `asm goto' may include a memory clobber, and so leave outputs in memory. 25879 25880 int frob(int x) 25881 { 25882 int y; 25883 asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5" 25884 : : "r"(x), "r"(&y) : "r5", "memory" : error); 25885 return y; 25886 error: 25887 return -1; 25888 } 25889 25890 In this (inefficient) example, the `frob' instruction sets the carry 25891 bit to indicate an error. The `jc' instruction detects this and 25892 branches to the `error' label. Finally, the output of the `frob' 25893 instruction (`%r5') is stored into the memory for variable `y', which 25894 is later read by the `return' statement. 25895 25896 void doit(void) 25897 { 25898 int i = 0; 25899 asm goto ("mfsr %%r1, 123; jmp %%r1;" 25900 ".pushsection doit_table;" 25901 ".long %l0, %l1, %l2, %l3;" 25902 ".popsection" 25903 : : : "r1" : label1, label2, label3, label4); 25904 __builtin_unreachable (); 25905 25906 label1: 25907 f1(); 25908 return; 25909 label2: 25910 f2(); 25911 return; 25912 label3: 25913 i = 1; 25914 label4: 25915 f3(i); 25916 } 25917 25918 In this (also inefficient) example, the `mfsr' instruction reads an 25919 address from some out-of-band machine register, and the following `jmp' 25920 instruction branches to that address. The address read by the `mfsr' 25921 instruction is assumed to have been previously set via some 25922 application-specific mechanism to be one of the four values stored in 25923 the `doit_table' section. Finally, the `asm' is followed by a call to 25924 `__builtin_unreachable' to indicate that the `asm' does not in fact 25925 fall through. 25926 25927 #define TRACE1(NUM) \ 25928 do { \ 25929 asm goto ("0: nop;" \ 25930 ".pushsection trace_table;" \ 25931 ".long 0b, %l0;" \ 25932 ".popsection" \ 25933 : : : : trace#NUM); \ 25934 if (0) { trace#NUM: trace(); } \ 25935 } while (0) 25936 #define TRACE TRACE1(__COUNTER__) 25937 25938 In this example (which in fact inspired the `asm goto' feature) we want 25939 on rare occasions to call the `trace' function; on other occasions we'd 25940 like to keep the overhead to the absolute minimum. The normal code 25941 path consists of a single `nop' instruction. However, we record the 25942 address of this `nop' together with the address of a label that calls 25943 the `trace' function. This allows the `nop' instruction to be patched 25944 at run time to be an unconditional branch to the stored label. It is 25945 assumed that an optimizing compiler moves the labeled block out of 25946 line, to optimize the fall through path from the `asm'. 25947 25948 If you are writing a header file that should be includable in ISO C 25949 programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 25950 25951 6.41.1 Size of an `asm' 25952 ----------------------- 25953 25954 Some targets require that GCC track the size of each instruction used in 25955 order to generate correct code. Because the final length of an `asm' 25956 is only known by the assembler, GCC must make an estimate as to how big 25957 it will be. The estimate is formed by counting the number of 25958 statements in the pattern of the `asm' and multiplying that by the 25959 length of the longest instruction on that processor. Statements in the 25960 `asm' are identified by newline characters and whatever statement 25961 separator characters are supported by the assembler; on most processors 25962 this is the `;' character. 25963 25964 Normally, GCC's estimate is perfectly adequate to ensure that correct 25965 code is generated, but it is possible to confuse the compiler if you use 25966 pseudo instructions or assembler macros that expand into multiple real 25967 instructions or if you use assembler directives that expand to more 25968 space in the object file than is needed for a single instruction. If 25969 this happens then the assembler produces a diagnostic saying that a 25970 label is unreachable. 25971 25972 6.41.2 i386 floating-point asm operands 25973 --------------------------------------- 25974 25975 On i386 targets, there are several rules on the usage of stack-like 25976 registers in the operands of an `asm'. These rules apply only to the 25977 operands that are stack-like registers: 25978 25979 1. Given a set of input registers that die in an `asm', it is 25980 necessary to know which are implicitly popped by the `asm', and 25981 which must be explicitly popped by GCC. 25982 25983 An input register that is implicitly popped by the `asm' must be 25984 explicitly clobbered, unless it is constrained to match an output 25985 operand. 25986 25987 2. For any input register that is implicitly popped by an `asm', it is 25988 necessary to know how to adjust the stack to compensate for the 25989 pop. If any non-popped input is closer to the top of the 25990 reg-stack than the implicitly popped register, it would not be 25991 possible to know what the stack looked like--it's not clear how 25992 the rest of the stack "slides up". 25993 25994 All implicitly popped input registers must be closer to the top of 25995 the reg-stack than any input that is not implicitly popped. 25996 25997 It is possible that if an input dies in an `asm', the compiler 25998 might use the input register for an output reload. Consider this 25999 example: 26000 26001 asm ("foo" : "=t" (a) : "f" (b)); 26002 26003 This code says that input `b' is not popped by the `asm', and that 26004 the `asm' pushes a result onto the reg-stack, i.e., the stack is 26005 one deeper after the `asm' than it was before. But, it is 26006 possible that reload may think that it can use the same register 26007 for both the input and the output. 26008 26009 To prevent this from happening, if any input operand uses the `f' 26010 constraint, all output register constraints must use the `&' 26011 early-clobber modifier. 26012 26013 The example above would be correctly written as: 26014 26015 asm ("foo" : "=&t" (a) : "f" (b)); 26016 26017 3. Some operands need to be in particular places on the stack. All 26018 output operands fall in this category--GCC has no other way to 26019 know which registers the outputs appear in unless you indicate 26020 this in the constraints. 26021 26022 Output operands must specifically indicate which register an output 26023 appears in after an `asm'. `=f' is not allowed: the operand 26024 constraints must select a class with a single register. 26025 26026 4. Output operands may not be "inserted" between existing stack 26027 registers. Since no 387 opcode uses a read/write operand, all 26028 output operands are dead before the `asm', and are pushed by the 26029 `asm'. It makes no sense to push anywhere but the top of the 26030 reg-stack. 26031 26032 Output operands must start at the top of the reg-stack: output 26033 operands may not "skip" a register. 26034 26035 5. Some `asm' statements may need extra stack space for internal 26036 calculations. This can be guaranteed by clobbering stack registers 26037 unrelated to the inputs and outputs. 26038 26039 26040 Here are a couple of reasonable `asm's to want to write. This `asm' 26041 takes one input, which is internally popped, and produces two outputs. 26042 26043 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 26044 26045 This `asm' takes two inputs, which are popped by the `fyl2xp1' opcode, 26046 and replaces them with one output. The `st(1)' clobber is necessary 26047 for the compiler to know that `fyl2xp1' pops both inputs. 26048 26049 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 26050 26051 26052 File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 26053 26054 6.42 Constraints for `asm' Operands 26055 =================================== 26056 26057 Here are specific details on what constraint letters you can use with 26058 `asm' operands. Constraints can say whether an operand may be in a 26059 register, and which kinds of register; whether the operand can be a 26060 memory reference, and which kinds of address; whether the operand may 26061 be an immediate constant, and which possible values it may have. 26062 Constraints can also require two operands to match. Side-effects 26063 aren't allowed in operands of inline `asm', unless `<' or `>' 26064 constraints are used, because there is no guarantee that the 26065 side-effects will happen exactly once in an instruction that can update 26066 the addressing register. 26067 26068 * Menu: 26069 26070 * Simple Constraints:: Basic use of constraints. 26071 * Multi-Alternative:: When an insn has two alternative constraint-patterns. 26072 * Modifiers:: More precise control over effects of constraints. 26073 * Machine Constraints:: Special constraints for some particular machines. 26074 26075 26076 File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 26077 26078 6.42.1 Simple Constraints 26079 ------------------------- 26080 26081 The simplest kind of constraint is a string full of letters, each of 26082 which describes one kind of operand that is permitted. Here are the 26083 letters that are allowed: 26084 26085 whitespace 26086 Whitespace characters are ignored and can be inserted at any 26087 position except the first. This enables each alternative for 26088 different operands to be visually aligned in the machine 26089 description even if they have different number of constraints and 26090 modifiers. 26091 26092 `m' 26093 A memory operand is allowed, with any kind of address that the 26094 machine supports in general. Note that the letter used for the 26095 general memory constraint can be re-defined by a back end using 26096 the `TARGET_MEM_CONSTRAINT' macro. 26097 26098 `o' 26099 A memory operand is allowed, but only if the address is 26100 "offsettable". This means that adding a small integer (actually, 26101 the width in bytes of the operand, as determined by its machine 26102 mode) may be added to the address and the result is also a valid 26103 memory address. 26104 26105 For example, an address which is constant is offsettable; so is an 26106 address that is the sum of a register and a constant (as long as a 26107 slightly larger constant is also within the range of 26108 address-offsets supported by the machine); but an autoincrement or 26109 autodecrement address is not offsettable. More complicated 26110 indirect/indexed addresses may or may not be offsettable depending 26111 on the other addressing modes that the machine supports. 26112 26113 Note that in an output operand which can be matched by another 26114 operand, the constraint letter `o' is valid only when accompanied 26115 by both `<' (if the target machine has predecrement addressing) 26116 and `>' (if the target machine has preincrement addressing). 26117 26118 `V' 26119 A memory operand that is not offsettable. In other words, 26120 anything that would fit the `m' constraint but not the `o' 26121 constraint. 26122 26123 `<' 26124 A memory operand with autodecrement addressing (either 26125 predecrement or postdecrement) is allowed. In inline `asm' this 26126 constraint is only allowed if the operand is used exactly once in 26127 an instruction that can handle the side-effects. Not using an 26128 operand with `<' in constraint string in the inline `asm' pattern 26129 at all or using it in multiple instructions isn't valid, because 26130 the side-effects wouldn't be performed or would be performed more 26131 than once. Furthermore, on some targets the operand with `<' in 26132 constraint string must be accompanied by special instruction 26133 suffixes like `%U0' instruction suffix on PowerPC or `%P0' on 26134 IA-64. 26135 26136 `>' 26137 A memory operand with autoincrement addressing (either 26138 preincrement or postincrement) is allowed. In inline `asm' the 26139 same restrictions as for `<' apply. 26140 26141 `r' 26142 A register operand is allowed provided that it is in a general 26143 register. 26144 26145 `i' 26146 An immediate integer operand (one with constant value) is allowed. 26147 This includes symbolic constants whose values will be known only at 26148 assembly time or later. 26149 26150 `n' 26151 An immediate integer operand with a known numeric value is allowed. 26152 Many systems cannot support assembly-time constants for operands 26153 less than a word wide. Constraints for these operands should use 26154 `n' rather than `i'. 26155 26156 `I', `J', `K', ... `P' 26157 Other letters in the range `I' through `P' may be defined in a 26158 machine-dependent fashion to permit immediate integer operands with 26159 explicit integer values in specified ranges. For example, on the 26160 68000, `I' is defined to stand for the range of values 1 to 8. 26161 This is the range permitted as a shift count in the shift 26162 instructions. 26163 26164 `E' 26165 An immediate floating operand (expression code `const_double') is 26166 allowed, but only if the target floating point format is the same 26167 as that of the host machine (on which the compiler is running). 26168 26169 `F' 26170 An immediate floating operand (expression code `const_double' or 26171 `const_vector') is allowed. 26172 26173 `G', `H' 26174 `G' and `H' may be defined in a machine-dependent fashion to 26175 permit immediate floating operands in particular ranges of values. 26176 26177 `s' 26178 An immediate integer operand whose value is not an explicit 26179 integer is allowed. 26180 26181 This might appear strange; if an insn allows a constant operand 26182 with a value not known at compile time, it certainly must allow 26183 any known value. So why use `s' instead of `i'? Sometimes it 26184 allows better code to be generated. 26185 26186 For example, on the 68000 in a fullword instruction it is possible 26187 to use an immediate operand; but if the immediate value is between 26188 -128 and 127, better code results from loading the value into a 26189 register and using the register. This is because the load into 26190 the register can be done with a `moveq' instruction. We arrange 26191 for this to happen by defining the letter `K' to mean "any integer 26192 outside the range -128 to 127", and then specifying `Ks' in the 26193 operand constraints. 26194 26195 `g' 26196 Any register, memory or immediate integer operand is allowed, 26197 except for registers that are not general registers. 26198 26199 `X' 26200 Any operand whatsoever is allowed. 26201 26202 `0', `1', `2', ... `9' 26203 An operand that matches the specified operand number is allowed. 26204 If a digit is used together with letters within the same 26205 alternative, the digit should come last. 26206 26207 This number is allowed to be more than a single digit. If multiple 26208 digits are encountered consecutively, they are interpreted as a 26209 single decimal integer. There is scant chance for ambiguity, 26210 since to-date it has never been desirable that `10' be interpreted 26211 as matching either operand 1 _or_ operand 0. Should this be 26212 desired, one can use multiple alternatives instead. 26213 26214 This is called a "matching constraint" and what it really means is 26215 that the assembler has only a single operand that fills two roles 26216 which `asm' distinguishes. For example, an add instruction uses 26217 two input operands and an output operand, but on most CISC 26218 machines an add instruction really has only two operands, one of 26219 them an input-output operand: 26220 26221 addl #35,r12 26222 26223 Matching constraints are used in these circumstances. More 26224 precisely, the two operands that match must include one input-only 26225 operand and one output-only operand. Moreover, the digit must be a 26226 smaller number than the number of the operand that uses it in the 26227 constraint. 26228 26229 `p' 26230 An operand that is a valid memory address is allowed. This is for 26231 "load address" and "push address" instructions. 26232 26233 `p' in the constraint must be accompanied by `address_operand' as 26234 the predicate in the `match_operand'. This predicate interprets 26235 the mode specified in the `match_operand' as the mode of the memory 26236 reference for which the address would be valid. 26237 26238 OTHER-LETTERS 26239 Other letters can be defined in machine-dependent fashion to stand 26240 for particular classes of registers or other arbitrary operand 26241 types. `d', `a' and `f' are defined on the 68000/68020 to stand 26242 for data, address and floating point registers. 26243 26244 26245 File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 26246 26247 6.42.2 Multiple Alternative Constraints 26248 --------------------------------------- 26249 26250 Sometimes a single instruction has multiple alternative sets of possible 26251 operands. For example, on the 68000, a logical-or instruction can 26252 combine register or an immediate value into memory, or it can combine 26253 any kind of operand into a register; but it cannot combine one memory 26254 location into another. 26255 26256 These constraints are represented as multiple alternatives. An 26257 alternative can be described by a series of letters for each operand. 26258 The overall constraint for an operand is made from the letters for this 26259 operand from the first alternative, a comma, the letters for this 26260 operand from the second alternative, a comma, and so on until the last 26261 alternative. 26262 26263 If all the operands fit any one alternative, the instruction is valid. 26264 Otherwise, for each alternative, the compiler counts how many 26265 instructions must be added to copy the operands so that that 26266 alternative applies. The alternative requiring the least copying is 26267 chosen. If two alternatives need the same amount of copying, the one 26268 that comes first is chosen. These choices can be altered with the `?' 26269 and `!' characters: 26270 26271 `?' 26272 Disparage slightly the alternative that the `?' appears in, as a 26273 choice when no alternative applies exactly. The compiler regards 26274 this alternative as one unit more costly for each `?' that appears 26275 in it. 26276 26277 `!' 26278 Disparage severely the alternative that the `!' appears in. This 26279 alternative can still be used if it fits without reloading, but if 26280 reloading is needed, some other alternative will be used. 26281 26282 26283 File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 26284 26285 6.42.3 Constraint Modifier Characters 26286 ------------------------------------- 26287 26288 Here are constraint modifier characters. 26289 26290 `=' 26291 Means that this operand is write-only for this instruction: the 26292 previous value is discarded and replaced by output data. 26293 26294 `+' 26295 Means that this operand is both read and written by the 26296 instruction. 26297 26298 When the compiler fixes up the operands to satisfy the constraints, 26299 it needs to know which operands are inputs to the instruction and 26300 which are outputs from it. `=' identifies an output; `+' 26301 identifies an operand that is both input and output; all other 26302 operands are assumed to be input only. 26303 26304 If you specify `=' or `+' in a constraint, you put it in the first 26305 character of the constraint string. 26306 26307 `&' 26308 Means (in a particular alternative) that this operand is an 26309 "earlyclobber" operand, which is modified before the instruction is 26310 finished using the input operands. Therefore, this operand may 26311 not lie in a register that is used as an input operand or as part 26312 of any memory address. 26313 26314 `&' applies only to the alternative in which it is written. In 26315 constraints with multiple alternatives, sometimes one alternative 26316 requires `&' while others do not. See, for example, the `movdf' 26317 insn of the 68000. 26318 26319 An input operand can be tied to an earlyclobber operand if its only 26320 use as an input occurs before the early result is written. Adding 26321 alternatives of this form often allows GCC to produce better code 26322 when only some of the inputs can be affected by the earlyclobber. 26323 See, for example, the `mulsi3' insn of the ARM. 26324 26325 `&' does not obviate the need to write `='. 26326 26327 `%' 26328 Declares the instruction to be commutative for this operand and the 26329 following operand. This means that the compiler may interchange 26330 the two operands if that is the cheapest way to make all operands 26331 fit the constraints. GCC can only handle one commutative pair in 26332 an asm; if you use more, the compiler may fail. Note that you 26333 need not use the modifier if the two alternatives are strictly 26334 identical; this would only waste time in the reload pass. The 26335 modifier is not operational after register allocation, so the 26336 result of `define_peephole2' and `define_split's performed after 26337 reload cannot rely on `%' to make the intended insn match. 26338 26339 `#' 26340 Says that all following characters, up to the next comma, are to be 26341 ignored as a constraint. They are significant only for choosing 26342 register preferences. 26343 26344 `*' 26345 Says that the following character should be ignored when choosing 26346 register preferences. `*' has no effect on the meaning of the 26347 constraint as a constraint, and no effect on reloading. For LRA 26348 `*' additionally disparages slightly the alternative if the 26349 following character matches the operand. 26350 26351 26352 26353 File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 26354 26355 6.42.4 Constraints for Particular Machines 26356 ------------------------------------------ 26357 26358 Whenever possible, you should use the general-purpose constraint letters 26359 in `asm' arguments, since they will convey meaning more readily to 26360 people reading your code. Failing that, use the constraint letters 26361 that usually have very similar meanings across architectures. The most 26362 commonly used constraints are `m' and `r' (for memory and 26363 general-purpose registers respectively; *note Simple Constraints::), and 26364 `I', usually the letter indicating the most common immediate-constant 26365 format. 26366 26367 Each architecture defines additional constraints. These constraints 26368 are used by the compiler itself for instruction generation, as well as 26369 for `asm' statements; therefore, some of the constraints are not 26370 particularly useful for `asm'. Here is a summary of some of the 26371 machine-dependent constraints available on some particular machines; it 26372 includes both constraints that are useful for `asm' and constraints 26373 that aren't. The compiler source file mentioned in the table heading 26374 for each architecture is the definitive reference for the meanings of 26375 that architecture's constraints. 26376 26377 _AArch64 family--`config/aarch64/constraints.md'_ 26378 26379 `k' 26380 The stack pointer register (`SP') 26381 26382 `w' 26383 Floating point or SIMD vector register 26384 26385 `I' 26386 Integer constant that is valid as an immediate operand in an 26387 `ADD' instruction 26388 26389 `J' 26390 Integer constant that is valid as an immediate operand in a 26391 `SUB' instruction (once negated) 26392 26393 `K' 26394 Integer constant that can be used with a 32-bit logical 26395 instruction 26396 26397 `L' 26398 Integer constant that can be used with a 64-bit logical 26399 instruction 26400 26401 `M' 26402 Integer constant that is valid as an immediate operand in a 26403 32-bit `MOV' pseudo instruction. The `MOV' may be assembled 26404 to one of several different machine instructions depending on 26405 the value 26406 26407 `N' 26408 Integer constant that is valid as an immediate operand in a 26409 64-bit `MOV' pseudo instruction 26410 26411 `S' 26412 An absolute symbolic address or a label reference 26413 26414 `Y' 26415 Floating point constant zero 26416 26417 `Z' 26418 Integer constant zero 26419 26420 `Usa' 26421 An absolute symbolic address 26422 26423 `Ush' 26424 The high part (bits 12 and upwards) of the pc-relative 26425 address of a symbol within 4GB of the instruction 26426 26427 `Q' 26428 A memory address which uses a single base register with no 26429 offset 26430 26431 `Ump' 26432 A memory address suitable for a load/store pair instruction 26433 in SI, DI, SF and DF modes 26434 26435 26436 _ARM family--`config/arm/constraints.md'_ 26437 26438 `w' 26439 VFP floating-point register 26440 26441 `G' 26442 The floating-point constant 0.0 26443 26444 `I' 26445 Integer that is valid as an immediate operand in a data 26446 processing instruction. That is, an integer in the range 0 26447 to 255 rotated by a multiple of 2 26448 26449 `J' 26450 Integer in the range -4095 to 4095 26451 26452 `K' 26453 Integer that satisfies constraint `I' when inverted (ones 26454 complement) 26455 26456 `L' 26457 Integer that satisfies constraint `I' when negated (twos 26458 complement) 26459 26460 `M' 26461 Integer in the range 0 to 32 26462 26463 `Q' 26464 A memory reference where the exact address is in a single 26465 register (``m'' is preferable for `asm' statements) 26466 26467 `R' 26468 An item in the constant pool 26469 26470 `S' 26471 A symbol in the text segment of the current file 26472 26473 `Uv' 26474 A memory reference suitable for VFP load/store insns 26475 (reg+constant offset) 26476 26477 `Uy' 26478 A memory reference suitable for iWMMXt load/store 26479 instructions. 26480 26481 `Uq' 26482 A memory reference suitable for the ARMv4 ldrsb instruction. 26483 26484 _AVR family--`config/avr/constraints.md'_ 26485 26486 `l' 26487 Registers from r0 to r15 26488 26489 `a' 26490 Registers from r16 to r23 26491 26492 `d' 26493 Registers from r16 to r31 26494 26495 `w' 26496 Registers from r24 to r31. These registers can be used in 26497 `adiw' command 26498 26499 `e' 26500 Pointer register (r26-r31) 26501 26502 `b' 26503 Base pointer register (r28-r31) 26504 26505 `q' 26506 Stack pointer register (SPH:SPL) 26507 26508 `t' 26509 Temporary register r0 26510 26511 `x' 26512 Register pair X (r27:r26) 26513 26514 `y' 26515 Register pair Y (r29:r28) 26516 26517 `z' 26518 Register pair Z (r31:r30) 26519 26520 `I' 26521 Constant greater than -1, less than 64 26522 26523 `J' 26524 Constant greater than -64, less than 1 26525 26526 `K' 26527 Constant integer 2 26528 26529 `L' 26530 Constant integer 0 26531 26532 `M' 26533 Constant that fits in 8 bits 26534 26535 `N' 26536 Constant integer -1 26537 26538 `O' 26539 Constant integer 8, 16, or 24 26540 26541 `P' 26542 Constant integer 1 26543 26544 `G' 26545 A floating point constant 0.0 26546 26547 `Q' 26548 A memory address based on Y or Z pointer with displacement. 26549 26550 _Epiphany--`config/epiphany/constraints.md'_ 26551 26552 `U16' 26553 An unsigned 16-bit constant. 26554 26555 `K' 26556 An unsigned 5-bit constant. 26557 26558 `L' 26559 A signed 11-bit constant. 26560 26561 `Cm1' 26562 A signed 11-bit constant added to -1. Can only match when 26563 the `-m1reg-REG' option is active. 26564 26565 `Cl1' 26566 Left-shift of -1, i.e., a bit mask with a block of leading 26567 ones, the rest being a block of trailing zeroes. Can only 26568 match when the `-m1reg-REG' option is active. 26569 26570 `Cr1' 26571 Right-shift of -1, i.e., a bit mask with a trailing block of 26572 ones, the rest being zeroes. Or to put it another way, one 26573 less than a power of two. Can only match when the 26574 `-m1reg-REG' option is active. 26575 26576 `Cal' 26577 Constant for arithmetic/logical operations. This is like 26578 `i', except that for position independent code, no symbols / 26579 expressions needing relocations are allowed. 26580 26581 `Csy' 26582 Symbolic constant for call/jump instruction. 26583 26584 `Rcs' 26585 The register class usable in short insns. This is a register 26586 class constraint, and can thus drive register allocation. 26587 This constraint won't match unless `-mprefer-short-insn-regs' 26588 is in effect. 26589 26590 `Rsc' 26591 The the register class of registers that can be used to hold a 26592 sibcall call address. I.e., a caller-saved register. 26593 26594 `Rct' 26595 Core control register class. 26596 26597 `Rgs' 26598 The register group usable in short insns. This constraint 26599 does not use a register class, so that it only passively 26600 matches suitable registers, and doesn't drive register 26601 allocation. 26602 26603 `Rra' 26604 Matches the return address if it can be replaced with the 26605 link register. 26606 26607 `Rcc' 26608 Matches the integer condition code register. 26609 26610 `Sra' 26611 Matches the return address if it is in a stack slot. 26612 26613 `Cfm' 26614 Matches control register values to switch fp mode, which are 26615 encapsulated in `UNSPEC_FP_MODE'. 26616 26617 _CR16 Architecture--`config/cr16/cr16.h'_ 26618 26619 `b' 26620 Registers from r0 to r14 (registers without stack pointer) 26621 26622 `t' 26623 Register from r0 to r11 (all 16-bit registers) 26624 26625 `p' 26626 Register from r12 to r15 (all 32-bit registers) 26627 26628 `I' 26629 Signed constant that fits in 4 bits 26630 26631 `J' 26632 Signed constant that fits in 5 bits 26633 26634 `K' 26635 Signed constant that fits in 6 bits 26636 26637 `L' 26638 Unsigned constant that fits in 4 bits 26639 26640 `M' 26641 Signed constant that fits in 32 bits 26642 26643 `N' 26644 Check for 64 bits wide constants for add/sub instructions 26645 26646 `G' 26647 Floating point constant that is legal for store immediate 26648 26649 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 26650 26651 `a' 26652 General register 1 26653 26654 `f' 26655 Floating point register 26656 26657 `q' 26658 Shift amount register 26659 26660 `x' 26661 Floating point register (deprecated) 26662 26663 `y' 26664 Upper floating point register (32-bit), floating point 26665 register (64-bit) 26666 26667 `Z' 26668 Any register 26669 26670 `I' 26671 Signed 11-bit integer constant 26672 26673 `J' 26674 Signed 14-bit integer constant 26675 26676 `K' 26677 Integer constant that can be deposited with a `zdepi' 26678 instruction 26679 26680 `L' 26681 Signed 5-bit integer constant 26682 26683 `M' 26684 Integer constant 0 26685 26686 `N' 26687 Integer constant that can be loaded with a `ldil' instruction 26688 26689 `O' 26690 Integer constant whose value plus one is a power of 2 26691 26692 `P' 26693 Integer constant that can be used for `and' operations in 26694 `depi' and `extru' instructions 26695 26696 `S' 26697 Integer constant 31 26698 26699 `U' 26700 Integer constant 63 26701 26702 `G' 26703 Floating-point constant 0.0 26704 26705 `A' 26706 A `lo_sum' data-linkage-table memory operand 26707 26708 `Q' 26709 A memory operand that can be used as the destination operand 26710 of an integer store instruction 26711 26712 `R' 26713 A scaled or unscaled indexed memory operand 26714 26715 `T' 26716 A memory operand for floating-point loads and stores 26717 26718 `W' 26719 A register indirect memory operand 26720 26721 _picoChip family--`picochip.h'_ 26722 26723 `k' 26724 Stack register. 26725 26726 `f' 26727 Pointer register. A register which can be used to access 26728 memory without supplying an offset. Any other register can 26729 be used to access memory, but will need a constant offset. 26730 In the case of the offset being zero, it is more efficient to 26731 use a pointer register, since this reduces code size. 26732 26733 `t' 26734 A twin register. A register which may be paired with an 26735 adjacent register to create a 32-bit register. 26736 26737 `a' 26738 Any absolute memory address (e.g., symbolic constant, symbolic 26739 constant + offset). 26740 26741 `I' 26742 4-bit signed integer. 26743 26744 `J' 26745 4-bit unsigned integer. 26746 26747 `K' 26748 8-bit signed integer. 26749 26750 `M' 26751 Any constant whose absolute value is no greater than 4-bits. 26752 26753 `N' 26754 10-bit signed integer 26755 26756 `O' 26757 16-bit signed integer. 26758 26759 26760 _PowerPC and IBM RS6000--`config/rs6000/constraints.md'_ 26761 26762 `b' 26763 Address base register 26764 26765 `d' 26766 Floating point register (containing 64-bit value) 26767 26768 `f' 26769 Floating point register (containing 32-bit value) 26770 26771 `v' 26772 Altivec vector register 26773 26774 `wa' 26775 Any VSX register if the -mvsx option was used or NO_REGS. 26776 26777 `wd' 26778 VSX vector register to hold vector double data or NO_REGS. 26779 26780 `wf' 26781 VSX vector register to hold vector float data or NO_REGS. 26782 26783 `wg' 26784 If `-mmfpgpr' was used, a floating point register or NO_REGS. 26785 26786 `wl' 26787 Floating point register if the LFIWAX instruction is enabled 26788 or NO_REGS. 26789 26790 `wm' 26791 VSX register if direct move instructions are enabled, or 26792 NO_REGS. 26793 26794 `wn' 26795 No register (NO_REGS). 26796 26797 `wr' 26798 General purpose register if 64-bit instructions are enabled 26799 or NO_REGS. 26800 26801 `ws' 26802 VSX vector register to hold scalar double values or NO_REGS. 26803 26804 `wt' 26805 VSX vector register to hold 128 bit integer or NO_REGS. 26806 26807 `wu' 26808 Altivec register to use for float/32-bit int loads/stores or 26809 NO_REGS. 26810 26811 `wv' 26812 Altivec register to use for double loads/stores or NO_REGS. 26813 26814 `ww' 26815 FP or VSX register to perform float operations under `-mvsx' 26816 or NO_REGS. 26817 26818 `wx' 26819 Floating point register if the STFIWX instruction is enabled 26820 or NO_REGS. 26821 26822 `wy' 26823 VSX vector register to hold scalar float values or NO_REGS. 26824 26825 `wz' 26826 Floating point register if the LFIWZX instruction is enabled 26827 or NO_REGS. 26828 26829 `wQ' 26830 A memory address that will work with the `lq' and `stq' 26831 instructions. 26832 26833 `h' 26834 `MQ', `CTR', or `LINK' register 26835 26836 `q' 26837 `MQ' register 26838 26839 `c' 26840 `CTR' register 26841 26842 `l' 26843 `LINK' register 26844 26845 `x' 26846 `CR' register (condition register) number 0 26847 26848 `y' 26849 `CR' register (condition register) 26850 26851 `z' 26852 `XER[CA]' carry bit (part of the XER register) 26853 26854 `I' 26855 Signed 16-bit constant 26856 26857 `J' 26858 Unsigned 16-bit constant shifted left 16 bits (use `L' 26859 instead for `SImode' constants) 26860 26861 `K' 26862 Unsigned 16-bit constant 26863 26864 `L' 26865 Signed 16-bit constant shifted left 16 bits 26866 26867 `M' 26868 Constant larger than 31 26869 26870 `N' 26871 Exact power of 2 26872 26873 `O' 26874 Zero 26875 26876 `P' 26877 Constant whose negation is a signed 16-bit constant 26878 26879 `G' 26880 Floating point constant that can be loaded into a register 26881 with one instruction per word 26882 26883 `H' 26884 Integer/Floating point constant that can be loaded into a 26885 register using three instructions 26886 26887 `m' 26888 Memory operand. Normally, `m' does not allow addresses that 26889 update the base register. If `<' or `>' constraint is also 26890 used, they are allowed and therefore on PowerPC targets in 26891 that case it is only safe to use `m<>' in an `asm' statement 26892 if that `asm' statement accesses the operand exactly once. 26893 The `asm' statement must also use `%U<OPNO>' as a placeholder 26894 for the "update" flag in the corresponding load or store 26895 instruction. For example: 26896 26897 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 26898 26899 is correct but: 26900 26901 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 26902 26903 is not. 26904 26905 `es' 26906 A "stable" memory operand; that is, one which does not 26907 include any automodification of the base register. This used 26908 to be useful when `m' allowed automodification of the base 26909 register, but as those are now only allowed when `<' or `>' 26910 is used, `es' is basically the same as `m' without `<' and 26911 `>'. 26912 26913 `Q' 26914 Memory operand that is an offset from a register (it is 26915 usually better to use `m' or `es' in `asm' statements) 26916 26917 `Z' 26918 Memory operand that is an indexed or indirect from a register 26919 (it is usually better to use `m' or `es' in `asm' statements) 26920 26921 `R' 26922 AIX TOC entry 26923 26924 `a' 26925 Address operand that is an indexed or indirect from a 26926 register (`p' is preferable for `asm' statements) 26927 26928 `S' 26929 Constant suitable as a 64-bit mask operand 26930 26931 `T' 26932 Constant suitable as a 32-bit mask operand 26933 26934 `U' 26935 System V Release 4 small data area reference 26936 26937 `t' 26938 AND masks that can be performed by two rldic{l, r} 26939 instructions 26940 26941 `W' 26942 Vector constant that does not require memory 26943 26944 `j' 26945 Vector constant that is all zeros. 26946 26947 26948 _Intel 386--`config/i386/constraints.md'_ 26949 26950 `R' 26951 Legacy register--the eight integer registers available on all 26952 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 26953 26954 `q' 26955 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 26956 `c', and `d'; in 64-bit mode, any integer register. 26957 26958 `Q' 26959 Any register accessible as `Rh': `a', `b', `c', and `d'. 26960 26961 `a' 26962 The `a' register. 26963 26964 `b' 26965 The `b' register. 26966 26967 `c' 26968 The `c' register. 26969 26970 `d' 26971 The `d' register. 26972 26973 `S' 26974 The `si' register. 26975 26976 `D' 26977 The `di' register. 26978 26979 `A' 26980 The `a' and `d' registers. This class is used for 26981 instructions that return double word results in the `ax:dx' 26982 register pair. Single word values will be allocated either 26983 in `ax' or `dx'. For example on i386 the following 26984 implements `rdtsc': 26985 26986 unsigned long long rdtsc (void) 26987 { 26988 unsigned long long tick; 26989 __asm__ __volatile__("rdtsc":"=A"(tick)); 26990 return tick; 26991 } 26992 26993 This is not correct on x86_64 as it would allocate tick in 26994 either `ax' or `dx'. You have to use the following variant 26995 instead: 26996 26997 unsigned long long rdtsc (void) 26998 { 26999 unsigned int tickl, tickh; 27000 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 27001 return ((unsigned long long)tickh << 32)|tickl; 27002 } 27003 27004 `f' 27005 Any 80387 floating-point (stack) register. 27006 27007 `t' 27008 Top of 80387 floating-point stack (`%st(0)'). 27009 27010 `u' 27011 Second from top of 80387 floating-point stack (`%st(1)'). 27012 27013 `y' 27014 Any MMX register. 27015 27016 `x' 27017 Any SSE register. 27018 27019 `Yz' 27020 First SSE register (`%xmm0'). 27021 27022 `I' 27023 Integer constant in the range 0 ... 31, for 32-bit shifts. 27024 27025 `J' 27026 Integer constant in the range 0 ... 63, for 64-bit shifts. 27027 27028 `K' 27029 Signed 8-bit integer constant. 27030 27031 `L' 27032 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 27033 27034 `M' 27035 0, 1, 2, or 3 (shifts for the `lea' instruction). 27036 27037 `N' 27038 Unsigned 8-bit integer constant (for `in' and `out' 27039 instructions). 27040 27041 `G' 27042 Standard 80387 floating point constant. 27043 27044 `C' 27045 Standard SSE floating point constant. 27046 27047 `e' 27048 32-bit signed integer constant, or a symbolic reference known 27049 to fit that range (for immediate operands in sign-extending 27050 x86-64 instructions). 27051 27052 `Z' 27053 32-bit unsigned integer constant, or a symbolic reference 27054 known to fit that range (for immediate operands in 27055 zero-extending x86-64 instructions). 27056 27057 27058 _Intel IA-64--`config/ia64/ia64.h'_ 27059 27060 `a' 27061 General register `r0' to `r3' for `addl' instruction 27062 27063 `b' 27064 Branch register 27065 27066 `c' 27067 Predicate register (`c' as in "conditional") 27068 27069 `d' 27070 Application register residing in M-unit 27071 27072 `e' 27073 Application register residing in I-unit 27074 27075 `f' 27076 Floating-point register 27077 27078 `m' 27079 Memory operand. If used together with `<' or `>', the 27080 operand can have postincrement and postdecrement which 27081 require printing with `%Pn' on IA-64. 27082 27083 `G' 27084 Floating-point constant 0.0 or 1.0 27085 27086 `I' 27087 14-bit signed integer constant 27088 27089 `J' 27090 22-bit signed integer constant 27091 27092 `K' 27093 8-bit signed integer constant for logical instructions 27094 27095 `L' 27096 8-bit adjusted signed integer constant for compare pseudo-ops 27097 27098 `M' 27099 6-bit unsigned integer constant for shift counts 27100 27101 `N' 27102 9-bit signed integer constant for load and store 27103 postincrements 27104 27105 `O' 27106 The constant zero 27107 27108 `P' 27109 0 or -1 for `dep' instruction 27110 27111 `Q' 27112 Non-volatile memory for floating-point loads and stores 27113 27114 `R' 27115 Integer constant in the range 1 to 4 for `shladd' instruction 27116 27117 `S' 27118 Memory operand except postincrement and postdecrement. This 27119 is now roughly the same as `m' when not used together with `<' 27120 or `>'. 27121 27122 _FRV--`config/frv/frv.h'_ 27123 27124 `a' 27125 Register in the class `ACC_REGS' (`acc0' to `acc7'). 27126 27127 `b' 27128 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 27129 27130 `c' 27131 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 27132 to `icc3'). 27133 27134 `d' 27135 Register in the class `GPR_REGS' (`gr0' to `gr63'). 27136 27137 `e' 27138 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 27139 registers are excluded not in the class but through the use 27140 of a machine mode larger than 4 bytes. 27141 27142 `f' 27143 Register in the class `FPR_REGS' (`fr0' to `fr63'). 27144 27145 `h' 27146 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 27147 registers are excluded not in the class but through the use 27148 of a machine mode larger than 4 bytes. 27149 27150 `l' 27151 Register in the class `LR_REG' (the `lr' register). 27152 27153 `q' 27154 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 27155 Register numbers not divisible by 4 are excluded not in the 27156 class but through the use of a machine mode larger than 8 27157 bytes. 27158 27159 `t' 27160 Register in the class `ICC_REGS' (`icc0' to `icc3'). 27161 27162 `u' 27163 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 27164 27165 `v' 27166 Register in the class `ICR_REGS' (`cc4' to `cc7'). 27167 27168 `w' 27169 Register in the class `FCR_REGS' (`cc0' to `cc3'). 27170 27171 `x' 27172 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 27173 Register numbers not divisible by 4 are excluded not in the 27174 class but through the use of a machine mode larger than 8 27175 bytes. 27176 27177 `z' 27178 Register in the class `SPR_REGS' (`lcr' and `lr'). 27179 27180 `A' 27181 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 27182 27183 `B' 27184 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 27185 27186 `C' 27187 Register in the class `CR_REGS' (`cc0' to `cc7'). 27188 27189 `G' 27190 Floating point constant zero 27191 27192 `I' 27193 6-bit signed integer constant 27194 27195 `J' 27196 10-bit signed integer constant 27197 27198 `L' 27199 16-bit signed integer constant 27200 27201 `M' 27202 16-bit unsigned integer constant 27203 27204 `N' 27205 12-bit signed integer constant that is negative--i.e. in the 27206 range of -2048 to -1 27207 27208 `O' 27209 Constant zero 27210 27211 `P' 27212 12-bit signed integer constant that is greater than 27213 zero--i.e. in the range of 1 to 2047. 27214 27215 27216 _Blackfin family--`config/bfin/constraints.md'_ 27217 27218 `a' 27219 P register 27220 27221 `d' 27222 D register 27223 27224 `z' 27225 A call clobbered P register. 27226 27227 `qN' 27228 A single register. If N is in the range 0 to 7, the 27229 corresponding D register. If it is `A', then the register P0. 27230 27231 `D' 27232 Even-numbered D register 27233 27234 `W' 27235 Odd-numbered D register 27236 27237 `e' 27238 Accumulator register. 27239 27240 `A' 27241 Even-numbered accumulator register. 27242 27243 `B' 27244 Odd-numbered accumulator register. 27245 27246 `b' 27247 I register 27248 27249 `v' 27250 B register 27251 27252 `f' 27253 M register 27254 27255 `c' 27256 Registers used for circular buffering, i.e. I, B, or L 27257 registers. 27258 27259 `C' 27260 The CC register. 27261 27262 `t' 27263 LT0 or LT1. 27264 27265 `k' 27266 LC0 or LC1. 27267 27268 `u' 27269 LB0 or LB1. 27270 27271 `x' 27272 Any D, P, B, M, I or L register. 27273 27274 `y' 27275 Additional registers typically used only in prologues and 27276 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 27277 USP. 27278 27279 `w' 27280 Any register except accumulators or CC. 27281 27282 `Ksh' 27283 Signed 16 bit integer (in the range -32768 to 32767) 27284 27285 `Kuh' 27286 Unsigned 16 bit integer (in the range 0 to 65535) 27287 27288 `Ks7' 27289 Signed 7 bit integer (in the range -64 to 63) 27290 27291 `Ku7' 27292 Unsigned 7 bit integer (in the range 0 to 127) 27293 27294 `Ku5' 27295 Unsigned 5 bit integer (in the range 0 to 31) 27296 27297 `Ks4' 27298 Signed 4 bit integer (in the range -8 to 7) 27299 27300 `Ks3' 27301 Signed 3 bit integer (in the range -3 to 4) 27302 27303 `Ku3' 27304 Unsigned 3 bit integer (in the range 0 to 7) 27305 27306 `PN' 27307 Constant N, where N is a single-digit constant in the range 0 27308 to 4. 27309 27310 `PA' 27311 An integer equal to one of the MACFLAG_XXX constants that is 27312 suitable for use with either accumulator. 27313 27314 `PB' 27315 An integer equal to one of the MACFLAG_XXX constants that is 27316 suitable for use only with accumulator A1. 27317 27318 `M1' 27319 Constant 255. 27320 27321 `M2' 27322 Constant 65535. 27323 27324 `J' 27325 An integer constant with exactly a single bit set. 27326 27327 `L' 27328 An integer constant with all bits set except exactly one. 27329 27330 `H' 27331 27332 `Q' 27333 Any SYMBOL_REF. 27334 27335 _M32C--`config/m32c/m32c.c'_ 27336 27337 `Rsp' 27338 `Rfb' 27339 `Rsb' 27340 `$sp', `$fb', `$sb'. 27341 27342 `Rcr' 27343 Any control register, when they're 16 bits wide (nothing if 27344 control registers are 24 bits wide) 27345 27346 `Rcl' 27347 Any control register, when they're 24 bits wide. 27348 27349 `R0w' 27350 `R1w' 27351 `R2w' 27352 `R3w' 27353 $r0, $r1, $r2, $r3. 27354 27355 `R02' 27356 $r0 or $r2, or $r2r0 for 32 bit values. 27357 27358 `R13' 27359 $r1 or $r3, or $r3r1 for 32 bit values. 27360 27361 `Rdi' 27362 A register that can hold a 64 bit value. 27363 27364 `Rhl' 27365 $r0 or $r1 (registers with addressable high/low bytes) 27366 27367 `R23' 27368 $r2 or $r3 27369 27370 `Raa' 27371 Address registers 27372 27373 `Raw' 27374 Address registers when they're 16 bits wide. 27375 27376 `Ral' 27377 Address registers when they're 24 bits wide. 27378 27379 `Rqi' 27380 Registers that can hold QI values. 27381 27382 `Rad' 27383 Registers that can be used with displacements ($a0, $a1, $sb). 27384 27385 `Rsi' 27386 Registers that can hold 32 bit values. 27387 27388 `Rhi' 27389 Registers that can hold 16 bit values. 27390 27391 `Rhc' 27392 Registers chat can hold 16 bit values, including all control 27393 registers. 27394 27395 `Rra' 27396 $r0 through R1, plus $a0 and $a1. 27397 27398 `Rfl' 27399 The flags register. 27400 27401 `Rmm' 27402 The memory-based pseudo-registers $mem0 through $mem15. 27403 27404 `Rpi' 27405 Registers that can hold pointers (16 bit registers for r8c, 27406 m16c; 24 bit registers for m32cm, m32c). 27407 27408 `Rpa' 27409 Matches multiple registers in a PARALLEL to form a larger 27410 register. Used to match function return values. 27411 27412 `Is3' 27413 -8 ... 7 27414 27415 `IS1' 27416 -128 ... 127 27417 27418 `IS2' 27419 -32768 ... 32767 27420 27421 `IU2' 27422 0 ... 65535 27423 27424 `In4' 27425 -8 ... -1 or 1 ... 8 27426 27427 `In5' 27428 -16 ... -1 or 1 ... 16 27429 27430 `In6' 27431 -32 ... -1 or 1 ... 32 27432 27433 `IM2' 27434 -65536 ... -1 27435 27436 `Ilb' 27437 An 8 bit value with exactly one bit set. 27438 27439 `Ilw' 27440 A 16 bit value with exactly one bit set. 27441 27442 `Sd' 27443 The common src/dest memory addressing modes. 27444 27445 `Sa' 27446 Memory addressed using $a0 or $a1. 27447 27448 `Si' 27449 Memory addressed with immediate addresses. 27450 27451 `Ss' 27452 Memory addressed using the stack pointer ($sp). 27453 27454 `Sf' 27455 Memory addressed using the frame base register ($fb). 27456 27457 `Ss' 27458 Memory addressed using the small base register ($sb). 27459 27460 `S1' 27461 $r1h 27462 27463 _MeP--`config/mep/constraints.md'_ 27464 27465 `a' 27466 The $sp register. 27467 27468 `b' 27469 The $tp register. 27470 27471 `c' 27472 Any control register. 27473 27474 `d' 27475 Either the $hi or the $lo register. 27476 27477 `em' 27478 Coprocessor registers that can be directly loaded ($c0-$c15). 27479 27480 `ex' 27481 Coprocessor registers that can be moved to each other. 27482 27483 `er' 27484 Coprocessor registers that can be moved to core registers. 27485 27486 `h' 27487 The $hi register. 27488 27489 `j' 27490 The $rpc register. 27491 27492 `l' 27493 The $lo register. 27494 27495 `t' 27496 Registers which can be used in $tp-relative addressing. 27497 27498 `v' 27499 The $gp register. 27500 27501 `x' 27502 The coprocessor registers. 27503 27504 `y' 27505 The coprocessor control registers. 27506 27507 `z' 27508 The $0 register. 27509 27510 `A' 27511 User-defined register set A. 27512 27513 `B' 27514 User-defined register set B. 27515 27516 `C' 27517 User-defined register set C. 27518 27519 `D' 27520 User-defined register set D. 27521 27522 `I' 27523 Offsets for $gp-rel addressing. 27524 27525 `J' 27526 Constants that can be used directly with boolean insns. 27527 27528 `K' 27529 Constants that can be moved directly to registers. 27530 27531 `L' 27532 Small constants that can be added to registers. 27533 27534 `M' 27535 Long shift counts. 27536 27537 `N' 27538 Small constants that can be compared to registers. 27539 27540 `O' 27541 Constants that can be loaded into the top half of registers. 27542 27543 `S' 27544 Signed 8-bit immediates. 27545 27546 `T' 27547 Symbols encoded for $tp-rel or $gp-rel addressing. 27548 27549 `U' 27550 Non-constant addresses for loading/saving coprocessor 27551 registers. 27552 27553 `W' 27554 The top half of a symbol's value. 27555 27556 `Y' 27557 A register indirect address without offset. 27558 27559 `Z' 27560 Symbolic references to the control bus. 27561 27562 27563 _MicroBlaze--`config/microblaze/constraints.md'_ 27564 27565 `d' 27566 A general register (`r0' to `r31'). 27567 27568 `z' 27569 A status register (`rmsr', `$fcc1' to `$fcc7'). 27570 27571 27572 _MIPS--`config/mips/constraints.md'_ 27573 27574 `d' 27575 An address register. This is equivalent to `r' unless 27576 generating MIPS16 code. 27577 27578 `f' 27579 A floating-point register (if available). 27580 27581 `h' 27582 Formerly the `hi' register. This constraint is no longer 27583 supported. 27584 27585 `l' 27586 The `lo' register. Use this register to store values that are 27587 no bigger than a word. 27588 27589 `x' 27590 The concatenated `hi' and `lo' registers. Use this register 27591 to store doubleword values. 27592 27593 `c' 27594 A register suitable for use in an indirect jump. This will 27595 always be `$25' for `-mabicalls'. 27596 27597 `v' 27598 Register `$3'. Do not use this constraint in new code; it is 27599 retained only for compatibility with glibc. 27600 27601 `y' 27602 Equivalent to `r'; retained for backwards compatibility. 27603 27604 `z' 27605 A floating-point condition code register. 27606 27607 `I' 27608 A signed 16-bit constant (for arithmetic instructions). 27609 27610 `J' 27611 Integer zero. 27612 27613 `K' 27614 An unsigned 16-bit constant (for logic instructions). 27615 27616 `L' 27617 A signed 32-bit constant in which the lower 16 bits are zero. 27618 Such constants can be loaded using `lui'. 27619 27620 `M' 27621 A constant that cannot be loaded using `lui', `addiu' or 27622 `ori'. 27623 27624 `N' 27625 A constant in the range -65535 to -1 (inclusive). 27626 27627 `O' 27628 A signed 15-bit constant. 27629 27630 `P' 27631 A constant in the range 1 to 65535 (inclusive). 27632 27633 `G' 27634 Floating-point zero. 27635 27636 `R' 27637 An address that can be used in a non-macro load or store. 27638 27639 _Motorola 680x0--`config/m68k/constraints.md'_ 27640 27641 `a' 27642 Address register 27643 27644 `d' 27645 Data register 27646 27647 `f' 27648 68881 floating-point register, if available 27649 27650 `I' 27651 Integer in the range 1 to 8 27652 27653 `J' 27654 16-bit signed number 27655 27656 `K' 27657 Signed number whose magnitude is greater than 0x80 27658 27659 `L' 27660 Integer in the range -8 to -1 27661 27662 `M' 27663 Signed number whose magnitude is greater than 0x100 27664 27665 `N' 27666 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 27667 27668 `O' 27669 16 (for rotate using swap) 27670 27671 `P' 27672 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 27673 27674 `R' 27675 Numbers that mov3q can handle 27676 27677 `G' 27678 Floating point constant that is not a 68881 constant 27679 27680 `S' 27681 Operands that satisfy 'm' when -mpcrel is in effect 27682 27683 `T' 27684 Operands that satisfy 's' when -mpcrel is not in effect 27685 27686 `Q' 27687 Address register indirect addressing mode 27688 27689 `U' 27690 Register offset addressing 27691 27692 `W' 27693 const_call_operand 27694 27695 `Cs' 27696 symbol_ref or const 27697 27698 `Ci' 27699 const_int 27700 27701 `C0' 27702 const_int 0 27703 27704 `Cj' 27705 Range of signed numbers that don't fit in 16 bits 27706 27707 `Cmvq' 27708 Integers valid for mvq 27709 27710 `Capsw' 27711 Integers valid for a moveq followed by a swap 27712 27713 `Cmvz' 27714 Integers valid for mvz 27715 27716 `Cmvs' 27717 Integers valid for mvs 27718 27719 `Ap' 27720 push_operand 27721 27722 `Ac' 27723 Non-register operands allowed in clr 27724 27725 27726 _Moxie--`config/moxie/constraints.md'_ 27727 27728 `A' 27729 An absolute address 27730 27731 `B' 27732 An offset address 27733 27734 `W' 27735 A register indirect memory operand 27736 27737 `I' 27738 A constant in the range of 0 to 255. 27739 27740 `N' 27741 A constant in the range of 0 to -255. 27742 27743 27744 _PDP-11--`config/pdp11/constraints.md'_ 27745 27746 `a' 27747 Floating point registers AC0 through AC3. These can be 27748 loaded from/to memory with a single instruction. 27749 27750 `d' 27751 Odd numbered general registers (R1, R3, R5). These are used 27752 for 16-bit multiply operations. 27753 27754 `f' 27755 Any of the floating point registers (AC0 through AC5). 27756 27757 `G' 27758 Floating point constant 0. 27759 27760 `I' 27761 An integer constant that fits in 16 bits. 27762 27763 `J' 27764 An integer constant whose low order 16 bits are zero. 27765 27766 `K' 27767 An integer constant that does not meet the constraints for 27768 codes `I' or `J'. 27769 27770 `L' 27771 The integer constant 1. 27772 27773 `M' 27774 The integer constant -1. 27775 27776 `N' 27777 The integer constant 0. 27778 27779 `O' 27780 Integer constants -4 through -1 and 1 through 4; shifts by 27781 these amounts are handled as multiple single-bit shifts 27782 rather than a single variable-length shift. 27783 27784 `Q' 27785 A memory reference which requires an additional word (address 27786 or offset) after the opcode. 27787 27788 `R' 27789 A memory reference that is encoded within the opcode. 27790 27791 27792 _RL78--`config/rl78/constraints.md'_ 27793 27794 `Int3' 27795 An integer constant in the range 1 ... 7. 27796 27797 `Int8' 27798 An integer constant in the range 0 ... 255. 27799 27800 `J' 27801 An integer constant in the range -255 ... 0 27802 27803 `K' 27804 The integer constant 1. 27805 27806 `L' 27807 The integer constant -1. 27808 27809 `M' 27810 The integer constant 0. 27811 27812 `N' 27813 The integer constant 2. 27814 27815 `O' 27816 The integer constant -2. 27817 27818 `P' 27819 An integer constant in the range 1 ... 15. 27820 27821 `Qbi' 27822 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 27823 27824 `Qsc' 27825 The synthetic compare types-gt, lt, ge, and le. 27826 27827 `Wab' 27828 A memory reference with an absolute address. 27829 27830 `Wbc' 27831 A memory reference using `BC' as a base register, with an 27832 optional offset. 27833 27834 `Wca' 27835 A memory reference using `AX', `BC', `DE', or `HL' for the 27836 address, for calls. 27837 27838 `Wcv' 27839 A memory reference using any 16-bit register pair for the 27840 address, for calls. 27841 27842 `Wd2' 27843 A memory reference using `DE' as a base register, with an 27844 optional offset. 27845 27846 `Wde' 27847 A memory reference using `DE' as a base register, without any 27848 offset. 27849 27850 `Wfr' 27851 Any memory reference to an address in the far address space. 27852 27853 `Wh1' 27854 A memory reference using `HL' as a base register, with an 27855 optional one-byte offset. 27856 27857 `Whb' 27858 A memory reference using `HL' as a base register, with `B' or 27859 `C' as the index register. 27860 27861 `Whl' 27862 A memory reference using `HL' as a base register, without any 27863 offset. 27864 27865 `Ws1' 27866 A memory reference using `SP' as a base register, with an 27867 optional one-byte offset. 27868 27869 `Y' 27870 Any memory reference to an address in the near address space. 27871 27872 `A' 27873 The `AX' register. 27874 27875 `B' 27876 The `BC' register. 27877 27878 `D' 27879 The `DE' register. 27880 27881 `R' 27882 `A' through `L' registers. 27883 27884 `S' 27885 The `SP' register. 27886 27887 `T' 27888 The `HL' register. 27889 27890 `Z08W' 27891 The 16-bit `R8' register. 27892 27893 `Z10W' 27894 The 16-bit `R10' register. 27895 27896 `Zint' 27897 The registers reserved for interrupts (`R24' to `R31'). 27898 27899 `a' 27900 The `A' register. 27901 27902 `b' 27903 The `B' register. 27904 27905 `c' 27906 The `C' register. 27907 27908 `d' 27909 The `D' register. 27910 27911 `e' 27912 The `E' register. 27913 27914 `h' 27915 The `H' register. 27916 27917 `l' 27918 The `L' register. 27919 27920 `v' 27921 The virtual registers. 27922 27923 `w' 27924 The `PSW' register. 27925 27926 `x' 27927 The `X' register. 27928 27929 27930 _RX--`config/rx/constraints.md'_ 27931 27932 `Q' 27933 An address which does not involve register indirect 27934 addressing or pre/post increment/decrement addressing. 27935 27936 `Symbol' 27937 A symbol reference. 27938 27939 `Int08' 27940 A constant in the range -256 to 255, inclusive. 27941 27942 `Sint08' 27943 A constant in the range -128 to 127, inclusive. 27944 27945 `Sint16' 27946 A constant in the range -32768 to 32767, inclusive. 27947 27948 `Sint24' 27949 A constant in the range -8388608 to 8388607, inclusive. 27950 27951 `Uint04' 27952 A constant in the range 0 to 15, inclusive. 27953 27954 27955 _SPARC--`config/sparc/sparc.h'_ 27956 27957 `f' 27958 Floating-point register on the SPARC-V8 architecture and 27959 lower floating-point register on the SPARC-V9 architecture. 27960 27961 `e' 27962 Floating-point register. It is equivalent to `f' on the 27963 SPARC-V8 architecture and contains both lower and upper 27964 floating-point registers on the SPARC-V9 architecture. 27965 27966 `c' 27967 Floating-point condition code register. 27968 27969 `d' 27970 Lower floating-point register. It is only valid on the 27971 SPARC-V9 architecture when the Visual Instruction Set is 27972 available. 27973 27974 `b' 27975 Floating-point register. It is only valid on the SPARC-V9 27976 architecture when the Visual Instruction Set is available. 27977 27978 `h' 27979 64-bit global or out register for the SPARC-V8+ architecture. 27980 27981 `C' 27982 The constant all-ones, for floating-point. 27983 27984 `A' 27985 Signed 5-bit constant 27986 27987 `D' 27988 A vector constant 27989 27990 `I' 27991 Signed 13-bit constant 27992 27993 `J' 27994 Zero 27995 27996 `K' 27997 32-bit constant with the low 12 bits clear (a constant that 27998 can be loaded with the `sethi' instruction) 27999 28000 `L' 28001 A constant in the range supported by `movcc' instructions 28002 (11-bit signed immediate) 28003 28004 `M' 28005 A constant in the range supported by `movrcc' instructions 28006 (10-bit signed immediate) 28007 28008 `N' 28009 Same as `K', except that it verifies that bits that are not 28010 in the lower 32-bit range are all zero. Must be used instead 28011 of `K' for modes wider than `SImode' 28012 28013 `O' 28014 The constant 4096 28015 28016 `G' 28017 Floating-point zero 28018 28019 `H' 28020 Signed 13-bit constant, sign-extended to 32 or 64 bits 28021 28022 `P' 28023 The constant -1 28024 28025 `Q' 28026 Floating-point constant whose integral representation can be 28027 moved into an integer register using a single sethi 28028 instruction 28029 28030 `R' 28031 Floating-point constant whose integral representation can be 28032 moved into an integer register using a single mov instruction 28033 28034 `S' 28035 Floating-point constant whose integral representation can be 28036 moved into an integer register using a high/lo_sum 28037 instruction sequence 28038 28039 `T' 28040 Memory address aligned to an 8-byte boundary 28041 28042 `U' 28043 Even register 28044 28045 `W' 28046 Memory address for `e' constraint registers 28047 28048 `w' 28049 Memory address with only a base register 28050 28051 `Y' 28052 Vector zero 28053 28054 28055 _SPU--`config/spu/spu.h'_ 28056 28057 `a' 28058 An immediate which can be loaded with the il/ila/ilh/ilhu 28059 instructions. const_int is treated as a 64 bit value. 28060 28061 `c' 28062 An immediate for and/xor/or instructions. const_int is 28063 treated as a 64 bit value. 28064 28065 `d' 28066 An immediate for the `iohl' instruction. const_int is 28067 treated as a 64 bit value. 28068 28069 `f' 28070 An immediate which can be loaded with `fsmbi'. 28071 28072 `A' 28073 An immediate which can be loaded with the il/ila/ilh/ilhu 28074 instructions. const_int is treated as a 32 bit value. 28075 28076 `B' 28077 An immediate for most arithmetic instructions. const_int is 28078 treated as a 32 bit value. 28079 28080 `C' 28081 An immediate for and/xor/or instructions. const_int is 28082 treated as a 32 bit value. 28083 28084 `D' 28085 An immediate for the `iohl' instruction. const_int is 28086 treated as a 32 bit value. 28087 28088 `I' 28089 A constant in the range [-64, 63] for shift/rotate 28090 instructions. 28091 28092 `J' 28093 An unsigned 7-bit constant for conversion/nop/channel 28094 instructions. 28095 28096 `K' 28097 A signed 10-bit constant for most arithmetic instructions. 28098 28099 `M' 28100 A signed 16 bit immediate for `stop'. 28101 28102 `N' 28103 An unsigned 16-bit constant for `iohl' and `fsmbi'. 28104 28105 `O' 28106 An unsigned 7-bit constant whose 3 least significant bits are 28107 0. 28108 28109 `P' 28110 An unsigned 3-bit constant for 16-byte rotates and shifts 28111 28112 `R' 28113 Call operand, reg, for indirect calls 28114 28115 `S' 28116 Call operand, symbol, for relative calls. 28117 28118 `T' 28119 Call operand, const_int, for absolute calls. 28120 28121 `U' 28122 An immediate which can be loaded with the il/ila/ilh/ilhu 28123 instructions. const_int is sign extended to 128 bit. 28124 28125 `W' 28126 An immediate for shift and rotate instructions. const_int is 28127 treated as a 32 bit value. 28128 28129 `Y' 28130 An immediate for and/xor/or instructions. const_int is sign 28131 extended as a 128 bit. 28132 28133 `Z' 28134 An immediate for the `iohl' instruction. const_int is sign 28135 extended to 128 bit. 28136 28137 28138 _S/390 and zSeries--`config/s390/s390.h'_ 28139 28140 `a' 28141 Address register (general purpose register except r0) 28142 28143 `c' 28144 Condition code register 28145 28146 `d' 28147 Data register (arbitrary general purpose register) 28148 28149 `f' 28150 Floating-point register 28151 28152 `I' 28153 Unsigned 8-bit constant (0-255) 28154 28155 `J' 28156 Unsigned 12-bit constant (0-4095) 28157 28158 `K' 28159 Signed 16-bit constant (-32768-32767) 28160 28161 `L' 28162 Value appropriate as displacement. 28163 `(0..4095)' 28164 for short displacement 28165 28166 `(-524288..524287)' 28167 for long displacement 28168 28169 `M' 28170 Constant integer with a value of 0x7fffffff. 28171 28172 `N' 28173 Multiple letter constraint followed by 4 parameter letters. 28174 `0..9:' 28175 number of the part counting from most to least 28176 significant 28177 28178 `H,Q:' 28179 mode of the part 28180 28181 `D,S,H:' 28182 mode of the containing operand 28183 28184 `0,F:' 28185 value of the other parts (F--all bits set) 28186 The constraint matches if the specified part of a constant 28187 has a value different from its other parts. 28188 28189 `Q' 28190 Memory reference without index register and with short 28191 displacement. 28192 28193 `R' 28194 Memory reference with index register and short displacement. 28195 28196 `S' 28197 Memory reference without index register but with long 28198 displacement. 28199 28200 `T' 28201 Memory reference with index register and long displacement. 28202 28203 `U' 28204 Pointer with short displacement. 28205 28206 `W' 28207 Pointer with long displacement. 28208 28209 `Y' 28210 Shift count operand. 28211 28212 28213 _Score family--`config/score/score.h'_ 28214 28215 `d' 28216 Registers from r0 to r32. 28217 28218 `e' 28219 Registers from r0 to r16. 28220 28221 `t' 28222 r8--r11 or r22--r27 registers. 28223 28224 `h' 28225 hi register. 28226 28227 `l' 28228 lo register. 28229 28230 `x' 28231 hi + lo register. 28232 28233 `q' 28234 cnt register. 28235 28236 `y' 28237 lcb register. 28238 28239 `z' 28240 scb register. 28241 28242 `a' 28243 cnt + lcb + scb register. 28244 28245 `c' 28246 cr0--cr15 register. 28247 28248 `b' 28249 cp1 registers. 28250 28251 `f' 28252 cp2 registers. 28253 28254 `i' 28255 cp3 registers. 28256 28257 `j' 28258 cp1 + cp2 + cp3 registers. 28259 28260 `I' 28261 High 16-bit constant (32-bit constant with 16 LSBs zero). 28262 28263 `J' 28264 Unsigned 5 bit integer (in the range 0 to 31). 28265 28266 `K' 28267 Unsigned 16 bit integer (in the range 0 to 65535). 28268 28269 `L' 28270 Signed 16 bit integer (in the range -32768 to 32767). 28271 28272 `M' 28273 Unsigned 14 bit integer (in the range 0 to 16383). 28274 28275 `N' 28276 Signed 14 bit integer (in the range -8192 to 8191). 28277 28278 `Z' 28279 Any SYMBOL_REF. 28280 28281 _Xstormy16--`config/stormy16/stormy16.h'_ 28282 28283 `a' 28284 Register r0. 28285 28286 `b' 28287 Register r1. 28288 28289 `c' 28290 Register r2. 28291 28292 `d' 28293 Register r8. 28294 28295 `e' 28296 Registers r0 through r7. 28297 28298 `t' 28299 Registers r0 and r1. 28300 28301 `y' 28302 The carry register. 28303 28304 `z' 28305 Registers r8 and r9. 28306 28307 `I' 28308 A constant between 0 and 3 inclusive. 28309 28310 `J' 28311 A constant that has exactly one bit set. 28312 28313 `K' 28314 A constant that has exactly one bit clear. 28315 28316 `L' 28317 A constant between 0 and 255 inclusive. 28318 28319 `M' 28320 A constant between -255 and 0 inclusive. 28321 28322 `N' 28323 A constant between -3 and 0 inclusive. 28324 28325 `O' 28326 A constant between 1 and 4 inclusive. 28327 28328 `P' 28329 A constant between -4 and -1 inclusive. 28330 28331 `Q' 28332 A memory reference that is a stack push. 28333 28334 `R' 28335 A memory reference that is a stack pop. 28336 28337 `S' 28338 A memory reference that refers to a constant address of known 28339 value. 28340 28341 `T' 28342 The register indicated by Rx (not implemented yet). 28343 28344 `U' 28345 A constant that is not between 2 and 15 inclusive. 28346 28347 `Z' 28348 The constant 0. 28349 28350 28351 _TI C6X family--`config/c6x/constraints.md'_ 28352 28353 `a' 28354 Register file A (A0-A31). 28355 28356 `b' 28357 Register file B (B0-B31). 28358 28359 `A' 28360 Predicate registers in register file A (A0-A2 on C64X and 28361 higher, A1 and A2 otherwise). 28362 28363 `B' 28364 Predicate registers in register file B (B0-B2). 28365 28366 `C' 28367 A call-used register in register file B (B0-B9, B16-B31). 28368 28369 `Da' 28370 Register file A, excluding predicate registers (A3-A31, plus 28371 A0 if not C64X or higher). 28372 28373 `Db' 28374 Register file B, excluding predicate registers (B3-B31). 28375 28376 `Iu4' 28377 Integer constant in the range 0 ... 15. 28378 28379 `Iu5' 28380 Integer constant in the range 0 ... 31. 28381 28382 `In5' 28383 Integer constant in the range -31 ... 0. 28384 28385 `Is5' 28386 Integer constant in the range -16 ... 15. 28387 28388 `I5x' 28389 Integer constant that can be the operand of an ADDA or a SUBA 28390 insn. 28391 28392 `IuB' 28393 Integer constant in the range 0 ... 65535. 28394 28395 `IsB' 28396 Integer constant in the range -32768 ... 32767. 28397 28398 `IsC' 28399 Integer constant in the range -2^20 ... 2^20 - 1. 28400 28401 `Jc' 28402 Integer constant that is a valid mask for the clr instruction. 28403 28404 `Js' 28405 Integer constant that is a valid mask for the set instruction. 28406 28407 `Q' 28408 Memory location with A base register. 28409 28410 `R' 28411 Memory location with B base register. 28412 28413 `Z' 28414 Register B14 (aka DP). 28415 28416 28417 _TILE-Gx--`config/tilegx/constraints.md'_ 28418 28419 `R00' 28420 `R01' 28421 `R02' 28422 `R03' 28423 `R04' 28424 `R05' 28425 `R06' 28426 `R07' 28427 `R08' 28428 `R09' 28429 `R10' 28430 Each of these represents a register constraint for an 28431 individual register, from r0 to r10. 28432 28433 `I' 28434 Signed 8-bit integer constant. 28435 28436 `J' 28437 Signed 16-bit integer constant. 28438 28439 `K' 28440 Unsigned 16-bit integer constant. 28441 28442 `L' 28443 Integer constant that fits in one signed byte when 28444 incremented by one (-129 ... 126). 28445 28446 `m' 28447 Memory operand. If used together with `<' or `>', the 28448 operand can have postincrement which requires printing with 28449 `%In' and `%in' on TILE-Gx. For example: 28450 28451 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 28452 28453 `M' 28454 A bit mask suitable for the BFINS instruction. 28455 28456 `N' 28457 Integer constant that is a byte tiled out eight times. 28458 28459 `O' 28460 The integer zero constant. 28461 28462 `P' 28463 Integer constant that is a sign-extended byte tiled out as 28464 four shorts. 28465 28466 `Q' 28467 Integer constant that fits in one signed byte when incremented 28468 (-129 ... 126), but excluding -1. 28469 28470 `S' 28471 Integer constant that has all 1 bits consecutive and starting 28472 at bit 0. 28473 28474 `T' 28475 A 16-bit fragment of a got, tls, or pc-relative reference. 28476 28477 `U' 28478 Memory operand except postincrement. This is roughly the 28479 same as `m' when not used together with `<' or `>'. 28480 28481 `W' 28482 An 8-element vector constant with identical elements. 28483 28484 `Y' 28485 A 4-element vector constant with identical elements. 28486 28487 `Z0' 28488 The integer constant 0xffffffff. 28489 28490 `Z1' 28491 The integer constant 0xffffffff00000000. 28492 28493 28494 _TILEPro--`config/tilepro/constraints.md'_ 28495 28496 `R00' 28497 `R01' 28498 `R02' 28499 `R03' 28500 `R04' 28501 `R05' 28502 `R06' 28503 `R07' 28504 `R08' 28505 `R09' 28506 `R10' 28507 Each of these represents a register constraint for an 28508 individual register, from r0 to r10. 28509 28510 `I' 28511 Signed 8-bit integer constant. 28512 28513 `J' 28514 Signed 16-bit integer constant. 28515 28516 `K' 28517 Nonzero integer constant with low 16 bits zero. 28518 28519 `L' 28520 Integer constant that fits in one signed byte when 28521 incremented by one (-129 ... 126). 28522 28523 `m' 28524 Memory operand. If used together with `<' or `>', the 28525 operand can have postincrement which requires printing with 28526 `%In' and `%in' on TILEPro. For example: 28527 28528 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 28529 28530 `M' 28531 A bit mask suitable for the MM instruction. 28532 28533 `N' 28534 Integer constant that is a byte tiled out four times. 28535 28536 `O' 28537 The integer zero constant. 28538 28539 `P' 28540 Integer constant that is a sign-extended byte tiled out as 28541 two shorts. 28542 28543 `Q' 28544 Integer constant that fits in one signed byte when incremented 28545 (-129 ... 126), but excluding -1. 28546 28547 `T' 28548 A symbolic operand, or a 16-bit fragment of a got, tls, or 28549 pc-relative reference. 28550 28551 `U' 28552 Memory operand except postincrement. This is roughly the 28553 same as `m' when not used together with `<' or `>'. 28554 28555 `W' 28556 A 4-element vector constant with identical elements. 28557 28558 `Y' 28559 A 2-element vector constant with identical elements. 28560 28561 28562 _Xtensa--`config/xtensa/constraints.md'_ 28563 28564 `a' 28565 General-purpose 32-bit register 28566 28567 `b' 28568 One-bit boolean register 28569 28570 `A' 28571 MAC16 40-bit accumulator register 28572 28573 `I' 28574 Signed 12-bit integer constant, for use in MOVI instructions 28575 28576 `J' 28577 Signed 8-bit integer constant, for use in ADDI instructions 28578 28579 `K' 28580 Integer constant valid for BccI instructions 28581 28582 `L' 28583 Unsigned constant valid for BccUI instructions 28584 28585 28586 28587 28588 File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 28589 28590 6.43 Controlling Names Used in Assembler Code 28591 ============================================= 28592 28593 You can specify the name to be used in the assembler code for a C 28594 function or variable by writing the `asm' (or `__asm__') keyword after 28595 the declarator as follows: 28596 28597 int foo asm ("myfoo") = 2; 28598 28599 This specifies that the name to be used for the variable `foo' in the 28600 assembler code should be `myfoo' rather than the usual `_foo'. 28601 28602 On systems where an underscore is normally prepended to the name of a C 28603 function or variable, this feature allows you to define names for the 28604 linker that do not start with an underscore. 28605 28606 It does not make sense to use this feature with a non-static local 28607 variable since such variables do not have assembler names. If you are 28608 trying to put the variable in a particular register, see *note Explicit 28609 Reg Vars::. GCC presently accepts such code with a warning, but will 28610 probably be changed to issue an error, rather than a warning, in the 28611 future. 28612 28613 You cannot use `asm' in this way in a function _definition_; but you 28614 can get the same effect by writing a declaration for the function 28615 before its definition and putting `asm' there, like this: 28616 28617 extern func () asm ("FUNC"); 28618 28619 func (x, y) 28620 int x, y; 28621 /* ... */ 28622 28623 It is up to you to make sure that the assembler names you choose do not 28624 conflict with any other assembler symbols. Also, you must not use a 28625 register name; that would produce completely invalid assembler code. 28626 GCC does not as yet have the ability to store static variables in 28627 registers. Perhaps that will be added. 28628 28629 28630 File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 28631 28632 6.44 Variables in Specified Registers 28633 ===================================== 28634 28635 GNU C allows you to put a few global variables into specified hardware 28636 registers. You can also specify the register in which an ordinary 28637 register variable should be allocated. 28638 28639 * Global register variables reserve registers throughout the program. 28640 This may be useful in programs such as programming language 28641 interpreters that have a couple of global variables that are 28642 accessed very often. 28643 28644 * Local register variables in specific registers do not reserve the 28645 registers, except at the point where they are used as input or 28646 output operands in an `asm' statement and the `asm' statement 28647 itself is not deleted. The compiler's data flow analysis is 28648 capable of determining where the specified registers contain live 28649 values, and where they are available for other uses. Stores into 28650 local register variables may be deleted when they appear to be 28651 dead according to dataflow analysis. References to local register 28652 variables may be deleted or moved or simplified. 28653 28654 These local variables are sometimes convenient for use with the 28655 extended `asm' feature (*note Extended Asm::), if you want to 28656 write one output of the assembler instruction directly into a 28657 particular register. (This works provided the register you 28658 specify fits the constraints specified for that operand in the 28659 `asm'.) 28660 28661 * Menu: 28662 28663 * Global Reg Vars:: 28664 * Local Reg Vars:: 28665 28666 28667 File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 28668 28669 6.44.1 Defining Global Register Variables 28670 ----------------------------------------- 28671 28672 You can define a global register variable in GNU C like this: 28673 28674 register int *foo asm ("a5"); 28675 28676 Here `a5' is the name of the register that should be used. Choose a 28677 register that is normally saved and restored by function calls on your 28678 machine, so that library routines will not clobber it. 28679 28680 Naturally the register name is cpu-dependent, so you need to 28681 conditionalize your program according to cpu type. The register `a5' 28682 is a good choice on a 68000 for a variable of pointer type. On 28683 machines with register windows, be sure to choose a "global" register 28684 that is not affected magically by the function call mechanism. 28685 28686 In addition, different operating systems on the same CPU may differ in 28687 how they name the registers; then you need additional conditionals. For 28688 example, some 68000 operating systems call this register `%a5'. 28689 28690 Eventually there may be a way of asking the compiler to choose a 28691 register automatically, but first we need to figure out how it should 28692 choose and how to enable you to guide the choice. No solution is 28693 evident. 28694 28695 Defining a global register variable in a certain register reserves that 28696 register entirely for this use, at least within the current compilation. 28697 The register is not allocated for any other purpose in the functions in 28698 the current compilation, and is not saved and restored by these 28699 functions. Stores into this register are never deleted even if they 28700 appear to be dead, but references may be deleted or moved or simplified. 28701 28702 It is not safe to access the global register variables from signal 28703 handlers, or from more than one thread of control, because the system 28704 library routines may temporarily use the register for other things 28705 (unless you recompile them specially for the task at hand). 28706 28707 It is not safe for one function that uses a global register variable to 28708 call another such function `foo' by way of a third function `lose' that 28709 is compiled without knowledge of this variable (i.e. in a different 28710 source file in which the variable isn't declared). This is because 28711 `lose' might save the register and put some other value there. For 28712 example, you can't expect a global register variable to be available in 28713 the comparison-function that you pass to `qsort', since `qsort' might 28714 have put something else in that register. (If you are prepared to 28715 recompile `qsort' with the same global register variable, you can solve 28716 this problem.) 28717 28718 If you want to recompile `qsort' or other source files that do not 28719 actually use your global register variable, so that they do not use that 28720 register for any other purpose, then it suffices to specify the compiler 28721 option `-ffixed-REG'. You need not actually add a global register 28722 declaration to their source code. 28723 28724 A function that can alter the value of a global register variable 28725 cannot safely be called from a function compiled without this variable, 28726 because it could clobber the value the caller expects to find there on 28727 return. Therefore, the function that is the entry point into the part 28728 of the program that uses the global register variable must explicitly 28729 save and restore the value that belongs to its caller. 28730 28731 On most machines, `longjmp' restores to each global register variable 28732 the value it had at the time of the `setjmp'. On some machines, 28733 however, `longjmp' does not change the value of global register 28734 variables. To be portable, the function that called `setjmp' should 28735 make other arrangements to save the values of the global register 28736 variables, and to restore them in a `longjmp'. This way, the same 28737 thing happens regardless of what `longjmp' does. 28738 28739 All global register variable declarations must precede all function 28740 definitions. If such a declaration could appear after function 28741 definitions, the declaration would be too late to prevent the register 28742 from being used for other purposes in the preceding functions. 28743 28744 Global register variables may not have initial values, because an 28745 executable file has no means to supply initial contents for a register. 28746 28747 On the SPARC, there are reports that g3 ... g7 are suitable registers, 28748 but certain library functions, such as `getwd', as well as the 28749 subroutines for division and remainder, modify g3 and g4. g1 and g2 28750 are local temporaries. 28751 28752 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 28753 course, it does not do to use more than a few of those. 28754 28755 28756 File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 28757 28758 6.44.2 Specifying Registers for Local Variables 28759 ----------------------------------------------- 28760 28761 You can define a local register variable with a specified register like 28762 this: 28763 28764 register int *foo asm ("a5"); 28765 28766 Here `a5' is the name of the register that should be used. Note that 28767 this is the same syntax used for defining global register variables, 28768 but for a local variable it appears within a function. 28769 28770 Naturally the register name is cpu-dependent, but this is not a 28771 problem, since specific registers are most often useful with explicit 28772 assembler instructions (*note Extended Asm::). Both of these things 28773 generally require that you conditionalize your program according to cpu 28774 type. 28775 28776 In addition, operating systems on one type of cpu may differ in how 28777 they name the registers; then you need additional conditionals. For 28778 example, some 68000 operating systems call this register `%a5'. 28779 28780 Defining such a register variable does not reserve the register; it 28781 remains available for other uses in places where flow control determines 28782 the variable's value is not live. 28783 28784 This option does not guarantee that GCC generates code that has this 28785 variable in the register you specify at all times. You may not code an 28786 explicit reference to this register in the _assembler instruction 28787 template_ part of an `asm' statement and assume it always refers to 28788 this variable. However, using the variable as an `asm' _operand_ 28789 guarantees that the specified register is used for the operand. 28790 28791 Stores into local register variables may be deleted when they appear 28792 to be dead according to dataflow analysis. References to local 28793 register variables may be deleted or moved or simplified. 28794 28795 As for global register variables, it's recommended that you choose a 28796 register that is normally saved and restored by function calls on your 28797 machine, so that library routines will not clobber it. A common 28798 pitfall is to initialize multiple call-clobbered registers with 28799 arbitrary expressions, where a function call or library call for an 28800 arithmetic operator overwrites a register value from a previous 28801 assignment, for example `r0' below: 28802 register int *p1 asm ("r0") = ...; 28803 register int *p2 asm ("r1") = ...; 28804 28805 In those cases, a solution is to use a temporary variable for each 28806 arbitrary expression. *Note Example of asm with clobbered asm reg::. 28807 28808 28809 File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 28810 28811 6.45 Alternate Keywords 28812 ======================= 28813 28814 `-ansi' and the various `-std' options disable certain keywords. This 28815 causes trouble when you want to use GNU C extensions, or a 28816 general-purpose header file that should be usable by all programs, 28817 including ISO C programs. The keywords `asm', `typeof' and `inline' 28818 are not available in programs compiled with `-ansi' or `-std' (although 28819 `inline' can be used in a program compiled with `-std=c99' or 28820 `-std=c11'). The ISO C99 keyword `restrict' is only available when 28821 `-std=gnu99' (which will eventually be the default) or `-std=c99' (or 28822 the equivalent `-std=iso9899:1999'), or an option for a later standard 28823 version, is used. 28824 28825 The way to solve these problems is to put `__' at the beginning and 28826 end of each problematical keyword. For example, use `__asm__' instead 28827 of `asm', and `__inline__' instead of `inline'. 28828 28829 Other C compilers won't accept these alternative keywords; if you want 28830 to compile with another compiler, you can define the alternate keywords 28831 as macros to replace them with the customary keywords. It looks like 28832 this: 28833 28834 #ifndef __GNUC__ 28835 #define __asm__ asm 28836 #endif 28837 28838 `-pedantic' and other options cause warnings for many GNU C extensions. 28839 You can prevent such warnings within one expression by writing 28840 `__extension__' before the expression. `__extension__' has no effect 28841 aside from this. 28842 28843 28844 File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 28845 28846 6.46 Incomplete `enum' Types 28847 ============================ 28848 28849 You can define an `enum' tag without specifying its possible values. 28850 This results in an incomplete type, much like what you get if you write 28851 `struct foo' without describing the elements. A later declaration that 28852 does specify the possible values completes the type. 28853 28854 You can't allocate variables or storage using the type while it is 28855 incomplete. However, you can work with pointers to that type. 28856 28857 This extension may not be very useful, but it makes the handling of 28858 `enum' more consistent with the way `struct' and `union' are handled. 28859 28860 This extension is not supported by GNU C++. 28861 28862 28863 File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 28864 28865 6.47 Function Names as Strings 28866 ============================== 28867 28868 GCC provides three magic variables that hold the name of the current 28869 function, as a string. The first of these is `__func__', which is part 28870 of the C99 standard: 28871 28872 The identifier `__func__' is implicitly declared by the translator as 28873 if, immediately following the opening brace of each function 28874 definition, the declaration 28875 28876 static const char __func__[] = "function-name"; 28877 28878 appeared, where function-name is the name of the lexically-enclosing 28879 function. This name is the unadorned name of the function. 28880 28881 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 28882 recognize only this name. However, it is not standardized. For 28883 maximum portability, we recommend you use `__func__', but provide a 28884 fallback definition with the preprocessor: 28885 28886 #if __STDC_VERSION__ < 199901L 28887 # if __GNUC__ >= 2 28888 # define __func__ __FUNCTION__ 28889 # else 28890 # define __func__ "<unknown>" 28891 # endif 28892 #endif 28893 28894 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 28895 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 28896 the function as well as its bare name. For example, this program: 28897 28898 extern "C" { 28899 extern int printf (char *, ...); 28900 } 28901 28902 class a { 28903 public: 28904 void sub (int i) 28905 { 28906 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 28907 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 28908 } 28909 }; 28910 28911 int 28912 main (void) 28913 { 28914 a ax; 28915 ax.sub (0); 28916 return 0; 28917 } 28918 28919 gives this output: 28920 28921 __FUNCTION__ = sub 28922 __PRETTY_FUNCTION__ = void a::sub(int) 28923 28924 These identifiers are not preprocessor macros. In GCC 3.3 and 28925 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 28926 treated as string literals; they could be used to initialize `char' 28927 arrays, and they could be concatenated with other string literals. GCC 28928 3.4 and later treat them as variables, like `__func__'. In C++, 28929 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 28930 28931 28932 File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 28933 28934 6.48 Getting the Return or Frame Address of a Function 28935 ====================================================== 28936 28937 These functions may be used to get information about the callers of a 28938 function. 28939 28940 -- Built-in Function: void * __builtin_return_address (unsigned int 28941 LEVEL) 28942 This function returns the return address of the current function, 28943 or of one of its callers. The LEVEL argument is number of frames 28944 to scan up the call stack. A value of `0' yields the return 28945 address of the current function, a value of `1' yields the return 28946 address of the caller of the current function, and so forth. When 28947 inlining the expected behavior is that the function returns the 28948 address of the function that is returned to. To work around this 28949 behavior use the `noinline' function attribute. 28950 28951 The LEVEL argument must be a constant integer. 28952 28953 On some machines it may be impossible to determine the return 28954 address of any function other than the current one; in such cases, 28955 or when the top of the stack has been reached, this function 28956 returns `0' or a random value. In addition, 28957 `__builtin_frame_address' may be used to determine if the top of 28958 the stack has been reached. 28959 28960 Additional post-processing of the returned value may be needed, see 28961 `__builtin_extract_return_addr'. 28962 28963 This function should only be used with a nonzero argument for 28964 debugging purposes. 28965 28966 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR) 28967 The address as returned by `__builtin_return_address' may have to 28968 be fed through this function to get the actual encoded address. 28969 For example, on the 31-bit S/390 platform the highest bit has to 28970 be masked out, or on SPARC platforms an offset has to be added for 28971 the true next instruction to be executed. 28972 28973 If no fixup is needed, this function simply passes through ADDR. 28974 28975 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR) 28976 This function does the reverse of `__builtin_extract_return_addr'. 28977 28978 -- Built-in Function: void * __builtin_frame_address (unsigned int 28979 LEVEL) 28980 This function is similar to `__builtin_return_address', but it 28981 returns the address of the function frame rather than the return 28982 address of the function. Calling `__builtin_frame_address' with a 28983 value of `0' yields the frame address of the current function, a 28984 value of `1' yields the frame address of the caller of the current 28985 function, and so forth. 28986 28987 The frame is the area on the stack that holds local variables and 28988 saved registers. The frame address is normally the address of the 28989 first word pushed on to the stack by the function. However, the 28990 exact definition depends upon the processor and the calling 28991 convention. If the processor has a dedicated frame pointer 28992 register, and the function has a frame, then 28993 `__builtin_frame_address' returns the value of the frame pointer 28994 register. 28995 28996 On some machines it may be impossible to determine the frame 28997 address of any function other than the current one; in such cases, 28998 or when the top of the stack has been reached, this function 28999 returns `0' if the first frame pointer is properly initialized by 29000 the startup code. 29001 29002 This function should only be used with a nonzero argument for 29003 debugging purposes. 29004 29005 29006 File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 29007 29008 6.49 Using Vector Instructions through Built-in Functions 29009 ========================================================= 29010 29011 On some targets, the instruction set contains SIMD vector instructions 29012 which operate on multiple values contained in one large register at the 29013 same time. For example, on the i386 the MMX, 3DNow! and SSE extensions 29014 can be used this way. 29015 29016 The first step in using these extensions is to provide the necessary 29017 data types. This should be done using an appropriate `typedef': 29018 29019 typedef int v4si __attribute__ ((vector_size (16))); 29020 29021 The `int' type specifies the base type, while the attribute specifies 29022 the vector size for the variable, measured in bytes. For example, the 29023 declaration above causes the compiler to set the mode for the `v4si' 29024 type to be 16 bytes wide and divided into `int' sized units. For a 29025 32-bit `int' this means a vector of 4 units of 4 bytes, and the 29026 corresponding mode of `foo' is V4SI. 29027 29028 The `vector_size' attribute is only applicable to integral and float 29029 scalars, although arrays, pointers, and function return values are 29030 allowed in conjunction with this construct. Only sizes that are a power 29031 of two are currently allowed. 29032 29033 All the basic integer types can be used as base types, both as signed 29034 and as unsigned: `char', `short', `int', `long', `long long'. In 29035 addition, `float' and `double' can be used to build floating-point 29036 vector types. 29037 29038 Specifying a combination that is not valid for the current architecture 29039 causes GCC to synthesize the instructions using a narrower mode. For 29040 example, if you specify a variable of type `V4SI' and your architecture 29041 does not allow for this specific SIMD type, GCC produces code that uses 29042 4 `SIs'. 29043 29044 The types defined in this manner can be used with a subset of normal C 29045 operations. Currently, GCC allows using the following operators on 29046 these types: `+, -, *, /, unary minus, ^, |, &, ~, %'. 29047 29048 The operations behave like C++ `valarrays'. Addition is defined as 29049 the addition of the corresponding elements of the operands. For 29050 example, in the code below, each of the 4 elements in A is added to the 29051 corresponding 4 elements in B and the resulting vector is stored in C. 29052 29053 typedef int v4si __attribute__ ((vector_size (16))); 29054 29055 v4si a, b, c; 29056 29057 c = a + b; 29058 29059 Subtraction, multiplication, division, and the logical operations 29060 operate in a similar manner. Likewise, the result of using the unary 29061 minus or complement operators on a vector type is a vector whose 29062 elements are the negative or complemented values of the corresponding 29063 elements in the operand. 29064 29065 It is possible to use shifting operators `<<', `>>' on integer-type 29066 vectors. The operation is defined as following: `{a0, a1, ..., an} >> 29067 {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector 29068 operands must have the same number of elements. 29069 29070 For convenience, it is allowed to use a binary vector operation where 29071 one operand is a scalar. In that case the compiler transforms the 29072 scalar operand into a vector where each element is the scalar from the 29073 operation. The transformation happens only if the scalar could be 29074 safely converted to the vector-element type. Consider the following 29075 code. 29076 29077 typedef int v4si __attribute__ ((vector_size (16))); 29078 29079 v4si a, b, c; 29080 long l; 29081 29082 a = b + 1; /* a = b + {1,1,1,1}; */ 29083 a = 2 * b; /* a = {2,2,2,2} * b; */ 29084 29085 a = l + a; /* Error, cannot convert long to int. */ 29086 29087 Vectors can be subscripted as if the vector were an array with the 29088 same number of elements and base type. Out of bound accesses invoke 29089 undefined behavior at run time. Warnings for out of bound accesses for 29090 vector subscription can be enabled with `-Warray-bounds'. 29091 29092 Vector comparison is supported with standard comparison operators: 29093 `==, !=, <, <=, >, >='. Comparison operands can be vector expressions 29094 of integer-type or real-type. Comparison between integer-type vectors 29095 and real-type vectors are not supported. The result of the comparison 29096 is a vector of the same width and number of elements as the comparison 29097 operands with a signed integral element type. 29098 29099 Vectors are compared element-wise producing 0 when comparison is false 29100 and -1 (constant of the appropriate type where all bits are set) 29101 otherwise. Consider the following example. 29102 29103 typedef int v4si __attribute__ ((vector_size (16))); 29104 29105 v4si a = {1,2,3,4}; 29106 v4si b = {3,2,1,4}; 29107 v4si c; 29108 29109 c = a > b; /* The result would be {0, 0,-1, 0} */ 29110 c = a == b; /* The result would be {0,-1, 0,-1} */ 29111 29112 Vector shuffling is available using functions `__builtin_shuffle (vec, 29113 mask)' and `__builtin_shuffle (vec0, vec1, mask)'. Both functions 29114 construct a permutation of elements from one or two vectors and return 29115 a vector of the same type as the input vector(s). The MASK is an 29116 integral vector with the same width (W) and element count (N) as the 29117 output vector. 29118 29119 The elements of the input vectors are numbered in memory ordering of 29120 VEC0 beginning at 0 and VEC1 beginning at N. The elements of MASK are 29121 considered modulo N in the single-operand case and modulo 2*N in the 29122 two-operand case. 29123 29124 Consider the following example, 29125 29126 typedef int v4si __attribute__ ((vector_size (16))); 29127 29128 v4si a = {1,2,3,4}; 29129 v4si b = {5,6,7,8}; 29130 v4si mask1 = {0,1,1,3}; 29131 v4si mask2 = {0,4,2,5}; 29132 v4si res; 29133 29134 res = __builtin_shuffle (a, mask1); /* res is {1,2,2,4} */ 29135 res = __builtin_shuffle (a, b, mask2); /* res is {1,5,3,6} */ 29136 29137 Note that `__builtin_shuffle' is intentionally semantically compatible 29138 with the OpenCL `shuffle' and `shuffle2' functions. 29139 29140 You can declare variables and use them in function calls and returns, 29141 as well as in assignments and some casts. You can specify a vector 29142 type as a return type for a function. Vector types can also be used as 29143 function arguments. It is possible to cast from one vector type to 29144 another, provided they are of the same size (in fact, you can also cast 29145 vectors to and from other datatypes of the same size). 29146 29147 You cannot operate between vectors of different lengths or different 29148 signedness without a cast. 29149 29150 29151 File: gcc.info, Node: Offsetof, Next: __sync Builtins, Prev: Vector Extensions, Up: C Extensions 29152 29153 6.50 Offsetof 29154 ============= 29155 29156 GCC implements for both C and C++ a syntactic extension to implement 29157 the `offsetof' macro. 29158 29159 primary: 29160 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 29161 29162 offsetof_member_designator: 29163 `identifier' 29164 | offsetof_member_designator "." `identifier' 29165 | offsetof_member_designator "[" `expr' "]" 29166 29167 This extension is sufficient such that 29168 29169 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 29170 29171 is a suitable definition of the `offsetof' macro. In C++, TYPE may be 29172 dependent. In either case, MEMBER may consist of a single identifier, 29173 or a sequence of member accesses and array references. 29174 29175 29176 File: gcc.info, Node: __sync Builtins, Next: __atomic Builtins, Prev: Offsetof, Up: C Extensions 29177 29178 6.51 Legacy __sync Built-in Functions for Atomic Memory Access 29179 ============================================================== 29180 29181 The following built-in functions are intended to be compatible with 29182 those described in the `Intel Itanium Processor-specific Application 29183 Binary Interface', section 7.4. As such, they depart from the normal 29184 GCC practice of using the `__builtin_' prefix, and further that they 29185 are overloaded such that they work on multiple types. 29186 29187 The definition given in the Intel documentation allows only for the 29188 use of the types `int', `long', `long long' as well as their unsigned 29189 counterparts. GCC allows any integral scalar or pointer type that is 29190 1, 2, 4 or 8 bytes in length. 29191 29192 Not all operations are supported by all target processors. If a 29193 particular operation cannot be implemented on the target processor, a 29194 warning is generated and a call an external function is generated. The 29195 external function carries the same name as the built-in version, with 29196 an additional suffix `_N' where N is the size of the data type. 29197 29198 In most cases, these built-in functions are considered a "full 29199 barrier". That is, no memory operand is moved across the operation, 29200 either forward or backward. Further, instructions are issued as 29201 necessary to prevent the processor from speculating loads across the 29202 operation and from queuing stores after the operation. 29203 29204 All of the routines are described in the Intel documentation to take 29205 "an optional list of variables protected by the memory barrier". It's 29206 not clear what is meant by that; it could mean that _only_ the 29207 following variables are protected, or it could mean that these variables 29208 should in addition be protected. At present GCC ignores this list and 29209 protects all variables that are globally accessible. If in the future 29210 we make some use of this list, an empty list will continue to mean all 29211 globally accessible variables. 29212 29213 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 29214 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 29215 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 29216 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 29217 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 29218 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 29219 These built-in functions perform the operation suggested by the 29220 name, and returns the value that had previously been in memory. 29221 That is, 29222 29223 { tmp = *ptr; *ptr OP= value; return tmp; } 29224 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 29225 29226 _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' as 29227 `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & value'. 29228 29229 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 29230 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 29231 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 29232 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 29233 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 29234 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 29235 These built-in functions perform the operation suggested by the 29236 name, and return the new value. That is, 29237 29238 { *ptr OP= value; return *ptr; } 29239 { *ptr = ~(*ptr & value); return *ptr; } // nand 29240 29241 _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' as 29242 `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & value'. 29243 29244 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 29245 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 29246 These built-in functions perform an atomic compare and swap. That 29247 is, if the current value of `*PTR' is OLDVAL, then write NEWVAL 29248 into `*PTR'. 29249 29250 The "bool" version returns true if the comparison is successful and 29251 NEWVAL is written. The "val" version returns the contents of 29252 `*PTR' before the operation. 29253 29254 `__sync_synchronize (...)' 29255 This built-in function issues a full memory barrier. 29256 29257 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 29258 This built-in function, as described by Intel, is not a 29259 traditional test-and-set operation, but rather an atomic exchange 29260 operation. It writes VALUE into `*PTR', and returns the previous 29261 contents of `*PTR'. 29262 29263 Many targets have only minimal support for such locks, and do not 29264 support a full exchange operation. In this case, a target may 29265 support reduced functionality here by which the _only_ valid value 29266 to store is the immediate constant 1. The exact value actually 29267 stored in `*PTR' is implementation defined. 29268 29269 This built-in function is not a full barrier, but rather an 29270 "acquire barrier". This means that references after the operation 29271 cannot move to (or be speculated to) before the operation, but 29272 previous memory stores may not be globally visible yet, and 29273 previous memory loads may not yet be satisfied. 29274 29275 `void __sync_lock_release (TYPE *ptr, ...)' 29276 This built-in function releases the lock acquired by 29277 `__sync_lock_test_and_set'. Normally this means writing the 29278 constant 0 to `*PTR'. 29279 29280 This built-in function is not a full barrier, but rather a 29281 "release barrier". This means that all previous memory stores are 29282 globally visible, and all previous memory loads have been 29283 satisfied, but following memory reads are not prevented from being 29284 speculated to before the barrier. 29285 29286 29287 File: gcc.info, Node: __atomic Builtins, Next: x86 specific memory model extensions for transactional memory, Prev: __sync Builtins, Up: C Extensions 29288 29289 6.52 Built-in functions for memory model aware atomic operations 29290 ================================================================ 29291 29292 The following built-in functions approximately match the requirements 29293 for C++11 memory model. Many are similar to the `__sync' prefixed 29294 built-in functions, but all also have a memory model parameter. These 29295 are all identified by being prefixed with `__atomic', and most are 29296 overloaded such that they work with multiple types. 29297 29298 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8 29299 bytes in length. 16-byte integral types are also allowed if `__int128' 29300 (*note __int128::) is supported by the architecture. 29301 29302 Target architectures are encouraged to provide their own patterns for 29303 each of these built-in functions. If no target is provided, the 29304 original non-memory model set of `__sync' atomic built-in functions are 29305 utilized, along with any required synchronization fences surrounding it 29306 in order to achieve the proper behavior. Execution in this case is 29307 subject to the same restrictions as those built-in functions. 29308 29309 If there is no pattern or mechanism to provide a lock free instruction 29310 sequence, a call is made to an external routine with the same parameters 29311 to be resolved at run time. 29312 29313 The four non-arithmetic functions (load, store, exchange, and 29314 compare_exchange) all have a generic version as well. This generic 29315 version works on any data type. If the data type size maps to one of 29316 the integral sizes that may have lock free support, the generic version 29317 utilizes the lock free built-in function. Otherwise an external call 29318 is left to be resolved at run time. This external call is the same 29319 format with the addition of a `size_t' parameter inserted as the first 29320 parameter indicating the size of the object being pointed to. All 29321 objects must be the same size. 29322 29323 There are 6 different memory models that can be specified. These map 29324 to the same names in the C++11 standard. Refer there or to the GCC 29325 wiki on atomic synchronization 29326 (http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed 29327 definitions. These memory models integrate both barriers to code 29328 motion as well as synchronization requirements with other threads. 29329 These are listed in approximately ascending order of strength. It is 29330 also possible to use target specific flags for memory model flags, like 29331 Hardware Lock Elision. 29332 29333 `__ATOMIC_RELAXED' 29334 No barriers or synchronization. 29335 29336 `__ATOMIC_CONSUME' 29337 Data dependency only for both barrier and synchronization with 29338 another thread. 29339 29340 `__ATOMIC_ACQUIRE' 29341 Barrier to hoisting of code and synchronizes with release (or 29342 stronger) semantic stores from another thread. 29343 29344 `__ATOMIC_RELEASE' 29345 Barrier to sinking of code and synchronizes with acquire (or 29346 stronger) semantic loads from another thread. 29347 29348 `__ATOMIC_ACQ_REL' 29349 Full barrier in both directions and synchronizes with acquire 29350 loads and release stores in another thread. 29351 29352 `__ATOMIC_SEQ_CST' 29353 Full barrier in both directions and synchronizes with acquire 29354 loads and release stores in all threads. 29355 29356 When implementing patterns for these built-in functions, the memory 29357 model parameter can be ignored as long as the pattern implements the 29358 most restrictive `__ATOMIC_SEQ_CST' model. Any of the other memory 29359 models execute correctly with this memory model but they may not 29360 execute as efficiently as they could with a more appropriate 29361 implementation of the relaxed requirements. 29362 29363 Note that the C++11 standard allows for the memory model parameter to 29364 be determined at run time rather than at compile time. These built-in 29365 functions map any run-time value to `__ATOMIC_SEQ_CST' rather than 29366 invoke a runtime library call or inline a switch statement. This is 29367 standard compliant, safe, and the simplest approach for now. 29368 29369 The memory model parameter is a signed int, but only the lower 8 bits 29370 are reserved for the memory model. The remainder of the signed int is 29371 reserved for future use and should be 0. Use of the predefined atomic 29372 values ensures proper usage. 29373 29374 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel) 29375 This built-in function implements an atomic load operation. It 29376 returns the contents of `*PTR'. 29377 29378 The valid memory model variants are `__ATOMIC_RELAXED', 29379 `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', and `__ATOMIC_CONSUME'. 29380 29381 29382 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int 29383 memmodel) 29384 This is the generic version of an atomic load. It returns the 29385 contents of `*PTR' in `*RET'. 29386 29387 29388 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int 29389 memmodel) 29390 This built-in function implements an atomic store operation. It 29391 writes `VAL' into `*PTR'. 29392 29393 The valid memory model variants are `__ATOMIC_RELAXED', 29394 `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'. 29395 29396 29397 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int 29398 memmodel) 29399 This is the generic version of an atomic store. It stores the 29400 value of `*VAL' into `*PTR'. 29401 29402 29403 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val, 29404 int memmodel) 29405 This built-in function implements an atomic exchange operation. 29406 It writes VAL into `*PTR', and returns the previous contents of 29407 `*PTR'. 29408 29409 The valid memory model variants are `__ATOMIC_RELAXED', 29410 `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', `__ATOMIC_RELEASE', and 29411 `__ATOMIC_ACQ_REL'. 29412 29413 29414 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val, 29415 TYPE *ret, int memmodel) 29416 This is the generic version of an atomic exchange. It stores the 29417 contents of `*VAL' into `*PTR'. The original value of `*PTR' is 29418 copied into `*RET'. 29419 29420 29421 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, 29422 TYPE *expected, TYPE desired, bool weak, int 29423 success_memmodel, int failure_memmodel) 29424 This built-in function implements an atomic compare and exchange 29425 operation. This compares the contents of `*PTR' with the contents 29426 of `*EXPECTED' and if equal, writes DESIRED into `*PTR'. If they 29427 are not equal, the current contents of `*PTR' is written into 29428 `*EXPECTED'. WEAK is true for weak compare_exchange, and false 29429 for the strong variation. Many targets only offer the strong 29430 variation and ignore the parameter. When in doubt, use the strong 29431 variation. 29432 29433 True is returned if DESIRED is written into `*PTR' and the 29434 execution is considered to conform to the memory model specified 29435 by SUCCESS_MEMMODEL. There are no restrictions on what memory 29436 model can be used here. 29437 29438 False is returned otherwise, and the execution is considered to 29439 conform to FAILURE_MEMMODEL. This memory model cannot be 29440 `__ATOMIC_RELEASE' nor `__ATOMIC_ACQ_REL'. It also cannot be a 29441 stronger model than that specified by SUCCESS_MEMMODEL. 29442 29443 29444 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE 29445 *expected, TYPE *desired, bool weak, int success_memmodel, 29446 int failure_memmodel) 29447 This built-in function implements the generic version of 29448 `__atomic_compare_exchange'. The function is virtually identical 29449 to `__atomic_compare_exchange_n', except the desired value is also 29450 a pointer. 29451 29452 29453 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, 29454 int memmodel) 29455 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, 29456 int memmodel) 29457 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, 29458 int memmodel) 29459 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, 29460 int memmodel) 29461 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int 29462 memmodel) 29463 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val, 29464 int memmodel) 29465 These built-in functions perform the operation suggested by the 29466 name, and return the result of the operation. That is, 29467 29468 { *ptr OP= val; return *ptr; } 29469 29470 All memory models are valid. 29471 29472 29473 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, 29474 int memmodel) 29475 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, 29476 int memmodel) 29477 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, 29478 int memmodel) 29479 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, 29480 int memmodel) 29481 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int 29482 memmodel) 29483 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val, 29484 int memmodel) 29485 These built-in functions perform the operation suggested by the 29486 name, and return the value that had previously been in `*PTR'. 29487 That is, 29488 29489 { tmp = *ptr; *ptr OP= val; return tmp; } 29490 29491 All memory models are valid. 29492 29493 29494 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int 29495 memmodel) 29496 This built-in function performs an atomic test-and-set operation on 29497 the byte at `*PTR'. The byte is set to some implementation 29498 defined nonzero "set" value and the return value is `true' if and 29499 only if the previous contents were "set". It should be only used 29500 for operands of type `bool' or `char'. For other types only part 29501 of the value may be set. 29502 29503 All memory models are valid. 29504 29505 29506 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel) 29507 This built-in function performs an atomic clear operation on 29508 `*PTR'. After the operation, `*PTR' contains 0. It should be 29509 only used for operands of type `bool' or `char' and in conjunction 29510 with `__atomic_test_and_set'. For other types it may only clear 29511 partially. If the type is not `bool' prefer using `__atomic_store'. 29512 29513 The valid memory model variants are `__ATOMIC_RELAXED', 29514 `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'. 29515 29516 29517 -- Built-in Function: void __atomic_thread_fence (int memmodel) 29518 This built-in function acts as a synchronization fence between 29519 threads based on the specified memory model. 29520 29521 All memory orders are valid. 29522 29523 29524 -- Built-in Function: void __atomic_signal_fence (int memmodel) 29525 This built-in function acts as a synchronization fence between a 29526 thread and signal handlers based in the same thread. 29527 29528 All memory orders are valid. 29529 29530 29531 -- Built-in Function: bool __atomic_always_lock_free (size_t size, 29532 void *ptr) 29533 This built-in function returns true if objects of SIZE bytes always 29534 generate lock free atomic instructions for the target architecture. 29535 SIZE must resolve to a compile-time constant and the result also 29536 resolves to a compile-time constant. 29537 29538 PTR is an optional pointer to the object that may be used to 29539 determine alignment. A value of 0 indicates typical alignment 29540 should be used. The compiler may also ignore this parameter. 29541 29542 if (_atomic_always_lock_free (sizeof (long long), 0)) 29543 29544 29545 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void 29546 *ptr) 29547 This built-in function returns true if objects of SIZE bytes always 29548 generate lock free atomic instructions for the target 29549 architecture. If it is not known to be lock free a call is made 29550 to a runtime routine named `__atomic_is_lock_free'. 29551 29552 PTR is an optional pointer to the object that may be used to 29553 determine alignment. A value of 0 indicates typical alignment 29554 should be used. The compiler may also ignore this parameter. 29555 29556 29557 File: gcc.info, Node: x86 specific memory model extensions for transactional memory, Next: Object Size Checking, Prev: __atomic Builtins, Up: C Extensions 29558 29559 6.53 x86 specific memory model extensions for transactional memory 29560 ================================================================== 29561 29562 The i386 architecture supports additional memory ordering flags to mark 29563 lock critical sections for hardware lock elision. These must be 29564 specified in addition to an existing memory model to atomic intrinsics. 29565 29566 `__ATOMIC_HLE_ACQUIRE' 29567 Start lock elision on a lock variable. Memory model must be 29568 `__ATOMIC_ACQUIRE' or stronger. 29569 29570 `__ATOMIC_HLE_RELEASE' 29571 End lock elision on a lock variable. Memory model must be 29572 `__ATOMIC_RELEASE' or stronger. 29573 29574 When a lock acquire fails it is required for good performance to abort 29575 the transaction quickly. This can be done with a `_mm_pause' 29576 29577 #include <immintrin.h> // For _mm_pause 29578 29579 int lockvar; 29580 29581 /* Acquire lock with lock elision */ 29582 while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE)) 29583 _mm_pause(); /* Abort failed transaction */ 29584 ... 29585 /* Free lock with lock elision */ 29586 __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE); 29587 29588 29589 File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: x86 specific memory model extensions for transactional memory, Up: C Extensions 29590 29591 6.54 Object Size Checking Built-in Functions 29592 ============================================ 29593 29594 GCC implements a limited buffer overflow protection mechanism that can 29595 prevent some buffer overflow attacks. 29596 29597 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 29598 TYPE) 29599 is a built-in construct that returns a constant number of bytes 29600 from PTR to the end of the object PTR pointer points to (if known 29601 at compile time). `__builtin_object_size' never evaluates its 29602 arguments for side-effects. If there are any side-effects in 29603 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 29604 for TYPE 2 or 3. If there are multiple objects PTR can point to 29605 and all of them are known at compile time, the returned number is 29606 the maximum of remaining byte counts in those objects if TYPE & 2 29607 is 0 and minimum if nonzero. If it is not possible to determine 29608 which objects PTR points to at compile time, 29609 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 29610 1 and `(size_t) 0' for TYPE 2 or 3. 29611 29612 TYPE is an integer constant from 0 to 3. If the least significant 29613 bit is clear, objects are whole variables, if it is set, a closest 29614 surrounding subobject is considered the object a pointer points to. 29615 The second bit determines if maximum or minimum of remaining bytes 29616 is computed. 29617 29618 struct V { char buf1[10]; int b; char buf2[10]; } var; 29619 char *p = &var.buf1[1], *q = &var.b; 29620 29621 /* Here the object p points to is var. */ 29622 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 29623 /* The subobject p points to is var.buf1. */ 29624 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 29625 /* The object q points to is var. */ 29626 assert (__builtin_object_size (q, 0) 29627 == (char *) (&var + 1) - (char *) &var.b); 29628 /* The subobject q points to is var.b. */ 29629 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 29630 29631 There are built-in functions added for many common string operation 29632 functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is 29633 provided. This built-in has an additional last argument, which is the 29634 number of bytes remaining in object the DEST argument points to or 29635 `(size_t) -1' if the size is not known. 29636 29637 The built-in functions are optimized into the normal string functions 29638 like `memcpy' if the last argument is `(size_t) -1' or if it is known 29639 at compile time that the destination object will not be overflown. If 29640 the compiler can determine at compile time the object will be always 29641 overflown, it issues a warning. 29642 29643 The intended use can be e.g. 29644 29645 #undef memcpy 29646 #define bos0(dest) __builtin_object_size (dest, 0) 29647 #define memcpy(dest, src, n) \ 29648 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 29649 29650 char *volatile p; 29651 char buf[10]; 29652 /* It is unknown what object p points to, so this is optimized 29653 into plain memcpy - no checking is possible. */ 29654 memcpy (p, "abcde", n); 29655 /* Destination is known and length too. It is known at compile 29656 time there will be no overflow. */ 29657 memcpy (&buf[5], "abcde", 5); 29658 /* Destination is known, but the length is not known at compile time. 29659 This will result in __memcpy_chk call that can check for overflow 29660 at run time. */ 29661 memcpy (&buf[5], "abcde", n); 29662 /* Destination is known and it is known at compile time there will 29663 be overflow. There will be a warning and __memcpy_chk call that 29664 will abort the program at run time. */ 29665 memcpy (&buf[6], "abcde", 5); 29666 29667 Such built-in functions are provided for `memcpy', `mempcpy', 29668 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 29669 `strncat'. 29670 29671 There are also checking built-in functions for formatted output 29672 functions. 29673 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 29674 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 29675 const char *fmt, ...); 29676 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 29677 va_list ap); 29678 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 29679 const char *fmt, va_list ap); 29680 29681 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 29682 functions and can contain implementation specific flags on what 29683 additional security measures the checking function might take, such as 29684 handling `%n' differently. 29685 29686 The OS argument is the object size S points to, like in the other 29687 built-in functions. There is a small difference in the behavior 29688 though, if OS is `(size_t) -1', the built-in functions are optimized 29689 into the non-checking functions only if FLAG is 0, otherwise the 29690 checking function is called with OS argument set to `(size_t) -1'. 29691 29692 In addition to this, there are checking built-in functions 29693 `__builtin___printf_chk', `__builtin___vprintf_chk', 29694 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 29695 just one additional argument, FLAG, right before format string FMT. If 29696 the compiler is able to optimize them to `fputc' etc. functions, it 29697 does, otherwise the checking function is called and the FLAG argument 29698 passed to it. 29699 29700 29701 File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 29702 29703 6.55 Other Built-in Functions Provided by GCC 29704 ============================================= 29705 29706 GCC provides a large number of built-in functions other than the ones 29707 mentioned above. Some of these are for internal use in the processing 29708 of exceptions or variable-length argument lists and are not documented 29709 here because they may change from time to time; we do not recommend 29710 general use of these functions. 29711 29712 The remaining functions are provided for optimization purposes. 29713 29714 GCC includes built-in versions of many of the functions in the standard 29715 C library. The versions prefixed with `__builtin_' are always treated 29716 as having the same meaning as the C library function even if you 29717 specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 29718 these functions are only optimized in certain cases; if they are not 29719 optimized in a particular case, a call to the library function is 29720 emitted. 29721 29722 Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or 29723 `-std=c11'), the functions `_exit', `alloca', `bcmp', `bzero', 29724 `dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l', 29725 `exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked', 29726 `gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r', 29727 `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', 29728 `jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', 29729 `pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf', 29730 `scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32', 29731 `signbitd64', `signbitd128', `significandf', `significandl', 29732 `significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', 29733 `strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii', 29734 `y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be 29735 handled as built-in functions. All these functions have corresponding 29736 versions prefixed with `__builtin_', which may be used even in strict 29737 C90 mode. 29738 29739 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 29740 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 29741 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 29742 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 29743 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 29744 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 29745 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 29746 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 29747 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 29748 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 29749 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 29750 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 29751 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 29752 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 29753 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 29754 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 29755 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 29756 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 29757 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 29758 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 29759 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 29760 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 29761 `remainderf', `remainderl', `remainder', `remquof', `remquol', 29762 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 29763 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 29764 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 29765 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 29766 functions except in strict ISO C90 mode (`-ansi' or `-std=c90'). 29767 29768 There are also built-in versions of the ISO C99 functions `acosf', 29769 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 29770 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 29771 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 29772 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 29773 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 29774 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 29775 recognized in any mode since ISO C90 reserves these names for the 29776 purpose to which ISO C99 puts them. All these functions have 29777 corresponding versions prefixed with `__builtin_'. 29778 29779 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 29780 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 29781 `iswxdigit', `towlower' and `towupper' are handled as built-in functions 29782 except in strict ISO C90 mode (`-ansi' or `-std=c90'). 29783 29784 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 29785 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 29786 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 29787 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 29788 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 29789 `log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow', 29790 `printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf', 29791 `sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', 29792 `strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk', 29793 `strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and 29794 `vsprintf' are all recognized as built-in functions unless 29795 `-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified 29796 for an individual function). All of these functions have corresponding 29797 versions prefixed with `__builtin_'. 29798 29799 GCC provides built-in versions of the ISO C99 floating-point comparison 29800 macros that avoid raising exceptions for unordered operands. They have 29801 the same names as the standard macros ( `isgreater', `isgreaterequal', 29802 `isless', `islessequal', `islessgreater', and `isunordered') , with 29803 `__builtin_' prefixed. We intend for a library implementor to be able 29804 to simply `#define' each standard macro to its built-in equivalent. In 29805 the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign' 29806 and `isnormal' built-ins used with `__builtin_' prefixed. The `isinf' 29807 and `isnan' built-in functions appear both with and without the 29808 `__builtin_' prefix. 29809 29810 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 29811 You can use the built-in function `__builtin_types_compatible_p' to 29812 determine whether two types are the same. 29813 29814 This built-in function returns 1 if the unqualified versions of the 29815 types TYPE1 and TYPE2 (which are types, not expressions) are 29816 compatible, 0 otherwise. The result of this built-in function can 29817 be used in integer constant expressions. 29818 29819 This built-in function ignores top level qualifiers (e.g., `const', 29820 `volatile'). For example, `int' is equivalent to `const int'. 29821 29822 The type `int[]' and `int[5]' are compatible. On the other hand, 29823 `int' and `char *' are not compatible, even if the size of their 29824 types, on the particular architecture are the same. Also, the 29825 amount of pointer indirection is taken into account when 29826 determining similarity. Consequently, `short *' is not similar to 29827 `short **'. Furthermore, two types that are typedefed are 29828 considered compatible if their underlying types are compatible. 29829 29830 An `enum' type is not considered to be compatible with another 29831 `enum' type even if both are compatible with the same integer 29832 type; this is what the C standard specifies. For example, `enum 29833 {foo, bar}' is not similar to `enum {hot, dog}'. 29834 29835 You typically use this function in code whose execution varies 29836 depending on the arguments' types. For example: 29837 29838 #define foo(x) \ 29839 ({ \ 29840 typeof (x) tmp = (x); \ 29841 if (__builtin_types_compatible_p (typeof (x), long double)) \ 29842 tmp = foo_long_double (tmp); \ 29843 else if (__builtin_types_compatible_p (typeof (x), double)) \ 29844 tmp = foo_double (tmp); \ 29845 else if (__builtin_types_compatible_p (typeof (x), float)) \ 29846 tmp = foo_float (tmp); \ 29847 else \ 29848 abort (); \ 29849 tmp; \ 29850 }) 29851 29852 _Note:_ This construct is only available for C. 29853 29854 29855 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 29856 EXP2) 29857 You can use the built-in function `__builtin_choose_expr' to 29858 evaluate code depending on the value of a constant expression. 29859 This built-in function returns EXP1 if CONST_EXP, which is an 29860 integer constant expression, is nonzero. Otherwise it returns 29861 EXP2. 29862 29863 This built-in function is analogous to the `? :' operator in C, 29864 except that the expression returned has its type unaltered by 29865 promotion rules. Also, the built-in function does not evaluate 29866 the expression that is not chosen. For example, if CONST_EXP 29867 evaluates to true, EXP2 is not evaluated even if it has 29868 side-effects. 29869 29870 This built-in function can return an lvalue if the chosen argument 29871 is an lvalue. 29872 29873 If EXP1 is returned, the return type is the same as EXP1's type. 29874 Similarly, if EXP2 is returned, its return type is the same as 29875 EXP2. 29876 29877 Example: 29878 29879 #define foo(x) \ 29880 __builtin_choose_expr ( \ 29881 __builtin_types_compatible_p (typeof (x), double), \ 29882 foo_double (x), \ 29883 __builtin_choose_expr ( \ 29884 __builtin_types_compatible_p (typeof (x), float), \ 29885 foo_float (x), \ 29886 /* The void expression results in a compile-time error \ 29887 when assigning the result to something. */ \ 29888 (void)0)) 29889 29890 _Note:_ This construct is only available for C. Furthermore, the 29891 unused expression (EXP1 or EXP2 depending on the value of 29892 CONST_EXP) may still generate syntax errors. This may change in 29893 future revisions. 29894 29895 29896 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG) 29897 The built-in function `__builtin_complex' is provided for use in 29898 implementing the ISO C11 macros `CMPLXF', `CMPLX' and `CMPLXL'. 29899 REAL and IMAG must have the same type, a real binary 29900 floating-point type, and the result has the corresponding complex 29901 type with real and imaginary parts REAL and IMAG. Unlike `REAL + 29902 I * IMAG', this works even when infinities, NaNs and negative 29903 zeros are involved. 29904 29905 29906 -- Built-in Function: int __builtin_constant_p (EXP) 29907 You can use the built-in function `__builtin_constant_p' to 29908 determine if a value is known to be constant at compile time and 29909 hence that GCC can perform constant-folding on expressions 29910 involving that value. The argument of the function is the value 29911 to test. The function returns the integer 1 if the argument is 29912 known to be a compile-time constant and 0 if it is not known to be 29913 a compile-time constant. A return of 0 does not indicate that the 29914 value is _not_ a constant, but merely that GCC cannot prove it is 29915 a constant with the specified value of the `-O' option. 29916 29917 You typically use this function in an embedded application where 29918 memory is a critical resource. If you have some complex 29919 calculation, you may want it to be folded if it involves 29920 constants, but need to call a function if it does not. For 29921 example: 29922 29923 #define Scale_Value(X) \ 29924 (__builtin_constant_p (X) \ 29925 ? ((X) * SCALE + OFFSET) : Scale (X)) 29926 29927 You may use this built-in function in either a macro or an inline 29928 function. However, if you use it in an inlined function and pass 29929 an argument of the function as the argument to the built-in, GCC 29930 never returns 1 when you call the inline function with a string 29931 constant or compound literal (*note Compound Literals::) and does 29932 not return 1 when you pass a constant numeric value to the inline 29933 function unless you specify the `-O' option. 29934 29935 You may also use `__builtin_constant_p' in initializers for static 29936 data. For instance, you can write 29937 29938 static const int table[] = { 29939 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 29940 /* ... */ 29941 }; 29942 29943 This is an acceptable initializer even if EXPRESSION is not a 29944 constant expression, including the case where 29945 `__builtin_constant_p' returns 1 because EXPRESSION can be folded 29946 to a constant but EXPRESSION contains operands that are not 29947 otherwise permitted in a static initializer (for example, `0 && 29948 foo ()'). GCC must be more conservative about evaluating the 29949 built-in in this case, because it has no opportunity to perform 29950 optimization. 29951 29952 Previous versions of GCC did not accept this built-in in data 29953 initializers. The earliest version where it is completely safe is 29954 3.0.1. 29955 29956 -- Built-in Function: long __builtin_expect (long EXP, long C) 29957 You may use `__builtin_expect' to provide the compiler with branch 29958 prediction information. In general, you should prefer to use 29959 actual profile feedback for this (`-fprofile-arcs'), as 29960 programmers are notoriously bad at predicting how their programs 29961 actually perform. However, there are applications in which this 29962 data is hard to collect. 29963 29964 The return value is the value of EXP, which should be an integral 29965 expression. The semantics of the built-in are that it is expected 29966 that EXP == C. For example: 29967 29968 if (__builtin_expect (x, 0)) 29969 foo (); 29970 29971 indicates that we do not expect to call `foo', since we expect `x' 29972 to be zero. Since you are limited to integral expressions for 29973 EXP, you should use constructions such as 29974 29975 if (__builtin_expect (ptr != NULL, 1)) 29976 foo (*ptr); 29977 29978 when testing pointer or floating-point values. 29979 29980 -- Built-in Function: void __builtin_trap (void) 29981 This function causes the program to exit abnormally. GCC 29982 implements this function by using a target-dependent mechanism 29983 (such as intentionally executing an illegal instruction) or by 29984 calling `abort'. The mechanism used may vary from release to 29985 release so you should not rely on any particular implementation. 29986 29987 -- Built-in Function: void __builtin_unreachable (void) 29988 If control flow reaches the point of the `__builtin_unreachable', 29989 the program is undefined. It is useful in situations where the 29990 compiler cannot deduce the unreachability of the code. 29991 29992 One such case is immediately following an `asm' statement that 29993 either never terminates, or one that transfers control elsewhere 29994 and never returns. In this example, without the 29995 `__builtin_unreachable', GCC issues a warning that control reaches 29996 the end of a non-void function. It also generates code to return 29997 after the `asm'. 29998 29999 int f (int c, int v) 30000 { 30001 if (c) 30002 { 30003 return v; 30004 } 30005 else 30006 { 30007 asm("jmp error_handler"); 30008 __builtin_unreachable (); 30009 } 30010 } 30011 30012 Because the `asm' statement unconditionally transfers control out 30013 of the function, control never reaches the end of the function 30014 body. The `__builtin_unreachable' is in fact unreachable and 30015 communicates this fact to the compiler. 30016 30017 Another use for `__builtin_unreachable' is following a call a 30018 function that never returns but that is not declared 30019 `__attribute__((noreturn))', as in this example: 30020 30021 void function_that_never_returns (void); 30022 30023 int g (int c) 30024 { 30025 if (c) 30026 { 30027 return 1; 30028 } 30029 else 30030 { 30031 function_that_never_returns (); 30032 __builtin_unreachable (); 30033 } 30034 } 30035 30036 30037 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP, 30038 size_t ALIGN, ...) 30039 This function returns its first argument, and allows the compiler 30040 to assume that the returned pointer is at least ALIGN bytes 30041 aligned. This built-in can have either two or three arguments, if 30042 it has three, the third argument should have integer type, and if 30043 it is nonzero means misalignment offset. For example: 30044 30045 void *x = __builtin_assume_aligned (arg, 16); 30046 30047 means that the compiler can assume `x', set to `arg', is at least 30048 16-byte aligned, while: 30049 30050 void *x = __builtin_assume_aligned (arg, 32, 8); 30051 30052 means that the compiler can assume for `x', set to `arg', that 30053 `(char *) x - 8' is 32-byte aligned. 30054 30055 -- Built-in Function: int __builtin_LINE () 30056 This function is the equivalent to the preprocessor `__LINE__' 30057 macro and returns the line number of the invocation of the 30058 built-in. 30059 30060 -- Built-in Function: int __builtin_FUNCTION () 30061 This function is the equivalent to the preprocessor `__FUNCTION__' 30062 macro and returns the function name the invocation of the built-in 30063 is in. 30064 30065 -- Built-in Function: int __builtin_FILE () 30066 This function is the equivalent to the preprocessor `__FILE__' 30067 macro and returns the file name the invocation of the built-in is 30068 in. 30069 30070 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 30071 *END) 30072 This function is used to flush the processor's instruction cache 30073 for the region of memory between BEGIN inclusive and END 30074 exclusive. Some targets require that the instruction cache be 30075 flushed, after modifying memory containing code, in order to obtain 30076 deterministic behavior. 30077 30078 If the target does not require instruction cache flushes, 30079 `__builtin___clear_cache' has no effect. Otherwise either 30080 instructions are emitted in-line to clear the instruction cache or 30081 a call to the `__clear_cache' function in libgcc is made. 30082 30083 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 30084 This function is used to minimize cache-miss latency by moving 30085 data into a cache before it is accessed. You can insert calls to 30086 `__builtin_prefetch' into code for which you know addresses of 30087 data in memory that is likely to be accessed soon. If the target 30088 supports them, data prefetch instructions are generated. If the 30089 prefetch is done early enough before the access then the data will 30090 be in the cache by the time it is accessed. 30091 30092 The value of ADDR is the address of the memory to prefetch. There 30093 are two optional arguments, RW and LOCALITY. The value of RW is a 30094 compile-time constant one or zero; one means that the prefetch is 30095 preparing for a write to the memory address and zero, the default, 30096 means that the prefetch is preparing for a read. The value 30097 LOCALITY must be a compile-time constant integer between zero and 30098 three. A value of zero means that the data has no temporal 30099 locality, so it need not be left in the cache after the access. A 30100 value of three means that the data has a high degree of temporal 30101 locality and should be left in all levels of cache possible. 30102 Values of one and two mean, respectively, a low or moderate degree 30103 of temporal locality. The default is three. 30104 30105 for (i = 0; i < n; i++) 30106 { 30107 a[i] = a[i] + b[i]; 30108 __builtin_prefetch (&a[i+j], 1, 1); 30109 __builtin_prefetch (&b[i+j], 0, 1); 30110 /* ... */ 30111 } 30112 30113 Data prefetch does not generate faults if ADDR is invalid, but the 30114 address expression itself must be valid. For example, a prefetch 30115 of `p->next' does not fault if `p->next' is not a valid address, 30116 but evaluation faults if `p' is not a valid address. 30117 30118 If the target does not support data prefetch, the address 30119 expression is evaluated if it includes side effects but no other 30120 code is generated and GCC does not issue a warning. 30121 30122 -- Built-in Function: double __builtin_huge_val (void) 30123 Returns a positive infinity, if supported by the floating-point 30124 format, else `DBL_MAX'. This function is suitable for 30125 implementing the ISO C macro `HUGE_VAL'. 30126 30127 -- Built-in Function: float __builtin_huge_valf (void) 30128 Similar to `__builtin_huge_val', except the return type is `float'. 30129 30130 -- Built-in Function: long double __builtin_huge_vall (void) 30131 Similar to `__builtin_huge_val', except the return type is `long 30132 double'. 30133 30134 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 30135 int, ...) 30136 This built-in implements the C99 fpclassify functionality. The 30137 first five int arguments should be the target library's notion of 30138 the possible FP classes and are used for return values. They must 30139 be constant values and they must appear in this order: `FP_NAN', 30140 `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'. The 30141 ellipsis is for exactly one floating-point value to classify. GCC 30142 treats the last argument as type-generic, which means it does not 30143 do default promotion from float to double. 30144 30145 -- Built-in Function: double __builtin_inf (void) 30146 Similar to `__builtin_huge_val', except a warning is generated if 30147 the target floating-point format does not support infinities. 30148 30149 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 30150 Similar to `__builtin_inf', except the return type is `_Decimal32'. 30151 30152 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 30153 Similar to `__builtin_inf', except the return type is `_Decimal64'. 30154 30155 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 30156 Similar to `__builtin_inf', except the return type is 30157 `_Decimal128'. 30158 30159 -- Built-in Function: float __builtin_inff (void) 30160 Similar to `__builtin_inf', except the return type is `float'. 30161 This function is suitable for implementing the ISO C99 macro 30162 `INFINITY'. 30163 30164 -- Built-in Function: long double __builtin_infl (void) 30165 Similar to `__builtin_inf', except the return type is `long 30166 double'. 30167 30168 -- Built-in Function: int __builtin_isinf_sign (...) 30169 Similar to `isinf', except the return value is negative for an 30170 argument of `-Inf'. Note while the parameter list is an ellipsis, 30171 this function only accepts exactly one floating-point argument. 30172 GCC treats this parameter as type-generic, which means it does not 30173 do default promotion from float to double. 30174 30175 -- Built-in Function: double __builtin_nan (const char *str) 30176 This is an implementation of the ISO C99 function `nan'. 30177 30178 Since ISO C99 defines this function in terms of `strtod', which we 30179 do not implement, a description of the parsing is in order. The 30180 string is parsed as by `strtol'; that is, the base is recognized by 30181 leading `0' or `0x' prefixes. The number parsed is placed in the 30182 significand such that the least significant bit of the number is 30183 at the least significant bit of the significand. The number is 30184 truncated to fit the significand field provided. The significand 30185 is forced to be a quiet NaN. 30186 30187 This function, if given a string literal all of which would have 30188 been consumed by `strtol', is evaluated early enough that it is 30189 considered a compile-time constant. 30190 30191 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 30192 Similar to `__builtin_nan', except the return type is `_Decimal32'. 30193 30194 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 30195 Similar to `__builtin_nan', except the return type is `_Decimal64'. 30196 30197 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 30198 Similar to `__builtin_nan', except the return type is 30199 `_Decimal128'. 30200 30201 -- Built-in Function: float __builtin_nanf (const char *str) 30202 Similar to `__builtin_nan', except the return type is `float'. 30203 30204 -- Built-in Function: long double __builtin_nanl (const char *str) 30205 Similar to `__builtin_nan', except the return type is `long 30206 double'. 30207 30208 -- Built-in Function: double __builtin_nans (const char *str) 30209 Similar to `__builtin_nan', except the significand is forced to be 30210 a signaling NaN. The `nans' function is proposed by WG14 N965. 30211 30212 -- Built-in Function: float __builtin_nansf (const char *str) 30213 Similar to `__builtin_nans', except the return type is `float'. 30214 30215 -- Built-in Function: long double __builtin_nansl (const char *str) 30216 Similar to `__builtin_nans', except the return type is `long 30217 double'. 30218 30219 -- Built-in Function: int __builtin_ffs (unsigned int x) 30220 Returns one plus the index of the least significant 1-bit of X, or 30221 if X is zero, returns zero. 30222 30223 -- Built-in Function: int __builtin_clz (unsigned int x) 30224 Returns the number of leading 0-bits in X, starting at the most 30225 significant bit position. If X is 0, the result is undefined. 30226 30227 -- Built-in Function: int __builtin_ctz (unsigned int x) 30228 Returns the number of trailing 0-bits in X, starting at the least 30229 significant bit position. If X is 0, the result is undefined. 30230 30231 -- Built-in Function: int __builtin_clrsb (int x) 30232 Returns the number of leading redundant sign bits in X, i.e. the 30233 number of bits following the most significant bit that are 30234 identical to it. There are no special cases for 0 or other values. 30235 30236 -- Built-in Function: int __builtin_popcount (unsigned int x) 30237 Returns the number of 1-bits in X. 30238 30239 -- Built-in Function: int __builtin_parity (unsigned int x) 30240 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 30241 30242 -- Built-in Function: int __builtin_ffsl (unsigned long) 30243 Similar to `__builtin_ffs', except the argument type is `unsigned 30244 long'. 30245 30246 -- Built-in Function: int __builtin_clzl (unsigned long) 30247 Similar to `__builtin_clz', except the argument type is `unsigned 30248 long'. 30249 30250 -- Built-in Function: int __builtin_ctzl (unsigned long) 30251 Similar to `__builtin_ctz', except the argument type is `unsigned 30252 long'. 30253 30254 -- Built-in Function: int __builtin_clrsbl (long) 30255 Similar to `__builtin_clrsb', except the argument type is `long'. 30256 30257 -- Built-in Function: int __builtin_popcountl (unsigned long) 30258 Similar to `__builtin_popcount', except the argument type is 30259 `unsigned long'. 30260 30261 -- Built-in Function: int __builtin_parityl (unsigned long) 30262 Similar to `__builtin_parity', except the argument type is 30263 `unsigned long'. 30264 30265 -- Built-in Function: int __builtin_ffsll (unsigned long long) 30266 Similar to `__builtin_ffs', except the argument type is `unsigned 30267 long long'. 30268 30269 -- Built-in Function: int __builtin_clzll (unsigned long long) 30270 Similar to `__builtin_clz', except the argument type is `unsigned 30271 long long'. 30272 30273 -- Built-in Function: int __builtin_ctzll (unsigned long long) 30274 Similar to `__builtin_ctz', except the argument type is `unsigned 30275 long long'. 30276 30277 -- Built-in Function: int __builtin_clrsbll (long long) 30278 Similar to `__builtin_clrsb', except the argument type is `long 30279 long'. 30280 30281 -- Built-in Function: int __builtin_popcountll (unsigned long long) 30282 Similar to `__builtin_popcount', except the argument type is 30283 `unsigned long long'. 30284 30285 -- Built-in Function: int __builtin_parityll (unsigned long long) 30286 Similar to `__builtin_parity', except the argument type is 30287 `unsigned long long'. 30288 30289 -- Built-in Function: double __builtin_powi (double, int) 30290 Returns the first argument raised to the power of the second. 30291 Unlike the `pow' function no guarantees about precision and 30292 rounding are made. 30293 30294 -- Built-in Function: float __builtin_powif (float, int) 30295 Similar to `__builtin_powi', except the argument and return types 30296 are `float'. 30297 30298 -- Built-in Function: long double __builtin_powil (long double, int) 30299 Similar to `__builtin_powi', except the argument and return types 30300 are `long double'. 30301 30302 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x) 30303 Returns X with the order of the bytes reversed; for example, 30304 `0xaabb' becomes `0xbbaa'. Byte here always means exactly 8 bits. 30305 30306 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x) 30307 Similar to `__builtin_bswap16', except the argument and return 30308 types are 32 bit. 30309 30310 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x) 30311 Similar to `__builtin_bswap32', except the argument and return 30312 types are 64 bit. 30313 30314 30315 File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 30316 30317 6.56 Built-in Functions Specific to Particular Target Machines 30318 ============================================================== 30319 30320 On some target machines, GCC supports many built-in functions specific 30321 to those machines. Generally these generate calls to specific machine 30322 instructions, but allow the compiler to schedule those calls. 30323 30324 * Menu: 30325 30326 * Alpha Built-in Functions:: 30327 * ARM iWMMXt Built-in Functions:: 30328 * ARM NEON Intrinsics:: 30329 * AVR Built-in Functions:: 30330 * Blackfin Built-in Functions:: 30331 * FR-V Built-in Functions:: 30332 * X86 Built-in Functions:: 30333 * X86 transactional memory intrinsics:: 30334 * MIPS DSP Built-in Functions:: 30335 * MIPS Paired-Single Support:: 30336 * MIPS Loongson Built-in Functions:: 30337 * Other MIPS Built-in Functions:: 30338 * picoChip Built-in Functions:: 30339 * PowerPC Built-in Functions:: 30340 * PowerPC AltiVec/VSX Built-in Functions:: 30341 * PowerPC Hardware Transactional Memory Built-in Functions:: 30342 * RX Built-in Functions:: 30343 * S/390 System z Built-in Functions:: 30344 * SH Built-in Functions:: 30345 * SPARC VIS Built-in Functions:: 30346 * SPU Built-in Functions:: 30347 * TI C6X Built-in Functions:: 30348 * TILE-Gx Built-in Functions:: 30349 * TILEPro Built-in Functions:: 30350 30351 30352 File: gcc.info, Node: Alpha Built-in Functions, Next: ARM iWMMXt Built-in Functions, Up: Target Builtins 30353 30354 6.56.1 Alpha Built-in Functions 30355 ------------------------------- 30356 30357 These built-in functions are available for the Alpha family of 30358 processors, depending on the command-line switches used. 30359 30360 The following built-in functions are always available. They all 30361 generate the machine instruction that is part of the name. 30362 30363 long __builtin_alpha_implver (void) 30364 long __builtin_alpha_rpcc (void) 30365 long __builtin_alpha_amask (long) 30366 long __builtin_alpha_cmpbge (long, long) 30367 long __builtin_alpha_extbl (long, long) 30368 long __builtin_alpha_extwl (long, long) 30369 long __builtin_alpha_extll (long, long) 30370 long __builtin_alpha_extql (long, long) 30371 long __builtin_alpha_extwh (long, long) 30372 long __builtin_alpha_extlh (long, long) 30373 long __builtin_alpha_extqh (long, long) 30374 long __builtin_alpha_insbl (long, long) 30375 long __builtin_alpha_inswl (long, long) 30376 long __builtin_alpha_insll (long, long) 30377 long __builtin_alpha_insql (long, long) 30378 long __builtin_alpha_inswh (long, long) 30379 long __builtin_alpha_inslh (long, long) 30380 long __builtin_alpha_insqh (long, long) 30381 long __builtin_alpha_mskbl (long, long) 30382 long __builtin_alpha_mskwl (long, long) 30383 long __builtin_alpha_mskll (long, long) 30384 long __builtin_alpha_mskql (long, long) 30385 long __builtin_alpha_mskwh (long, long) 30386 long __builtin_alpha_msklh (long, long) 30387 long __builtin_alpha_mskqh (long, long) 30388 long __builtin_alpha_umulh (long, long) 30389 long __builtin_alpha_zap (long, long) 30390 long __builtin_alpha_zapnot (long, long) 30391 30392 The following built-in functions are always with `-mmax' or 30393 `-mcpu=CPU' where CPU is `pca56' or later. They all generate the 30394 machine instruction that is part of the name. 30395 30396 long __builtin_alpha_pklb (long) 30397 long __builtin_alpha_pkwb (long) 30398 long __builtin_alpha_unpkbl (long) 30399 long __builtin_alpha_unpkbw (long) 30400 long __builtin_alpha_minub8 (long, long) 30401 long __builtin_alpha_minsb8 (long, long) 30402 long __builtin_alpha_minuw4 (long, long) 30403 long __builtin_alpha_minsw4 (long, long) 30404 long __builtin_alpha_maxub8 (long, long) 30405 long __builtin_alpha_maxsb8 (long, long) 30406 long __builtin_alpha_maxuw4 (long, long) 30407 long __builtin_alpha_maxsw4 (long, long) 30408 long __builtin_alpha_perr (long, long) 30409 30410 The following built-in functions are always with `-mcix' or 30411 `-mcpu=CPU' where CPU is `ev67' or later. They all generate the 30412 machine instruction that is part of the name. 30413 30414 long __builtin_alpha_cttz (long) 30415 long __builtin_alpha_ctlz (long) 30416 long __builtin_alpha_ctpop (long) 30417 30418 The following built-in functions are available on systems that use the 30419 OSF/1 PALcode. Normally they invoke the `rduniq' and `wruniq' PAL 30420 calls, but when invoked with `-mtls-kernel', they invoke `rdval' and 30421 `wrval'. 30422 30423 void *__builtin_thread_pointer (void) 30424 void __builtin_set_thread_pointer (void *) 30425 30426 30427 File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: Alpha Built-in Functions, Up: Target Builtins 30428 30429 6.56.2 ARM iWMMXt Built-in Functions 30430 ------------------------------------ 30431 30432 These built-in functions are available for the ARM family of processors 30433 when the `-mcpu=iwmmxt' switch is used: 30434 30435 typedef int v2si __attribute__ ((vector_size (8))); 30436 typedef short v4hi __attribute__ ((vector_size (8))); 30437 typedef char v8qi __attribute__ ((vector_size (8))); 30438 30439 int __builtin_arm_getwcgr0 (void) 30440 void __builtin_arm_setwcgr0 (int) 30441 int __builtin_arm_getwcgr1 (void) 30442 void __builtin_arm_setwcgr1 (int) 30443 int __builtin_arm_getwcgr2 (void) 30444 void __builtin_arm_setwcgr2 (int) 30445 int __builtin_arm_getwcgr3 (void) 30446 void __builtin_arm_setwcgr3 (int) 30447 int __builtin_arm_textrmsb (v8qi, int) 30448 int __builtin_arm_textrmsh (v4hi, int) 30449 int __builtin_arm_textrmsw (v2si, int) 30450 int __builtin_arm_textrmub (v8qi, int) 30451 int __builtin_arm_textrmuh (v4hi, int) 30452 int __builtin_arm_textrmuw (v2si, int) 30453 v8qi __builtin_arm_tinsrb (v8qi, int, int) 30454 v4hi __builtin_arm_tinsrh (v4hi, int, int) 30455 v2si __builtin_arm_tinsrw (v2si, int, int) 30456 long long __builtin_arm_tmia (long long, int, int) 30457 long long __builtin_arm_tmiabb (long long, int, int) 30458 long long __builtin_arm_tmiabt (long long, int, int) 30459 long long __builtin_arm_tmiaph (long long, int, int) 30460 long long __builtin_arm_tmiatb (long long, int, int) 30461 long long __builtin_arm_tmiatt (long long, int, int) 30462 int __builtin_arm_tmovmskb (v8qi) 30463 int __builtin_arm_tmovmskh (v4hi) 30464 int __builtin_arm_tmovmskw (v2si) 30465 long long __builtin_arm_waccb (v8qi) 30466 long long __builtin_arm_wacch (v4hi) 30467 long long __builtin_arm_waccw (v2si) 30468 v8qi __builtin_arm_waddb (v8qi, v8qi) 30469 v8qi __builtin_arm_waddbss (v8qi, v8qi) 30470 v8qi __builtin_arm_waddbus (v8qi, v8qi) 30471 v4hi __builtin_arm_waddh (v4hi, v4hi) 30472 v4hi __builtin_arm_waddhss (v4hi, v4hi) 30473 v4hi __builtin_arm_waddhus (v4hi, v4hi) 30474 v2si __builtin_arm_waddw (v2si, v2si) 30475 v2si __builtin_arm_waddwss (v2si, v2si) 30476 v2si __builtin_arm_waddwus (v2si, v2si) 30477 v8qi __builtin_arm_walign (v8qi, v8qi, int) 30478 long long __builtin_arm_wand(long long, long long) 30479 long long __builtin_arm_wandn (long long, long long) 30480 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 30481 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 30482 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 30483 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 30484 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 30485 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 30486 v2si __builtin_arm_wcmpeqw (v2si, v2si) 30487 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 30488 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 30489 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 30490 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 30491 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 30492 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 30493 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 30494 long long __builtin_arm_wmacsz (v4hi, v4hi) 30495 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 30496 long long __builtin_arm_wmacuz (v4hi, v4hi) 30497 v4hi __builtin_arm_wmadds (v4hi, v4hi) 30498 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 30499 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 30500 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 30501 v2si __builtin_arm_wmaxsw (v2si, v2si) 30502 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 30503 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 30504 v2si __builtin_arm_wmaxuw (v2si, v2si) 30505 v8qi __builtin_arm_wminsb (v8qi, v8qi) 30506 v4hi __builtin_arm_wminsh (v4hi, v4hi) 30507 v2si __builtin_arm_wminsw (v2si, v2si) 30508 v8qi __builtin_arm_wminub (v8qi, v8qi) 30509 v4hi __builtin_arm_wminuh (v4hi, v4hi) 30510 v2si __builtin_arm_wminuw (v2si, v2si) 30511 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 30512 v4hi __builtin_arm_wmulul (v4hi, v4hi) 30513 v4hi __builtin_arm_wmulum (v4hi, v4hi) 30514 long long __builtin_arm_wor (long long, long long) 30515 v2si __builtin_arm_wpackdss (long long, long long) 30516 v2si __builtin_arm_wpackdus (long long, long long) 30517 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 30518 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 30519 v4hi __builtin_arm_wpackwss (v2si, v2si) 30520 v4hi __builtin_arm_wpackwus (v2si, v2si) 30521 long long __builtin_arm_wrord (long long, long long) 30522 long long __builtin_arm_wrordi (long long, int) 30523 v4hi __builtin_arm_wrorh (v4hi, long long) 30524 v4hi __builtin_arm_wrorhi (v4hi, int) 30525 v2si __builtin_arm_wrorw (v2si, long long) 30526 v2si __builtin_arm_wrorwi (v2si, int) 30527 v2si __builtin_arm_wsadb (v2si, v8qi, v8qi) 30528 v2si __builtin_arm_wsadbz (v8qi, v8qi) 30529 v2si __builtin_arm_wsadh (v2si, v4hi, v4hi) 30530 v2si __builtin_arm_wsadhz (v4hi, v4hi) 30531 v4hi __builtin_arm_wshufh (v4hi, int) 30532 long long __builtin_arm_wslld (long long, long long) 30533 long long __builtin_arm_wslldi (long long, int) 30534 v4hi __builtin_arm_wsllh (v4hi, long long) 30535 v4hi __builtin_arm_wsllhi (v4hi, int) 30536 v2si __builtin_arm_wsllw (v2si, long long) 30537 v2si __builtin_arm_wsllwi (v2si, int) 30538 long long __builtin_arm_wsrad (long long, long long) 30539 long long __builtin_arm_wsradi (long long, int) 30540 v4hi __builtin_arm_wsrah (v4hi, long long) 30541 v4hi __builtin_arm_wsrahi (v4hi, int) 30542 v2si __builtin_arm_wsraw (v2si, long long) 30543 v2si __builtin_arm_wsrawi (v2si, int) 30544 long long __builtin_arm_wsrld (long long, long long) 30545 long long __builtin_arm_wsrldi (long long, int) 30546 v4hi __builtin_arm_wsrlh (v4hi, long long) 30547 v4hi __builtin_arm_wsrlhi (v4hi, int) 30548 v2si __builtin_arm_wsrlw (v2si, long long) 30549 v2si __builtin_arm_wsrlwi (v2si, int) 30550 v8qi __builtin_arm_wsubb (v8qi, v8qi) 30551 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 30552 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 30553 v4hi __builtin_arm_wsubh (v4hi, v4hi) 30554 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 30555 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 30556 v2si __builtin_arm_wsubw (v2si, v2si) 30557 v2si __builtin_arm_wsubwss (v2si, v2si) 30558 v2si __builtin_arm_wsubwus (v2si, v2si) 30559 v4hi __builtin_arm_wunpckehsb (v8qi) 30560 v2si __builtin_arm_wunpckehsh (v4hi) 30561 long long __builtin_arm_wunpckehsw (v2si) 30562 v4hi __builtin_arm_wunpckehub (v8qi) 30563 v2si __builtin_arm_wunpckehuh (v4hi) 30564 long long __builtin_arm_wunpckehuw (v2si) 30565 v4hi __builtin_arm_wunpckelsb (v8qi) 30566 v2si __builtin_arm_wunpckelsh (v4hi) 30567 long long __builtin_arm_wunpckelsw (v2si) 30568 v4hi __builtin_arm_wunpckelub (v8qi) 30569 v2si __builtin_arm_wunpckeluh (v4hi) 30570 long long __builtin_arm_wunpckeluw (v2si) 30571 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 30572 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 30573 v2si __builtin_arm_wunpckihw (v2si, v2si) 30574 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 30575 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 30576 v2si __builtin_arm_wunpckilw (v2si, v2si) 30577 long long __builtin_arm_wxor (long long, long long) 30578 long long __builtin_arm_wzero () 30579 30580 30581 File: gcc.info, Node: ARM NEON Intrinsics, Next: AVR Built-in Functions, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 30582 30583 6.56.3 ARM NEON Intrinsics 30584 -------------------------- 30585 30586 These built-in intrinsics for the ARM Advanced SIMD extension are 30587 available when the `-mfpu=neon' switch is used: 30588 30589 6.56.3.1 Addition 30590 ................. 30591 30592 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) 30593 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 30594 30595 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) 30596 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 30597 30598 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) 30599 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 30600 30601 * int32x2_t vadd_s32 (int32x2_t, int32x2_t) 30602 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 30603 30604 * int16x4_t vadd_s16 (int16x4_t, int16x4_t) 30605 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 30606 30607 * int8x8_t vadd_s8 (int8x8_t, int8x8_t) 30608 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 30609 30610 * float32x2_t vadd_f32 (float32x2_t, float32x2_t) 30611 _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0' 30612 30613 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) 30614 30615 * int64x1_t vadd_s64 (int64x1_t, int64x1_t) 30616 30617 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) 30618 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 30619 30620 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) 30621 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 30622 30623 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) 30624 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 30625 30626 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) 30627 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 30628 30629 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) 30630 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 30631 30632 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) 30633 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 30634 30635 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) 30636 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 30637 30638 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) 30639 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 30640 30641 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) 30642 _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0' 30643 30644 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) 30645 _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0' 30646 30647 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) 30648 _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0' 30649 30650 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) 30651 _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0' 30652 30653 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) 30654 _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0' 30655 30656 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) 30657 _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0' 30658 30659 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) 30660 _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0' 30661 30662 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) 30663 _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0' 30664 30665 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) 30666 _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0' 30667 30668 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) 30669 _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0' 30670 30671 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) 30672 _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0' 30673 30674 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) 30675 _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0' 30676 30677 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) 30678 _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0' 30679 30680 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) 30681 _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0' 30682 30683 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) 30684 _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0' 30685 30686 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) 30687 _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0' 30688 30689 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) 30690 _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0' 30691 30692 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) 30693 _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0' 30694 30695 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) 30696 _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0' 30697 30698 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) 30699 _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0' 30700 30701 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) 30702 _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0' 30703 30704 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) 30705 _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0' 30706 30707 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) 30708 _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0' 30709 30710 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) 30711 _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0' 30712 30713 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) 30714 _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0' 30715 30716 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) 30717 _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0' 30718 30719 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) 30720 _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0' 30721 30722 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) 30723 _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0' 30724 30725 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) 30726 _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0' 30727 30728 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) 30729 _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0' 30730 30731 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) 30732 _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0' 30733 30734 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) 30735 _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0' 30736 30737 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) 30738 _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0' 30739 30740 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) 30741 _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0' 30742 30743 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) 30744 _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0' 30745 30746 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) 30747 _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0' 30748 30749 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) 30750 _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0' 30751 30752 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) 30753 _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0' 30754 30755 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) 30756 _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0' 30757 30758 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) 30759 _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0' 30760 30761 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) 30762 _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0' 30763 30764 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) 30765 _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0' 30766 30767 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) 30768 _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0' 30769 30770 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) 30771 _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0' 30772 30773 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) 30774 _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0' 30775 30776 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) 30777 _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0' 30778 30779 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) 30780 _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0' 30781 30782 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) 30783 _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0' 30784 30785 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) 30786 _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0' 30787 30788 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) 30789 _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0' 30790 30791 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) 30792 _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0' 30793 30794 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) 30795 _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0' 30796 30797 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) 30798 _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0' 30799 30800 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) 30801 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 30802 30803 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) 30804 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 30805 30806 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) 30807 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 30808 30809 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) 30810 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 30811 30812 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) 30813 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 30814 30815 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) 30816 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 30817 30818 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) 30819 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 30820 30821 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) 30822 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 30823 30824 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) 30825 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 30826 30827 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) 30828 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 30829 30830 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) 30831 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 30832 30833 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) 30834 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 30835 30836 6.56.3.2 Multiplication 30837 ....................... 30838 30839 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) 30840 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 30841 30842 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) 30843 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 30844 30845 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) 30846 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 30847 30848 * int32x2_t vmul_s32 (int32x2_t, int32x2_t) 30849 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 30850 30851 * int16x4_t vmul_s16 (int16x4_t, int16x4_t) 30852 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 30853 30854 * int8x8_t vmul_s8 (int8x8_t, int8x8_t) 30855 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 30856 30857 * float32x2_t vmul_f32 (float32x2_t, float32x2_t) 30858 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0' 30859 30860 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) 30861 _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0' 30862 30863 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) 30864 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 30865 30866 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) 30867 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 30868 30869 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) 30870 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 30871 30872 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) 30873 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 30874 30875 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) 30876 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 30877 30878 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) 30879 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 30880 30881 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) 30882 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0' 30883 30884 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) 30885 _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0' 30886 30887 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) 30888 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0' 30889 30890 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) 30891 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0' 30892 30893 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) 30894 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0' 30895 30896 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) 30897 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0' 30898 30899 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) 30900 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0' 30901 30902 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) 30903 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0' 30904 30905 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) 30906 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0' 30907 30908 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) 30909 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0' 30910 30911 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) 30912 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0' 30913 30914 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) 30915 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0' 30916 30917 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) 30918 _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0' 30919 30920 * int64x2_t vmull_s32 (int32x2_t, int32x2_t) 30921 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0' 30922 30923 * int32x4_t vmull_s16 (int16x4_t, int16x4_t) 30924 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0' 30925 30926 * int16x8_t vmull_s8 (int8x8_t, int8x8_t) 30927 _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0' 30928 30929 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) 30930 _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0' 30931 30932 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) 30933 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0' 30934 30935 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) 30936 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0' 30937 30938 6.56.3.3 Multiply-accumulate 30939 ............................ 30940 30941 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 30942 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 30943 30944 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 30945 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 30946 30947 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 30948 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 30949 30950 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) 30951 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 30952 30953 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) 30954 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 30955 30956 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) 30957 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 30958 30959 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) 30960 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0' 30961 30962 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 30963 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 30964 30965 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 30966 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 30967 30968 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 30969 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 30970 30971 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) 30972 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 30973 30974 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) 30975 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 30976 30977 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) 30978 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 30979 30980 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) 30981 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0' 30982 30983 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 30984 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0' 30985 30986 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 30987 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0' 30988 30989 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 30990 _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0' 30991 30992 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 30993 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0' 30994 30995 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 30996 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0' 30997 30998 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) 30999 _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0' 31000 31001 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 31002 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0' 31003 31004 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 31005 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0' 31006 31007 6.56.3.4 Multiply-subtract 31008 .......................... 31009 31010 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 31011 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 31012 31013 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 31014 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 31015 31016 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 31017 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 31018 31019 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) 31020 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 31021 31022 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) 31023 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 31024 31025 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) 31026 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 31027 31028 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) 31029 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0' 31030 31031 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 31032 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 31033 31034 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 31035 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 31036 31037 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 31038 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 31039 31040 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) 31041 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 31042 31043 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) 31044 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 31045 31046 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) 31047 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 31048 31049 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) 31050 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0' 31051 31052 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 31053 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0' 31054 31055 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 31056 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0' 31057 31058 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 31059 _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0' 31060 31061 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 31062 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0' 31063 31064 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 31065 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0' 31066 31067 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) 31068 _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0' 31069 31070 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 31071 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0' 31072 31073 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 31074 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0' 31075 31076 6.56.3.5 Fused-multiply-accumulate 31077 .................................. 31078 31079 * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t) 31080 _Form of expected instruction(s):_ `vfma.f32 D0, D0, D0' 31081 31082 * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t) 31083 _Form of expected instruction(s):_ `vfma.f32 Q0, Q0, Q0' 31084 31085 6.56.3.6 Fused-multiply-subtract 31086 ................................ 31087 31088 * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t) 31089 _Form of expected instruction(s):_ `vfms.f32 D0, D0, D0' 31090 31091 * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t) 31092 _Form of expected instruction(s):_ `vfms.f32 Q0, Q0, Q0' 31093 31094 6.56.3.7 Round to integral (to nearest, ties to even) 31095 ..................................................... 31096 31097 * float32x2_t vrndn_f32 (float32x2_t) 31098 _Form of expected instruction(s):_ `vrintn.f32 D0, D0' 31099 31100 * float32x4_t vrndqn_f32 (float32x4_t) 31101 _Form of expected instruction(s):_ `vrintn.f32 Q0, Q0' 31102 31103 6.56.3.8 Round to integral (to nearest, ties away from zero) 31104 ............................................................ 31105 31106 * float32x2_t vrnda_f32 (float32x2_t) 31107 _Form of expected instruction(s):_ `vrinta.f32 D0, D0' 31108 31109 * float32x4_t vrndqa_f32 (float32x4_t) 31110 _Form of expected instruction(s):_ `vrinta.f32 Q0, Q0' 31111 31112 6.56.3.9 Round to integral (towards +Inf) 31113 ......................................... 31114 31115 * float32x2_t vrndp_f32 (float32x2_t) 31116 _Form of expected instruction(s):_ `vrintp.f32 D0, D0' 31117 31118 * float32x4_t vrndqp_f32 (float32x4_t) 31119 _Form of expected instruction(s):_ `vrintp.f32 Q0, Q0' 31120 31121 6.56.3.10 Round to integral (towards -Inf) 31122 .......................................... 31123 31124 * float32x2_t vrndm_f32 (float32x2_t) 31125 _Form of expected instruction(s):_ `vrintm.f32 D0, D0' 31126 31127 * float32x4_t vrndqm_f32 (float32x4_t) 31128 _Form of expected instruction(s):_ `vrintm.f32 Q0, Q0' 31129 31130 6.56.3.11 Round to integral (towards 0) 31131 ....................................... 31132 31133 * float32x2_t vrnd_f32 (float32x2_t) 31134 _Form of expected instruction(s):_ `vrintz.f32 D0, D0' 31135 31136 * float32x4_t vrndq_f32 (float32x4_t) 31137 _Form of expected instruction(s):_ `vrintz.f32 Q0, Q0' 31138 31139 6.56.3.12 Subtraction 31140 ..................... 31141 31142 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) 31143 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 31144 31145 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) 31146 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 31147 31148 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) 31149 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 31150 31151 * int32x2_t vsub_s32 (int32x2_t, int32x2_t) 31152 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 31153 31154 * int16x4_t vsub_s16 (int16x4_t, int16x4_t) 31155 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 31156 31157 * int8x8_t vsub_s8 (int8x8_t, int8x8_t) 31158 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 31159 31160 * float32x2_t vsub_f32 (float32x2_t, float32x2_t) 31161 _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0' 31162 31163 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) 31164 31165 * int64x1_t vsub_s64 (int64x1_t, int64x1_t) 31166 31167 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) 31168 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 31169 31170 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) 31171 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 31172 31173 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) 31174 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 31175 31176 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) 31177 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 31178 31179 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) 31180 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 31181 31182 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) 31183 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 31184 31185 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) 31186 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 31187 31188 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) 31189 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 31190 31191 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) 31192 _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0' 31193 31194 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) 31195 _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0' 31196 31197 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) 31198 _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0' 31199 31200 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) 31201 _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0' 31202 31203 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) 31204 _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0' 31205 31206 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) 31207 _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0' 31208 31209 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) 31210 _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0' 31211 31212 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) 31213 _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0' 31214 31215 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) 31216 _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0' 31217 31218 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) 31219 _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0' 31220 31221 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) 31222 _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0' 31223 31224 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) 31225 _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0' 31226 31227 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) 31228 _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0' 31229 31230 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) 31231 _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0' 31232 31233 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) 31234 _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0' 31235 31236 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) 31237 _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0' 31238 31239 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) 31240 _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0' 31241 31242 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) 31243 _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0' 31244 31245 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) 31246 _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0' 31247 31248 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) 31249 _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0' 31250 31251 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) 31252 _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0' 31253 31254 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) 31255 _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0' 31256 31257 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) 31258 _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0' 31259 31260 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) 31261 _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0' 31262 31263 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) 31264 _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0' 31265 31266 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) 31267 _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0' 31268 31269 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) 31270 _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0' 31271 31272 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) 31273 _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0' 31274 31275 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) 31276 _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0' 31277 31278 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) 31279 _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0' 31280 31281 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) 31282 _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0' 31283 31284 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) 31285 _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0' 31286 31287 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) 31288 _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0' 31289 31290 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) 31291 _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0' 31292 31293 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) 31294 _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0' 31295 31296 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) 31297 _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0' 31298 31299 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) 31300 _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0' 31301 31302 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) 31303 _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0' 31304 31305 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) 31306 _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0' 31307 31308 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) 31309 _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0' 31310 31311 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) 31312 _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0' 31313 31314 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) 31315 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 31316 31317 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) 31318 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 31319 31320 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) 31321 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 31322 31323 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) 31324 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 31325 31326 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) 31327 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 31328 31329 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) 31330 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 31331 31332 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) 31333 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 31334 31335 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) 31336 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 31337 31338 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) 31339 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 31340 31341 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) 31342 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 31343 31344 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) 31345 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 31346 31347 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) 31348 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 31349 31350 6.56.3.13 Comparison (equal-to) 31351 ............................... 31352 31353 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) 31354 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 31355 31356 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) 31357 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 31358 31359 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) 31360 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 31361 31362 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) 31363 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 31364 31365 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) 31366 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 31367 31368 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) 31369 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 31370 31371 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) 31372 _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0' 31373 31374 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) 31375 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 31376 31377 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) 31378 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 31379 31380 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) 31381 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 31382 31383 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) 31384 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 31385 31386 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) 31387 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 31388 31389 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) 31390 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 31391 31392 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) 31393 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 31394 31395 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) 31396 _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0' 31397 31398 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) 31399 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 31400 31401 6.56.3.14 Comparison (greater-than-or-equal-to) 31402 ............................................... 31403 31404 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) 31405 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 31406 31407 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) 31408 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 31409 31410 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) 31411 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 31412 31413 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) 31414 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 31415 31416 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) 31417 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 31418 31419 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) 31420 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 31421 31422 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) 31423 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 31424 31425 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) 31426 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 31427 31428 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) 31429 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 31430 31431 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) 31432 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 31433 31434 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) 31435 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 31436 31437 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) 31438 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 31439 31440 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) 31441 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 31442 31443 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) 31444 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 31445 31446 6.56.3.15 Comparison (less-than-or-equal-to) 31447 ............................................ 31448 31449 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) 31450 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 31451 31452 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) 31453 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 31454 31455 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) 31456 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 31457 31458 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) 31459 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 31460 31461 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) 31462 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 31463 31464 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) 31465 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 31466 31467 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) 31468 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 31469 31470 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) 31471 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 31472 31473 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) 31474 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 31475 31476 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) 31477 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 31478 31479 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) 31480 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 31481 31482 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) 31483 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 31484 31485 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) 31486 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 31487 31488 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) 31489 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 31490 31491 6.56.3.16 Comparison (greater-than) 31492 ................................... 31493 31494 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) 31495 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 31496 31497 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) 31498 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 31499 31500 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) 31501 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 31502 31503 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) 31504 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 31505 31506 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) 31507 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 31508 31509 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) 31510 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 31511 31512 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) 31513 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 31514 31515 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) 31516 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 31517 31518 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) 31519 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 31520 31521 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) 31522 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 31523 31524 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) 31525 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 31526 31527 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) 31528 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 31529 31530 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) 31531 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 31532 31533 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) 31534 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 31535 31536 6.56.3.17 Comparison (less-than) 31537 ................................ 31538 31539 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) 31540 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 31541 31542 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) 31543 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 31544 31545 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) 31546 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 31547 31548 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) 31549 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 31550 31551 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) 31552 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 31553 31554 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) 31555 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 31556 31557 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) 31558 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 31559 31560 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) 31561 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 31562 31563 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) 31564 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 31565 31566 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) 31567 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 31568 31569 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) 31570 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 31571 31572 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) 31573 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 31574 31575 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) 31576 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 31577 31578 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) 31579 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 31580 31581 6.56.3.18 Comparison (absolute greater-than-or-equal-to) 31582 ........................................................ 31583 31584 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) 31585 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 31586 31587 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) 31588 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 31589 31590 6.56.3.19 Comparison (absolute less-than-or-equal-to) 31591 ..................................................... 31592 31593 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) 31594 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 31595 31596 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) 31597 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 31598 31599 6.56.3.20 Comparison (absolute greater-than) 31600 ............................................ 31601 31602 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) 31603 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 31604 31605 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) 31606 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 31607 31608 6.56.3.21 Comparison (absolute less-than) 31609 ......................................... 31610 31611 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) 31612 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 31613 31614 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) 31615 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 31616 31617 6.56.3.22 Test bits 31618 ................... 31619 31620 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) 31621 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 31622 31623 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) 31624 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 31625 31626 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) 31627 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 31628 31629 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) 31630 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 31631 31632 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) 31633 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 31634 31635 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) 31636 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 31637 31638 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) 31639 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 31640 31641 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) 31642 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 31643 31644 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) 31645 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 31646 31647 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) 31648 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 31649 31650 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) 31651 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 31652 31653 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) 31654 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 31655 31656 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) 31657 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 31658 31659 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) 31660 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 31661 31662 6.56.3.23 Absolute difference 31663 ............................. 31664 31665 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) 31666 _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0' 31667 31668 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) 31669 _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0' 31670 31671 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) 31672 _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0' 31673 31674 * int32x2_t vabd_s32 (int32x2_t, int32x2_t) 31675 _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0' 31676 31677 * int16x4_t vabd_s16 (int16x4_t, int16x4_t) 31678 _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0' 31679 31680 * int8x8_t vabd_s8 (int8x8_t, int8x8_t) 31681 _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0' 31682 31683 * float32x2_t vabd_f32 (float32x2_t, float32x2_t) 31684 _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0' 31685 31686 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) 31687 _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0' 31688 31689 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) 31690 _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0' 31691 31692 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) 31693 _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0' 31694 31695 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) 31696 _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0' 31697 31698 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) 31699 _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0' 31700 31701 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) 31702 _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0' 31703 31704 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) 31705 _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0' 31706 31707 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) 31708 _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0' 31709 31710 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) 31711 _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0' 31712 31713 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) 31714 _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0' 31715 31716 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) 31717 _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0' 31718 31719 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) 31720 _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0' 31721 31722 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) 31723 _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0' 31724 31725 6.56.3.24 Absolute difference and accumulate 31726 ............................................ 31727 31728 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 31729 _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0' 31730 31731 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 31732 _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0' 31733 31734 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 31735 _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0' 31736 31737 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) 31738 _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0' 31739 31740 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) 31741 _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0' 31742 31743 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) 31744 _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0' 31745 31746 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 31747 _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0' 31748 31749 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 31750 _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0' 31751 31752 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 31753 _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0' 31754 31755 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) 31756 _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0' 31757 31758 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) 31759 _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0' 31760 31761 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) 31762 _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0' 31763 31764 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 31765 _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0' 31766 31767 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 31768 _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0' 31769 31770 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 31771 _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0' 31772 31773 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) 31774 _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0' 31775 31776 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) 31777 _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0' 31778 31779 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) 31780 _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0' 31781 31782 6.56.3.25 Maximum 31783 ................. 31784 31785 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) 31786 _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0' 31787 31788 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) 31789 _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0' 31790 31791 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) 31792 _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0' 31793 31794 * int32x2_t vmax_s32 (int32x2_t, int32x2_t) 31795 _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0' 31796 31797 * int16x4_t vmax_s16 (int16x4_t, int16x4_t) 31798 _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0' 31799 31800 * int8x8_t vmax_s8 (int8x8_t, int8x8_t) 31801 _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0' 31802 31803 * float32x2_t vmax_f32 (float32x2_t, float32x2_t) 31804 _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0' 31805 31806 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) 31807 _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0' 31808 31809 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) 31810 _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0' 31811 31812 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) 31813 _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0' 31814 31815 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) 31816 _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0' 31817 31818 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) 31819 _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0' 31820 31821 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) 31822 _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0' 31823 31824 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) 31825 _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0' 31826 31827 6.56.3.26 Minimum 31828 ................. 31829 31830 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) 31831 _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0' 31832 31833 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) 31834 _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0' 31835 31836 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) 31837 _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0' 31838 31839 * int32x2_t vmin_s32 (int32x2_t, int32x2_t) 31840 _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0' 31841 31842 * int16x4_t vmin_s16 (int16x4_t, int16x4_t) 31843 _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0' 31844 31845 * int8x8_t vmin_s8 (int8x8_t, int8x8_t) 31846 _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0' 31847 31848 * float32x2_t vmin_f32 (float32x2_t, float32x2_t) 31849 _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0' 31850 31851 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) 31852 _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0' 31853 31854 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) 31855 _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0' 31856 31857 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) 31858 _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0' 31859 31860 * int32x4_t vminq_s32 (int32x4_t, int32x4_t) 31861 _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0' 31862 31863 * int16x8_t vminq_s16 (int16x8_t, int16x8_t) 31864 _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0' 31865 31866 * int8x16_t vminq_s8 (int8x16_t, int8x16_t) 31867 _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0' 31868 31869 * float32x4_t vminq_f32 (float32x4_t, float32x4_t) 31870 _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0' 31871 31872 6.56.3.27 Pairwise add 31873 ...................... 31874 31875 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) 31876 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 31877 31878 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) 31879 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 31880 31881 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) 31882 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 31883 31884 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) 31885 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 31886 31887 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) 31888 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 31889 31890 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) 31891 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 31892 31893 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) 31894 _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0' 31895 31896 * uint64x1_t vpaddl_u32 (uint32x2_t) 31897 _Form of expected instruction(s):_ `vpaddl.u32 D0, D0' 31898 31899 * uint32x2_t vpaddl_u16 (uint16x4_t) 31900 _Form of expected instruction(s):_ `vpaddl.u16 D0, D0' 31901 31902 * uint16x4_t vpaddl_u8 (uint8x8_t) 31903 _Form of expected instruction(s):_ `vpaddl.u8 D0, D0' 31904 31905 * int64x1_t vpaddl_s32 (int32x2_t) 31906 _Form of expected instruction(s):_ `vpaddl.s32 D0, D0' 31907 31908 * int32x2_t vpaddl_s16 (int16x4_t) 31909 _Form of expected instruction(s):_ `vpaddl.s16 D0, D0' 31910 31911 * int16x4_t vpaddl_s8 (int8x8_t) 31912 _Form of expected instruction(s):_ `vpaddl.s8 D0, D0' 31913 31914 * uint64x2_t vpaddlq_u32 (uint32x4_t) 31915 _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0' 31916 31917 * uint32x4_t vpaddlq_u16 (uint16x8_t) 31918 _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0' 31919 31920 * uint16x8_t vpaddlq_u8 (uint8x16_t) 31921 _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0' 31922 31923 * int64x2_t vpaddlq_s32 (int32x4_t) 31924 _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0' 31925 31926 * int32x4_t vpaddlq_s16 (int16x8_t) 31927 _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0' 31928 31929 * int16x8_t vpaddlq_s8 (int8x16_t) 31930 _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0' 31931 31932 6.56.3.28 Pairwise add, single_opcode widen and accumulate 31933 .......................................................... 31934 31935 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) 31936 _Form of expected instruction(s):_ `vpadal.u32 D0, D0' 31937 31938 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) 31939 _Form of expected instruction(s):_ `vpadal.u16 D0, D0' 31940 31941 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) 31942 _Form of expected instruction(s):_ `vpadal.u8 D0, D0' 31943 31944 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) 31945 _Form of expected instruction(s):_ `vpadal.s32 D0, D0' 31946 31947 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) 31948 _Form of expected instruction(s):_ `vpadal.s16 D0, D0' 31949 31950 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) 31951 _Form of expected instruction(s):_ `vpadal.s8 D0, D0' 31952 31953 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) 31954 _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0' 31955 31956 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) 31957 _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0' 31958 31959 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) 31960 _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0' 31961 31962 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) 31963 _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0' 31964 31965 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) 31966 _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0' 31967 31968 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) 31969 _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0' 31970 31971 6.56.3.29 Folding maximum 31972 ......................... 31973 31974 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) 31975 _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0' 31976 31977 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) 31978 _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0' 31979 31980 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) 31981 _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0' 31982 31983 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) 31984 _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0' 31985 31986 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) 31987 _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0' 31988 31989 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) 31990 _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0' 31991 31992 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) 31993 _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0' 31994 31995 6.56.3.30 Folding minimum 31996 ......................... 31997 31998 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) 31999 _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0' 32000 32001 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) 32002 _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0' 32003 32004 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) 32005 _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0' 32006 32007 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) 32008 _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0' 32009 32010 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) 32011 _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0' 32012 32013 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) 32014 _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0' 32015 32016 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) 32017 _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0' 32018 32019 6.56.3.31 Reciprocal step 32020 ......................... 32021 32022 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) 32023 _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0' 32024 32025 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) 32026 _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0' 32027 32028 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) 32029 _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0' 32030 32031 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) 32032 _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0' 32033 32034 6.56.3.32 Vector shift left 32035 ........................... 32036 32037 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) 32038 _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0' 32039 32040 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) 32041 _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0' 32042 32043 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) 32044 _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0' 32045 32046 * int32x2_t vshl_s32 (int32x2_t, int32x2_t) 32047 _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0' 32048 32049 * int16x4_t vshl_s16 (int16x4_t, int16x4_t) 32050 _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0' 32051 32052 * int8x8_t vshl_s8 (int8x8_t, int8x8_t) 32053 _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0' 32054 32055 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) 32056 _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0' 32057 32058 * int64x1_t vshl_s64 (int64x1_t, int64x1_t) 32059 _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0' 32060 32061 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) 32062 _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0' 32063 32064 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) 32065 _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0' 32066 32067 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) 32068 _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0' 32069 32070 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) 32071 _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0' 32072 32073 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) 32074 _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0' 32075 32076 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) 32077 _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0' 32078 32079 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) 32080 _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0' 32081 32082 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) 32083 _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0' 32084 32085 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) 32086 _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0' 32087 32088 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) 32089 _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0' 32090 32091 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) 32092 _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0' 32093 32094 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) 32095 _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0' 32096 32097 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) 32098 _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0' 32099 32100 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) 32101 _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0' 32102 32103 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) 32104 _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0' 32105 32106 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) 32107 _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0' 32108 32109 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) 32110 _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0' 32111 32112 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) 32113 _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0' 32114 32115 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) 32116 _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0' 32117 32118 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) 32119 _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0' 32120 32121 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) 32122 _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0' 32123 32124 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) 32125 _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0' 32126 32127 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) 32128 _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0' 32129 32130 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) 32131 _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0' 32132 32133 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) 32134 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0' 32135 32136 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) 32137 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0' 32138 32139 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) 32140 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0' 32141 32142 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) 32143 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0' 32144 32145 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) 32146 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0' 32147 32148 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) 32149 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0' 32150 32151 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) 32152 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0' 32153 32154 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) 32155 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0' 32156 32157 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) 32158 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0' 32159 32160 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) 32161 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0' 32162 32163 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) 32164 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0' 32165 32166 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) 32167 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0' 32168 32169 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) 32170 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0' 32171 32172 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) 32173 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0' 32174 32175 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) 32176 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0' 32177 32178 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) 32179 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0' 32180 32181 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) 32182 _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0' 32183 32184 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) 32185 _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0' 32186 32187 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) 32188 _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0' 32189 32190 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) 32191 _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0' 32192 32193 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) 32194 _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0' 32195 32196 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) 32197 _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0' 32198 32199 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) 32200 _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0' 32201 32202 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) 32203 _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0' 32204 32205 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) 32206 _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0' 32207 32208 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) 32209 _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0' 32210 32211 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) 32212 _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0' 32213 32214 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) 32215 _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0' 32216 32217 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) 32218 _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0' 32219 32220 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) 32221 _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0' 32222 32223 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) 32224 _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0' 32225 32226 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) 32227 _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0' 32228 32229 6.56.3.33 Vector shift left by constant 32230 ....................................... 32231 32232 * uint32x2_t vshl_n_u32 (uint32x2_t, const int) 32233 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 32234 32235 * uint16x4_t vshl_n_u16 (uint16x4_t, const int) 32236 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 32237 32238 * uint8x8_t vshl_n_u8 (uint8x8_t, const int) 32239 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 32240 32241 * int32x2_t vshl_n_s32 (int32x2_t, const int) 32242 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 32243 32244 * int16x4_t vshl_n_s16 (int16x4_t, const int) 32245 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 32246 32247 * int8x8_t vshl_n_s8 (int8x8_t, const int) 32248 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 32249 32250 * uint64x1_t vshl_n_u64 (uint64x1_t, const int) 32251 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 32252 32253 * int64x1_t vshl_n_s64 (int64x1_t, const int) 32254 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 32255 32256 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) 32257 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 32258 32259 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) 32260 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 32261 32262 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) 32263 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 32264 32265 * int32x4_t vshlq_n_s32 (int32x4_t, const int) 32266 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 32267 32268 * int16x8_t vshlq_n_s16 (int16x8_t, const int) 32269 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 32270 32271 * int8x16_t vshlq_n_s8 (int8x16_t, const int) 32272 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 32273 32274 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) 32275 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 32276 32277 * int64x2_t vshlq_n_s64 (int64x2_t, const int) 32278 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 32279 32280 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) 32281 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0' 32282 32283 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) 32284 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0' 32285 32286 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) 32287 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0' 32288 32289 * int32x2_t vqshl_n_s32 (int32x2_t, const int) 32290 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0' 32291 32292 * int16x4_t vqshl_n_s16 (int16x4_t, const int) 32293 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0' 32294 32295 * int8x8_t vqshl_n_s8 (int8x8_t, const int) 32296 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0' 32297 32298 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) 32299 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0' 32300 32301 * int64x1_t vqshl_n_s64 (int64x1_t, const int) 32302 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0' 32303 32304 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) 32305 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0' 32306 32307 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) 32308 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0' 32309 32310 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) 32311 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0' 32312 32313 * int32x4_t vqshlq_n_s32 (int32x4_t, const int) 32314 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0' 32315 32316 * int16x8_t vqshlq_n_s16 (int16x8_t, const int) 32317 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0' 32318 32319 * int8x16_t vqshlq_n_s8 (int8x16_t, const int) 32320 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0' 32321 32322 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) 32323 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0' 32324 32325 * int64x2_t vqshlq_n_s64 (int64x2_t, const int) 32326 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0' 32327 32328 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) 32329 _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0' 32330 32331 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) 32332 _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0' 32333 32334 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) 32335 _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0' 32336 32337 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) 32338 _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0' 32339 32340 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) 32341 _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0' 32342 32343 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) 32344 _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0' 32345 32346 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) 32347 _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0' 32348 32349 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) 32350 _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0' 32351 32352 * uint64x2_t vshll_n_u32 (uint32x2_t, const int) 32353 _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0' 32354 32355 * uint32x4_t vshll_n_u16 (uint16x4_t, const int) 32356 _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0' 32357 32358 * uint16x8_t vshll_n_u8 (uint8x8_t, const int) 32359 _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0' 32360 32361 * int64x2_t vshll_n_s32 (int32x2_t, const int) 32362 _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0' 32363 32364 * int32x4_t vshll_n_s16 (int16x4_t, const int) 32365 _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0' 32366 32367 * int16x8_t vshll_n_s8 (int8x8_t, const int) 32368 _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0' 32369 32370 6.56.3.34 Vector shift right by constant 32371 ........................................ 32372 32373 * uint32x2_t vshr_n_u32 (uint32x2_t, const int) 32374 _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0' 32375 32376 * uint16x4_t vshr_n_u16 (uint16x4_t, const int) 32377 _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0' 32378 32379 * uint8x8_t vshr_n_u8 (uint8x8_t, const int) 32380 _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0' 32381 32382 * int32x2_t vshr_n_s32 (int32x2_t, const int) 32383 _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0' 32384 32385 * int16x4_t vshr_n_s16 (int16x4_t, const int) 32386 _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0' 32387 32388 * int8x8_t vshr_n_s8 (int8x8_t, const int) 32389 _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0' 32390 32391 * uint64x1_t vshr_n_u64 (uint64x1_t, const int) 32392 _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0' 32393 32394 * int64x1_t vshr_n_s64 (int64x1_t, const int) 32395 _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0' 32396 32397 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) 32398 _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0' 32399 32400 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) 32401 _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0' 32402 32403 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) 32404 _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0' 32405 32406 * int32x4_t vshrq_n_s32 (int32x4_t, const int) 32407 _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0' 32408 32409 * int16x8_t vshrq_n_s16 (int16x8_t, const int) 32410 _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0' 32411 32412 * int8x16_t vshrq_n_s8 (int8x16_t, const int) 32413 _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0' 32414 32415 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) 32416 _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0' 32417 32418 * int64x2_t vshrq_n_s64 (int64x2_t, const int) 32419 _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0' 32420 32421 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) 32422 _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0' 32423 32424 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) 32425 _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0' 32426 32427 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) 32428 _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0' 32429 32430 * int32x2_t vrshr_n_s32 (int32x2_t, const int) 32431 _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0' 32432 32433 * int16x4_t vrshr_n_s16 (int16x4_t, const int) 32434 _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0' 32435 32436 * int8x8_t vrshr_n_s8 (int8x8_t, const int) 32437 _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0' 32438 32439 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) 32440 _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0' 32441 32442 * int64x1_t vrshr_n_s64 (int64x1_t, const int) 32443 _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0' 32444 32445 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) 32446 _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0' 32447 32448 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) 32449 _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0' 32450 32451 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) 32452 _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0' 32453 32454 * int32x4_t vrshrq_n_s32 (int32x4_t, const int) 32455 _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0' 32456 32457 * int16x8_t vrshrq_n_s16 (int16x8_t, const int) 32458 _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0' 32459 32460 * int8x16_t vrshrq_n_s8 (int8x16_t, const int) 32461 _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0' 32462 32463 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) 32464 _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0' 32465 32466 * int64x2_t vrshrq_n_s64 (int64x2_t, const int) 32467 _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0' 32468 32469 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) 32470 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 32471 32472 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) 32473 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 32474 32475 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) 32476 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 32477 32478 * int32x2_t vshrn_n_s64 (int64x2_t, const int) 32479 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 32480 32481 * int16x4_t vshrn_n_s32 (int32x4_t, const int) 32482 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 32483 32484 * int8x8_t vshrn_n_s16 (int16x8_t, const int) 32485 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 32486 32487 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) 32488 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 32489 32490 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) 32491 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 32492 32493 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) 32494 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 32495 32496 * int32x2_t vrshrn_n_s64 (int64x2_t, const int) 32497 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 32498 32499 * int16x4_t vrshrn_n_s32 (int32x4_t, const int) 32500 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 32501 32502 * int8x8_t vrshrn_n_s16 (int16x8_t, const int) 32503 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 32504 32505 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) 32506 _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0' 32507 32508 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) 32509 _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0' 32510 32511 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) 32512 _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0' 32513 32514 * int32x2_t vqshrn_n_s64 (int64x2_t, const int) 32515 _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0' 32516 32517 * int16x4_t vqshrn_n_s32 (int32x4_t, const int) 32518 _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0' 32519 32520 * int8x8_t vqshrn_n_s16 (int16x8_t, const int) 32521 _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0' 32522 32523 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) 32524 _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0' 32525 32526 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) 32527 _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0' 32528 32529 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) 32530 _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0' 32531 32532 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) 32533 _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0' 32534 32535 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) 32536 _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0' 32537 32538 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) 32539 _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0' 32540 32541 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) 32542 _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0' 32543 32544 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) 32545 _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0' 32546 32547 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) 32548 _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0' 32549 32550 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) 32551 _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0' 32552 32553 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) 32554 _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0' 32555 32556 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) 32557 _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0' 32558 32559 6.56.3.35 Vector shift right by constant and accumulate 32560 ....................................................... 32561 32562 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) 32563 _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0' 32564 32565 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) 32566 _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0' 32567 32568 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) 32569 _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0' 32570 32571 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) 32572 _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0' 32573 32574 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) 32575 _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0' 32576 32577 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) 32578 _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0' 32579 32580 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) 32581 _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0' 32582 32583 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) 32584 _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0' 32585 32586 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 32587 _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0' 32588 32589 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 32590 _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0' 32591 32592 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 32593 _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0' 32594 32595 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) 32596 _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0' 32597 32598 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) 32599 _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0' 32600 32601 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) 32602 _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0' 32603 32604 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 32605 _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0' 32606 32607 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) 32608 _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0' 32609 32610 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) 32611 _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0' 32612 32613 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) 32614 _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0' 32615 32616 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) 32617 _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0' 32618 32619 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) 32620 _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0' 32621 32622 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) 32623 _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0' 32624 32625 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) 32626 _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0' 32627 32628 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) 32629 _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0' 32630 32631 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) 32632 _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0' 32633 32634 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 32635 _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0' 32636 32637 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 32638 _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0' 32639 32640 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 32641 _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0' 32642 32643 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) 32644 _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0' 32645 32646 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) 32647 _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0' 32648 32649 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) 32650 _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0' 32651 32652 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 32653 _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0' 32654 32655 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) 32656 _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0' 32657 32658 6.56.3.36 Vector shift right and insert 32659 ....................................... 32660 32661 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) 32662 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 32663 32664 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) 32665 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 32666 32667 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) 32668 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 32669 32670 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) 32671 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 32672 32673 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) 32674 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 32675 32676 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) 32677 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 32678 32679 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) 32680 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 32681 32682 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) 32683 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 32684 32685 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) 32686 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 32687 32688 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) 32689 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 32690 32691 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) 32692 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 32693 32694 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) 32695 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 32696 32697 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) 32698 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 32699 32700 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) 32701 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 32702 32703 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) 32704 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 32705 32706 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) 32707 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 32708 32709 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) 32710 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 32711 32712 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) 32713 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 32714 32715 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) 32716 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 32717 32718 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) 32719 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 32720 32721 6.56.3.37 Vector shift left and insert 32722 ...................................... 32723 32724 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) 32725 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 32726 32727 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) 32728 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 32729 32730 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) 32731 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 32732 32733 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) 32734 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 32735 32736 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) 32737 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 32738 32739 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) 32740 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 32741 32742 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) 32743 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 32744 32745 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) 32746 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 32747 32748 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) 32749 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 32750 32751 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) 32752 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 32753 32754 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) 32755 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 32756 32757 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) 32758 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 32759 32760 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) 32761 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 32762 32763 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) 32764 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 32765 32766 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) 32767 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 32768 32769 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) 32770 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 32771 32772 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) 32773 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 32774 32775 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) 32776 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 32777 32778 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) 32779 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 32780 32781 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) 32782 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 32783 32784 6.56.3.38 Absolute value 32785 ........................ 32786 32787 * float32x2_t vabs_f32 (float32x2_t) 32788 _Form of expected instruction(s):_ `vabs.f32 D0, D0' 32789 32790 * int32x2_t vabs_s32 (int32x2_t) 32791 _Form of expected instruction(s):_ `vabs.s32 D0, D0' 32792 32793 * int16x4_t vabs_s16 (int16x4_t) 32794 _Form of expected instruction(s):_ `vabs.s16 D0, D0' 32795 32796 * int8x8_t vabs_s8 (int8x8_t) 32797 _Form of expected instruction(s):_ `vabs.s8 D0, D0' 32798 32799 * float32x4_t vabsq_f32 (float32x4_t) 32800 _Form of expected instruction(s):_ `vabs.f32 Q0, Q0' 32801 32802 * int32x4_t vabsq_s32 (int32x4_t) 32803 _Form of expected instruction(s):_ `vabs.s32 Q0, Q0' 32804 32805 * int16x8_t vabsq_s16 (int16x8_t) 32806 _Form of expected instruction(s):_ `vabs.s16 Q0, Q0' 32807 32808 * int8x16_t vabsq_s8 (int8x16_t) 32809 _Form of expected instruction(s):_ `vabs.s8 Q0, Q0' 32810 32811 * int32x2_t vqabs_s32 (int32x2_t) 32812 _Form of expected instruction(s):_ `vqabs.s32 D0, D0' 32813 32814 * int16x4_t vqabs_s16 (int16x4_t) 32815 _Form of expected instruction(s):_ `vqabs.s16 D0, D0' 32816 32817 * int8x8_t vqabs_s8 (int8x8_t) 32818 _Form of expected instruction(s):_ `vqabs.s8 D0, D0' 32819 32820 * int32x4_t vqabsq_s32 (int32x4_t) 32821 _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0' 32822 32823 * int16x8_t vqabsq_s16 (int16x8_t) 32824 _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0' 32825 32826 * int8x16_t vqabsq_s8 (int8x16_t) 32827 _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0' 32828 32829 6.56.3.39 Negation 32830 .................. 32831 32832 * float32x2_t vneg_f32 (float32x2_t) 32833 _Form of expected instruction(s):_ `vneg.f32 D0, D0' 32834 32835 * int32x2_t vneg_s32 (int32x2_t) 32836 _Form of expected instruction(s):_ `vneg.s32 D0, D0' 32837 32838 * int16x4_t vneg_s16 (int16x4_t) 32839 _Form of expected instruction(s):_ `vneg.s16 D0, D0' 32840 32841 * int8x8_t vneg_s8 (int8x8_t) 32842 _Form of expected instruction(s):_ `vneg.s8 D0, D0' 32843 32844 * float32x4_t vnegq_f32 (float32x4_t) 32845 _Form of expected instruction(s):_ `vneg.f32 Q0, Q0' 32846 32847 * int32x4_t vnegq_s32 (int32x4_t) 32848 _Form of expected instruction(s):_ `vneg.s32 Q0, Q0' 32849 32850 * int16x8_t vnegq_s16 (int16x8_t) 32851 _Form of expected instruction(s):_ `vneg.s16 Q0, Q0' 32852 32853 * int8x16_t vnegq_s8 (int8x16_t) 32854 _Form of expected instruction(s):_ `vneg.s8 Q0, Q0' 32855 32856 * int32x2_t vqneg_s32 (int32x2_t) 32857 _Form of expected instruction(s):_ `vqneg.s32 D0, D0' 32858 32859 * int16x4_t vqneg_s16 (int16x4_t) 32860 _Form of expected instruction(s):_ `vqneg.s16 D0, D0' 32861 32862 * int8x8_t vqneg_s8 (int8x8_t) 32863 _Form of expected instruction(s):_ `vqneg.s8 D0, D0' 32864 32865 * int32x4_t vqnegq_s32 (int32x4_t) 32866 _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0' 32867 32868 * int16x8_t vqnegq_s16 (int16x8_t) 32869 _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0' 32870 32871 * int8x16_t vqnegq_s8 (int8x16_t) 32872 _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0' 32873 32874 6.56.3.40 Bitwise not 32875 ..................... 32876 32877 * uint32x2_t vmvn_u32 (uint32x2_t) 32878 _Form of expected instruction(s):_ `vmvn D0, D0' 32879 32880 * uint16x4_t vmvn_u16 (uint16x4_t) 32881 _Form of expected instruction(s):_ `vmvn D0, D0' 32882 32883 * uint8x8_t vmvn_u8 (uint8x8_t) 32884 _Form of expected instruction(s):_ `vmvn D0, D0' 32885 32886 * int32x2_t vmvn_s32 (int32x2_t) 32887 _Form of expected instruction(s):_ `vmvn D0, D0' 32888 32889 * int16x4_t vmvn_s16 (int16x4_t) 32890 _Form of expected instruction(s):_ `vmvn D0, D0' 32891 32892 * int8x8_t vmvn_s8 (int8x8_t) 32893 _Form of expected instruction(s):_ `vmvn D0, D0' 32894 32895 * poly8x8_t vmvn_p8 (poly8x8_t) 32896 _Form of expected instruction(s):_ `vmvn D0, D0' 32897 32898 * uint32x4_t vmvnq_u32 (uint32x4_t) 32899 _Form of expected instruction(s):_ `vmvn Q0, Q0' 32900 32901 * uint16x8_t vmvnq_u16 (uint16x8_t) 32902 _Form of expected instruction(s):_ `vmvn Q0, Q0' 32903 32904 * uint8x16_t vmvnq_u8 (uint8x16_t) 32905 _Form of expected instruction(s):_ `vmvn Q0, Q0' 32906 32907 * int32x4_t vmvnq_s32 (int32x4_t) 32908 _Form of expected instruction(s):_ `vmvn Q0, Q0' 32909 32910 * int16x8_t vmvnq_s16 (int16x8_t) 32911 _Form of expected instruction(s):_ `vmvn Q0, Q0' 32912 32913 * int8x16_t vmvnq_s8 (int8x16_t) 32914 _Form of expected instruction(s):_ `vmvn Q0, Q0' 32915 32916 * poly8x16_t vmvnq_p8 (poly8x16_t) 32917 _Form of expected instruction(s):_ `vmvn Q0, Q0' 32918 32919 6.56.3.41 Count leading sign bits 32920 ................................. 32921 32922 * int32x2_t vcls_s32 (int32x2_t) 32923 _Form of expected instruction(s):_ `vcls.s32 D0, D0' 32924 32925 * int16x4_t vcls_s16 (int16x4_t) 32926 _Form of expected instruction(s):_ `vcls.s16 D0, D0' 32927 32928 * int8x8_t vcls_s8 (int8x8_t) 32929 _Form of expected instruction(s):_ `vcls.s8 D0, D0' 32930 32931 * int32x4_t vclsq_s32 (int32x4_t) 32932 _Form of expected instruction(s):_ `vcls.s32 Q0, Q0' 32933 32934 * int16x8_t vclsq_s16 (int16x8_t) 32935 _Form of expected instruction(s):_ `vcls.s16 Q0, Q0' 32936 32937 * int8x16_t vclsq_s8 (int8x16_t) 32938 _Form of expected instruction(s):_ `vcls.s8 Q0, Q0' 32939 32940 6.56.3.42 Count leading zeros 32941 ............................. 32942 32943 * uint32x2_t vclz_u32 (uint32x2_t) 32944 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 32945 32946 * uint16x4_t vclz_u16 (uint16x4_t) 32947 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 32948 32949 * uint8x8_t vclz_u8 (uint8x8_t) 32950 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 32951 32952 * int32x2_t vclz_s32 (int32x2_t) 32953 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 32954 32955 * int16x4_t vclz_s16 (int16x4_t) 32956 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 32957 32958 * int8x8_t vclz_s8 (int8x8_t) 32959 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 32960 32961 * uint32x4_t vclzq_u32 (uint32x4_t) 32962 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 32963 32964 * uint16x8_t vclzq_u16 (uint16x8_t) 32965 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 32966 32967 * uint8x16_t vclzq_u8 (uint8x16_t) 32968 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 32969 32970 * int32x4_t vclzq_s32 (int32x4_t) 32971 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 32972 32973 * int16x8_t vclzq_s16 (int16x8_t) 32974 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 32975 32976 * int8x16_t vclzq_s8 (int8x16_t) 32977 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 32978 32979 6.56.3.43 Count number of set bits 32980 .................................. 32981 32982 * uint8x8_t vcnt_u8 (uint8x8_t) 32983 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 32984 32985 * int8x8_t vcnt_s8 (int8x8_t) 32986 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 32987 32988 * poly8x8_t vcnt_p8 (poly8x8_t) 32989 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 32990 32991 * uint8x16_t vcntq_u8 (uint8x16_t) 32992 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 32993 32994 * int8x16_t vcntq_s8 (int8x16_t) 32995 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 32996 32997 * poly8x16_t vcntq_p8 (poly8x16_t) 32998 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 32999 33000 6.56.3.44 Reciprocal estimate 33001 ............................. 33002 33003 * float32x2_t vrecpe_f32 (float32x2_t) 33004 _Form of expected instruction(s):_ `vrecpe.f32 D0, D0' 33005 33006 * uint32x2_t vrecpe_u32 (uint32x2_t) 33007 _Form of expected instruction(s):_ `vrecpe.u32 D0, D0' 33008 33009 * float32x4_t vrecpeq_f32 (float32x4_t) 33010 _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0' 33011 33012 * uint32x4_t vrecpeq_u32 (uint32x4_t) 33013 _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0' 33014 33015 6.56.3.45 Reciprocal square-root estimate 33016 ......................................... 33017 33018 * float32x2_t vrsqrte_f32 (float32x2_t) 33019 _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0' 33020 33021 * uint32x2_t vrsqrte_u32 (uint32x2_t) 33022 _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0' 33023 33024 * float32x4_t vrsqrteq_f32 (float32x4_t) 33025 _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0' 33026 33027 * uint32x4_t vrsqrteq_u32 (uint32x4_t) 33028 _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0' 33029 33030 6.56.3.46 Get lanes from a vector 33031 ................................. 33032 33033 * uint32_t vget_lane_u32 (uint32x2_t, const int) 33034 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33035 33036 * uint16_t vget_lane_u16 (uint16x4_t, const int) 33037 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 33038 33039 * uint8_t vget_lane_u8 (uint8x8_t, const int) 33040 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 33041 33042 * int32_t vget_lane_s32 (int32x2_t, const int) 33043 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33044 33045 * int16_t vget_lane_s16 (int16x4_t, const int) 33046 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 33047 33048 * int8_t vget_lane_s8 (int8x8_t, const int) 33049 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 33050 33051 * float32_t vget_lane_f32 (float32x2_t, const int) 33052 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33053 33054 * poly16_t vget_lane_p16 (poly16x4_t, const int) 33055 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 33056 33057 * poly8_t vget_lane_p8 (poly8x8_t, const int) 33058 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 33059 33060 * uint64_t vget_lane_u64 (uint64x1_t, const int) 33061 33062 * int64_t vget_lane_s64 (int64x1_t, const int) 33063 33064 * uint32_t vgetq_lane_u32 (uint32x4_t, const int) 33065 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33066 33067 * uint16_t vgetq_lane_u16 (uint16x8_t, const int) 33068 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 33069 33070 * uint8_t vgetq_lane_u8 (uint8x16_t, const int) 33071 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 33072 33073 * int32_t vgetq_lane_s32 (int32x4_t, const int) 33074 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33075 33076 * int16_t vgetq_lane_s16 (int16x8_t, const int) 33077 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 33078 33079 * int8_t vgetq_lane_s8 (int8x16_t, const int) 33080 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 33081 33082 * float32_t vgetq_lane_f32 (float32x4_t, const int) 33083 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 33084 33085 * poly16_t vgetq_lane_p16 (poly16x8_t, const int) 33086 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 33087 33088 * poly8_t vgetq_lane_p8 (poly8x16_t, const int) 33089 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 33090 33091 * uint64_t vgetq_lane_u64 (uint64x2_t, const int) 33092 _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd 33093 R0, R0, D0' 33094 33095 * int64_t vgetq_lane_s64 (int64x2_t, const int) 33096 _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd 33097 R0, R0, D0' 33098 33099 6.56.3.47 Set lanes in a vector 33100 ............................... 33101 33102 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) 33103 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33104 33105 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) 33106 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33107 33108 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) 33109 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33110 33111 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) 33112 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33113 33114 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) 33115 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33116 33117 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) 33118 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33119 33120 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) 33121 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33122 33123 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) 33124 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33125 33126 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) 33127 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33128 33129 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) 33130 33131 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) 33132 33133 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) 33134 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33135 33136 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) 33137 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33138 33139 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) 33140 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33141 33142 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) 33143 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33144 33145 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) 33146 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33147 33148 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) 33149 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33150 33151 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) 33152 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 33153 33154 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) 33155 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 33156 33157 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) 33158 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 33159 33160 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) 33161 _Form of expected instruction(s):_ `vmov D0, R0, R0' 33162 33163 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) 33164 _Form of expected instruction(s):_ `vmov D0, R0, R0' 33165 33166 6.56.3.48 Create vector from literal bit pattern 33167 ................................................ 33168 33169 * uint32x2_t vcreate_u32 (uint64_t) 33170 33171 * uint16x4_t vcreate_u16 (uint64_t) 33172 33173 * uint8x8_t vcreate_u8 (uint64_t) 33174 33175 * int32x2_t vcreate_s32 (uint64_t) 33176 33177 * int16x4_t vcreate_s16 (uint64_t) 33178 33179 * int8x8_t vcreate_s8 (uint64_t) 33180 33181 * uint64x1_t vcreate_u64 (uint64_t) 33182 33183 * int64x1_t vcreate_s64 (uint64_t) 33184 33185 * float32x2_t vcreate_f32 (uint64_t) 33186 33187 * poly16x4_t vcreate_p16 (uint64_t) 33188 33189 * poly8x8_t vcreate_p8 (uint64_t) 33190 33191 6.56.3.49 Set all lanes to the same value 33192 ......................................... 33193 33194 * uint32x2_t vdup_n_u32 (uint32_t) 33195 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33196 33197 * uint16x4_t vdup_n_u16 (uint16_t) 33198 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33199 33200 * uint8x8_t vdup_n_u8 (uint8_t) 33201 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33202 33203 * int32x2_t vdup_n_s32 (int32_t) 33204 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33205 33206 * int16x4_t vdup_n_s16 (int16_t) 33207 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33208 33209 * int8x8_t vdup_n_s8 (int8_t) 33210 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33211 33212 * float32x2_t vdup_n_f32 (float32_t) 33213 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33214 33215 * poly16x4_t vdup_n_p16 (poly16_t) 33216 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33217 33218 * poly8x8_t vdup_n_p8 (poly8_t) 33219 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33220 33221 * uint64x1_t vdup_n_u64 (uint64_t) 33222 33223 * int64x1_t vdup_n_s64 (int64_t) 33224 33225 * uint32x4_t vdupq_n_u32 (uint32_t) 33226 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33227 33228 * uint16x8_t vdupq_n_u16 (uint16_t) 33229 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33230 33231 * uint8x16_t vdupq_n_u8 (uint8_t) 33232 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33233 33234 * int32x4_t vdupq_n_s32 (int32_t) 33235 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33236 33237 * int16x8_t vdupq_n_s16 (int16_t) 33238 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33239 33240 * int8x16_t vdupq_n_s8 (int8_t) 33241 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33242 33243 * float32x4_t vdupq_n_f32 (float32_t) 33244 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33245 33246 * poly16x8_t vdupq_n_p16 (poly16_t) 33247 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33248 33249 * poly8x16_t vdupq_n_p8 (poly8_t) 33250 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33251 33252 * uint64x2_t vdupq_n_u64 (uint64_t) 33253 33254 * int64x2_t vdupq_n_s64 (int64_t) 33255 33256 * uint32x2_t vmov_n_u32 (uint32_t) 33257 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33258 33259 * uint16x4_t vmov_n_u16 (uint16_t) 33260 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33261 33262 * uint8x8_t vmov_n_u8 (uint8_t) 33263 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33264 33265 * int32x2_t vmov_n_s32 (int32_t) 33266 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33267 33268 * int16x4_t vmov_n_s16 (int16_t) 33269 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33270 33271 * int8x8_t vmov_n_s8 (int8_t) 33272 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33273 33274 * float32x2_t vmov_n_f32 (float32_t) 33275 _Form of expected instruction(s):_ `vdup.32 D0, R0' 33276 33277 * poly16x4_t vmov_n_p16 (poly16_t) 33278 _Form of expected instruction(s):_ `vdup.16 D0, R0' 33279 33280 * poly8x8_t vmov_n_p8 (poly8_t) 33281 _Form of expected instruction(s):_ `vdup.8 D0, R0' 33282 33283 * uint64x1_t vmov_n_u64 (uint64_t) 33284 33285 * int64x1_t vmov_n_s64 (int64_t) 33286 33287 * uint32x4_t vmovq_n_u32 (uint32_t) 33288 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33289 33290 * uint16x8_t vmovq_n_u16 (uint16_t) 33291 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33292 33293 * uint8x16_t vmovq_n_u8 (uint8_t) 33294 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33295 33296 * int32x4_t vmovq_n_s32 (int32_t) 33297 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33298 33299 * int16x8_t vmovq_n_s16 (int16_t) 33300 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33301 33302 * int8x16_t vmovq_n_s8 (int8_t) 33303 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33304 33305 * float32x4_t vmovq_n_f32 (float32_t) 33306 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 33307 33308 * poly16x8_t vmovq_n_p16 (poly16_t) 33309 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 33310 33311 * poly8x16_t vmovq_n_p8 (poly8_t) 33312 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 33313 33314 * uint64x2_t vmovq_n_u64 (uint64_t) 33315 33316 * int64x2_t vmovq_n_s64 (int64_t) 33317 33318 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) 33319 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 33320 33321 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) 33322 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 33323 33324 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) 33325 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 33326 33327 * int32x2_t vdup_lane_s32 (int32x2_t, const int) 33328 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 33329 33330 * int16x4_t vdup_lane_s16 (int16x4_t, const int) 33331 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 33332 33333 * int8x8_t vdup_lane_s8 (int8x8_t, const int) 33334 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 33335 33336 * float32x2_t vdup_lane_f32 (float32x2_t, const int) 33337 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 33338 33339 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) 33340 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 33341 33342 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) 33343 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 33344 33345 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) 33346 33347 * int64x1_t vdup_lane_s64 (int64x1_t, const int) 33348 33349 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) 33350 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 33351 33352 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) 33353 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 33354 33355 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) 33356 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 33357 33358 * int32x4_t vdupq_lane_s32 (int32x2_t, const int) 33359 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 33360 33361 * int16x8_t vdupq_lane_s16 (int16x4_t, const int) 33362 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 33363 33364 * int8x16_t vdupq_lane_s8 (int8x8_t, const int) 33365 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 33366 33367 * float32x4_t vdupq_lane_f32 (float32x2_t, const int) 33368 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 33369 33370 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) 33371 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 33372 33373 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) 33374 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 33375 33376 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) 33377 33378 * int64x2_t vdupq_lane_s64 (int64x1_t, const int) 33379 33380 6.56.3.50 Combining vectors 33381 ........................... 33382 33383 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) 33384 33385 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) 33386 33387 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) 33388 33389 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) 33390 33391 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 33392 33393 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) 33394 33395 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) 33396 33397 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) 33398 33399 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) 33400 33401 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) 33402 33403 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) 33404 33405 6.56.3.51 Splitting vectors 33406 ........................... 33407 33408 * uint32x2_t vget_high_u32 (uint32x4_t) 33409 33410 * uint16x4_t vget_high_u16 (uint16x8_t) 33411 33412 * uint8x8_t vget_high_u8 (uint8x16_t) 33413 33414 * int32x2_t vget_high_s32 (int32x4_t) 33415 33416 * int16x4_t vget_high_s16 (int16x8_t) 33417 33418 * int8x8_t vget_high_s8 (int8x16_t) 33419 33420 * uint64x1_t vget_high_u64 (uint64x2_t) 33421 33422 * int64x1_t vget_high_s64 (int64x2_t) 33423 33424 * float32x2_t vget_high_f32 (float32x4_t) 33425 33426 * poly16x4_t vget_high_p16 (poly16x8_t) 33427 33428 * poly8x8_t vget_high_p8 (poly8x16_t) 33429 33430 * uint32x2_t vget_low_u32 (uint32x4_t) 33431 _Form of expected instruction(s):_ `vmov D0, D0' 33432 33433 * uint16x4_t vget_low_u16 (uint16x8_t) 33434 _Form of expected instruction(s):_ `vmov D0, D0' 33435 33436 * uint8x8_t vget_low_u8 (uint8x16_t) 33437 _Form of expected instruction(s):_ `vmov D0, D0' 33438 33439 * int32x2_t vget_low_s32 (int32x4_t) 33440 _Form of expected instruction(s):_ `vmov D0, D0' 33441 33442 * int16x4_t vget_low_s16 (int16x8_t) 33443 _Form of expected instruction(s):_ `vmov D0, D0' 33444 33445 * int8x8_t vget_low_s8 (int8x16_t) 33446 _Form of expected instruction(s):_ `vmov D0, D0' 33447 33448 * float32x2_t vget_low_f32 (float32x4_t) 33449 _Form of expected instruction(s):_ `vmov D0, D0' 33450 33451 * poly16x4_t vget_low_p16 (poly16x8_t) 33452 _Form of expected instruction(s):_ `vmov D0, D0' 33453 33454 * poly8x8_t vget_low_p8 (poly8x16_t) 33455 _Form of expected instruction(s):_ `vmov D0, D0' 33456 33457 * uint64x1_t vget_low_u64 (uint64x2_t) 33458 33459 * int64x1_t vget_low_s64 (int64x2_t) 33460 33461 6.56.3.52 Conversions 33462 ..................... 33463 33464 * float32x2_t vcvt_f32_u32 (uint32x2_t) 33465 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0' 33466 33467 * float32x2_t vcvt_f32_s32 (int32x2_t) 33468 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0' 33469 33470 * uint32x2_t vcvt_u32_f32 (float32x2_t) 33471 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0' 33472 33473 * int32x2_t vcvt_s32_f32 (float32x2_t) 33474 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0' 33475 33476 * float32x4_t vcvtq_f32_u32 (uint32x4_t) 33477 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0' 33478 33479 * float32x4_t vcvtq_f32_s32 (int32x4_t) 33480 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0' 33481 33482 * uint32x4_t vcvtq_u32_f32 (float32x4_t) 33483 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0' 33484 33485 * int32x4_t vcvtq_s32_f32 (float32x4_t) 33486 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0' 33487 33488 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) 33489 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0' 33490 33491 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) 33492 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0' 33493 33494 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) 33495 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0' 33496 33497 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) 33498 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0' 33499 33500 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) 33501 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0' 33502 33503 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) 33504 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0' 33505 33506 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) 33507 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0' 33508 33509 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) 33510 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0' 33511 33512 6.56.3.53 Move, single_opcode narrowing 33513 ....................................... 33514 33515 * uint32x2_t vmovn_u64 (uint64x2_t) 33516 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 33517 33518 * uint16x4_t vmovn_u32 (uint32x4_t) 33519 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 33520 33521 * uint8x8_t vmovn_u16 (uint16x8_t) 33522 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 33523 33524 * int32x2_t vmovn_s64 (int64x2_t) 33525 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 33526 33527 * int16x4_t vmovn_s32 (int32x4_t) 33528 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 33529 33530 * int8x8_t vmovn_s16 (int16x8_t) 33531 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 33532 33533 * uint32x2_t vqmovn_u64 (uint64x2_t) 33534 _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0' 33535 33536 * uint16x4_t vqmovn_u32 (uint32x4_t) 33537 _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0' 33538 33539 * uint8x8_t vqmovn_u16 (uint16x8_t) 33540 _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0' 33541 33542 * int32x2_t vqmovn_s64 (int64x2_t) 33543 _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0' 33544 33545 * int16x4_t vqmovn_s32 (int32x4_t) 33546 _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0' 33547 33548 * int8x8_t vqmovn_s16 (int16x8_t) 33549 _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0' 33550 33551 * uint32x2_t vqmovun_s64 (int64x2_t) 33552 _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0' 33553 33554 * uint16x4_t vqmovun_s32 (int32x4_t) 33555 _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0' 33556 33557 * uint8x8_t vqmovun_s16 (int16x8_t) 33558 _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0' 33559 33560 6.56.3.54 Move, single_opcode long 33561 .................................. 33562 33563 * uint64x2_t vmovl_u32 (uint32x2_t) 33564 _Form of expected instruction(s):_ `vmovl.u32 Q0, D0' 33565 33566 * uint32x4_t vmovl_u16 (uint16x4_t) 33567 _Form of expected instruction(s):_ `vmovl.u16 Q0, D0' 33568 33569 * uint16x8_t vmovl_u8 (uint8x8_t) 33570 _Form of expected instruction(s):_ `vmovl.u8 Q0, D0' 33571 33572 * int64x2_t vmovl_s32 (int32x2_t) 33573 _Form of expected instruction(s):_ `vmovl.s32 Q0, D0' 33574 33575 * int32x4_t vmovl_s16 (int16x4_t) 33576 _Form of expected instruction(s):_ `vmovl.s16 Q0, D0' 33577 33578 * int16x8_t vmovl_s8 (int8x8_t) 33579 _Form of expected instruction(s):_ `vmovl.s8 Q0, D0' 33580 33581 6.56.3.55 Table lookup 33582 ...................... 33583 33584 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) 33585 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 33586 33587 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) 33588 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 33589 33590 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) 33591 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 33592 33593 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) 33594 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 33595 33596 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) 33597 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 33598 33599 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) 33600 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 33601 33602 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) 33603 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 33604 33605 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) 33606 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 33607 33608 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) 33609 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 33610 33611 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) 33612 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 33613 D0' 33614 33615 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) 33616 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 33617 D0' 33618 33619 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) 33620 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 33621 D0' 33622 33623 6.56.3.56 Extended table lookup 33624 ............................... 33625 33626 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) 33627 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 33628 33629 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) 33630 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 33631 33632 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 33633 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 33634 33635 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) 33636 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 33637 33638 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) 33639 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 33640 33641 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) 33642 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 33643 33644 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) 33645 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 33646 33647 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) 33648 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 33649 33650 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) 33651 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 33652 33653 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) 33654 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 33655 D0' 33656 33657 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) 33658 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 33659 D0' 33660 33661 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) 33662 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 33663 D0' 33664 33665 6.56.3.57 Multiply, lane 33666 ........................ 33667 33668 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) 33669 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 33670 33671 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) 33672 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 33673 33674 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) 33675 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 33676 33677 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) 33678 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 33679 33680 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) 33681 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 33682 33683 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) 33684 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 33685 33686 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) 33687 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 33688 33689 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) 33690 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 33691 33692 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) 33693 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 33694 33695 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) 33696 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 33697 33698 6.56.3.58 Long multiply, lane 33699 ............................. 33700 33701 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) 33702 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 33703 33704 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) 33705 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 33706 33707 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) 33708 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 33709 33710 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) 33711 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 33712 33713 6.56.3.59 Saturating doubling long multiply, lane 33714 ................................................. 33715 33716 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) 33717 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 33718 33719 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) 33720 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 33721 33722 6.56.3.60 Saturating doubling multiply high, lane 33723 ................................................. 33724 33725 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 33726 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 33727 33728 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 33729 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 33730 33731 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 33732 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 33733 33734 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 33735 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 33736 33737 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 33738 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 33739 33740 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 33741 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 33742 33743 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 33744 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 33745 33746 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 33747 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 33748 33749 6.56.3.61 Multiply-accumulate, lane 33750 ................................... 33751 33752 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 33753 const int) 33754 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 33755 33756 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 33757 const int) 33758 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 33759 33760 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 33761 const int) 33762 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 33763 33764 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 33765 int) 33766 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 33767 33768 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 33769 int) 33770 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 33771 33772 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 33773 const int) 33774 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 33775 33776 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 33777 const int) 33778 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 33779 33780 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 33781 const int) 33782 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 33783 33784 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 33785 int) 33786 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 33787 33788 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 33789 int) 33790 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 33791 33792 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 33793 const int) 33794 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 33795 33796 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 33797 const int) 33798 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 33799 33800 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 33801 int) 33802 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 33803 33804 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 33805 int) 33806 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 33807 33808 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 33809 int) 33810 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 33811 33812 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 33813 int) 33814 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 33815 33816 6.56.3.62 Multiply-subtract, lane 33817 ................................. 33818 33819 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 33820 const int) 33821 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 33822 33823 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 33824 const int) 33825 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 33826 33827 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 33828 const int) 33829 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 33830 33831 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 33832 int) 33833 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 33834 33835 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 33836 int) 33837 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 33838 33839 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 33840 const int) 33841 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 33842 33843 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 33844 const int) 33845 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 33846 33847 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 33848 const int) 33849 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 33850 33851 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 33852 int) 33853 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 33854 33855 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 33856 int) 33857 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 33858 33859 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 33860 const int) 33861 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 33862 33863 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 33864 const int) 33865 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 33866 33867 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 33868 int) 33869 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 33870 33871 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 33872 int) 33873 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 33874 33875 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 33876 int) 33877 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 33878 33879 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 33880 int) 33881 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 33882 33883 6.56.3.63 Vector multiply by scalar 33884 ................................... 33885 33886 * float32x2_t vmul_n_f32 (float32x2_t, float32_t) 33887 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 33888 33889 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) 33890 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 33891 33892 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) 33893 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 33894 33895 * int32x2_t vmul_n_s32 (int32x2_t, int32_t) 33896 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 33897 33898 * int16x4_t vmul_n_s16 (int16x4_t, int16_t) 33899 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 33900 33901 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) 33902 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 33903 33904 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) 33905 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 33906 33907 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) 33908 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 33909 33910 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) 33911 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 33912 33913 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) 33914 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 33915 33916 6.56.3.64 Vector long multiply by scalar 33917 ........................................ 33918 33919 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) 33920 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 33921 33922 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) 33923 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 33924 33925 * int64x2_t vmull_n_s32 (int32x2_t, int32_t) 33926 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 33927 33928 * int32x4_t vmull_n_s16 (int16x4_t, int16_t) 33929 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 33930 33931 6.56.3.65 Vector saturating doubling long multiply by scalar 33932 ............................................................ 33933 33934 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) 33935 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 33936 33937 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) 33938 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 33939 33940 6.56.3.66 Vector saturating doubling multiply high by scalar 33941 ............................................................ 33942 33943 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) 33944 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 33945 33946 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) 33947 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 33948 33949 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) 33950 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 33951 33952 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) 33953 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 33954 33955 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) 33956 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 33957 33958 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) 33959 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 33960 33961 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) 33962 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 33963 33964 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) 33965 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 33966 33967 6.56.3.67 Vector multiply-accumulate by scalar 33968 .............................................. 33969 33970 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) 33971 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 33972 33973 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 33974 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 33975 33976 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 33977 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 33978 33979 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) 33980 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 33981 33982 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) 33983 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 33984 33985 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) 33986 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 33987 33988 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 33989 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 33990 33991 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 33992 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 33993 33994 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) 33995 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 33996 33997 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) 33998 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 33999 34000 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 34001 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 34002 34003 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 34004 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 34005 34006 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 34007 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 34008 34009 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 34010 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 34011 34012 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 34013 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 34014 34015 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 34016 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 34017 34018 6.56.3.68 Vector multiply-subtract by scalar 34019 ............................................ 34020 34021 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) 34022 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 34023 34024 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 34025 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 34026 34027 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 34028 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 34029 34030 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) 34031 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 34032 34033 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) 34034 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 34035 34036 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) 34037 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 34038 34039 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 34040 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 34041 34042 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 34043 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 34044 34045 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) 34046 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 34047 34048 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) 34049 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 34050 34051 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 34052 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 34053 34054 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 34055 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 34056 34057 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 34058 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 34059 34060 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 34061 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 34062 34063 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 34064 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 34065 34066 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 34067 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 34068 34069 6.56.3.69 Vector extract 34070 ........................ 34071 34072 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) 34073 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 34074 34075 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) 34076 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 34077 34078 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) 34079 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 34080 34081 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) 34082 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 34083 34084 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) 34085 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 34086 34087 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) 34088 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 34089 34090 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) 34091 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 34092 34093 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) 34094 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 34095 34096 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) 34097 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 34098 34099 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) 34100 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 34101 34102 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) 34103 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 34104 34105 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) 34106 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 34107 34108 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) 34109 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 34110 34111 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) 34112 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 34113 34114 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) 34115 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 34116 34117 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) 34118 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 34119 34120 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) 34121 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 34122 34123 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) 34124 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 34125 34126 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) 34127 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 34128 34129 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) 34130 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 34131 34132 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) 34133 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 34134 34135 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) 34136 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 34137 34138 6.56.3.70 Reverse elements 34139 .......................... 34140 34141 * uint32x2_t vrev64_u32 (uint32x2_t) 34142 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 34143 34144 * uint16x4_t vrev64_u16 (uint16x4_t) 34145 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 34146 34147 * uint8x8_t vrev64_u8 (uint8x8_t) 34148 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 34149 34150 * int32x2_t vrev64_s32 (int32x2_t) 34151 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 34152 34153 * int16x4_t vrev64_s16 (int16x4_t) 34154 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 34155 34156 * int8x8_t vrev64_s8 (int8x8_t) 34157 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 34158 34159 * float32x2_t vrev64_f32 (float32x2_t) 34160 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 34161 34162 * poly16x4_t vrev64_p16 (poly16x4_t) 34163 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 34164 34165 * poly8x8_t vrev64_p8 (poly8x8_t) 34166 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 34167 34168 * uint32x4_t vrev64q_u32 (uint32x4_t) 34169 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 34170 34171 * uint16x8_t vrev64q_u16 (uint16x8_t) 34172 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 34173 34174 * uint8x16_t vrev64q_u8 (uint8x16_t) 34175 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 34176 34177 * int32x4_t vrev64q_s32 (int32x4_t) 34178 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 34179 34180 * int16x8_t vrev64q_s16 (int16x8_t) 34181 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 34182 34183 * int8x16_t vrev64q_s8 (int8x16_t) 34184 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 34185 34186 * float32x4_t vrev64q_f32 (float32x4_t) 34187 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 34188 34189 * poly16x8_t vrev64q_p16 (poly16x8_t) 34190 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 34191 34192 * poly8x16_t vrev64q_p8 (poly8x16_t) 34193 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 34194 34195 * uint16x4_t vrev32_u16 (uint16x4_t) 34196 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 34197 34198 * int16x4_t vrev32_s16 (int16x4_t) 34199 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 34200 34201 * uint8x8_t vrev32_u8 (uint8x8_t) 34202 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 34203 34204 * int8x8_t vrev32_s8 (int8x8_t) 34205 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 34206 34207 * poly16x4_t vrev32_p16 (poly16x4_t) 34208 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 34209 34210 * poly8x8_t vrev32_p8 (poly8x8_t) 34211 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 34212 34213 * uint16x8_t vrev32q_u16 (uint16x8_t) 34214 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 34215 34216 * int16x8_t vrev32q_s16 (int16x8_t) 34217 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 34218 34219 * uint8x16_t vrev32q_u8 (uint8x16_t) 34220 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 34221 34222 * int8x16_t vrev32q_s8 (int8x16_t) 34223 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 34224 34225 * poly16x8_t vrev32q_p16 (poly16x8_t) 34226 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 34227 34228 * poly8x16_t vrev32q_p8 (poly8x16_t) 34229 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 34230 34231 * uint8x8_t vrev16_u8 (uint8x8_t) 34232 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 34233 34234 * int8x8_t vrev16_s8 (int8x8_t) 34235 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 34236 34237 * poly8x8_t vrev16_p8 (poly8x8_t) 34238 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 34239 34240 * uint8x16_t vrev16q_u8 (uint8x16_t) 34241 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 34242 34243 * int8x16_t vrev16q_s8 (int8x16_t) 34244 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 34245 34246 * poly8x16_t vrev16q_p8 (poly8x16_t) 34247 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 34248 34249 6.56.3.71 Bit selection 34250 ....................... 34251 34252 * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 34253 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34254 D0, D0, D0' _or_ `vbif D0, D0, D0' 34255 34256 * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 34257 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34258 D0, D0, D0' _or_ `vbif D0, D0, D0' 34259 34260 * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 34261 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34262 D0, D0, D0' _or_ `vbif D0, D0, D0' 34263 34264 * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) 34265 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34266 D0, D0, D0' _or_ `vbif D0, D0, D0' 34267 34268 * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) 34269 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34270 D0, D0, D0' _or_ `vbif D0, D0, D0' 34271 34272 * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) 34273 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34274 D0, D0, D0' _or_ `vbif D0, D0, D0' 34275 34276 * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) 34277 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34278 D0, D0, D0' _or_ `vbif D0, D0, D0' 34279 34280 * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) 34281 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34282 D0, D0, D0' _or_ `vbif D0, D0, D0' 34283 34284 * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) 34285 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34286 D0, D0, D0' _or_ `vbif D0, D0, D0' 34287 34288 * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) 34289 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34290 D0, D0, D0' _or_ `vbif D0, D0, D0' 34291 34292 * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) 34293 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 34294 D0, D0, D0' _or_ `vbif D0, D0, D0' 34295 34296 * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 34297 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34298 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34299 34300 * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 34301 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34302 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34303 34304 * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 34305 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34306 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34307 34308 * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) 34309 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34310 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34311 34312 * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) 34313 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34314 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34315 34316 * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) 34317 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34318 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34319 34320 * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) 34321 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34322 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34323 34324 * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) 34325 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34326 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34327 34328 * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) 34329 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34330 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34331 34332 * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) 34333 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34334 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34335 34336 * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) 34337 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 34338 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 34339 34340 6.56.3.72 Transpose elements 34341 ............................ 34342 34343 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) 34344 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 34345 34346 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) 34347 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 34348 34349 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) 34350 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 34351 34352 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) 34353 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 34354 34355 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) 34356 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 34357 34358 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) 34359 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 34360 34361 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) 34362 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34363 34364 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) 34365 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34366 34367 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) 34368 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34369 34370 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) 34371 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 34372 34373 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) 34374 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 34375 34376 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) 34377 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 34378 34379 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) 34380 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 34381 34382 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) 34383 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 34384 34385 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) 34386 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 34387 34388 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) 34389 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 34390 34391 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) 34392 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 34393 34394 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) 34395 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 34396 34397 6.56.3.73 Zip elements 34398 ...................... 34399 34400 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) 34401 _Form of expected instruction(s):_ `vzip.16 D0, D1' 34402 34403 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) 34404 _Form of expected instruction(s):_ `vzip.8 D0, D1' 34405 34406 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) 34407 _Form of expected instruction(s):_ `vzip.16 D0, D1' 34408 34409 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) 34410 _Form of expected instruction(s):_ `vzip.8 D0, D1' 34411 34412 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) 34413 _Form of expected instruction(s):_ `vzip.16 D0, D1' 34414 34415 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) 34416 _Form of expected instruction(s):_ `vzip.8 D0, D1' 34417 34418 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) 34419 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34420 34421 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) 34422 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34423 34424 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) 34425 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34426 34427 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) 34428 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 34429 34430 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) 34431 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 34432 34433 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) 34434 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 34435 34436 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) 34437 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 34438 34439 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) 34440 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 34441 34442 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) 34443 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 34444 34445 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) 34446 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 34447 34448 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) 34449 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 34450 34451 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) 34452 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 34453 34454 6.56.3.74 Unzip elements 34455 ........................ 34456 34457 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) 34458 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34459 34460 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) 34461 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 34462 34463 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) 34464 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 34465 34466 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) 34467 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34468 34469 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) 34470 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 34471 34472 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) 34473 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 34474 34475 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) 34476 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 34477 34478 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) 34479 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 34480 34481 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) 34482 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 34483 34484 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) 34485 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 34486 34487 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) 34488 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 34489 34490 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) 34491 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 34492 34493 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) 34494 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 34495 34496 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) 34497 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 34498 34499 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) 34500 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 34501 34502 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) 34503 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 34504 34505 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) 34506 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 34507 34508 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) 34509 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 34510 34511 6.56.3.75 Element/structure loads, VLD1 variants 34512 ................................................ 34513 34514 * uint32x2_t vld1_u32 (const uint32_t *) 34515 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 34516 34517 * uint16x4_t vld1_u16 (const uint16_t *) 34518 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 34519 34520 * uint8x8_t vld1_u8 (const uint8_t *) 34521 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 34522 34523 * int32x2_t vld1_s32 (const int32_t *) 34524 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 34525 34526 * int16x4_t vld1_s16 (const int16_t *) 34527 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 34528 34529 * int8x8_t vld1_s8 (const int8_t *) 34530 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 34531 34532 * uint64x1_t vld1_u64 (const uint64_t *) 34533 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34534 34535 * int64x1_t vld1_s64 (const int64_t *) 34536 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34537 34538 * float32x2_t vld1_f32 (const float32_t *) 34539 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 34540 34541 * poly16x4_t vld1_p16 (const poly16_t *) 34542 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 34543 34544 * poly8x8_t vld1_p8 (const poly8_t *) 34545 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 34546 34547 * uint32x4_t vld1q_u32 (const uint32_t *) 34548 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 34549 34550 * uint16x8_t vld1q_u16 (const uint16_t *) 34551 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 34552 34553 * uint8x16_t vld1q_u8 (const uint8_t *) 34554 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 34555 34556 * int32x4_t vld1q_s32 (const int32_t *) 34557 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 34558 34559 * int16x8_t vld1q_s16 (const int16_t *) 34560 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 34561 34562 * int8x16_t vld1q_s8 (const int8_t *) 34563 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 34564 34565 * uint64x2_t vld1q_u64 (const uint64_t *) 34566 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 34567 34568 * int64x2_t vld1q_s64 (const int64_t *) 34569 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 34570 34571 * float32x4_t vld1q_f32 (const float32_t *) 34572 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 34573 34574 * poly16x8_t vld1q_p16 (const poly16_t *) 34575 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 34576 34577 * poly8x16_t vld1q_p8 (const poly8_t *) 34578 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 34579 34580 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) 34581 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34582 34583 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) 34584 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34585 34586 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) 34587 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34588 34589 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) 34590 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34591 34592 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) 34593 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34594 34595 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) 34596 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34597 34598 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const 34599 int) 34600 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34601 34602 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) 34603 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34604 34605 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) 34606 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34607 34608 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) 34609 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34610 34611 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) 34612 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34613 34614 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) 34615 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34616 34617 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) 34618 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34619 34620 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) 34621 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34622 34623 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) 34624 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34625 34626 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) 34627 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34628 34629 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) 34630 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34631 34632 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const 34633 int) 34634 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 34635 34636 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) 34637 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 34638 34639 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) 34640 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 34641 34642 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) 34643 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34644 34645 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) 34646 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34647 34648 * uint32x2_t vld1_dup_u32 (const uint32_t *) 34649 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 34650 34651 * uint16x4_t vld1_dup_u16 (const uint16_t *) 34652 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 34653 34654 * uint8x8_t vld1_dup_u8 (const uint8_t *) 34655 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 34656 34657 * int32x2_t vld1_dup_s32 (const int32_t *) 34658 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 34659 34660 * int16x4_t vld1_dup_s16 (const int16_t *) 34661 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 34662 34663 * int8x8_t vld1_dup_s8 (const int8_t *) 34664 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 34665 34666 * float32x2_t vld1_dup_f32 (const float32_t *) 34667 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 34668 34669 * poly16x4_t vld1_dup_p16 (const poly16_t *) 34670 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 34671 34672 * poly8x8_t vld1_dup_p8 (const poly8_t *) 34673 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 34674 34675 * uint64x1_t vld1_dup_u64 (const uint64_t *) 34676 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34677 34678 * int64x1_t vld1_dup_s64 (const int64_t *) 34679 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34680 34681 * uint32x4_t vld1q_dup_u32 (const uint32_t *) 34682 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 34683 34684 * uint16x8_t vld1q_dup_u16 (const uint16_t *) 34685 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 34686 34687 * uint8x16_t vld1q_dup_u8 (const uint8_t *) 34688 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 34689 34690 * int32x4_t vld1q_dup_s32 (const int32_t *) 34691 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 34692 34693 * int16x8_t vld1q_dup_s16 (const int16_t *) 34694 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 34695 34696 * int8x16_t vld1q_dup_s8 (const int8_t *) 34697 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 34698 34699 * float32x4_t vld1q_dup_f32 (const float32_t *) 34700 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 34701 34702 * poly16x8_t vld1q_dup_p16 (const poly16_t *) 34703 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 34704 34705 * poly8x16_t vld1q_dup_p8 (const poly8_t *) 34706 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 34707 34708 * uint64x2_t vld1q_dup_u64 (const uint64_t *) 34709 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34710 34711 * int64x2_t vld1q_dup_s64 (const int64_t *) 34712 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 34713 34714 6.56.3.76 Element/structure stores, VST1 variants 34715 ................................................. 34716 34717 * void vst1_u32 (uint32_t *, uint32x2_t) 34718 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 34719 34720 * void vst1_u16 (uint16_t *, uint16x4_t) 34721 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 34722 34723 * void vst1_u8 (uint8_t *, uint8x8_t) 34724 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 34725 34726 * void vst1_s32 (int32_t *, int32x2_t) 34727 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 34728 34729 * void vst1_s16 (int16_t *, int16x4_t) 34730 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 34731 34732 * void vst1_s8 (int8_t *, int8x8_t) 34733 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 34734 34735 * void vst1_u64 (uint64_t *, uint64x1_t) 34736 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34737 34738 * void vst1_s64 (int64_t *, int64x1_t) 34739 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34740 34741 * void vst1_f32 (float32_t *, float32x2_t) 34742 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 34743 34744 * void vst1_p16 (poly16_t *, poly16x4_t) 34745 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 34746 34747 * void vst1_p8 (poly8_t *, poly8x8_t) 34748 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 34749 34750 * void vst1q_u32 (uint32_t *, uint32x4_t) 34751 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 34752 34753 * void vst1q_u16 (uint16_t *, uint16x8_t) 34754 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 34755 34756 * void vst1q_u8 (uint8_t *, uint8x16_t) 34757 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 34758 34759 * void vst1q_s32 (int32_t *, int32x4_t) 34760 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 34761 34762 * void vst1q_s16 (int16_t *, int16x8_t) 34763 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 34764 34765 * void vst1q_s8 (int8_t *, int8x16_t) 34766 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 34767 34768 * void vst1q_u64 (uint64_t *, uint64x2_t) 34769 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 34770 34771 * void vst1q_s64 (int64_t *, int64x2_t) 34772 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 34773 34774 * void vst1q_f32 (float32_t *, float32x4_t) 34775 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 34776 34777 * void vst1q_p16 (poly16_t *, poly16x8_t) 34778 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 34779 34780 * void vst1q_p8 (poly8_t *, poly8x16_t) 34781 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 34782 34783 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) 34784 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34785 34786 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) 34787 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34788 34789 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) 34790 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34791 34792 * void vst1_lane_s32 (int32_t *, int32x2_t, const int) 34793 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34794 34795 * void vst1_lane_s16 (int16_t *, int16x4_t, const int) 34796 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34797 34798 * void vst1_lane_s8 (int8_t *, int8x8_t, const int) 34799 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34800 34801 * void vst1_lane_f32 (float32_t *, float32x2_t, const int) 34802 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34803 34804 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) 34805 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34806 34807 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) 34808 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34809 34810 * void vst1_lane_s64 (int64_t *, int64x1_t, const int) 34811 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34812 34813 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) 34814 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34815 34816 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) 34817 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34818 34819 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) 34820 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34821 34822 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) 34823 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34824 34825 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) 34826 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34827 34828 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) 34829 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34830 34831 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) 34832 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34833 34834 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) 34835 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 34836 34837 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) 34838 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 34839 34840 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) 34841 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 34842 34843 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) 34844 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34845 34846 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) 34847 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 34848 34849 6.56.3.77 Element/structure loads, VLD2 variants 34850 ................................................ 34851 34852 * uint32x2x2_t vld2_u32 (const uint32_t *) 34853 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 34854 34855 * uint16x4x2_t vld2_u16 (const uint16_t *) 34856 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 34857 34858 * uint8x8x2_t vld2_u8 (const uint8_t *) 34859 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 34860 34861 * int32x2x2_t vld2_s32 (const int32_t *) 34862 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 34863 34864 * int16x4x2_t vld2_s16 (const int16_t *) 34865 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 34866 34867 * int8x8x2_t vld2_s8 (const int8_t *) 34868 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 34869 34870 * float32x2x2_t vld2_f32 (const float32_t *) 34871 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 34872 34873 * poly16x4x2_t vld2_p16 (const poly16_t *) 34874 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 34875 34876 * poly8x8x2_t vld2_p8 (const poly8_t *) 34877 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 34878 34879 * uint64x1x2_t vld2_u64 (const uint64_t *) 34880 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 34881 34882 * int64x1x2_t vld2_s64 (const int64_t *) 34883 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 34884 34885 * uint32x4x2_t vld2q_u32 (const uint32_t *) 34886 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 34887 34888 * uint16x8x2_t vld2q_u16 (const uint16_t *) 34889 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 34890 34891 * uint8x16x2_t vld2q_u8 (const uint8_t *) 34892 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 34893 34894 * int32x4x2_t vld2q_s32 (const int32_t *) 34895 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 34896 34897 * int16x8x2_t vld2q_s16 (const int16_t *) 34898 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 34899 34900 * int8x16x2_t vld2q_s8 (const int8_t *) 34901 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 34902 34903 * float32x4x2_t vld2q_f32 (const float32_t *) 34904 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 34905 34906 * poly16x8x2_t vld2q_p16 (const poly16_t *) 34907 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 34908 34909 * poly8x16x2_t vld2q_p8 (const poly8_t *) 34910 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 34911 34912 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const 34913 int) 34914 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 34915 34916 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const 34917 int) 34918 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 34919 34920 * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) 34921 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 34922 34923 * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) 34924 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 34925 34926 * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) 34927 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 34928 34929 * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) 34930 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 34931 34932 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, 34933 const int) 34934 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 34935 34936 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const 34937 int) 34938 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 34939 34940 * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) 34941 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 34942 34943 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const 34944 int) 34945 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 34946 34947 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const 34948 int) 34949 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 34950 34951 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const 34952 int) 34953 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 34954 34955 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const 34956 int) 34957 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 34958 34959 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, 34960 const int) 34961 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 34962 34963 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const 34964 int) 34965 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 34966 34967 * uint32x2x2_t vld2_dup_u32 (const uint32_t *) 34968 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 34969 34970 * uint16x4x2_t vld2_dup_u16 (const uint16_t *) 34971 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 34972 34973 * uint8x8x2_t vld2_dup_u8 (const uint8_t *) 34974 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 34975 34976 * int32x2x2_t vld2_dup_s32 (const int32_t *) 34977 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 34978 34979 * int16x4x2_t vld2_dup_s16 (const int16_t *) 34980 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 34981 34982 * int8x8x2_t vld2_dup_s8 (const int8_t *) 34983 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 34984 34985 * float32x2x2_t vld2_dup_f32 (const float32_t *) 34986 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 34987 34988 * poly16x4x2_t vld2_dup_p16 (const poly16_t *) 34989 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 34990 34991 * poly8x8x2_t vld2_dup_p8 (const poly8_t *) 34992 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 34993 34994 * uint64x1x2_t vld2_dup_u64 (const uint64_t *) 34995 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 34996 34997 * int64x1x2_t vld2_dup_s64 (const int64_t *) 34998 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 34999 35000 6.56.3.78 Element/structure stores, VST2 variants 35001 ................................................. 35002 35003 * void vst2_u32 (uint32_t *, uint32x2x2_t) 35004 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35005 35006 * void vst2_u16 (uint16_t *, uint16x4x2_t) 35007 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35008 35009 * void vst2_u8 (uint8_t *, uint8x8x2_t) 35010 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35011 35012 * void vst2_s32 (int32_t *, int32x2x2_t) 35013 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35014 35015 * void vst2_s16 (int16_t *, int16x4x2_t) 35016 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35017 35018 * void vst2_s8 (int8_t *, int8x8x2_t) 35019 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35020 35021 * void vst2_f32 (float32_t *, float32x2x2_t) 35022 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35023 35024 * void vst2_p16 (poly16_t *, poly16x4x2_t) 35025 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35026 35027 * void vst2_p8 (poly8_t *, poly8x8x2_t) 35028 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35029 35030 * void vst2_u64 (uint64_t *, uint64x1x2_t) 35031 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 35032 35033 * void vst2_s64 (int64_t *, int64x1x2_t) 35034 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 35035 35036 * void vst2q_u32 (uint32_t *, uint32x4x2_t) 35037 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35038 35039 * void vst2q_u16 (uint16_t *, uint16x8x2_t) 35040 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35041 35042 * void vst2q_u8 (uint8_t *, uint8x16x2_t) 35043 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35044 35045 * void vst2q_s32 (int32_t *, int32x4x2_t) 35046 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35047 35048 * void vst2q_s16 (int16_t *, int16x8x2_t) 35049 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35050 35051 * void vst2q_s8 (int8_t *, int8x16x2_t) 35052 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35053 35054 * void vst2q_f32 (float32_t *, float32x4x2_t) 35055 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 35056 35057 * void vst2q_p16 (poly16_t *, poly16x8x2_t) 35058 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 35059 35060 * void vst2q_p8 (poly8_t *, poly8x16x2_t) 35061 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 35062 35063 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) 35064 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35065 35066 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) 35067 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35068 35069 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) 35070 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 35071 35072 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) 35073 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35074 35075 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) 35076 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35077 35078 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) 35079 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 35080 35081 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) 35082 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35083 35084 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) 35085 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35086 35087 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) 35088 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 35089 35090 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) 35091 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35092 35093 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) 35094 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35095 35096 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) 35097 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35098 35099 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) 35100 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35101 35102 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) 35103 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 35104 35105 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) 35106 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 35107 35108 6.56.3.79 Element/structure loads, VLD3 variants 35109 ................................................ 35110 35111 * uint32x2x3_t vld3_u32 (const uint32_t *) 35112 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35113 35114 * uint16x4x3_t vld3_u16 (const uint16_t *) 35115 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35116 35117 * uint8x8x3_t vld3_u8 (const uint8_t *) 35118 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35119 35120 * int32x2x3_t vld3_s32 (const int32_t *) 35121 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35122 35123 * int16x4x3_t vld3_s16 (const int16_t *) 35124 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35125 35126 * int8x8x3_t vld3_s8 (const int8_t *) 35127 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35128 35129 * float32x2x3_t vld3_f32 (const float32_t *) 35130 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35131 35132 * poly16x4x3_t vld3_p16 (const poly16_t *) 35133 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35134 35135 * poly8x8x3_t vld3_p8 (const poly8_t *) 35136 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35137 35138 * uint64x1x3_t vld3_u64 (const uint64_t *) 35139 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 35140 35141 * int64x1x3_t vld3_s64 (const int64_t *) 35142 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 35143 35144 * uint32x4x3_t vld3q_u32 (const uint32_t *) 35145 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35146 35147 * uint16x8x3_t vld3q_u16 (const uint16_t *) 35148 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35149 35150 * uint8x16x3_t vld3q_u8 (const uint8_t *) 35151 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35152 35153 * int32x4x3_t vld3q_s32 (const int32_t *) 35154 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35155 35156 * int16x8x3_t vld3q_s16 (const int16_t *) 35157 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35158 35159 * int8x16x3_t vld3q_s8 (const int8_t *) 35160 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35161 35162 * float32x4x3_t vld3q_f32 (const float32_t *) 35163 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 35164 35165 * poly16x8x3_t vld3q_p16 (const poly16_t *) 35166 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 35167 35168 * poly8x16x3_t vld3q_p8 (const poly8_t *) 35169 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 35170 35171 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const 35172 int) 35173 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35174 [R0]' 35175 35176 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const 35177 int) 35178 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35179 [R0]' 35180 35181 * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) 35182 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 35183 [R0]' 35184 35185 * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) 35186 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35187 [R0]' 35188 35189 * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) 35190 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35191 [R0]' 35192 35193 * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) 35194 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 35195 [R0]' 35196 35197 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, 35198 const int) 35199 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35200 [R0]' 35201 35202 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const 35203 int) 35204 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35205 [R0]' 35206 35207 * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) 35208 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 35209 [R0]' 35210 35211 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const 35212 int) 35213 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35214 [R0]' 35215 35216 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const 35217 int) 35218 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35219 [R0]' 35220 35221 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const 35222 int) 35223 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35224 [R0]' 35225 35226 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const 35227 int) 35228 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35229 [R0]' 35230 35231 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, 35232 const int) 35233 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 35234 [R0]' 35235 35236 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const 35237 int) 35238 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 35239 [R0]' 35240 35241 * uint32x2x3_t vld3_dup_u32 (const uint32_t *) 35242 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 35243 [R0]' 35244 35245 * uint16x4x3_t vld3_dup_u16 (const uint16_t *) 35246 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 35247 [R0]' 35248 35249 * uint8x8x3_t vld3_dup_u8 (const uint8_t *) 35250 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 35251 [R0]' 35252 35253 * int32x2x3_t vld3_dup_s32 (const int32_t *) 35254 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 35255 [R0]' 35256 35257 * int16x4x3_t vld3_dup_s16 (const int16_t *) 35258 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 35259 [R0]' 35260 35261 * int8x8x3_t vld3_dup_s8 (const int8_t *) 35262 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 35263 [R0]' 35264 35265 * float32x2x3_t vld3_dup_f32 (const float32_t *) 35266 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 35267 [R0]' 35268 35269 * poly16x4x3_t vld3_dup_p16 (const poly16_t *) 35270 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 35271 [R0]' 35272 35273 * poly8x8x3_t vld3_dup_p8 (const poly8_t *) 35274 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 35275 [R0]' 35276 35277 * uint64x1x3_t vld3_dup_u64 (const uint64_t *) 35278 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 35279 35280 * int64x1x3_t vld3_dup_s64 (const int64_t *) 35281 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 35282 35283 6.56.3.80 Element/structure stores, VST3 variants 35284 ................................................. 35285 35286 * void vst3_u32 (uint32_t *, uint32x2x3_t) 35287 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 35288 35289 * void vst3_u16 (uint16_t *, uint16x4x3_t) 35290 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 35291 35292 * void vst3_u8 (uint8_t *, uint8x8x3_t) 35293 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 35294 35295 * void vst3_s32 (int32_t *, int32x2x3_t) 35296 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 35297 35298 * void vst3_s16 (int16_t *, int16x4x3_t) 35299 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 35300 35301 * void vst3_s8 (int8_t *, int8x8x3_t) 35302 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 35303 35304 * void vst3_f32 (float32_t *, float32x2x3_t) 35305 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 35306 35307 * void vst3_p16 (poly16_t *, poly16x4x3_t) 35308 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 35309 35310 * void vst3_p8 (poly8_t *, poly8x8x3_t) 35311 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 35312 35313 * void vst3_u64 (uint64_t *, uint64x1x3_t) 35314 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 35315 35316 * void vst3_s64 (int64_t *, int64x1x3_t) 35317 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 35318 35319 * void vst3q_u32 (uint32_t *, uint32x4x3_t) 35320 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 35321 35322 * void vst3q_u16 (uint16_t *, uint16x8x3_t) 35323 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 35324 35325 * void vst3q_u8 (uint8_t *, uint8x16x3_t) 35326 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 35327 35328 * void vst3q_s32 (int32_t *, int32x4x3_t) 35329 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 35330 35331 * void vst3q_s16 (int16_t *, int16x8x3_t) 35332 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 35333 35334 * void vst3q_s8 (int8_t *, int8x16x3_t) 35335 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 35336 35337 * void vst3q_f32 (float32_t *, float32x4x3_t) 35338 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 35339 35340 * void vst3q_p16 (poly16_t *, poly16x8x3_t) 35341 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 35342 35343 * void vst3q_p8 (poly8_t *, poly8x16x3_t) 35344 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 35345 35346 * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) 35347 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35348 [R0]' 35349 35350 * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) 35351 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35352 [R0]' 35353 35354 * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) 35355 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 35356 [R0]' 35357 35358 * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) 35359 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35360 [R0]' 35361 35362 * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) 35363 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35364 [R0]' 35365 35366 * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) 35367 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 35368 [R0]' 35369 35370 * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) 35371 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35372 [R0]' 35373 35374 * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) 35375 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35376 [R0]' 35377 35378 * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) 35379 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 35380 [R0]' 35381 35382 * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) 35383 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35384 [R0]' 35385 35386 * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) 35387 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35388 [R0]' 35389 35390 * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) 35391 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35392 [R0]' 35393 35394 * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) 35395 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35396 [R0]' 35397 35398 * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) 35399 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 35400 [R0]' 35401 35402 * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) 35403 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 35404 [R0]' 35405 35406 6.56.3.81 Element/structure loads, VLD4 variants 35407 ................................................ 35408 35409 * uint32x2x4_t vld4_u32 (const uint32_t *) 35410 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35411 35412 * uint16x4x4_t vld4_u16 (const uint16_t *) 35413 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35414 35415 * uint8x8x4_t vld4_u8 (const uint8_t *) 35416 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35417 35418 * int32x2x4_t vld4_s32 (const int32_t *) 35419 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35420 35421 * int16x4x4_t vld4_s16 (const int16_t *) 35422 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35423 35424 * int8x8x4_t vld4_s8 (const int8_t *) 35425 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35426 35427 * float32x2x4_t vld4_f32 (const float32_t *) 35428 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35429 35430 * poly16x4x4_t vld4_p16 (const poly16_t *) 35431 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35432 35433 * poly8x8x4_t vld4_p8 (const poly8_t *) 35434 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35435 35436 * uint64x1x4_t vld4_u64 (const uint64_t *) 35437 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 35438 35439 * int64x1x4_t vld4_s64 (const int64_t *) 35440 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 35441 35442 * uint32x4x4_t vld4q_u32 (const uint32_t *) 35443 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35444 35445 * uint16x8x4_t vld4q_u16 (const uint16_t *) 35446 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35447 35448 * uint8x16x4_t vld4q_u8 (const uint8_t *) 35449 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35450 35451 * int32x4x4_t vld4q_s32 (const int32_t *) 35452 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35453 35454 * int16x8x4_t vld4q_s16 (const int16_t *) 35455 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35456 35457 * int8x16x4_t vld4q_s8 (const int8_t *) 35458 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35459 35460 * float32x4x4_t vld4q_f32 (const float32_t *) 35461 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 35462 35463 * poly16x8x4_t vld4q_p16 (const poly16_t *) 35464 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 35465 35466 * poly8x16x4_t vld4q_p8 (const poly8_t *) 35467 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 35468 35469 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const 35470 int) 35471 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35472 D3[0]}, [R0]' 35473 35474 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const 35475 int) 35476 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35477 D3[0]}, [R0]' 35478 35479 * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) 35480 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 35481 D3[0]}, [R0]' 35482 35483 * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) 35484 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35485 D3[0]}, [R0]' 35486 35487 * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) 35488 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35489 D3[0]}, [R0]' 35490 35491 * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) 35492 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 35493 D3[0]}, [R0]' 35494 35495 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, 35496 const int) 35497 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35498 D3[0]}, [R0]' 35499 35500 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const 35501 int) 35502 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35503 D3[0]}, [R0]' 35504 35505 * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) 35506 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 35507 D3[0]}, [R0]' 35508 35509 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const 35510 int) 35511 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35512 D3[0]}, [R0]' 35513 35514 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const 35515 int) 35516 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35517 D3[0]}, [R0]' 35518 35519 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const 35520 int) 35521 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35522 D3[0]}, [R0]' 35523 35524 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const 35525 int) 35526 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35527 D3[0]}, [R0]' 35528 35529 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, 35530 const int) 35531 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 35532 D3[0]}, [R0]' 35533 35534 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const 35535 int) 35536 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 35537 D3[0]}, [R0]' 35538 35539 * uint32x2x4_t vld4_dup_u32 (const uint32_t *) 35540 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 35541 D3[]}, [R0]' 35542 35543 * uint16x4x4_t vld4_dup_u16 (const uint16_t *) 35544 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 35545 D3[]}, [R0]' 35546 35547 * uint8x8x4_t vld4_dup_u8 (const uint8_t *) 35548 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 35549 D3[]}, [R0]' 35550 35551 * int32x2x4_t vld4_dup_s32 (const int32_t *) 35552 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 35553 D3[]}, [R0]' 35554 35555 * int16x4x4_t vld4_dup_s16 (const int16_t *) 35556 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 35557 D3[]}, [R0]' 35558 35559 * int8x8x4_t vld4_dup_s8 (const int8_t *) 35560 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 35561 D3[]}, [R0]' 35562 35563 * float32x2x4_t vld4_dup_f32 (const float32_t *) 35564 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 35565 D3[]}, [R0]' 35566 35567 * poly16x4x4_t vld4_dup_p16 (const poly16_t *) 35568 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 35569 D3[]}, [R0]' 35570 35571 * poly8x8x4_t vld4_dup_p8 (const poly8_t *) 35572 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 35573 D3[]}, [R0]' 35574 35575 * uint64x1x4_t vld4_dup_u64 (const uint64_t *) 35576 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 35577 35578 * int64x1x4_t vld4_dup_s64 (const int64_t *) 35579 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 35580 35581 6.56.3.82 Element/structure stores, VST4 variants 35582 ................................................. 35583 35584 * void vst4_u32 (uint32_t *, uint32x2x4_t) 35585 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35586 35587 * void vst4_u16 (uint16_t *, uint16x4x4_t) 35588 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35589 35590 * void vst4_u8 (uint8_t *, uint8x8x4_t) 35591 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35592 35593 * void vst4_s32 (int32_t *, int32x2x4_t) 35594 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35595 35596 * void vst4_s16 (int16_t *, int16x4x4_t) 35597 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35598 35599 * void vst4_s8 (int8_t *, int8x8x4_t) 35600 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35601 35602 * void vst4_f32 (float32_t *, float32x2x4_t) 35603 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35604 35605 * void vst4_p16 (poly16_t *, poly16x4x4_t) 35606 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35607 35608 * void vst4_p8 (poly8_t *, poly8x8x4_t) 35609 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35610 35611 * void vst4_u64 (uint64_t *, uint64x1x4_t) 35612 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 35613 35614 * void vst4_s64 (int64_t *, int64x1x4_t) 35615 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 35616 35617 * void vst4q_u32 (uint32_t *, uint32x4x4_t) 35618 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35619 35620 * void vst4q_u16 (uint16_t *, uint16x8x4_t) 35621 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35622 35623 * void vst4q_u8 (uint8_t *, uint8x16x4_t) 35624 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35625 35626 * void vst4q_s32 (int32_t *, int32x4x4_t) 35627 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35628 35629 * void vst4q_s16 (int16_t *, int16x8x4_t) 35630 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35631 35632 * void vst4q_s8 (int8_t *, int8x16x4_t) 35633 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35634 35635 * void vst4q_f32 (float32_t *, float32x4x4_t) 35636 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 35637 35638 * void vst4q_p16 (poly16_t *, poly16x8x4_t) 35639 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 35640 35641 * void vst4q_p8 (poly8_t *, poly8x16x4_t) 35642 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 35643 35644 * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) 35645 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35646 D3[0]}, [R0]' 35647 35648 * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) 35649 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35650 D3[0]}, [R0]' 35651 35652 * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) 35653 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 35654 D3[0]}, [R0]' 35655 35656 * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) 35657 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35658 D3[0]}, [R0]' 35659 35660 * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) 35661 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35662 D3[0]}, [R0]' 35663 35664 * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) 35665 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 35666 D3[0]}, [R0]' 35667 35668 * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) 35669 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35670 D3[0]}, [R0]' 35671 35672 * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) 35673 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35674 D3[0]}, [R0]' 35675 35676 * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) 35677 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 35678 D3[0]}, [R0]' 35679 35680 * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) 35681 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35682 D3[0]}, [R0]' 35683 35684 * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) 35685 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35686 D3[0]}, [R0]' 35687 35688 * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) 35689 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35690 D3[0]}, [R0]' 35691 35692 * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) 35693 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35694 D3[0]}, [R0]' 35695 35696 * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) 35697 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 35698 D3[0]}, [R0]' 35699 35700 * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) 35701 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 35702 D3[0]}, [R0]' 35703 35704 6.56.3.83 Logical operations (AND) 35705 .................................. 35706 35707 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) 35708 _Form of expected instruction(s):_ `vand D0, D0, D0' 35709 35710 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) 35711 _Form of expected instruction(s):_ `vand D0, D0, D0' 35712 35713 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) 35714 _Form of expected instruction(s):_ `vand D0, D0, D0' 35715 35716 * int32x2_t vand_s32 (int32x2_t, int32x2_t) 35717 _Form of expected instruction(s):_ `vand D0, D0, D0' 35718 35719 * int16x4_t vand_s16 (int16x4_t, int16x4_t) 35720 _Form of expected instruction(s):_ `vand D0, D0, D0' 35721 35722 * int8x8_t vand_s8 (int8x8_t, int8x8_t) 35723 _Form of expected instruction(s):_ `vand D0, D0, D0' 35724 35725 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) 35726 35727 * int64x1_t vand_s64 (int64x1_t, int64x1_t) 35728 35729 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) 35730 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35731 35732 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) 35733 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35734 35735 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) 35736 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35737 35738 * int32x4_t vandq_s32 (int32x4_t, int32x4_t) 35739 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35740 35741 * int16x8_t vandq_s16 (int16x8_t, int16x8_t) 35742 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35743 35744 * int8x16_t vandq_s8 (int8x16_t, int8x16_t) 35745 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35746 35747 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) 35748 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35749 35750 * int64x2_t vandq_s64 (int64x2_t, int64x2_t) 35751 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 35752 35753 6.56.3.84 Logical operations (OR) 35754 ................................. 35755 35756 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) 35757 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35758 35759 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) 35760 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35761 35762 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) 35763 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35764 35765 * int32x2_t vorr_s32 (int32x2_t, int32x2_t) 35766 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35767 35768 * int16x4_t vorr_s16 (int16x4_t, int16x4_t) 35769 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35770 35771 * int8x8_t vorr_s8 (int8x8_t, int8x8_t) 35772 _Form of expected instruction(s):_ `vorr D0, D0, D0' 35773 35774 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) 35775 35776 * int64x1_t vorr_s64 (int64x1_t, int64x1_t) 35777 35778 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) 35779 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35780 35781 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) 35782 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35783 35784 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) 35785 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35786 35787 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) 35788 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35789 35790 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) 35791 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35792 35793 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) 35794 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35795 35796 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) 35797 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35798 35799 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) 35800 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 35801 35802 6.56.3.85 Logical operations (exclusive OR) 35803 ........................................... 35804 35805 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) 35806 _Form of expected instruction(s):_ `veor D0, D0, D0' 35807 35808 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) 35809 _Form of expected instruction(s):_ `veor D0, D0, D0' 35810 35811 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) 35812 _Form of expected instruction(s):_ `veor D0, D0, D0' 35813 35814 * int32x2_t veor_s32 (int32x2_t, int32x2_t) 35815 _Form of expected instruction(s):_ `veor D0, D0, D0' 35816 35817 * int16x4_t veor_s16 (int16x4_t, int16x4_t) 35818 _Form of expected instruction(s):_ `veor D0, D0, D0' 35819 35820 * int8x8_t veor_s8 (int8x8_t, int8x8_t) 35821 _Form of expected instruction(s):_ `veor D0, D0, D0' 35822 35823 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) 35824 35825 * int64x1_t veor_s64 (int64x1_t, int64x1_t) 35826 35827 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) 35828 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35829 35830 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) 35831 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35832 35833 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) 35834 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35835 35836 * int32x4_t veorq_s32 (int32x4_t, int32x4_t) 35837 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35838 35839 * int16x8_t veorq_s16 (int16x8_t, int16x8_t) 35840 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35841 35842 * int8x16_t veorq_s8 (int8x16_t, int8x16_t) 35843 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35844 35845 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) 35846 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35847 35848 * int64x2_t veorq_s64 (int64x2_t, int64x2_t) 35849 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 35850 35851 6.56.3.86 Logical operations (AND-NOT) 35852 ...................................... 35853 35854 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) 35855 _Form of expected instruction(s):_ `vbic D0, D0, D0' 35856 35857 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) 35858 _Form of expected instruction(s):_ `vbic D0, D0, D0' 35859 35860 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) 35861 _Form of expected instruction(s):_ `vbic D0, D0, D0' 35862 35863 * int32x2_t vbic_s32 (int32x2_t, int32x2_t) 35864 _Form of expected instruction(s):_ `vbic D0, D0, D0' 35865 35866 * int16x4_t vbic_s16 (int16x4_t, int16x4_t) 35867 _Form of expected instruction(s):_ `vbic D0, D0, D0' 35868 35869 * int8x8_t vbic_s8 (int8x8_t, int8x8_t) 35870 _Form of expected instruction(s):_ `vbic D0, D0, D0' 35871 35872 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) 35873 35874 * int64x1_t vbic_s64 (int64x1_t, int64x1_t) 35875 35876 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) 35877 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 35878 35879 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) 35880 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 35881 35882 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) 35883 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 35884 35885 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) 35886 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 35887 35888 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) 35889 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 35890 35891 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) 35892 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 35893 35894 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) 35895 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 35896 35897 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) 35898 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 35899 35900 6.56.3.87 Logical operations (OR-NOT) 35901 ..................................... 35902 35903 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) 35904 _Form of expected instruction(s):_ `vorn D0, D0, D0' 35905 35906 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) 35907 _Form of expected instruction(s):_ `vorn D0, D0, D0' 35908 35909 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) 35910 _Form of expected instruction(s):_ `vorn D0, D0, D0' 35911 35912 * int32x2_t vorn_s32 (int32x2_t, int32x2_t) 35913 _Form of expected instruction(s):_ `vorn D0, D0, D0' 35914 35915 * int16x4_t vorn_s16 (int16x4_t, int16x4_t) 35916 _Form of expected instruction(s):_ `vorn D0, D0, D0' 35917 35918 * int8x8_t vorn_s8 (int8x8_t, int8x8_t) 35919 _Form of expected instruction(s):_ `vorn D0, D0, D0' 35920 35921 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) 35922 35923 * int64x1_t vorn_s64 (int64x1_t, int64x1_t) 35924 35925 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) 35926 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 35927 35928 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) 35929 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 35930 35931 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) 35932 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 35933 35934 * int32x4_t vornq_s32 (int32x4_t, int32x4_t) 35935 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 35936 35937 * int16x8_t vornq_s16 (int16x8_t, int16x8_t) 35938 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 35939 35940 * int8x16_t vornq_s8 (int8x16_t, int8x16_t) 35941 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 35942 35943 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) 35944 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 35945 35946 * int64x2_t vornq_s64 (int64x2_t, int64x2_t) 35947 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 35948 35949 6.56.3.88 Reinterpret casts 35950 ........................... 35951 35952 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) 35953 35954 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) 35955 35956 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) 35957 35958 * poly8x8_t vreinterpret_p8_s32 (int32x2_t) 35959 35960 * poly8x8_t vreinterpret_p8_s16 (int16x4_t) 35961 35962 * poly8x8_t vreinterpret_p8_s8 (int8x8_t) 35963 35964 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) 35965 35966 * poly8x8_t vreinterpret_p8_s64 (int64x1_t) 35967 35968 * poly8x8_t vreinterpret_p8_f32 (float32x2_t) 35969 35970 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) 35971 35972 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) 35973 35974 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) 35975 35976 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) 35977 35978 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) 35979 35980 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) 35981 35982 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) 35983 35984 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) 35985 35986 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) 35987 35988 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) 35989 35990 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) 35991 35992 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) 35993 35994 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) 35995 35996 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) 35997 35998 * poly16x4_t vreinterpret_p16_s32 (int32x2_t) 35999 36000 * poly16x4_t vreinterpret_p16_s16 (int16x4_t) 36001 36002 * poly16x4_t vreinterpret_p16_s8 (int8x8_t) 36003 36004 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) 36005 36006 * poly16x4_t vreinterpret_p16_s64 (int64x1_t) 36007 36008 * poly16x4_t vreinterpret_p16_f32 (float32x2_t) 36009 36010 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) 36011 36012 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) 36013 36014 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) 36015 36016 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) 36017 36018 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) 36019 36020 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) 36021 36022 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) 36023 36024 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) 36025 36026 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) 36027 36028 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) 36029 36030 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) 36031 36032 * float32x2_t vreinterpret_f32_u32 (uint32x2_t) 36033 36034 * float32x2_t vreinterpret_f32_u16 (uint16x4_t) 36035 36036 * float32x2_t vreinterpret_f32_u8 (uint8x8_t) 36037 36038 * float32x2_t vreinterpret_f32_s32 (int32x2_t) 36039 36040 * float32x2_t vreinterpret_f32_s16 (int16x4_t) 36041 36042 * float32x2_t vreinterpret_f32_s8 (int8x8_t) 36043 36044 * float32x2_t vreinterpret_f32_u64 (uint64x1_t) 36045 36046 * float32x2_t vreinterpret_f32_s64 (int64x1_t) 36047 36048 * float32x2_t vreinterpret_f32_p16 (poly16x4_t) 36049 36050 * float32x2_t vreinterpret_f32_p8 (poly8x8_t) 36051 36052 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) 36053 36054 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) 36055 36056 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) 36057 36058 * float32x4_t vreinterpretq_f32_s32 (int32x4_t) 36059 36060 * float32x4_t vreinterpretq_f32_s16 (int16x8_t) 36061 36062 * float32x4_t vreinterpretq_f32_s8 (int8x16_t) 36063 36064 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) 36065 36066 * float32x4_t vreinterpretq_f32_s64 (int64x2_t) 36067 36068 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) 36069 36070 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) 36071 36072 * int64x1_t vreinterpret_s64_u32 (uint32x2_t) 36073 36074 * int64x1_t vreinterpret_s64_u16 (uint16x4_t) 36075 36076 * int64x1_t vreinterpret_s64_u8 (uint8x8_t) 36077 36078 * int64x1_t vreinterpret_s64_s32 (int32x2_t) 36079 36080 * int64x1_t vreinterpret_s64_s16 (int16x4_t) 36081 36082 * int64x1_t vreinterpret_s64_s8 (int8x8_t) 36083 36084 * int64x1_t vreinterpret_s64_u64 (uint64x1_t) 36085 36086 * int64x1_t vreinterpret_s64_f32 (float32x2_t) 36087 36088 * int64x1_t vreinterpret_s64_p16 (poly16x4_t) 36089 36090 * int64x1_t vreinterpret_s64_p8 (poly8x8_t) 36091 36092 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) 36093 36094 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) 36095 36096 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) 36097 36098 * int64x2_t vreinterpretq_s64_s32 (int32x4_t) 36099 36100 * int64x2_t vreinterpretq_s64_s16 (int16x8_t) 36101 36102 * int64x2_t vreinterpretq_s64_s8 (int8x16_t) 36103 36104 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) 36105 36106 * int64x2_t vreinterpretq_s64_f32 (float32x4_t) 36107 36108 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) 36109 36110 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) 36111 36112 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) 36113 36114 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) 36115 36116 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) 36117 36118 * uint64x1_t vreinterpret_u64_s32 (int32x2_t) 36119 36120 * uint64x1_t vreinterpret_u64_s16 (int16x4_t) 36121 36122 * uint64x1_t vreinterpret_u64_s8 (int8x8_t) 36123 36124 * uint64x1_t vreinterpret_u64_s64 (int64x1_t) 36125 36126 * uint64x1_t vreinterpret_u64_f32 (float32x2_t) 36127 36128 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) 36129 36130 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) 36131 36132 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) 36133 36134 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) 36135 36136 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) 36137 36138 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) 36139 36140 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) 36141 36142 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) 36143 36144 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) 36145 36146 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) 36147 36148 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) 36149 36150 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) 36151 36152 * int8x8_t vreinterpret_s8_u32 (uint32x2_t) 36153 36154 * int8x8_t vreinterpret_s8_u16 (uint16x4_t) 36155 36156 * int8x8_t vreinterpret_s8_u8 (uint8x8_t) 36157 36158 * int8x8_t vreinterpret_s8_s32 (int32x2_t) 36159 36160 * int8x8_t vreinterpret_s8_s16 (int16x4_t) 36161 36162 * int8x8_t vreinterpret_s8_u64 (uint64x1_t) 36163 36164 * int8x8_t vreinterpret_s8_s64 (int64x1_t) 36165 36166 * int8x8_t vreinterpret_s8_f32 (float32x2_t) 36167 36168 * int8x8_t vreinterpret_s8_p16 (poly16x4_t) 36169 36170 * int8x8_t vreinterpret_s8_p8 (poly8x8_t) 36171 36172 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) 36173 36174 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) 36175 36176 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) 36177 36178 * int8x16_t vreinterpretq_s8_s32 (int32x4_t) 36179 36180 * int8x16_t vreinterpretq_s8_s16 (int16x8_t) 36181 36182 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) 36183 36184 * int8x16_t vreinterpretq_s8_s64 (int64x2_t) 36185 36186 * int8x16_t vreinterpretq_s8_f32 (float32x4_t) 36187 36188 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) 36189 36190 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) 36191 36192 * int16x4_t vreinterpret_s16_u32 (uint32x2_t) 36193 36194 * int16x4_t vreinterpret_s16_u16 (uint16x4_t) 36195 36196 * int16x4_t vreinterpret_s16_u8 (uint8x8_t) 36197 36198 * int16x4_t vreinterpret_s16_s32 (int32x2_t) 36199 36200 * int16x4_t vreinterpret_s16_s8 (int8x8_t) 36201 36202 * int16x4_t vreinterpret_s16_u64 (uint64x1_t) 36203 36204 * int16x4_t vreinterpret_s16_s64 (int64x1_t) 36205 36206 * int16x4_t vreinterpret_s16_f32 (float32x2_t) 36207 36208 * int16x4_t vreinterpret_s16_p16 (poly16x4_t) 36209 36210 * int16x4_t vreinterpret_s16_p8 (poly8x8_t) 36211 36212 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) 36213 36214 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) 36215 36216 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) 36217 36218 * int16x8_t vreinterpretq_s16_s32 (int32x4_t) 36219 36220 * int16x8_t vreinterpretq_s16_s8 (int8x16_t) 36221 36222 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) 36223 36224 * int16x8_t vreinterpretq_s16_s64 (int64x2_t) 36225 36226 * int16x8_t vreinterpretq_s16_f32 (float32x4_t) 36227 36228 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) 36229 36230 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) 36231 36232 * int32x2_t vreinterpret_s32_u32 (uint32x2_t) 36233 36234 * int32x2_t vreinterpret_s32_u16 (uint16x4_t) 36235 36236 * int32x2_t vreinterpret_s32_u8 (uint8x8_t) 36237 36238 * int32x2_t vreinterpret_s32_s16 (int16x4_t) 36239 36240 * int32x2_t vreinterpret_s32_s8 (int8x8_t) 36241 36242 * int32x2_t vreinterpret_s32_u64 (uint64x1_t) 36243 36244 * int32x2_t vreinterpret_s32_s64 (int64x1_t) 36245 36246 * int32x2_t vreinterpret_s32_f32 (float32x2_t) 36247 36248 * int32x2_t vreinterpret_s32_p16 (poly16x4_t) 36249 36250 * int32x2_t vreinterpret_s32_p8 (poly8x8_t) 36251 36252 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) 36253 36254 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) 36255 36256 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) 36257 36258 * int32x4_t vreinterpretq_s32_s16 (int16x8_t) 36259 36260 * int32x4_t vreinterpretq_s32_s8 (int8x16_t) 36261 36262 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) 36263 36264 * int32x4_t vreinterpretq_s32_s64 (int64x2_t) 36265 36266 * int32x4_t vreinterpretq_s32_f32 (float32x4_t) 36267 36268 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) 36269 36270 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) 36271 36272 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) 36273 36274 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) 36275 36276 * uint8x8_t vreinterpret_u8_s32 (int32x2_t) 36277 36278 * uint8x8_t vreinterpret_u8_s16 (int16x4_t) 36279 36280 * uint8x8_t vreinterpret_u8_s8 (int8x8_t) 36281 36282 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) 36283 36284 * uint8x8_t vreinterpret_u8_s64 (int64x1_t) 36285 36286 * uint8x8_t vreinterpret_u8_f32 (float32x2_t) 36287 36288 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) 36289 36290 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) 36291 36292 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) 36293 36294 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) 36295 36296 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) 36297 36298 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) 36299 36300 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) 36301 36302 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) 36303 36304 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) 36305 36306 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) 36307 36308 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) 36309 36310 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) 36311 36312 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) 36313 36314 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) 36315 36316 * uint16x4_t vreinterpret_u16_s32 (int32x2_t) 36317 36318 * uint16x4_t vreinterpret_u16_s16 (int16x4_t) 36319 36320 * uint16x4_t vreinterpret_u16_s8 (int8x8_t) 36321 36322 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) 36323 36324 * uint16x4_t vreinterpret_u16_s64 (int64x1_t) 36325 36326 * uint16x4_t vreinterpret_u16_f32 (float32x2_t) 36327 36328 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) 36329 36330 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) 36331 36332 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) 36333 36334 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) 36335 36336 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) 36337 36338 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) 36339 36340 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) 36341 36342 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) 36343 36344 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) 36345 36346 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) 36347 36348 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) 36349 36350 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) 36351 36352 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) 36353 36354 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) 36355 36356 * uint32x2_t vreinterpret_u32_s32 (int32x2_t) 36357 36358 * uint32x2_t vreinterpret_u32_s16 (int16x4_t) 36359 36360 * uint32x2_t vreinterpret_u32_s8 (int8x8_t) 36361 36362 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) 36363 36364 * uint32x2_t vreinterpret_u32_s64 (int64x1_t) 36365 36366 * uint32x2_t vreinterpret_u32_f32 (float32x2_t) 36367 36368 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) 36369 36370 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) 36371 36372 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) 36373 36374 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) 36375 36376 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) 36377 36378 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) 36379 36380 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) 36381 36382 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) 36383 36384 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) 36385 36386 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) 36387 36388 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) 36389 36390 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) 36391 36392 36393 File: gcc.info, Node: AVR Built-in Functions, Next: Blackfin Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins 36394 36395 6.56.4 AVR Built-in Functions 36396 ----------------------------- 36397 36398 For each built-in function for AVR, there is an equally named, 36399 uppercase built-in macro defined. That way users can easily query if or 36400 if not a specific built-in is implemented or not. For example, if 36401 `__builtin_avr_nop' is available the macro `__BUILTIN_AVR_NOP' is 36402 defined to `1' and undefined otherwise. 36403 36404 The following built-in functions map to the respective machine 36405 instruction, i.e. `nop', `sei', `cli', `sleep', `wdr', `swap', `fmul', 36406 `fmuls' resp. `fmulsu'. The three `fmul*' built-ins are implemented as 36407 library call if no hardware multiplier is available. 36408 36409 void __builtin_avr_nop (void) 36410 void __builtin_avr_sei (void) 36411 void __builtin_avr_cli (void) 36412 void __builtin_avr_sleep (void) 36413 void __builtin_avr_wdr (void) 36414 unsigned char __builtin_avr_swap (unsigned char) 36415 unsigned int __builtin_avr_fmul (unsigned char, unsigned char) 36416 int __builtin_avr_fmuls (char, char) 36417 int __builtin_avr_fmulsu (char, unsigned char) 36418 36419 In order to delay execution for a specific number of cycles, GCC 36420 implements 36421 void __builtin_avr_delay_cycles (unsigned long ticks) 36422 36423 `ticks' is the number of ticks to delay execution. Note that this 36424 built-in does not take into account the effect of interrupts that might 36425 increase delay time. `ticks' must be a compile-time integer constant; 36426 delays with a variable number of cycles are not supported. 36427 36428 char __builtin_avr_flash_segment (const __memx void*) 36429 36430 This built-in takes a byte address to the 24-bit *note address space: 36431 AVR Named Address Spaces. `__memx' and returns the number of the flash 36432 segment (the 64 KiB chunk) where the address points to. Counting 36433 starts at `0'. If the address does not point to flash memory, return 36434 `-1'. 36435 36436 unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val) 36437 36438 Insert bits from BITS into VAL and return the resulting value. The 36439 nibbles of MAP determine how the insertion is performed: Let X be the 36440 N-th nibble of MAP 36441 1. If X is `0xf', then the N-th bit of VAL is returned unaltered. 36442 36443 2. If X is in the range 0...7, then the N-th result bit is set to the 36444 X-th bit of BITS 36445 36446 3. If X is in the range 8...`0xe', then the N-th result bit is 36447 undefined. 36448 36449 One typical use case for this built-in is adjusting input and output 36450 values to non-contiguous port layouts. Some examples: 36451 36452 // same as val, bits is unused 36453 __builtin_avr_insert_bits (0xffffffff, bits, val) 36454 36455 // same as bits, val is unused 36456 __builtin_avr_insert_bits (0x76543210, bits, val) 36457 36458 // same as rotating bits by 4 36459 __builtin_avr_insert_bits (0x32107654, bits, 0) 36460 36461 // high nibble of result is the high nibble of val 36462 // low nibble of result is the low nibble of bits 36463 __builtin_avr_insert_bits (0xffff3210, bits, val) 36464 36465 // reverse the bit order of bits 36466 __builtin_avr_insert_bits (0x01234567, bits, 0) 36467 36468 36469 File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: AVR Built-in Functions, Up: Target Builtins 36470 36471 6.56.5 Blackfin Built-in Functions 36472 ---------------------------------- 36473 36474 Currently, there are two Blackfin-specific built-in functions. These 36475 are used for generating `CSYNC' and `SSYNC' machine insns without using 36476 inline assembly; by using these built-in functions the compiler can 36477 automatically add workarounds for hardware errata involving these 36478 instructions. These functions are named as follows: 36479 36480 void __builtin_bfin_csync (void) 36481 void __builtin_bfin_ssync (void) 36482 36483 36484 File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 36485 36486 6.56.6 FR-V Built-in Functions 36487 ------------------------------ 36488 36489 GCC provides many FR-V-specific built-in functions. In general, these 36490 functions are intended to be compatible with those described by `FR-V 36491 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 36492 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the GCC forms of 36493 which pass 128-bit values by pointer rather than by value. 36494 36495 Most of the functions are named after specific FR-V instructions. 36496 Such functions are said to be "directly mapped" and are summarized here 36497 in tabular form. 36498 36499 * Menu: 36500 36501 * Argument Types:: 36502 * Directly-mapped Integer Functions:: 36503 * Directly-mapped Media Functions:: 36504 * Raw read/write Functions:: 36505 * Other Built-in Functions:: 36506 36507 36508 File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 36509 36510 6.56.6.1 Argument Types 36511 ....................... 36512 36513 The arguments to the built-in functions can be divided into three 36514 groups: register numbers, compile-time constants and run-time values. 36515 In order to make this classification clear at a glance, the arguments 36516 and return values are given the following pseudo types: 36517 36518 Pseudo type Real C type Constant? Description 36519 `uh' `unsigned short' No an unsigned halfword 36520 `uw1' `unsigned int' No an unsigned word 36521 `sw1' `int' No a signed word 36522 `uw2' `unsigned long long' No an unsigned doubleword 36523 `sw2' `long long' No a signed doubleword 36524 `const' `int' Yes an integer constant 36525 `acc' `int' Yes an ACC register number 36526 `iacc' `int' Yes an IACC register number 36527 36528 These pseudo types are not defined by GCC, they are simply a notational 36529 convenience used in this manual. 36530 36531 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 36532 run time. They correspond to register operands in the underlying FR-V 36533 instructions. 36534 36535 `const' arguments represent immediate operands in the underlying FR-V 36536 instructions. They must be compile-time constants. 36537 36538 `acc' arguments are evaluated at compile time and specify the number 36539 of an accumulator register. For example, an `acc' argument of 2 36540 selects the ACC2 register. 36541 36542 `iacc' arguments are similar to `acc' arguments but specify the number 36543 of an IACC register. See *note Other Built-in Functions:: for more 36544 details. 36545 36546 36547 File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 36548 36549 6.56.6.2 Directly-mapped Integer Functions 36550 .......................................... 36551 36552 The functions listed below map directly to FR-V I-type instructions. 36553 36554 Function prototype Example usage Assembly output 36555 `sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 36556 `sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 36557 `sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 36558 `sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 36559 `void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 36560 `void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 36561 `void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 36562 `sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 36563 `sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 36564 `uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 36565 36566 36567 File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 36568 36569 6.56.6.3 Directly-mapped Media Functions 36570 ........................................ 36571 36572 The functions listed below map directly to FR-V M-type instructions. 36573 36574 Function prototype Example usage Assembly output 36575 `uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 36576 `void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 36577 `sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 36578 `uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 36579 `uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 36580 `void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 36581 `uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 36582 `uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 36583 `void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 36584 `void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 36585 `void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 36586 `uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 36587 `uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 36588 `uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 36589 `uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 36590 `void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 36591 `void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 36592 `void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 36593 `void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 36594 `uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 36595 `uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 36596 `void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 36597 `void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 36598 `uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 36599 `uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 36600 `uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 36601 `void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 36602 `void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 36603 `uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 36604 `uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 36605 `uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 36606 `sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 36607 `uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 36608 `sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 36609 `uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 36610 `sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 36611 `uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 36612 `void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 36613 `void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 36614 `void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 36615 `void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 36616 `void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 36617 `void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 36618 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 36619 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 36620 `uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 36621 `uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 36622 `uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 36623 `sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 36624 `uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 36625 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 36626 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 36627 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 36628 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 36629 `sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 36630 `sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 36631 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 36632 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 36633 `void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 36634 sw2)' 36635 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 36636 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 36637 `void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 36638 sw2)' 36639 `void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 36640 uw2)' 36641 `sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 36642 `uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 36643 `sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 36644 `sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 36645 `uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 36646 `void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 36647 sw2)' 36648 `void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 36649 sw2)' 36650 `uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 36651 `uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 36652 `uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 36653 `uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 36654 `sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 36655 `uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 36656 `uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 36657 `sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 36658 `uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 36659 `void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 36660 `sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 36661 `uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 36662 `void __MTRAP (void)' `__MTRAP ()' `MTRAP' 36663 `uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 36664 `uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 36665 `void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 36666 `void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 36667 `uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 36668 36669 36670 File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 36671 36672 6.56.6.4 Raw read/write Functions 36673 ................................. 36674 36675 This sections describes built-in functions related to read and write 36676 instructions to access memory. These functions generate `membar' 36677 instructions to flush the I/O load and stores where appropriate, as 36678 described in Fujitsu's manual described above. 36679 36680 `unsigned char __builtin_read8 (void *DATA)' 36681 36682 `unsigned short __builtin_read16 (void *DATA)' 36683 36684 `unsigned long __builtin_read32 (void *DATA)' 36685 36686 `unsigned long long __builtin_read64 (void *DATA)' 36687 36688 `void __builtin_write8 (void *DATA, unsigned char DATUM)' 36689 36690 `void __builtin_write16 (void *DATA, unsigned short DATUM)' 36691 36692 `void __builtin_write32 (void *DATA, unsigned long DATUM)' 36693 36694 `void __builtin_write64 (void *DATA, unsigned long long DATUM)' 36695 36696 36697 File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 36698 36699 6.56.6.5 Other Built-in Functions 36700 ................................. 36701 36702 This section describes built-in functions that are not named after a 36703 specific FR-V instruction. 36704 36705 `sw2 __IACCreadll (iacc REG)' 36706 Return the full 64-bit value of IACC0. The REG argument is 36707 reserved for future expansion and must be 0. 36708 36709 `sw1 __IACCreadl (iacc REG)' 36710 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 36711 Other values of REG are rejected as invalid. 36712 36713 `void __IACCsetll (iacc REG, sw2 X)' 36714 Set the full 64-bit value of IACC0 to X. The REG argument is 36715 reserved for future expansion and must be 0. 36716 36717 `void __IACCsetl (iacc REG, sw1 X)' 36718 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 36719 values of REG are rejected as invalid. 36720 36721 `void __data_prefetch0 (const void *X)' 36722 Use the `dcpl' instruction to load the contents of address X into 36723 the data cache. 36724 36725 `void __data_prefetch (const void *X)' 36726 Use the `nldub' instruction to load the contents of address X into 36727 the data cache. The instruction is issued in slot I1. 36728 36729 36730 File: gcc.info, Node: X86 Built-in Functions, Next: X86 transactional memory intrinsics, Prev: FR-V Built-in Functions, Up: Target Builtins 36731 36732 6.56.7 X86 Built-in Functions 36733 ----------------------------- 36734 36735 These built-in functions are available for the i386 and x86-64 family 36736 of computers, depending on the command-line switches used. 36737 36738 If you specify command-line switches such as `-msse', the compiler 36739 could use the extended instruction sets even if the built-ins are not 36740 used explicitly in the program. For this reason, applications that 36741 perform run-time CPU detection must compile separate files for each 36742 supported architecture, using the appropriate flags. In particular, 36743 the file containing the CPU detection code should be compiled without 36744 these options. 36745 36746 The following machine modes are available for use with MMX built-in 36747 functions (*note Vector Extensions::): `V2SI' for a vector of two 36748 32-bit integers, `V4HI' for a vector of four 16-bit integers, and 36749 `V8QI' for a vector of eight 8-bit integers. Some of the built-in 36750 functions operate on MMX registers as a whole 64-bit entity, these use 36751 `V1DI' as their mode. 36752 36753 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector 36754 of two 32-bit floating-point values. 36755 36756 If SSE extensions are enabled, `V4SF' is used for a vector of four 36757 32-bit floating-point values. Some instructions use a vector of four 36758 32-bit integers, these use `V4SI'. Finally, some instructions operate 36759 on an entire vector register, interpreting it as a 128-bit integer, 36760 these use mode `TI'. 36761 36762 In 64-bit mode, the x86-64 family of processors uses additional 36763 built-in functions for efficient use of `TF' (`__float128') 128-bit 36764 floating point and `TC' 128-bit complex floating-point values. 36765 36766 The following floating-point built-in functions are available in 64-bit 36767 mode. All of them implement the function that is part of the name. 36768 36769 __float128 __builtin_fabsq (__float128) 36770 __float128 __builtin_copysignq (__float128, __float128) 36771 36772 The following built-in function is always available. 36773 36774 `void __builtin_ia32_pause (void)' 36775 Generates the `pause' machine instruction with a compiler memory 36776 barrier. 36777 36778 The following floating-point built-in functions are made available in 36779 the 64-bit mode. 36780 36781 `__float128 __builtin_infq (void)' 36782 Similar to `__builtin_inf', except the return type is `__float128'. 36783 36784 `__float128 __builtin_huge_valq (void)' 36785 Similar to `__builtin_huge_val', except the return type is 36786 `__float128'. 36787 36788 The following built-in functions are always available and can be used 36789 to check the target platform type. 36790 36791 -- Built-in Function: void __builtin_cpu_init (void) 36792 This function runs the CPU detection code to check the type of CPU 36793 and the features supported. This built-in function needs to be 36794 invoked along with the built-in functions to check CPU type and 36795 features, `__builtin_cpu_is' and `__builtin_cpu_supports', only 36796 when used in a function that is executed before any constructors 36797 are called. The CPU detection code is automatically executed in a 36798 very high priority constructor. 36799 36800 For example, this function has to be used in `ifunc' resolvers that 36801 check for CPU type using the built-in functions `__builtin_cpu_is' 36802 and `__builtin_cpu_supports', or in constructors on targets that 36803 don't support constructor priority. 36804 36805 static void (*resolve_memcpy (void)) (void) 36806 { 36807 // ifunc resolvers fire before constructors, explicitly call the init 36808 // function. 36809 __builtin_cpu_init (); 36810 if (__builtin_cpu_supports ("ssse3")) 36811 return ssse3_memcpy; // super fast memcpy with ssse3 instructions. 36812 else 36813 return default_memcpy; 36814 } 36815 36816 void *memcpy (void *, const void *, size_t) 36817 __attribute__ ((ifunc ("resolve_memcpy"))); 36818 36819 36820 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME) 36821 This function returns a positive integer if the run-time CPU is of 36822 type CPUNAME and returns `0' otherwise. The following CPU names 36823 can be detected: 36824 36825 `intel' 36826 Intel CPU. 36827 36828 `atom' 36829 Intel Atom CPU. 36830 36831 `core2' 36832 Intel Core 2 CPU. 36833 36834 `corei7' 36835 Intel Core i7 CPU. 36836 36837 `nehalem' 36838 Intel Core i7 Nehalem CPU. 36839 36840 `westmere' 36841 Intel Core i7 Westmere CPU. 36842 36843 `sandybridge' 36844 Intel Core i7 Sandy Bridge CPU. 36845 36846 `amd' 36847 AMD CPU. 36848 36849 `amdfam10h' 36850 AMD Family 10h CPU. 36851 36852 `barcelona' 36853 AMD Family 10h Barcelona CPU. 36854 36855 `shanghai' 36856 AMD Family 10h Shanghai CPU. 36857 36858 `istanbul' 36859 AMD Family 10h Istanbul CPU. 36860 36861 `btver1' 36862 AMD Family 14h CPU. 36863 36864 `amdfam15h' 36865 AMD Family 15h CPU. 36866 36867 `bdver1' 36868 AMD Family 15h Bulldozer version 1. 36869 36870 `bdver2' 36871 AMD Family 15h Bulldozer version 2. 36872 36873 `bdver3' 36874 AMD Family 15h Bulldozer version 3. 36875 36876 `btver2' 36877 AMD Family 16h CPU. 36878 36879 Here is an example: 36880 if (__builtin_cpu_is ("corei7")) 36881 { 36882 do_corei7 (); // Core i7 specific implementation. 36883 } 36884 else 36885 { 36886 do_generic (); // Generic implementation. 36887 } 36888 36889 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE) 36890 This function returns a positive integer if the run-time CPU 36891 supports FEATURE and returns `0' otherwise. The following features 36892 can be detected: 36893 36894 `cmov' 36895 CMOV instruction. 36896 36897 `mmx' 36898 MMX instructions. 36899 36900 `popcnt' 36901 POPCNT instruction. 36902 36903 `sse' 36904 SSE instructions. 36905 36906 `sse2' 36907 SSE2 instructions. 36908 36909 `sse3' 36910 SSE3 instructions. 36911 36912 `ssse3' 36913 SSSE3 instructions. 36914 36915 `sse4.1' 36916 SSE4.1 instructions. 36917 36918 `sse4.2' 36919 SSE4.2 instructions. 36920 36921 `avx' 36922 AVX instructions. 36923 36924 `avx2' 36925 AVX2 instructions. 36926 36927 Here is an example: 36928 if (__builtin_cpu_supports ("popcnt")) 36929 { 36930 asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc"); 36931 } 36932 else 36933 { 36934 count = generic_countbits (n); //generic implementation. 36935 } 36936 36937 The following built-in functions are made available by `-mmmx'. All 36938 of them generate the machine instruction that is part of the name. 36939 36940 v8qi __builtin_ia32_paddb (v8qi, v8qi) 36941 v4hi __builtin_ia32_paddw (v4hi, v4hi) 36942 v2si __builtin_ia32_paddd (v2si, v2si) 36943 v8qi __builtin_ia32_psubb (v8qi, v8qi) 36944 v4hi __builtin_ia32_psubw (v4hi, v4hi) 36945 v2si __builtin_ia32_psubd (v2si, v2si) 36946 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 36947 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 36948 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 36949 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 36950 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 36951 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 36952 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 36953 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 36954 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 36955 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 36956 di __builtin_ia32_pand (di, di) 36957 di __builtin_ia32_pandn (di,di) 36958 di __builtin_ia32_por (di, di) 36959 di __builtin_ia32_pxor (di, di) 36960 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 36961 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 36962 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 36963 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 36964 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 36965 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 36966 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 36967 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 36968 v2si __builtin_ia32_punpckhdq (v2si, v2si) 36969 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 36970 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 36971 v2si __builtin_ia32_punpckldq (v2si, v2si) 36972 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 36973 v4hi __builtin_ia32_packssdw (v2si, v2si) 36974 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 36975 36976 v4hi __builtin_ia32_psllw (v4hi, v4hi) 36977 v2si __builtin_ia32_pslld (v2si, v2si) 36978 v1di __builtin_ia32_psllq (v1di, v1di) 36979 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 36980 v2si __builtin_ia32_psrld (v2si, v2si) 36981 v1di __builtin_ia32_psrlq (v1di, v1di) 36982 v4hi __builtin_ia32_psraw (v4hi, v4hi) 36983 v2si __builtin_ia32_psrad (v2si, v2si) 36984 v4hi __builtin_ia32_psllwi (v4hi, int) 36985 v2si __builtin_ia32_pslldi (v2si, int) 36986 v1di __builtin_ia32_psllqi (v1di, int) 36987 v4hi __builtin_ia32_psrlwi (v4hi, int) 36988 v2si __builtin_ia32_psrldi (v2si, int) 36989 v1di __builtin_ia32_psrlqi (v1di, int) 36990 v4hi __builtin_ia32_psrawi (v4hi, int) 36991 v2si __builtin_ia32_psradi (v2si, int) 36992 36993 The following built-in functions are made available either with 36994 `-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 36995 of them generate the machine instruction that is part of the name. 36996 36997 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 36998 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 36999 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 37000 v1di __builtin_ia32_psadbw (v8qi, v8qi) 37001 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 37002 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 37003 v8qi __builtin_ia32_pminub (v8qi, v8qi) 37004 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 37005 int __builtin_ia32_pextrw (v4hi, int) 37006 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 37007 int __builtin_ia32_pmovmskb (v8qi) 37008 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 37009 void __builtin_ia32_movntq (di *, di) 37010 void __builtin_ia32_sfence (void) 37011 37012 The following built-in functions are available when `-msse' is used. 37013 All of them generate the machine instruction that is part of the name. 37014 37015 int __builtin_ia32_comieq (v4sf, v4sf) 37016 int __builtin_ia32_comineq (v4sf, v4sf) 37017 int __builtin_ia32_comilt (v4sf, v4sf) 37018 int __builtin_ia32_comile (v4sf, v4sf) 37019 int __builtin_ia32_comigt (v4sf, v4sf) 37020 int __builtin_ia32_comige (v4sf, v4sf) 37021 int __builtin_ia32_ucomieq (v4sf, v4sf) 37022 int __builtin_ia32_ucomineq (v4sf, v4sf) 37023 int __builtin_ia32_ucomilt (v4sf, v4sf) 37024 int __builtin_ia32_ucomile (v4sf, v4sf) 37025 int __builtin_ia32_ucomigt (v4sf, v4sf) 37026 int __builtin_ia32_ucomige (v4sf, v4sf) 37027 v4sf __builtin_ia32_addps (v4sf, v4sf) 37028 v4sf __builtin_ia32_subps (v4sf, v4sf) 37029 v4sf __builtin_ia32_mulps (v4sf, v4sf) 37030 v4sf __builtin_ia32_divps (v4sf, v4sf) 37031 v4sf __builtin_ia32_addss (v4sf, v4sf) 37032 v4sf __builtin_ia32_subss (v4sf, v4sf) 37033 v4sf __builtin_ia32_mulss (v4sf, v4sf) 37034 v4sf __builtin_ia32_divss (v4sf, v4sf) 37035 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 37036 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 37037 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 37038 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 37039 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 37040 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 37041 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 37042 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 37043 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 37044 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 37045 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 37046 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 37047 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 37048 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 37049 v4si __builtin_ia32_cmpless (v4sf, v4sf) 37050 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 37051 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 37052 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 37053 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 37054 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 37055 v4sf __builtin_ia32_maxps (v4sf, v4sf) 37056 v4sf __builtin_ia32_maxss (v4sf, v4sf) 37057 v4sf __builtin_ia32_minps (v4sf, v4sf) 37058 v4sf __builtin_ia32_minss (v4sf, v4sf) 37059 v4sf __builtin_ia32_andps (v4sf, v4sf) 37060 v4sf __builtin_ia32_andnps (v4sf, v4sf) 37061 v4sf __builtin_ia32_orps (v4sf, v4sf) 37062 v4sf __builtin_ia32_xorps (v4sf, v4sf) 37063 v4sf __builtin_ia32_movss (v4sf, v4sf) 37064 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 37065 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 37066 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 37067 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 37068 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 37069 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 37070 v2si __builtin_ia32_cvtps2pi (v4sf) 37071 int __builtin_ia32_cvtss2si (v4sf) 37072 v2si __builtin_ia32_cvttps2pi (v4sf) 37073 int __builtin_ia32_cvttss2si (v4sf) 37074 v4sf __builtin_ia32_rcpps (v4sf) 37075 v4sf __builtin_ia32_rsqrtps (v4sf) 37076 v4sf __builtin_ia32_sqrtps (v4sf) 37077 v4sf __builtin_ia32_rcpss (v4sf) 37078 v4sf __builtin_ia32_rsqrtss (v4sf) 37079 v4sf __builtin_ia32_sqrtss (v4sf) 37080 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 37081 void __builtin_ia32_movntps (float *, v4sf) 37082 int __builtin_ia32_movmskps (v4sf) 37083 37084 The following built-in functions are available when `-msse' is used. 37085 37086 `v4sf __builtin_ia32_loadaps (float *)' 37087 Generates the `movaps' machine instruction as a load from memory. 37088 37089 `void __builtin_ia32_storeaps (float *, v4sf)' 37090 Generates the `movaps' machine instruction as a store to memory. 37091 37092 `v4sf __builtin_ia32_loadups (float *)' 37093 Generates the `movups' machine instruction as a load from memory. 37094 37095 `void __builtin_ia32_storeups (float *, v4sf)' 37096 Generates the `movups' machine instruction as a store to memory. 37097 37098 `v4sf __builtin_ia32_loadsss (float *)' 37099 Generates the `movss' machine instruction as a load from memory. 37100 37101 `void __builtin_ia32_storess (float *, v4sf)' 37102 Generates the `movss' machine instruction as a store to memory. 37103 37104 `v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 37105 Generates the `movhps' machine instruction as a load from memory. 37106 37107 `v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 37108 Generates the `movlps' machine instruction as a load from memory 37109 37110 `void __builtin_ia32_storehps (v2sf *, v4sf)' 37111 Generates the `movhps' machine instruction as a store to memory. 37112 37113 `void __builtin_ia32_storelps (v2sf *, v4sf)' 37114 Generates the `movlps' machine instruction as a store to memory. 37115 37116 The following built-in functions are available when `-msse2' is used. 37117 All of them generate the machine instruction that is part of the name. 37118 37119 int __builtin_ia32_comisdeq (v2df, v2df) 37120 int __builtin_ia32_comisdlt (v2df, v2df) 37121 int __builtin_ia32_comisdle (v2df, v2df) 37122 int __builtin_ia32_comisdgt (v2df, v2df) 37123 int __builtin_ia32_comisdge (v2df, v2df) 37124 int __builtin_ia32_comisdneq (v2df, v2df) 37125 int __builtin_ia32_ucomisdeq (v2df, v2df) 37126 int __builtin_ia32_ucomisdlt (v2df, v2df) 37127 int __builtin_ia32_ucomisdle (v2df, v2df) 37128 int __builtin_ia32_ucomisdgt (v2df, v2df) 37129 int __builtin_ia32_ucomisdge (v2df, v2df) 37130 int __builtin_ia32_ucomisdneq (v2df, v2df) 37131 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 37132 v2df __builtin_ia32_cmpltpd (v2df, v2df) 37133 v2df __builtin_ia32_cmplepd (v2df, v2df) 37134 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 37135 v2df __builtin_ia32_cmpgepd (v2df, v2df) 37136 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 37137 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 37138 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 37139 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 37140 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 37141 v2df __builtin_ia32_cmpngepd (v2df, v2df) 37142 v2df __builtin_ia32_cmpordpd (v2df, v2df) 37143 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 37144 v2df __builtin_ia32_cmpltsd (v2df, v2df) 37145 v2df __builtin_ia32_cmplesd (v2df, v2df) 37146 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 37147 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 37148 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 37149 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 37150 v2df __builtin_ia32_cmpordsd (v2df, v2df) 37151 v2di __builtin_ia32_paddq (v2di, v2di) 37152 v2di __builtin_ia32_psubq (v2di, v2di) 37153 v2df __builtin_ia32_addpd (v2df, v2df) 37154 v2df __builtin_ia32_subpd (v2df, v2df) 37155 v2df __builtin_ia32_mulpd (v2df, v2df) 37156 v2df __builtin_ia32_divpd (v2df, v2df) 37157 v2df __builtin_ia32_addsd (v2df, v2df) 37158 v2df __builtin_ia32_subsd (v2df, v2df) 37159 v2df __builtin_ia32_mulsd (v2df, v2df) 37160 v2df __builtin_ia32_divsd (v2df, v2df) 37161 v2df __builtin_ia32_minpd (v2df, v2df) 37162 v2df __builtin_ia32_maxpd (v2df, v2df) 37163 v2df __builtin_ia32_minsd (v2df, v2df) 37164 v2df __builtin_ia32_maxsd (v2df, v2df) 37165 v2df __builtin_ia32_andpd (v2df, v2df) 37166 v2df __builtin_ia32_andnpd (v2df, v2df) 37167 v2df __builtin_ia32_orpd (v2df, v2df) 37168 v2df __builtin_ia32_xorpd (v2df, v2df) 37169 v2df __builtin_ia32_movsd (v2df, v2df) 37170 v2df __builtin_ia32_unpckhpd (v2df, v2df) 37171 v2df __builtin_ia32_unpcklpd (v2df, v2df) 37172 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 37173 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 37174 v4si __builtin_ia32_paddd128 (v4si, v4si) 37175 v2di __builtin_ia32_paddq128 (v2di, v2di) 37176 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 37177 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 37178 v4si __builtin_ia32_psubd128 (v4si, v4si) 37179 v2di __builtin_ia32_psubq128 (v2di, v2di) 37180 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 37181 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 37182 v2di __builtin_ia32_pand128 (v2di, v2di) 37183 v2di __builtin_ia32_pandn128 (v2di, v2di) 37184 v2di __builtin_ia32_por128 (v2di, v2di) 37185 v2di __builtin_ia32_pxor128 (v2di, v2di) 37186 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 37187 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 37188 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 37189 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 37190 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 37191 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 37192 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 37193 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 37194 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 37195 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 37196 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 37197 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 37198 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 37199 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 37200 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 37201 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 37202 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 37203 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 37204 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 37205 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 37206 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 37207 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 37208 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 37209 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 37210 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 37211 v2df __builtin_ia32_loadupd (double *) 37212 void __builtin_ia32_storeupd (double *, v2df) 37213 v2df __builtin_ia32_loadhpd (v2df, double const *) 37214 v2df __builtin_ia32_loadlpd (v2df, double const *) 37215 int __builtin_ia32_movmskpd (v2df) 37216 int __builtin_ia32_pmovmskb128 (v16qi) 37217 void __builtin_ia32_movnti (int *, int) 37218 void __builtin_ia32_movnti64 (long long int *, long long int) 37219 void __builtin_ia32_movntpd (double *, v2df) 37220 void __builtin_ia32_movntdq (v2df *, v2df) 37221 v4si __builtin_ia32_pshufd (v4si, int) 37222 v8hi __builtin_ia32_pshuflw (v8hi, int) 37223 v8hi __builtin_ia32_pshufhw (v8hi, int) 37224 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 37225 v2df __builtin_ia32_sqrtpd (v2df) 37226 v2df __builtin_ia32_sqrtsd (v2df) 37227 v2df __builtin_ia32_shufpd (v2df, v2df, int) 37228 v2df __builtin_ia32_cvtdq2pd (v4si) 37229 v4sf __builtin_ia32_cvtdq2ps (v4si) 37230 v4si __builtin_ia32_cvtpd2dq (v2df) 37231 v2si __builtin_ia32_cvtpd2pi (v2df) 37232 v4sf __builtin_ia32_cvtpd2ps (v2df) 37233 v4si __builtin_ia32_cvttpd2dq (v2df) 37234 v2si __builtin_ia32_cvttpd2pi (v2df) 37235 v2df __builtin_ia32_cvtpi2pd (v2si) 37236 int __builtin_ia32_cvtsd2si (v2df) 37237 int __builtin_ia32_cvttsd2si (v2df) 37238 long long __builtin_ia32_cvtsd2si64 (v2df) 37239 long long __builtin_ia32_cvttsd2si64 (v2df) 37240 v4si __builtin_ia32_cvtps2dq (v4sf) 37241 v2df __builtin_ia32_cvtps2pd (v4sf) 37242 v4si __builtin_ia32_cvttps2dq (v4sf) 37243 v2df __builtin_ia32_cvtsi2sd (v2df, int) 37244 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 37245 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 37246 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 37247 void __builtin_ia32_clflush (const void *) 37248 void __builtin_ia32_lfence (void) 37249 void __builtin_ia32_mfence (void) 37250 v16qi __builtin_ia32_loaddqu (const char *) 37251 void __builtin_ia32_storedqu (char *, v16qi) 37252 v1di __builtin_ia32_pmuludq (v2si, v2si) 37253 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 37254 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 37255 v4si __builtin_ia32_pslld128 (v4si, v4si) 37256 v2di __builtin_ia32_psllq128 (v2di, v2di) 37257 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 37258 v4si __builtin_ia32_psrld128 (v4si, v4si) 37259 v2di __builtin_ia32_psrlq128 (v2di, v2di) 37260 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 37261 v4si __builtin_ia32_psrad128 (v4si, v4si) 37262 v2di __builtin_ia32_pslldqi128 (v2di, int) 37263 v8hi __builtin_ia32_psllwi128 (v8hi, int) 37264 v4si __builtin_ia32_pslldi128 (v4si, int) 37265 v2di __builtin_ia32_psllqi128 (v2di, int) 37266 v2di __builtin_ia32_psrldqi128 (v2di, int) 37267 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 37268 v4si __builtin_ia32_psrldi128 (v4si, int) 37269 v2di __builtin_ia32_psrlqi128 (v2di, int) 37270 v8hi __builtin_ia32_psrawi128 (v8hi, int) 37271 v4si __builtin_ia32_psradi128 (v4si, int) 37272 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 37273 v2di __builtin_ia32_movq128 (v2di) 37274 37275 The following built-in functions are available when `-msse3' is used. 37276 All of them generate the machine instruction that is part of the name. 37277 37278 v2df __builtin_ia32_addsubpd (v2df, v2df) 37279 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 37280 v2df __builtin_ia32_haddpd (v2df, v2df) 37281 v4sf __builtin_ia32_haddps (v4sf, v4sf) 37282 v2df __builtin_ia32_hsubpd (v2df, v2df) 37283 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 37284 v16qi __builtin_ia32_lddqu (char const *) 37285 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 37286 v2df __builtin_ia32_movddup (v2df) 37287 v4sf __builtin_ia32_movshdup (v4sf) 37288 v4sf __builtin_ia32_movsldup (v4sf) 37289 void __builtin_ia32_mwait (unsigned int, unsigned int) 37290 37291 The following built-in functions are available when `-msse3' is used. 37292 37293 `v2df __builtin_ia32_loadddup (double const *)' 37294 Generates the `movddup' machine instruction as a load from memory. 37295 37296 The following built-in functions are available when `-mssse3' is used. 37297 All of them generate the machine instruction that is part of the name 37298 with MMX registers. 37299 37300 v2si __builtin_ia32_phaddd (v2si, v2si) 37301 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 37302 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 37303 v2si __builtin_ia32_phsubd (v2si, v2si) 37304 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 37305 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 37306 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 37307 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 37308 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 37309 v8qi __builtin_ia32_psignb (v8qi, v8qi) 37310 v2si __builtin_ia32_psignd (v2si, v2si) 37311 v4hi __builtin_ia32_psignw (v4hi, v4hi) 37312 v1di __builtin_ia32_palignr (v1di, v1di, int) 37313 v8qi __builtin_ia32_pabsb (v8qi) 37314 v2si __builtin_ia32_pabsd (v2si) 37315 v4hi __builtin_ia32_pabsw (v4hi) 37316 37317 The following built-in functions are available when `-mssse3' is used. 37318 All of them generate the machine instruction that is part of the name 37319 with SSE registers. 37320 37321 v4si __builtin_ia32_phaddd128 (v4si, v4si) 37322 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 37323 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 37324 v4si __builtin_ia32_phsubd128 (v4si, v4si) 37325 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 37326 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 37327 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 37328 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 37329 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 37330 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 37331 v4si __builtin_ia32_psignd128 (v4si, v4si) 37332 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 37333 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 37334 v16qi __builtin_ia32_pabsb128 (v16qi) 37335 v4si __builtin_ia32_pabsd128 (v4si) 37336 v8hi __builtin_ia32_pabsw128 (v8hi) 37337 37338 The following built-in functions are available when `-msse4.1' is 37339 used. All of them generate the machine instruction that is part of the 37340 name. 37341 37342 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 37343 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 37344 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 37345 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 37346 v2df __builtin_ia32_dppd (v2df, v2df, const int) 37347 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 37348 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 37349 v2di __builtin_ia32_movntdqa (v2di *); 37350 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 37351 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 37352 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 37353 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 37354 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 37355 v8hi __builtin_ia32_phminposuw128 (v8hi) 37356 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 37357 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 37358 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 37359 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 37360 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 37361 v4si __builtin_ia32_pminsd128 (v4si, v4si) 37362 v4si __builtin_ia32_pminud128 (v4si, v4si) 37363 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 37364 v4si __builtin_ia32_pmovsxbd128 (v16qi) 37365 v2di __builtin_ia32_pmovsxbq128 (v16qi) 37366 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 37367 v2di __builtin_ia32_pmovsxdq128 (v4si) 37368 v4si __builtin_ia32_pmovsxwd128 (v8hi) 37369 v2di __builtin_ia32_pmovsxwq128 (v8hi) 37370 v4si __builtin_ia32_pmovzxbd128 (v16qi) 37371 v2di __builtin_ia32_pmovzxbq128 (v16qi) 37372 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 37373 v2di __builtin_ia32_pmovzxdq128 (v4si) 37374 v4si __builtin_ia32_pmovzxwd128 (v8hi) 37375 v2di __builtin_ia32_pmovzxwq128 (v8hi) 37376 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 37377 v4si __builtin_ia32_pmulld128 (v4si, v4si) 37378 int __builtin_ia32_ptestc128 (v2di, v2di) 37379 int __builtin_ia32_ptestnzc128 (v2di, v2di) 37380 int __builtin_ia32_ptestz128 (v2di, v2di) 37381 v2df __builtin_ia32_roundpd (v2df, const int) 37382 v4sf __builtin_ia32_roundps (v4sf, const int) 37383 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 37384 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 37385 37386 The following built-in functions are available when `-msse4.1' is used. 37387 37388 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 37389 Generates the `insertps' machine instruction. 37390 37391 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 37392 Generates the `pextrb' machine instruction. 37393 37394 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 37395 Generates the `pinsrb' machine instruction. 37396 37397 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 37398 Generates the `pinsrd' machine instruction. 37399 37400 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 37401 Generates the `pinsrq' machine instruction in 64bit mode. 37402 37403 The following built-in functions are changed to generate new SSE4.1 37404 instructions when `-msse4.1' is used. 37405 37406 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 37407 Generates the `extractps' machine instruction. 37408 37409 `int __builtin_ia32_vec_ext_v4si (v4si, const int)' 37410 Generates the `pextrd' machine instruction. 37411 37412 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 37413 Generates the `pextrq' machine instruction in 64bit mode. 37414 37415 The following built-in functions are available when `-msse4.2' is 37416 used. All of them generate the machine instruction that is part of the 37417 name. 37418 37419 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 37420 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 37421 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 37422 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 37423 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 37424 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 37425 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 37426 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 37427 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 37428 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 37429 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 37430 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 37431 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 37432 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 37433 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 37434 37435 The following built-in functions are available when `-msse4.2' is used. 37436 37437 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 37438 Generates the `crc32b' machine instruction. 37439 37440 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 37441 Generates the `crc32w' machine instruction. 37442 37443 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 37444 Generates the `crc32l' machine instruction. 37445 37446 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 37447 Generates the `crc32q' machine instruction. 37448 37449 The following built-in functions are changed to generate new SSE4.2 37450 instructions when `-msse4.2' is used. 37451 37452 `int __builtin_popcount (unsigned int)' 37453 Generates the `popcntl' machine instruction. 37454 37455 `int __builtin_popcountl (unsigned long)' 37456 Generates the `popcntl' or `popcntq' machine instruction, 37457 depending on the size of `unsigned long'. 37458 37459 `int __builtin_popcountll (unsigned long long)' 37460 Generates the `popcntq' machine instruction. 37461 37462 The following built-in functions are available when `-mavx' is used. 37463 All of them generate the machine instruction that is part of the name. 37464 37465 v4df __builtin_ia32_addpd256 (v4df,v4df) 37466 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 37467 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 37468 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 37469 v4df __builtin_ia32_andnpd256 (v4df,v4df) 37470 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 37471 v4df __builtin_ia32_andpd256 (v4df,v4df) 37472 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 37473 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 37474 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 37475 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 37476 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 37477 v2df __builtin_ia32_cmppd (v2df,v2df,int) 37478 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 37479 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 37480 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 37481 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 37482 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 37483 v4df __builtin_ia32_cvtdq2pd256 (v4si) 37484 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 37485 v4si __builtin_ia32_cvtpd2dq256 (v4df) 37486 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 37487 v8si __builtin_ia32_cvtps2dq256 (v8sf) 37488 v4df __builtin_ia32_cvtps2pd256 (v4sf) 37489 v4si __builtin_ia32_cvttpd2dq256 (v4df) 37490 v8si __builtin_ia32_cvttps2dq256 (v8sf) 37491 v4df __builtin_ia32_divpd256 (v4df,v4df) 37492 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 37493 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 37494 v4df __builtin_ia32_haddpd256 (v4df,v4df) 37495 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 37496 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 37497 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 37498 v32qi __builtin_ia32_lddqu256 (pcchar) 37499 v32qi __builtin_ia32_loaddqu256 (pcchar) 37500 v4df __builtin_ia32_loadupd256 (pcdouble) 37501 v8sf __builtin_ia32_loadups256 (pcfloat) 37502 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 37503 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 37504 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 37505 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 37506 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 37507 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 37508 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 37509 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 37510 v4df __builtin_ia32_maxpd256 (v4df,v4df) 37511 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 37512 v4df __builtin_ia32_minpd256 (v4df,v4df) 37513 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 37514 v4df __builtin_ia32_movddup256 (v4df) 37515 int __builtin_ia32_movmskpd256 (v4df) 37516 int __builtin_ia32_movmskps256 (v8sf) 37517 v8sf __builtin_ia32_movshdup256 (v8sf) 37518 v8sf __builtin_ia32_movsldup256 (v8sf) 37519 v4df __builtin_ia32_mulpd256 (v4df,v4df) 37520 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 37521 v4df __builtin_ia32_orpd256 (v4df,v4df) 37522 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 37523 v2df __builtin_ia32_pd_pd256 (v4df) 37524 v4df __builtin_ia32_pd256_pd (v2df) 37525 v4sf __builtin_ia32_ps_ps256 (v8sf) 37526 v8sf __builtin_ia32_ps256_ps (v4sf) 37527 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 37528 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 37529 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 37530 v8sf __builtin_ia32_rcpps256 (v8sf) 37531 v4df __builtin_ia32_roundpd256 (v4df,int) 37532 v8sf __builtin_ia32_roundps256 (v8sf,int) 37533 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 37534 v8sf __builtin_ia32_rsqrtps256 (v8sf) 37535 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 37536 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 37537 v4si __builtin_ia32_si_si256 (v8si) 37538 v8si __builtin_ia32_si256_si (v4si) 37539 v4df __builtin_ia32_sqrtpd256 (v4df) 37540 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 37541 v8sf __builtin_ia32_sqrtps256 (v8sf) 37542 void __builtin_ia32_storedqu256 (pchar,v32qi) 37543 void __builtin_ia32_storeupd256 (pdouble,v4df) 37544 void __builtin_ia32_storeups256 (pfloat,v8sf) 37545 v4df __builtin_ia32_subpd256 (v4df,v4df) 37546 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 37547 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 37548 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 37549 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 37550 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 37551 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 37552 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 37553 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 37554 v4sf __builtin_ia32_vbroadcastss (pcfloat) 37555 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 37556 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 37557 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 37558 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 37559 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 37560 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 37561 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 37562 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 37563 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 37564 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 37565 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 37566 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 37567 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 37568 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 37569 v2df __builtin_ia32_vpermilpd (v2df,int) 37570 v4df __builtin_ia32_vpermilpd256 (v4df,int) 37571 v4sf __builtin_ia32_vpermilps (v4sf,int) 37572 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 37573 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 37574 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 37575 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 37576 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 37577 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 37578 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 37579 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 37580 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 37581 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 37582 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 37583 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 37584 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 37585 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 37586 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 37587 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 37588 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 37589 void __builtin_ia32_vzeroall (void) 37590 void __builtin_ia32_vzeroupper (void) 37591 v4df __builtin_ia32_xorpd256 (v4df,v4df) 37592 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 37593 37594 The following built-in functions are available when `-mavx2' is used. 37595 All of them generate the machine instruction that is part of the name. 37596 37597 v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,v32qi,int) 37598 v32qi __builtin_ia32_pabsb256 (v32qi) 37599 v16hi __builtin_ia32_pabsw256 (v16hi) 37600 v8si __builtin_ia32_pabsd256 (v8si) 37601 v16hi __builtin_ia32_packssdw256 (v8si,v8si) 37602 v32qi __builtin_ia32_packsswb256 (v16hi,v16hi) 37603 v16hi __builtin_ia32_packusdw256 (v8si,v8si) 37604 v32qi __builtin_ia32_packuswb256 (v16hi,v16hi) 37605 v32qi __builtin_ia32_paddb256 (v32qi,v32qi) 37606 v16hi __builtin_ia32_paddw256 (v16hi,v16hi) 37607 v8si __builtin_ia32_paddd256 (v8si,v8si) 37608 v4di __builtin_ia32_paddq256 (v4di,v4di) 37609 v32qi __builtin_ia32_paddsb256 (v32qi,v32qi) 37610 v16hi __builtin_ia32_paddsw256 (v16hi,v16hi) 37611 v32qi __builtin_ia32_paddusb256 (v32qi,v32qi) 37612 v16hi __builtin_ia32_paddusw256 (v16hi,v16hi) 37613 v4di __builtin_ia32_palignr256 (v4di,v4di,int) 37614 v4di __builtin_ia32_andsi256 (v4di,v4di) 37615 v4di __builtin_ia32_andnotsi256 (v4di,v4di) 37616 v32qi __builtin_ia32_pavgb256 (v32qi,v32qi) 37617 v16hi __builtin_ia32_pavgw256 (v16hi,v16hi) 37618 v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi) 37619 v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int) 37620 v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi) 37621 v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi) 37622 v8si __builtin_ia32_pcmpeqd256 (c8si,v8si) 37623 v4di __builtin_ia32_pcmpeqq256 (v4di,v4di) 37624 v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi) 37625 v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi) 37626 v8si __builtin_ia32_pcmpgtd256 (v8si,v8si) 37627 v4di __builtin_ia32_pcmpgtq256 (v4di,v4di) 37628 v16hi __builtin_ia32_phaddw256 (v16hi,v16hi) 37629 v8si __builtin_ia32_phaddd256 (v8si,v8si) 37630 v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi) 37631 v16hi __builtin_ia32_phsubw256 (v16hi,v16hi) 37632 v8si __builtin_ia32_phsubd256 (v8si,v8si) 37633 v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi) 37634 v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi) 37635 v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi) 37636 v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi) 37637 v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi) 37638 v8si __builtin_ia32_pmaxsd256 (v8si,v8si) 37639 v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi) 37640 v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi) 37641 v8si __builtin_ia32_pmaxud256 (v8si,v8si) 37642 v32qi __builtin_ia32_pminsb256 (v32qi,v32qi) 37643 v16hi __builtin_ia32_pminsw256 (v16hi,v16hi) 37644 v8si __builtin_ia32_pminsd256 (v8si,v8si) 37645 v32qi __builtin_ia32_pminub256 (v32qi,v32qi) 37646 v16hi __builtin_ia32_pminuw256 (v16hi,v16hi) 37647 v8si __builtin_ia32_pminud256 (v8si,v8si) 37648 int __builtin_ia32_pmovmskb256 (v32qi) 37649 v16hi __builtin_ia32_pmovsxbw256 (v16qi) 37650 v8si __builtin_ia32_pmovsxbd256 (v16qi) 37651 v4di __builtin_ia32_pmovsxbq256 (v16qi) 37652 v8si __builtin_ia32_pmovsxwd256 (v8hi) 37653 v4di __builtin_ia32_pmovsxwq256 (v8hi) 37654 v4di __builtin_ia32_pmovsxdq256 (v4si) 37655 v16hi __builtin_ia32_pmovzxbw256 (v16qi) 37656 v8si __builtin_ia32_pmovzxbd256 (v16qi) 37657 v4di __builtin_ia32_pmovzxbq256 (v16qi) 37658 v8si __builtin_ia32_pmovzxwd256 (v8hi) 37659 v4di __builtin_ia32_pmovzxwq256 (v8hi) 37660 v4di __builtin_ia32_pmovzxdq256 (v4si) 37661 v4di __builtin_ia32_pmuldq256 (v8si,v8si) 37662 v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi) 37663 v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi) 37664 v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi) 37665 v16hi __builtin_ia32_pmullw256 (v16hi,v16hi) 37666 v8si __builtin_ia32_pmulld256 (v8si,v8si) 37667 v4di __builtin_ia32_pmuludq256 (v8si,v8si) 37668 v4di __builtin_ia32_por256 (v4di,v4di) 37669 v16hi __builtin_ia32_psadbw256 (v32qi,v32qi) 37670 v32qi __builtin_ia32_pshufb256 (v32qi,v32qi) 37671 v8si __builtin_ia32_pshufd256 (v8si,int) 37672 v16hi __builtin_ia32_pshufhw256 (v16hi,int) 37673 v16hi __builtin_ia32_pshuflw256 (v16hi,int) 37674 v32qi __builtin_ia32_psignb256 (v32qi,v32qi) 37675 v16hi __builtin_ia32_psignw256 (v16hi,v16hi) 37676 v8si __builtin_ia32_psignd256 (v8si,v8si) 37677 v4di __builtin_ia32_pslldqi256 (v4di,int) 37678 v16hi __builtin_ia32_psllwi256 (16hi,int) 37679 v16hi __builtin_ia32_psllw256(v16hi,v8hi) 37680 v8si __builtin_ia32_pslldi256 (v8si,int) 37681 v8si __builtin_ia32_pslld256(v8si,v4si) 37682 v4di __builtin_ia32_psllqi256 (v4di,int) 37683 v4di __builtin_ia32_psllq256(v4di,v2di) 37684 v16hi __builtin_ia32_psrawi256 (v16hi,int) 37685 v16hi __builtin_ia32_psraw256 (v16hi,v8hi) 37686 v8si __builtin_ia32_psradi256 (v8si,int) 37687 v8si __builtin_ia32_psrad256 (v8si,v4si) 37688 v4di __builtin_ia32_psrldqi256 (v4di, int) 37689 v16hi __builtin_ia32_psrlwi256 (v16hi,int) 37690 v16hi __builtin_ia32_psrlw256 (v16hi,v8hi) 37691 v8si __builtin_ia32_psrldi256 (v8si,int) 37692 v8si __builtin_ia32_psrld256 (v8si,v4si) 37693 v4di __builtin_ia32_psrlqi256 (v4di,int) 37694 v4di __builtin_ia32_psrlq256(v4di,v2di) 37695 v32qi __builtin_ia32_psubb256 (v32qi,v32qi) 37696 v32hi __builtin_ia32_psubw256 (v16hi,v16hi) 37697 v8si __builtin_ia32_psubd256 (v8si,v8si) 37698 v4di __builtin_ia32_psubq256 (v4di,v4di) 37699 v32qi __builtin_ia32_psubsb256 (v32qi,v32qi) 37700 v16hi __builtin_ia32_psubsw256 (v16hi,v16hi) 37701 v32qi __builtin_ia32_psubusb256 (v32qi,v32qi) 37702 v16hi __builtin_ia32_psubusw256 (v16hi,v16hi) 37703 v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi) 37704 v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi) 37705 v8si __builtin_ia32_punpckhdq256 (v8si,v8si) 37706 v4di __builtin_ia32_punpckhqdq256 (v4di,v4di) 37707 v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi) 37708 v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi) 37709 v8si __builtin_ia32_punpckldq256 (v8si,v8si) 37710 v4di __builtin_ia32_punpcklqdq256 (v4di,v4di) 37711 v4di __builtin_ia32_pxor256 (v4di,v4di) 37712 v4di __builtin_ia32_movntdqa256 (pv4di) 37713 v4sf __builtin_ia32_vbroadcastss_ps (v4sf) 37714 v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf) 37715 v4df __builtin_ia32_vbroadcastsd_pd256 (v2df) 37716 v4di __builtin_ia32_vbroadcastsi256 (v2di) 37717 v4si __builtin_ia32_pblendd128 (v4si,v4si) 37718 v8si __builtin_ia32_pblendd256 (v8si,v8si) 37719 v32qi __builtin_ia32_pbroadcastb256 (v16qi) 37720 v16hi __builtin_ia32_pbroadcastw256 (v8hi) 37721 v8si __builtin_ia32_pbroadcastd256 (v4si) 37722 v4di __builtin_ia32_pbroadcastq256 (v2di) 37723 v16qi __builtin_ia32_pbroadcastb128 (v16qi) 37724 v8hi __builtin_ia32_pbroadcastw128 (v8hi) 37725 v4si __builtin_ia32_pbroadcastd128 (v4si) 37726 v2di __builtin_ia32_pbroadcastq128 (v2di) 37727 v8si __builtin_ia32_permvarsi256 (v8si,v8si) 37728 v4df __builtin_ia32_permdf256 (v4df,int) 37729 v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf) 37730 v4di __builtin_ia32_permdi256 (v4di,int) 37731 v4di __builtin_ia32_permti256 (v4di,v4di,int) 37732 v4di __builtin_ia32_extract128i256 (v4di,int) 37733 v4di __builtin_ia32_insert128i256 (v4di,v2di,int) 37734 v8si __builtin_ia32_maskloadd256 (pcv8si,v8si) 37735 v4di __builtin_ia32_maskloadq256 (pcv4di,v4di) 37736 v4si __builtin_ia32_maskloadd (pcv4si,v4si) 37737 v2di __builtin_ia32_maskloadq (pcv2di,v2di) 37738 void __builtin_ia32_maskstored256 (pv8si,v8si,v8si) 37739 void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di) 37740 void __builtin_ia32_maskstored (pv4si,v4si,v4si) 37741 void __builtin_ia32_maskstoreq (pv2di,v2di,v2di) 37742 v8si __builtin_ia32_psllv8si (v8si,v8si) 37743 v4si __builtin_ia32_psllv4si (v4si,v4si) 37744 v4di __builtin_ia32_psllv4di (v4di,v4di) 37745 v2di __builtin_ia32_psllv2di (v2di,v2di) 37746 v8si __builtin_ia32_psrav8si (v8si,v8si) 37747 v4si __builtin_ia32_psrav4si (v4si,v4si) 37748 v8si __builtin_ia32_psrlv8si (v8si,v8si) 37749 v4si __builtin_ia32_psrlv4si (v4si,v4si) 37750 v4di __builtin_ia32_psrlv4di (v4di,v4di) 37751 v2di __builtin_ia32_psrlv2di (v2di,v2di) 37752 v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int) 37753 v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int) 37754 v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int) 37755 v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int) 37756 v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int) 37757 v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int) 37758 v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int) 37759 v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int) 37760 v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int) 37761 v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int) 37762 v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int) 37763 v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int) 37764 v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int) 37765 v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int) 37766 v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int) 37767 v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int) 37768 37769 The following built-in functions are available when `-maes' is used. 37770 All of them generate the machine instruction that is part of the name. 37771 37772 v2di __builtin_ia32_aesenc128 (v2di, v2di) 37773 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 37774 v2di __builtin_ia32_aesdec128 (v2di, v2di) 37775 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 37776 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 37777 v2di __builtin_ia32_aesimc128 (v2di) 37778 37779 The following built-in function is available when `-mpclmul' is used. 37780 37781 `v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 37782 Generates the `pclmulqdq' machine instruction. 37783 37784 The following built-in function is available when `-mfsgsbase' is 37785 used. All of them generate the machine instruction that is part of the 37786 name. 37787 37788 unsigned int __builtin_ia32_rdfsbase32 (void) 37789 unsigned long long __builtin_ia32_rdfsbase64 (void) 37790 unsigned int __builtin_ia32_rdgsbase32 (void) 37791 unsigned long long __builtin_ia32_rdgsbase64 (void) 37792 void _writefsbase_u32 (unsigned int) 37793 void _writefsbase_u64 (unsigned long long) 37794 void _writegsbase_u32 (unsigned int) 37795 void _writegsbase_u64 (unsigned long long) 37796 37797 The following built-in function is available when `-mrdrnd' is used. 37798 All of them generate the machine instruction that is part of the name. 37799 37800 unsigned int __builtin_ia32_rdrand16_step (unsigned short *) 37801 unsigned int __builtin_ia32_rdrand32_step (unsigned int *) 37802 unsigned int __builtin_ia32_rdrand64_step (unsigned long long *) 37803 37804 The following built-in functions are available when `-msse4a' is used. 37805 All of them generate the machine instruction that is part of the name. 37806 37807 void __builtin_ia32_movntsd (double *, v2df) 37808 void __builtin_ia32_movntss (float *, v4sf) 37809 v2di __builtin_ia32_extrq (v2di, v16qi) 37810 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 37811 v2di __builtin_ia32_insertq (v2di, v2di) 37812 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 37813 37814 The following built-in functions are available when `-mxop' is used. 37815 v2df __builtin_ia32_vfrczpd (v2df) 37816 v4sf __builtin_ia32_vfrczps (v4sf) 37817 v2df __builtin_ia32_vfrczsd (v2df, v2df) 37818 v4sf __builtin_ia32_vfrczss (v4sf, v4sf) 37819 v4df __builtin_ia32_vfrczpd256 (v4df) 37820 v8sf __builtin_ia32_vfrczps256 (v8sf) 37821 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di) 37822 v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di) 37823 v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si) 37824 v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi) 37825 v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi) 37826 v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df) 37827 v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf) 37828 v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di) 37829 v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si) 37830 v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi) 37831 v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi) 37832 v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df) 37833 v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf) 37834 v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi) 37835 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 37836 v4si __builtin_ia32_vpcomeqd (v4si, v4si) 37837 v2di __builtin_ia32_vpcomeqq (v2di, v2di) 37838 v16qi __builtin_ia32_vpcomequb (v16qi, v16qi) 37839 v4si __builtin_ia32_vpcomequd (v4si, v4si) 37840 v2di __builtin_ia32_vpcomequq (v2di, v2di) 37841 v8hi __builtin_ia32_vpcomequw (v8hi, v8hi) 37842 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 37843 v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi) 37844 v4si __builtin_ia32_vpcomfalsed (v4si, v4si) 37845 v2di __builtin_ia32_vpcomfalseq (v2di, v2di) 37846 v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi) 37847 v4si __builtin_ia32_vpcomfalseud (v4si, v4si) 37848 v2di __builtin_ia32_vpcomfalseuq (v2di, v2di) 37849 v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi) 37850 v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi) 37851 v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi) 37852 v4si __builtin_ia32_vpcomged (v4si, v4si) 37853 v2di __builtin_ia32_vpcomgeq (v2di, v2di) 37854 v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi) 37855 v4si __builtin_ia32_vpcomgeud (v4si, v4si) 37856 v2di __builtin_ia32_vpcomgeuq (v2di, v2di) 37857 v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi) 37858 v8hi __builtin_ia32_vpcomgew (v8hi, v8hi) 37859 v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi) 37860 v4si __builtin_ia32_vpcomgtd (v4si, v4si) 37861 v2di __builtin_ia32_vpcomgtq (v2di, v2di) 37862 v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi) 37863 v4si __builtin_ia32_vpcomgtud (v4si, v4si) 37864 v2di __builtin_ia32_vpcomgtuq (v2di, v2di) 37865 v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi) 37866 v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi) 37867 v16qi __builtin_ia32_vpcomleb (v16qi, v16qi) 37868 v4si __builtin_ia32_vpcomled (v4si, v4si) 37869 v2di __builtin_ia32_vpcomleq (v2di, v2di) 37870 v16qi __builtin_ia32_vpcomleub (v16qi, v16qi) 37871 v4si __builtin_ia32_vpcomleud (v4si, v4si) 37872 v2di __builtin_ia32_vpcomleuq (v2di, v2di) 37873 v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi) 37874 v8hi __builtin_ia32_vpcomlew (v8hi, v8hi) 37875 v16qi __builtin_ia32_vpcomltb (v16qi, v16qi) 37876 v4si __builtin_ia32_vpcomltd (v4si, v4si) 37877 v2di __builtin_ia32_vpcomltq (v2di, v2di) 37878 v16qi __builtin_ia32_vpcomltub (v16qi, v16qi) 37879 v4si __builtin_ia32_vpcomltud (v4si, v4si) 37880 v2di __builtin_ia32_vpcomltuq (v2di, v2di) 37881 v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi) 37882 v8hi __builtin_ia32_vpcomltw (v8hi, v8hi) 37883 v16qi __builtin_ia32_vpcomneb (v16qi, v16qi) 37884 v4si __builtin_ia32_vpcomned (v4si, v4si) 37885 v2di __builtin_ia32_vpcomneq (v2di, v2di) 37886 v16qi __builtin_ia32_vpcomneub (v16qi, v16qi) 37887 v4si __builtin_ia32_vpcomneud (v4si, v4si) 37888 v2di __builtin_ia32_vpcomneuq (v2di, v2di) 37889 v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi) 37890 v8hi __builtin_ia32_vpcomnew (v8hi, v8hi) 37891 v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi) 37892 v4si __builtin_ia32_vpcomtrued (v4si, v4si) 37893 v2di __builtin_ia32_vpcomtrueq (v2di, v2di) 37894 v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi) 37895 v4si __builtin_ia32_vpcomtrueud (v4si, v4si) 37896 v2di __builtin_ia32_vpcomtrueuq (v2di, v2di) 37897 v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi) 37898 v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi) 37899 v4si __builtin_ia32_vphaddbd (v16qi) 37900 v2di __builtin_ia32_vphaddbq (v16qi) 37901 v8hi __builtin_ia32_vphaddbw (v16qi) 37902 v2di __builtin_ia32_vphadddq (v4si) 37903 v4si __builtin_ia32_vphaddubd (v16qi) 37904 v2di __builtin_ia32_vphaddubq (v16qi) 37905 v8hi __builtin_ia32_vphaddubw (v16qi) 37906 v2di __builtin_ia32_vphaddudq (v4si) 37907 v4si __builtin_ia32_vphadduwd (v8hi) 37908 v2di __builtin_ia32_vphadduwq (v8hi) 37909 v4si __builtin_ia32_vphaddwd (v8hi) 37910 v2di __builtin_ia32_vphaddwq (v8hi) 37911 v8hi __builtin_ia32_vphsubbw (v16qi) 37912 v2di __builtin_ia32_vphsubdq (v4si) 37913 v4si __builtin_ia32_vphsubwd (v8hi) 37914 v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si) 37915 v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di) 37916 v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di) 37917 v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si) 37918 v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di) 37919 v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di) 37920 v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si) 37921 v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi) 37922 v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si) 37923 v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi) 37924 v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si) 37925 v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si) 37926 v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi) 37927 v16qi __builtin_ia32_vprotb (v16qi, v16qi) 37928 v4si __builtin_ia32_vprotd (v4si, v4si) 37929 v2di __builtin_ia32_vprotq (v2di, v2di) 37930 v8hi __builtin_ia32_vprotw (v8hi, v8hi) 37931 v16qi __builtin_ia32_vpshab (v16qi, v16qi) 37932 v4si __builtin_ia32_vpshad (v4si, v4si) 37933 v2di __builtin_ia32_vpshaq (v2di, v2di) 37934 v8hi __builtin_ia32_vpshaw (v8hi, v8hi) 37935 v16qi __builtin_ia32_vpshlb (v16qi, v16qi) 37936 v4si __builtin_ia32_vpshld (v4si, v4si) 37937 v2di __builtin_ia32_vpshlq (v2di, v2di) 37938 v8hi __builtin_ia32_vpshlw (v8hi, v8hi) 37939 37940 The following built-in functions are available when `-mfma4' is used. 37941 All of them generate the machine instruction that is part of the name 37942 with MMX registers. 37943 37944 v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df) 37945 v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf) 37946 v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df) 37947 v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf) 37948 v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df) 37949 v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf) 37950 v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df) 37951 v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf) 37952 v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df) 37953 v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf) 37954 v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df) 37955 v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf) 37956 v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df) 37957 v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf) 37958 v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df) 37959 v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf) 37960 v2df __builtin_ia32_fmaddsubpd (v2df, v2df, v2df) 37961 v4sf __builtin_ia32_fmaddsubps (v4sf, v4sf, v4sf) 37962 v2df __builtin_ia32_fmsubaddpd (v2df, v2df, v2df) 37963 v4sf __builtin_ia32_fmsubaddps (v4sf, v4sf, v4sf) 37964 v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df) 37965 v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf) 37966 v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df) 37967 v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf) 37968 v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df) 37969 v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf) 37970 v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df) 37971 v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf) 37972 v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df) 37973 v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf) 37974 v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df) 37975 v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf) 37976 37977 The following built-in functions are available when `-mlwp' is used. 37978 37979 void __builtin_ia32_llwpcb16 (void *); 37980 void __builtin_ia32_llwpcb32 (void *); 37981 void __builtin_ia32_llwpcb64 (void *); 37982 void * __builtin_ia32_llwpcb16 (void); 37983 void * __builtin_ia32_llwpcb32 (void); 37984 void * __builtin_ia32_llwpcb64 (void); 37985 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) 37986 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) 37987 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) 37988 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) 37989 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) 37990 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) 37991 37992 The following built-in functions are available when `-mbmi' is used. 37993 All of them generate the machine instruction that is part of the name. 37994 unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int); 37995 unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long); 37996 37997 The following built-in functions are available when `-mbmi2' is used. 37998 All of them generate the machine instruction that is part of the name. 37999 unsigned int _bzhi_u32 (unsigned int, unsigned int) 38000 unsigned int _pdep_u32 (unsigned int, unsigned int) 38001 unsigned int _pext_u32 (unsigned int, unsigned int) 38002 unsigned long long _bzhi_u64 (unsigned long long, unsigned long long) 38003 unsigned long long _pdep_u64 (unsigned long long, unsigned long long) 38004 unsigned long long _pext_u64 (unsigned long long, unsigned long long) 38005 38006 The following built-in functions are available when `-mlzcnt' is used. 38007 All of them generate the machine instruction that is part of the name. 38008 unsigned short __builtin_ia32_lzcnt_16(unsigned short); 38009 unsigned int __builtin_ia32_lzcnt_u32(unsigned int); 38010 unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long); 38011 38012 The following built-in functions are available when `-mtbm' is used. 38013 Both of them generate the immediate form of the bextr machine 38014 instruction. 38015 unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int); 38016 unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long); 38017 38018 The following built-in functions are available when `-m3dnow' is used. 38019 All of them generate the machine instruction that is part of the name. 38020 38021 void __builtin_ia32_femms (void) 38022 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 38023 v2si __builtin_ia32_pf2id (v2sf) 38024 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 38025 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 38026 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 38027 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 38028 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 38029 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 38030 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 38031 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 38032 v2sf __builtin_ia32_pfrcp (v2sf) 38033 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 38034 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 38035 v2sf __builtin_ia32_pfrsqrt (v2sf) 38036 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 38037 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 38038 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 38039 v2sf __builtin_ia32_pi2fd (v2si) 38040 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 38041 38042 The following built-in functions are available when both `-m3dnow' and 38043 `-march=athlon' are used. All of them generate the machine instruction 38044 that is part of the name. 38045 38046 v2si __builtin_ia32_pf2iw (v2sf) 38047 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 38048 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 38049 v2sf __builtin_ia32_pi2fw (v2si) 38050 v2sf __builtin_ia32_pswapdsf (v2sf) 38051 v2si __builtin_ia32_pswapdsi (v2si) 38052 38053 The following built-in functions are available when `-mrtm' is used 38054 They are used for restricted transactional memory. These are the 38055 internal low level functions. Normally the functions in *note X86 38056 transactional memory intrinsics:: should be used instead. 38057 38058 int __builtin_ia32_xbegin () 38059 void __builtin_ia32_xend () 38060 void __builtin_ia32_xabort (status) 38061 int __builtin_ia32_xtest () 38062 38063 38064 File: gcc.info, Node: X86 transactional memory intrinsics, Next: MIPS DSP Built-in Functions, Prev: X86 Built-in Functions, Up: Target Builtins 38065 38066 6.56.8 X86 transaction memory intrinsics 38067 ---------------------------------------- 38068 38069 Hardware transactional memory intrinsics for i386. These allow to use 38070 memory transactions with RTM (Restricted Transactional Memory). For 38071 using HLE (Hardware Lock Elision) see *note x86 specific memory model 38072 extensions for transactional memory:: instead. This support is enabled 38073 with the `-mrtm' option. 38074 38075 A memory transaction commits all changes to memory in an atomic way, 38076 as visible to other threads. If the transaction fails it is rolled back 38077 and all side effects discarded. 38078 38079 Generally there is no guarantee that a memory transaction ever suceeds 38080 and suitable fallback code always needs to be supplied. 38081 38082 -- RTM Function: unsigned _xbegin () 38083 Start a RTM (Restricted Transactional Memory) transaction. 38084 Returns _XBEGIN_STARTED when the transaction started successfully 38085 (note this is not 0, so the constant has to be explicitely 38086 tested). When the transaction aborts all side effects are undone 38087 and an abort code is returned. There is no guarantee any 38088 transaction ever succeeds, so there always needs to be a valid 38089 tested fallback path. 38090 38091 #include <immintrin.h> 38092 38093 if ((status = _xbegin ()) == _XBEGIN_STARTED) { 38094 ... transaction code... 38095 _xend (); 38096 } else { 38097 ... non transactional fallback path... 38098 } 38099 38100 Valid abort status bits (when the value is not `_XBEGIN_STARTED') are: 38101 38102 `_XABORT_EXPLICIT' 38103 Transaction explicitely aborted with `_xabort'. The parameter 38104 passed to `_xabort' is available with `_XABORT_CODE(status)' 38105 38106 `_XABORT_RETRY' 38107 Transaction retry is possible. 38108 38109 `_XABORT_CONFLICT' 38110 Transaction abort due to a memory conflict with another thread 38111 38112 `_XABORT_CAPACITY' 38113 Transaction abort due to the transaction using too much memory 38114 38115 `_XABORT_DEBUG' 38116 Transaction abort due to a debug trap 38117 38118 `_XABORT_NESTED' 38119 Transaction abort in a inner nested transaction 38120 38121 -- RTM Function: void _xend () 38122 Commit the current transaction. When no transaction is active this 38123 will fault. All memory side effects of the transactions will 38124 become visible to other threads in an atomic matter. 38125 38126 -- RTM Function: int _xtest () 38127 Return a value not zero when a transaction is currently active, 38128 otherwise 0. 38129 38130 -- RTM Function: void _xabort (status) 38131 Abort the current transaction. When no transaction is active this 38132 is a no-op. status must be a 8bit constant, that is included in 38133 the status code returned by `_xbegin' 38134 38135 38136 File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 transactional memory intrinsics, Up: Target Builtins 38137 38138 6.56.9 MIPS DSP Built-in Functions 38139 ---------------------------------- 38140 38141 The MIPS DSP Application-Specific Extension (ASE) includes new 38142 instructions that are designed to improve the performance of DSP and 38143 media applications. It provides instructions that operate on packed 38144 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 38145 38146 GCC supports MIPS DSP operations using both the generic vector 38147 extensions (*note Vector Extensions::) and a collection of 38148 MIPS-specific built-in functions. Both kinds of support are enabled by 38149 the `-mdsp' command-line option. 38150 38151 Revision 2 of the ASE was introduced in the second half of 2006. This 38152 revision adds extra instructions to the original ASE, but is otherwise 38153 backwards-compatible with it. You can select revision 2 using the 38154 command-line option `-mdspr2'; this option implies `-mdsp'. 38155 38156 The SCOUNT and POS bits of the DSP control register are global. The 38157 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and 38158 POS bits. During optimization, the compiler does not delete these 38159 instructions and it does not delete calls to functions containing these 38160 instructions. 38161 38162 At present, GCC only provides support for operations on 32-bit 38163 vectors. The vector type associated with 8-bit integer data is usually 38164 called `v4i8', the vector type associated with Q7 is usually called 38165 `v4q7', the vector type associated with 16-bit integer data is usually 38166 called `v2i16', and the vector type associated with Q15 is usually 38167 called `v2q15'. They can be defined in C as follows: 38168 38169 typedef signed char v4i8 __attribute__ ((vector_size(4))); 38170 typedef signed char v4q7 __attribute__ ((vector_size(4))); 38171 typedef short v2i16 __attribute__ ((vector_size(4))); 38172 typedef short v2q15 __attribute__ ((vector_size(4))); 38173 38174 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same 38175 way as aggregates. For example: 38176 38177 v4i8 a = {1, 2, 3, 4}; 38178 v4i8 b; 38179 b = (v4i8) {5, 6, 7, 8}; 38180 38181 v2q15 c = {0x0fcb, 0x3a75}; 38182 v2q15 d; 38183 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 38184 38185 _Note:_ The CPU's endianness determines the order in which values are 38186 packed. On little-endian targets, the first value is the least 38187 significant and the last value is the most significant. The opposite 38188 order applies to big-endian targets. For example, the code above sets 38189 the lowest byte of `a' to `1' on little-endian targets and `4' on 38190 big-endian targets. 38191 38192 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 38193 representation. As shown in this example, the integer representation 38194 of a Q7 value can be obtained by multiplying the fractional value by 38195 `0x1.0p7'. The equivalent for Q15 values is to multiply by `0x1.0p15'. 38196 The equivalent for Q31 values is to multiply by `0x1.0p31'. 38197 38198 The table below lists the `v4i8' and `v2q15' operations for which 38199 hardware support exists. `a' and `b' are `v4i8' values, and `c' and 38200 `d' are `v2q15' values. 38201 38202 C code MIPS instruction 38203 `a + b' `addu.qb' 38204 `c + d' `addq.ph' 38205 `a - b' `subu.qb' 38206 `c - d' `subq.ph' 38207 38208 The table below lists the `v2i16' operation for which hardware support 38209 exists for the DSP ASE REV 2. `e' and `f' are `v2i16' values. 38210 38211 C code MIPS instruction 38212 `e * f' `mul.ph' 38213 38214 It is easier to describe the DSP built-in functions if we first define 38215 the following types: 38216 38217 typedef int q31; 38218 typedef int i32; 38219 typedef unsigned int ui32; 38220 typedef long long a64; 38221 38222 `q31' and `i32' are actually the same as `int', but we use `q31' to 38223 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 38224 value. Similarly, `a64' is the same as `long long', but we use `a64' 38225 to indicate values that are placed in one of the four DSP accumulators 38226 (`$ac0', `$ac1', `$ac2' or `$ac3'). 38227 38228 Also, some built-in functions prefer or require immediate numbers as 38229 parameters, because the corresponding DSP instructions accept both 38230 immediate numbers and register operands, or accept immediate numbers 38231 only. The immediate parameters are listed as follows. 38232 38233 imm0_3: 0 to 3. 38234 imm0_7: 0 to 7. 38235 imm0_15: 0 to 15. 38236 imm0_31: 0 to 31. 38237 imm0_63: 0 to 63. 38238 imm0_255: 0 to 255. 38239 imm_n32_31: -32 to 31. 38240 imm_n512_511: -512 to 511. 38241 38242 The following built-in functions map directly to a particular MIPS DSP 38243 instruction. Please refer to the architecture specification for 38244 details on what each instruction does. 38245 38246 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 38247 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 38248 q31 __builtin_mips_addq_s_w (q31, q31) 38249 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 38250 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 38251 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 38252 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 38253 q31 __builtin_mips_subq_s_w (q31, q31) 38254 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 38255 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 38256 i32 __builtin_mips_addsc (i32, i32) 38257 i32 __builtin_mips_addwc (i32, i32) 38258 i32 __builtin_mips_modsub (i32, i32) 38259 i32 __builtin_mips_raddu_w_qb (v4i8) 38260 v2q15 __builtin_mips_absq_s_ph (v2q15) 38261 q31 __builtin_mips_absq_s_w (q31) 38262 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 38263 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 38264 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 38265 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 38266 q31 __builtin_mips_preceq_w_phl (v2q15) 38267 q31 __builtin_mips_preceq_w_phr (v2q15) 38268 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 38269 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 38270 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 38271 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 38272 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 38273 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 38274 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 38275 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 38276 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 38277 v4i8 __builtin_mips_shll_qb (v4i8, i32) 38278 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 38279 v2q15 __builtin_mips_shll_ph (v2q15, i32) 38280 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 38281 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 38282 q31 __builtin_mips_shll_s_w (q31, imm0_31) 38283 q31 __builtin_mips_shll_s_w (q31, i32) 38284 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 38285 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 38286 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 38287 v2q15 __builtin_mips_shra_ph (v2q15, i32) 38288 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 38289 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 38290 q31 __builtin_mips_shra_r_w (q31, imm0_31) 38291 q31 __builtin_mips_shra_r_w (q31, i32) 38292 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 38293 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 38294 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 38295 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 38296 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 38297 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 38298 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 38299 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 38300 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 38301 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 38302 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 38303 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 38304 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 38305 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 38306 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 38307 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 38308 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 38309 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 38310 i32 __builtin_mips_bitrev (i32) 38311 i32 __builtin_mips_insv (i32, i32) 38312 v4i8 __builtin_mips_repl_qb (imm0_255) 38313 v4i8 __builtin_mips_repl_qb (i32) 38314 v2q15 __builtin_mips_repl_ph (imm_n512_511) 38315 v2q15 __builtin_mips_repl_ph (i32) 38316 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 38317 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 38318 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 38319 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 38320 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 38321 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 38322 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 38323 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 38324 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 38325 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 38326 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 38327 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 38328 i32 __builtin_mips_extr_w (a64, imm0_31) 38329 i32 __builtin_mips_extr_w (a64, i32) 38330 i32 __builtin_mips_extr_r_w (a64, imm0_31) 38331 i32 __builtin_mips_extr_s_h (a64, i32) 38332 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 38333 i32 __builtin_mips_extr_rs_w (a64, i32) 38334 i32 __builtin_mips_extr_s_h (a64, imm0_31) 38335 i32 __builtin_mips_extr_r_w (a64, i32) 38336 i32 __builtin_mips_extp (a64, imm0_31) 38337 i32 __builtin_mips_extp (a64, i32) 38338 i32 __builtin_mips_extpdp (a64, imm0_31) 38339 i32 __builtin_mips_extpdp (a64, i32) 38340 a64 __builtin_mips_shilo (a64, imm_n32_31) 38341 a64 __builtin_mips_shilo (a64, i32) 38342 a64 __builtin_mips_mthlip (a64, i32) 38343 void __builtin_mips_wrdsp (i32, imm0_63) 38344 i32 __builtin_mips_rddsp (imm0_63) 38345 i32 __builtin_mips_lbux (void *, i32) 38346 i32 __builtin_mips_lhx (void *, i32) 38347 i32 __builtin_mips_lwx (void *, i32) 38348 a64 __builtin_mips_ldx (void *, i32) [MIPS64 only] 38349 i32 __builtin_mips_bposge32 (void) 38350 a64 __builtin_mips_madd (a64, i32, i32); 38351 a64 __builtin_mips_maddu (a64, ui32, ui32); 38352 a64 __builtin_mips_msub (a64, i32, i32); 38353 a64 __builtin_mips_msubu (a64, ui32, ui32); 38354 a64 __builtin_mips_mult (i32, i32); 38355 a64 __builtin_mips_multu (ui32, ui32); 38356 38357 The following built-in functions map directly to a particular MIPS DSP 38358 REV 2 instruction. Please refer to the architecture specification for 38359 details on what each instruction does. 38360 38361 v4q7 __builtin_mips_absq_s_qb (v4q7); 38362 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 38363 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 38364 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 38365 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 38366 i32 __builtin_mips_append (i32, i32, imm0_31); 38367 i32 __builtin_mips_balign (i32, i32, imm0_3); 38368 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 38369 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 38370 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 38371 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 38372 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 38373 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 38374 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 38375 q31 __builtin_mips_mulq_rs_w (q31, q31); 38376 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 38377 q31 __builtin_mips_mulq_s_w (q31, q31); 38378 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 38379 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 38380 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 38381 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 38382 i32 __builtin_mips_prepend (i32, i32, imm0_31); 38383 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 38384 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 38385 v4i8 __builtin_mips_shra_qb (v4i8, i32); 38386 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 38387 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 38388 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 38389 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 38390 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 38391 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 38392 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 38393 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 38394 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 38395 q31 __builtin_mips_addqh_w (q31, q31); 38396 q31 __builtin_mips_addqh_r_w (q31, q31); 38397 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 38398 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 38399 q31 __builtin_mips_subqh_w (q31, q31); 38400 q31 __builtin_mips_subqh_r_w (q31, q31); 38401 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 38402 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 38403 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 38404 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 38405 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 38406 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 38407 38408 38409 File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 38410 38411 6.56.10 MIPS Paired-Single Support 38412 ---------------------------------- 38413 38414 The MIPS64 architecture includes a number of instructions that operate 38415 on pairs of single-precision floating-point values. Each pair is 38416 packed into a 64-bit floating-point register, with one element being 38417 designated the "upper half" and the other being designated the "lower 38418 half". 38419 38420 GCC supports paired-single operations using both the generic vector 38421 extensions (*note Vector Extensions::) and a collection of 38422 MIPS-specific built-in functions. Both kinds of support are enabled by 38423 the `-mpaired-single' command-line option. 38424 38425 The vector type associated with paired-single values is usually called 38426 `v2sf'. It can be defined in C as follows: 38427 38428 typedef float v2sf __attribute__ ((vector_size (8))); 38429 38430 `v2sf' values are initialized in the same way as aggregates. For 38431 example: 38432 38433 v2sf a = {1.5, 9.1}; 38434 v2sf b; 38435 float e, f; 38436 b = (v2sf) {e, f}; 38437 38438 _Note:_ The CPU's endianness determines which value is stored in the 38439 upper half of a register and which value is stored in the lower half. 38440 On little-endian targets, the first value is the lower one and the 38441 second value is the upper one. The opposite order applies to 38442 big-endian targets. For example, the code above sets the lower half of 38443 `a' to `1.5' on little-endian targets and `9.1' on big-endian targets. 38444 38445 38446 File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 38447 38448 6.56.11 MIPS Loongson Built-in Functions 38449 ---------------------------------------- 38450 38451 GCC provides intrinsics to access the SIMD instructions provided by the 38452 ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 38453 available after inclusion of the `loongson.h' header file, operate on 38454 the following 64-bit vector types: 38455 38456 * `uint8x8_t', a vector of eight unsigned 8-bit integers; 38457 38458 * `uint16x4_t', a vector of four unsigned 16-bit integers; 38459 38460 * `uint32x2_t', a vector of two unsigned 32-bit integers; 38461 38462 * `int8x8_t', a vector of eight signed 8-bit integers; 38463 38464 * `int16x4_t', a vector of four signed 16-bit integers; 38465 38466 * `int32x2_t', a vector of two signed 32-bit integers. 38467 38468 The intrinsics provided are listed below; each is named after the 38469 machine instruction to which it corresponds, with suffixes added as 38470 appropriate to distinguish intrinsics that expand to the same machine 38471 instruction yet have different argument types. Refer to the 38472 architecture documentation for a description of the functionality of 38473 each instruction. 38474 38475 int16x4_t packsswh (int32x2_t s, int32x2_t t); 38476 int8x8_t packsshb (int16x4_t s, int16x4_t t); 38477 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 38478 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 38479 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 38480 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 38481 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 38482 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 38483 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 38484 uint64_t paddd_u (uint64_t s, uint64_t t); 38485 int64_t paddd_s (int64_t s, int64_t t); 38486 int16x4_t paddsh (int16x4_t s, int16x4_t t); 38487 int8x8_t paddsb (int8x8_t s, int8x8_t t); 38488 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 38489 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 38490 uint64_t pandn_ud (uint64_t s, uint64_t t); 38491 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 38492 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 38493 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 38494 int64_t pandn_sd (int64_t s, int64_t t); 38495 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 38496 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 38497 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 38498 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 38499 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 38500 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 38501 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 38502 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 38503 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 38504 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 38505 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 38506 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 38507 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 38508 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 38509 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 38510 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 38511 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 38512 uint16x4_t pextrh_u (uint16x4_t s, int field); 38513 int16x4_t pextrh_s (int16x4_t s, int field); 38514 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 38515 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 38516 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 38517 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 38518 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 38519 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 38520 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 38521 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 38522 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 38523 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 38524 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 38525 int16x4_t pminsh (int16x4_t s, int16x4_t t); 38526 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 38527 uint8x8_t pmovmskb_u (uint8x8_t s); 38528 int8x8_t pmovmskb_s (int8x8_t s); 38529 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 38530 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 38531 int16x4_t pmullh (int16x4_t s, int16x4_t t); 38532 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 38533 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 38534 uint16x4_t biadd (uint8x8_t s); 38535 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 38536 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 38537 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 38538 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 38539 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 38540 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 38541 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 38542 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 38543 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 38544 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 38545 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 38546 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 38547 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 38548 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 38549 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 38550 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 38551 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 38552 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 38553 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 38554 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 38555 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 38556 uint64_t psubd_u (uint64_t s, uint64_t t); 38557 int64_t psubd_s (int64_t s, int64_t t); 38558 int16x4_t psubsh (int16x4_t s, int16x4_t t); 38559 int8x8_t psubsb (int8x8_t s, int8x8_t t); 38560 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 38561 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 38562 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 38563 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 38564 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 38565 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 38566 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 38567 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 38568 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 38569 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 38570 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 38571 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 38572 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 38573 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 38574 38575 * Menu: 38576 38577 * Paired-Single Arithmetic:: 38578 * Paired-Single Built-in Functions:: 38579 * MIPS-3D Built-in Functions:: 38580 38581 38582 File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 38583 38584 6.56.11.1 Paired-Single Arithmetic 38585 .................................. 38586 38587 The table below lists the `v2sf' operations for which hardware support 38588 exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 38589 value. 38590 38591 C code MIPS instruction 38592 `a + b' `add.ps' 38593 `a - b' `sub.ps' 38594 `-a' `neg.ps' 38595 `a * b' `mul.ps' 38596 `a * b + c' `madd.ps' 38597 `a * b - c' `msub.ps' 38598 `-(a * b + c)' `nmadd.ps' 38599 `-(a * b - c)' `nmsub.ps' 38600 `x ? a : b' `movn.ps'/`movz.ps' 38601 38602 Note that the multiply-accumulate instructions can be disabled using 38603 the command-line option `-mno-fused-madd'. 38604 38605 38606 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 38607 38608 6.56.11.2 Paired-Single Built-in Functions 38609 .......................................... 38610 38611 The following paired-single functions map directly to a particular MIPS 38612 instruction. Please refer to the architecture specification for 38613 details on what each instruction does. 38614 38615 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 38616 Pair lower lower (`pll.ps'). 38617 38618 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 38619 Pair upper lower (`pul.ps'). 38620 38621 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 38622 Pair lower upper (`plu.ps'). 38623 38624 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 38625 Pair upper upper (`puu.ps'). 38626 38627 `v2sf __builtin_mips_cvt_ps_s (float, float)' 38628 Convert pair to paired single (`cvt.ps.s'). 38629 38630 `float __builtin_mips_cvt_s_pl (v2sf)' 38631 Convert pair lower to single (`cvt.s.pl'). 38632 38633 `float __builtin_mips_cvt_s_pu (v2sf)' 38634 Convert pair upper to single (`cvt.s.pu'). 38635 38636 `v2sf __builtin_mips_abs_ps (v2sf)' 38637 Absolute value (`abs.ps'). 38638 38639 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 38640 Align variable (`alnv.ps'). 38641 38642 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 38643 otherwise the result is unpredictable. Please read the 38644 instruction description for details. 38645 38646 The following multi-instruction functions are also available. In each 38647 case, COND can be any of the 16 floating-point conditions: `f', `un', 38648 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 38649 `lt', `nge', `le' or `ngt'. 38650 38651 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38652 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38653 Conditional move based on floating-point comparison (`c.COND.ps', 38654 `movt.ps'/`movf.ps'). 38655 38656 The `movt' functions return the value X computed by: 38657 38658 c.COND.ps CC,A,B 38659 mov.ps X,C 38660 movt.ps X,D,CC 38661 38662 The `movf' functions are similar but use `movf.ps' instead of 38663 `movt.ps'. 38664 38665 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 38666 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 38667 Comparison of two paired-single values (`c.COND.ps', 38668 `bc1t'/`bc1f'). 38669 38670 These functions compare A and B using `c.COND.ps' and return 38671 either the upper or lower half of the result. For example: 38672 38673 v2sf a, b; 38674 if (__builtin_mips_upper_c_eq_ps (a, b)) 38675 upper_halves_are_equal (); 38676 else 38677 upper_halves_are_unequal (); 38678 38679 if (__builtin_mips_lower_c_eq_ps (a, b)) 38680 lower_halves_are_equal (); 38681 else 38682 lower_halves_are_unequal (); 38683 38684 38685 File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 38686 38687 6.56.11.3 MIPS-3D Built-in Functions 38688 .................................... 38689 38690 The MIPS-3D Application-Specific Extension (ASE) includes additional 38691 paired-single instructions that are designed to improve the performance 38692 of 3D graphics operations. Support for these instructions is controlled 38693 by the `-mips3d' command-line option. 38694 38695 The functions listed below map directly to a particular MIPS-3D 38696 instruction. Please refer to the architecture specification for more 38697 details on what each instruction does. 38698 38699 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 38700 Reduction add (`addr.ps'). 38701 38702 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 38703 Reduction multiply (`mulr.ps'). 38704 38705 `v2sf __builtin_mips_cvt_pw_ps (v2sf)' 38706 Convert paired single to paired word (`cvt.pw.ps'). 38707 38708 `v2sf __builtin_mips_cvt_ps_pw (v2sf)' 38709 Convert paired word to paired single (`cvt.ps.pw'). 38710 38711 `float __builtin_mips_recip1_s (float)' 38712 `double __builtin_mips_recip1_d (double)' 38713 `v2sf __builtin_mips_recip1_ps (v2sf)' 38714 Reduced-precision reciprocal (sequence step 1) (`recip1.FMT'). 38715 38716 `float __builtin_mips_recip2_s (float, float)' 38717 `double __builtin_mips_recip2_d (double, double)' 38718 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 38719 Reduced-precision reciprocal (sequence step 2) (`recip2.FMT'). 38720 38721 `float __builtin_mips_rsqrt1_s (float)' 38722 `double __builtin_mips_rsqrt1_d (double)' 38723 `v2sf __builtin_mips_rsqrt1_ps (v2sf)' 38724 Reduced-precision reciprocal square root (sequence step 1) 38725 (`rsqrt1.FMT'). 38726 38727 `float __builtin_mips_rsqrt2_s (float, float)' 38728 `double __builtin_mips_rsqrt2_d (double, double)' 38729 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 38730 Reduced-precision reciprocal square root (sequence step 2) 38731 (`rsqrt2.FMT'). 38732 38733 The following multi-instruction functions are also available. In each 38734 case, COND can be any of the 16 floating-point conditions: `f', `un', 38735 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 38736 `lt', `nge', `le' or `ngt'. 38737 38738 `int __builtin_mips_cabs_COND_s (float A, float B)' 38739 `int __builtin_mips_cabs_COND_d (double A, double B)' 38740 Absolute comparison of two scalar values (`cabs.COND.FMT', 38741 `bc1t'/`bc1f'). 38742 38743 These functions compare A and B using `cabs.COND.s' or 38744 `cabs.COND.d' and return the result as a boolean value. For 38745 example: 38746 38747 float a, b; 38748 if (__builtin_mips_cabs_eq_s (a, b)) 38749 true (); 38750 else 38751 false (); 38752 38753 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 38754 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 38755 Absolute comparison of two paired-single values (`cabs.COND.ps', 38756 `bc1t'/`bc1f'). 38757 38758 These functions compare A and B using `cabs.COND.ps' and return 38759 either the upper or lower half of the result. For example: 38760 38761 v2sf a, b; 38762 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 38763 upper_halves_are_equal (); 38764 else 38765 upper_halves_are_unequal (); 38766 38767 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 38768 lower_halves_are_equal (); 38769 else 38770 lower_halves_are_unequal (); 38771 38772 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38773 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38774 Conditional move based on absolute comparison (`cabs.COND.ps', 38775 `movt.ps'/`movf.ps'). 38776 38777 The `movt' functions return the value X computed by: 38778 38779 cabs.COND.ps CC,A,B 38780 mov.ps X,C 38781 movt.ps X,D,CC 38782 38783 The `movf' functions are similar but use `movf.ps' instead of 38784 `movt.ps'. 38785 38786 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 38787 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 38788 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 38789 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 38790 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 38791 `bc1any2t'/`bc1any2f'). 38792 38793 These functions compare A and B using `c.COND.ps' or 38794 `cabs.COND.ps'. The `any' forms return true if either result is 38795 true and the `all' forms return true if both results are true. 38796 For example: 38797 38798 v2sf a, b; 38799 if (__builtin_mips_any_c_eq_ps (a, b)) 38800 one_is_true (); 38801 else 38802 both_are_false (); 38803 38804 if (__builtin_mips_all_c_eq_ps (a, b)) 38805 both_are_true (); 38806 else 38807 one_is_false (); 38808 38809 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38810 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38811 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38812 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38813 Comparison of four paired-single values 38814 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 38815 38816 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 38817 with B and to compare C with D. The `any' forms return true if 38818 any of the four results are true and the `all' forms return true 38819 if all four results are true. For example: 38820 38821 v2sf a, b, c, d; 38822 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 38823 some_are_true (); 38824 else 38825 all_are_false (); 38826 38827 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 38828 all_are_true (); 38829 else 38830 some_are_false (); 38831 38832 38833 File: gcc.info, Node: Other MIPS Built-in Functions, Next: picoChip Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 38834 38835 6.56.12 Other MIPS Built-in Functions 38836 ------------------------------------- 38837 38838 GCC provides other MIPS-specific built-in functions: 38839 38840 `void __builtin_mips_cache (int OP, const volatile void *ADDR)' 38841 Insert a `cache' instruction with operands OP and ADDR. GCC 38842 defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE' 38843 when this function is available. 38844 38845 38846 File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 38847 38848 6.56.13 picoChip Built-in Functions 38849 ----------------------------------- 38850 38851 GCC provides an interface to selected machine instructions from the 38852 picoChip instruction set. 38853 38854 `int __builtin_sbc (int VALUE)' 38855 Sign bit count. Return the number of consecutive bits in VALUE 38856 that have the same value as the sign bit. The result is the 38857 number of leading sign bits minus one, giving the number of 38858 redundant sign bits in VALUE. 38859 38860 `int __builtin_byteswap (int VALUE)' 38861 Byte swap. Return the result of swapping the upper and lower 38862 bytes of VALUE. 38863 38864 `int __builtin_brev (int VALUE)' 38865 Bit reversal. Return the result of reversing the bits in VALUE. 38866 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 38867 on. 38868 38869 `int __builtin_adds (int X, int Y)' 38870 Saturating addition. Return the result of adding X and Y, storing 38871 the value 32767 if the result overflows. 38872 38873 `int __builtin_subs (int X, int Y)' 38874 Saturating subtraction. Return the result of subtracting Y from 38875 X, storing the value -32768 if the result overflows. 38876 38877 `void __builtin_halt (void)' 38878 Halt. The processor stops execution. This built-in is useful for 38879 implementing assertions. 38880 38881 38882 38883 File: gcc.info, Node: PowerPC Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 38884 38885 6.56.14 PowerPC Built-in Functions 38886 ---------------------------------- 38887 38888 These built-in functions are available for the PowerPC family of 38889 processors: 38890 float __builtin_recipdivf (float, float); 38891 float __builtin_rsqrtf (float); 38892 double __builtin_recipdiv (double, double); 38893 double __builtin_rsqrt (double); 38894 uint64_t __builtin_ppc_get_timebase (); 38895 unsigned long __builtin_ppc_mftb (); 38896 double __builtin_unpack_longdouble (long double, int); 38897 double __builtin_longdouble_dw0 (long double); 38898 double __builtin_longdouble_dw1 (long double); 38899 long double __builtin_pack_longdouble (double, double); 38900 38901 The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions 38902 generate multiple instructions to implement the reciprocal sqrt 38903 functionality using reciprocal sqrt estimate instructions. 38904 38905 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate 38906 multiple instructions to implement division using the reciprocal 38907 estimate instructions. 38908 38909 The `__builtin_ppc_get_timebase' and `__builtin_ppc_mftb' functions 38910 generate instructions to read the Time Base Register. The 38911 `__builtin_ppc_get_timebase' function may generate multiple 38912 instructions and always returns the 64 bits of the Time Base Register. 38913 The `__builtin_ppc_mftb' function always generates one instruction and 38914 returns the Time Base Register value as an unsigned long, throwing away 38915 the most significant word on 32-bit environments. 38916 38917 The following built-in functions are available for the PowerPC family 38918 of processors, starting with ISA 2.06 or later (`-mcpu=power7' or 38919 `-mpopcntd'): 38920 long __builtin_bpermd (long, long); 38921 int __builtin_divwe (int, int); 38922 int __builtin_divweo (int, int); 38923 unsigned int __builtin_divweu (unsigned int, unsigned int); 38924 unsigned int __builtin_divweuo (unsigned int, unsigned int); 38925 long __builtin_divde (long, long); 38926 long __builtin_divdeo (long, long); 38927 unsigned long __builtin_divdeu (unsigned long, unsigned long); 38928 unsigned long __builtin_divdeuo (unsigned long, unsigned long); 38929 unsigned int cdtbcd (unsigned int); 38930 unsigned int cbcdtd (unsigned int); 38931 unsigned int addg6s (unsigned int, unsigned int); 38932 38933 The `__builtin_divde', `__builtin_divdeo', `__builitin_divdeu', 38934 `__builtin_divdeou' functions require a 64-bit environment support ISA 38935 2.06 or later. 38936 38937 The following built-in functions are available for the PowerPC family 38938 of processors when hardware decimal floating point (`-mhard-dfp') is 38939 available: 38940 _Decimal64 __builtin_dxex (_Decimal64); 38941 _Decimal128 __builtin_dxexq (_Decimal128); 38942 _Decimal64 __builtin_ddedpd (int, _Decimal64); 38943 _Decimal128 __builtin_ddedpdq (int, _Decimal128); 38944 _Decimal64 __builtin_denbcd (int, _Decimal64); 38945 _Decimal128 __builtin_denbcdq (int, _Decimal128); 38946 _Decimal64 __builtin_diex (_Decimal64, _Decimal64); 38947 _Decimal128 _builtin_diexq (_Decimal128, _Decimal128); 38948 _Decimal64 __builtin_dscli (_Decimal64, int); 38949 _Decimal128 __builitn_dscliq (_Decimal128, int); 38950 _Decimal64 __builtin_dscri (_Decimal64, int); 38951 _Decimal128 __builitn_dscriq (_Decimal128, int); 38952 unsigned long long __builtin_unpack_dec128 (_Decimal128, int); 38953 _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long); 38954 38955 The following built-in functions are available for the PowerPC family 38956 of processors when the Vector Scalar (vsx) instruction set is available: 38957 unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int); 38958 vector __int128_t __builtin_pack_vector_int128 (unsigned long long, 38959 unsigned long long); 38960 38961 38962 File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: PowerPC Hardware Transactional Memory Built-in Functions, Prev: PowerPC Built-in Functions, Up: Target Builtins 38963 38964 6.56.15 PowerPC AltiVec Built-in Functions 38965 ------------------------------------------ 38966 38967 GCC provides an interface for the PowerPC family of processors to access 38968 the AltiVec operations described in Motorola's AltiVec Programming 38969 Interface Manual. The interface is made available by including 38970 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 38971 supports the following vector types. 38972 38973 vector unsigned char 38974 vector signed char 38975 vector bool char 38976 38977 vector unsigned short 38978 vector signed short 38979 vector bool short 38980 vector pixel 38981 38982 vector unsigned int 38983 vector signed int 38984 vector bool int 38985 vector float 38986 38987 If `-mvsx' is used the following additional vector types are 38988 implemented. 38989 38990 vector unsigned long 38991 vector signed long 38992 vector double 38993 38994 The long types are only implemented for 64-bit code generation, and 38995 the long type is only used in the floating point/integer conversion 38996 instructions. 38997 38998 GCC's implementation of the high-level language interface available 38999 from C and C++ code differs from Motorola's documentation in several 39000 ways. 39001 39002 * A vector constant is a list of constant expressions within curly 39003 braces. 39004 39005 * A vector initializer requires no cast if the vector constant is of 39006 the same type as the variable it is initializing. 39007 39008 * If `signed' or `unsigned' is omitted, the signedness of the vector 39009 type is the default signedness of the base type. The default 39010 varies depending on the operating system, so a portable program 39011 should always specify the signedness. 39012 39013 * Compiling with `-maltivec' adds keywords `__vector', `vector', 39014 `__pixel', `pixel', `__bool' and `bool'. When compiling ISO C, 39015 the context-sensitive substitution of the keywords `vector', 39016 `pixel' and `bool' is disabled. To use them, you must include 39017 `<altivec.h>' instead. 39018 39019 * GCC allows using a `typedef' name as the type specifier for a 39020 vector type. 39021 39022 * For C, overloaded functions are implemented with macros so the 39023 following does not work: 39024 39025 vec_add ((vector signed int){1, 2, 3, 4}, foo); 39026 39027 Since `vec_add' is a macro, the vector constant in the example is 39028 treated as four separate arguments. Wrap the entire argument in 39029 parentheses for this to work. 39030 39031 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 39032 GCC uses built-in functions to achieve the functionality in the 39033 aforementioned header file, but they are not supported and are subject 39034 to change without notice. 39035 39036 The following interfaces are supported for the generic and specific 39037 AltiVec operations and the AltiVec predicates. In cases where there is 39038 a direct mapping between generic and specific operations, only the 39039 generic names are shown here, although the specific operations can also 39040 be used. 39041 39042 Arguments that are documented as `const int' require literal integral 39043 values within the range required for that operation. 39044 39045 vector signed char vec_abs (vector signed char); 39046 vector signed short vec_abs (vector signed short); 39047 vector signed int vec_abs (vector signed int); 39048 vector float vec_abs (vector float); 39049 39050 vector signed char vec_abss (vector signed char); 39051 vector signed short vec_abss (vector signed short); 39052 vector signed int vec_abss (vector signed int); 39053 39054 vector signed char vec_add (vector bool char, vector signed char); 39055 vector signed char vec_add (vector signed char, vector bool char); 39056 vector signed char vec_add (vector signed char, vector signed char); 39057 vector unsigned char vec_add (vector bool char, vector unsigned char); 39058 vector unsigned char vec_add (vector unsigned char, vector bool char); 39059 vector unsigned char vec_add (vector unsigned char, 39060 vector unsigned char); 39061 vector signed short vec_add (vector bool short, vector signed short); 39062 vector signed short vec_add (vector signed short, vector bool short); 39063 vector signed short vec_add (vector signed short, vector signed short); 39064 vector unsigned short vec_add (vector bool short, 39065 vector unsigned short); 39066 vector unsigned short vec_add (vector unsigned short, 39067 vector bool short); 39068 vector unsigned short vec_add (vector unsigned short, 39069 vector unsigned short); 39070 vector signed int vec_add (vector bool int, vector signed int); 39071 vector signed int vec_add (vector signed int, vector bool int); 39072 vector signed int vec_add (vector signed int, vector signed int); 39073 vector unsigned int vec_add (vector bool int, vector unsigned int); 39074 vector unsigned int vec_add (vector unsigned int, vector bool int); 39075 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 39076 vector float vec_add (vector float, vector float); 39077 39078 vector float vec_vaddfp (vector float, vector float); 39079 39080 vector signed int vec_vadduwm (vector bool int, vector signed int); 39081 vector signed int vec_vadduwm (vector signed int, vector bool int); 39082 vector signed int vec_vadduwm (vector signed int, vector signed int); 39083 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 39084 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 39085 vector unsigned int vec_vadduwm (vector unsigned int, 39086 vector unsigned int); 39087 39088 vector signed short vec_vadduhm (vector bool short, 39089 vector signed short); 39090 vector signed short vec_vadduhm (vector signed short, 39091 vector bool short); 39092 vector signed short vec_vadduhm (vector signed short, 39093 vector signed short); 39094 vector unsigned short vec_vadduhm (vector bool short, 39095 vector unsigned short); 39096 vector unsigned short vec_vadduhm (vector unsigned short, 39097 vector bool short); 39098 vector unsigned short vec_vadduhm (vector unsigned short, 39099 vector unsigned short); 39100 39101 vector signed char vec_vaddubm (vector bool char, vector signed char); 39102 vector signed char vec_vaddubm (vector signed char, vector bool char); 39103 vector signed char vec_vaddubm (vector signed char, vector signed char); 39104 vector unsigned char vec_vaddubm (vector bool char, 39105 vector unsigned char); 39106 vector unsigned char vec_vaddubm (vector unsigned char, 39107 vector bool char); 39108 vector unsigned char vec_vaddubm (vector unsigned char, 39109 vector unsigned char); 39110 39111 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 39112 39113 vector unsigned char vec_adds (vector bool char, vector unsigned char); 39114 vector unsigned char vec_adds (vector unsigned char, vector bool char); 39115 vector unsigned char vec_adds (vector unsigned char, 39116 vector unsigned char); 39117 vector signed char vec_adds (vector bool char, vector signed char); 39118 vector signed char vec_adds (vector signed char, vector bool char); 39119 vector signed char vec_adds (vector signed char, vector signed char); 39120 vector unsigned short vec_adds (vector bool short, 39121 vector unsigned short); 39122 vector unsigned short vec_adds (vector unsigned short, 39123 vector bool short); 39124 vector unsigned short vec_adds (vector unsigned short, 39125 vector unsigned short); 39126 vector signed short vec_adds (vector bool short, vector signed short); 39127 vector signed short vec_adds (vector signed short, vector bool short); 39128 vector signed short vec_adds (vector signed short, vector signed short); 39129 vector unsigned int vec_adds (vector bool int, vector unsigned int); 39130 vector unsigned int vec_adds (vector unsigned int, vector bool int); 39131 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 39132 vector signed int vec_adds (vector bool int, vector signed int); 39133 vector signed int vec_adds (vector signed int, vector bool int); 39134 vector signed int vec_adds (vector signed int, vector signed int); 39135 39136 vector signed int vec_vaddsws (vector bool int, vector signed int); 39137 vector signed int vec_vaddsws (vector signed int, vector bool int); 39138 vector signed int vec_vaddsws (vector signed int, vector signed int); 39139 39140 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 39141 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 39142 vector unsigned int vec_vadduws (vector unsigned int, 39143 vector unsigned int); 39144 39145 vector signed short vec_vaddshs (vector bool short, 39146 vector signed short); 39147 vector signed short vec_vaddshs (vector signed short, 39148 vector bool short); 39149 vector signed short vec_vaddshs (vector signed short, 39150 vector signed short); 39151 39152 vector unsigned short vec_vadduhs (vector bool short, 39153 vector unsigned short); 39154 vector unsigned short vec_vadduhs (vector unsigned short, 39155 vector bool short); 39156 vector unsigned short vec_vadduhs (vector unsigned short, 39157 vector unsigned short); 39158 39159 vector signed char vec_vaddsbs (vector bool char, vector signed char); 39160 vector signed char vec_vaddsbs (vector signed char, vector bool char); 39161 vector signed char vec_vaddsbs (vector signed char, vector signed char); 39162 39163 vector unsigned char vec_vaddubs (vector bool char, 39164 vector unsigned char); 39165 vector unsigned char vec_vaddubs (vector unsigned char, 39166 vector bool char); 39167 vector unsigned char vec_vaddubs (vector unsigned char, 39168 vector unsigned char); 39169 39170 vector float vec_and (vector float, vector float); 39171 vector float vec_and (vector float, vector bool int); 39172 vector float vec_and (vector bool int, vector float); 39173 vector bool int vec_and (vector bool int, vector bool int); 39174 vector signed int vec_and (vector bool int, vector signed int); 39175 vector signed int vec_and (vector signed int, vector bool int); 39176 vector signed int vec_and (vector signed int, vector signed int); 39177 vector unsigned int vec_and (vector bool int, vector unsigned int); 39178 vector unsigned int vec_and (vector unsigned int, vector bool int); 39179 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 39180 vector bool short vec_and (vector bool short, vector bool short); 39181 vector signed short vec_and (vector bool short, vector signed short); 39182 vector signed short vec_and (vector signed short, vector bool short); 39183 vector signed short vec_and (vector signed short, vector signed short); 39184 vector unsigned short vec_and (vector bool short, 39185 vector unsigned short); 39186 vector unsigned short vec_and (vector unsigned short, 39187 vector bool short); 39188 vector unsigned short vec_and (vector unsigned short, 39189 vector unsigned short); 39190 vector signed char vec_and (vector bool char, vector signed char); 39191 vector bool char vec_and (vector bool char, vector bool char); 39192 vector signed char vec_and (vector signed char, vector bool char); 39193 vector signed char vec_and (vector signed char, vector signed char); 39194 vector unsigned char vec_and (vector bool char, vector unsigned char); 39195 vector unsigned char vec_and (vector unsigned char, vector bool char); 39196 vector unsigned char vec_and (vector unsigned char, 39197 vector unsigned char); 39198 39199 vector float vec_andc (vector float, vector float); 39200 vector float vec_andc (vector float, vector bool int); 39201 vector float vec_andc (vector bool int, vector float); 39202 vector bool int vec_andc (vector bool int, vector bool int); 39203 vector signed int vec_andc (vector bool int, vector signed int); 39204 vector signed int vec_andc (vector signed int, vector bool int); 39205 vector signed int vec_andc (vector signed int, vector signed int); 39206 vector unsigned int vec_andc (vector bool int, vector unsigned int); 39207 vector unsigned int vec_andc (vector unsigned int, vector bool int); 39208 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 39209 vector bool short vec_andc (vector bool short, vector bool short); 39210 vector signed short vec_andc (vector bool short, vector signed short); 39211 vector signed short vec_andc (vector signed short, vector bool short); 39212 vector signed short vec_andc (vector signed short, vector signed short); 39213 vector unsigned short vec_andc (vector bool short, 39214 vector unsigned short); 39215 vector unsigned short vec_andc (vector unsigned short, 39216 vector bool short); 39217 vector unsigned short vec_andc (vector unsigned short, 39218 vector unsigned short); 39219 vector signed char vec_andc (vector bool char, vector signed char); 39220 vector bool char vec_andc (vector bool char, vector bool char); 39221 vector signed char vec_andc (vector signed char, vector bool char); 39222 vector signed char vec_andc (vector signed char, vector signed char); 39223 vector unsigned char vec_andc (vector bool char, vector unsigned char); 39224 vector unsigned char vec_andc (vector unsigned char, vector bool char); 39225 vector unsigned char vec_andc (vector unsigned char, 39226 vector unsigned char); 39227 39228 vector unsigned char vec_avg (vector unsigned char, 39229 vector unsigned char); 39230 vector signed char vec_avg (vector signed char, vector signed char); 39231 vector unsigned short vec_avg (vector unsigned short, 39232 vector unsigned short); 39233 vector signed short vec_avg (vector signed short, vector signed short); 39234 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 39235 vector signed int vec_avg (vector signed int, vector signed int); 39236 39237 vector signed int vec_vavgsw (vector signed int, vector signed int); 39238 39239 vector unsigned int vec_vavguw (vector unsigned int, 39240 vector unsigned int); 39241 39242 vector signed short vec_vavgsh (vector signed short, 39243 vector signed short); 39244 39245 vector unsigned short vec_vavguh (vector unsigned short, 39246 vector unsigned short); 39247 39248 vector signed char vec_vavgsb (vector signed char, vector signed char); 39249 39250 vector unsigned char vec_vavgub (vector unsigned char, 39251 vector unsigned char); 39252 39253 vector float vec_copysign (vector float); 39254 39255 vector float vec_ceil (vector float); 39256 39257 vector signed int vec_cmpb (vector float, vector float); 39258 39259 vector bool char vec_cmpeq (vector signed char, vector signed char); 39260 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 39261 vector bool short vec_cmpeq (vector signed short, vector signed short); 39262 vector bool short vec_cmpeq (vector unsigned short, 39263 vector unsigned short); 39264 vector bool int vec_cmpeq (vector signed int, vector signed int); 39265 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 39266 vector bool int vec_cmpeq (vector float, vector float); 39267 39268 vector bool int vec_vcmpeqfp (vector float, vector float); 39269 39270 vector bool int vec_vcmpequw (vector signed int, vector signed int); 39271 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 39272 39273 vector bool short vec_vcmpequh (vector signed short, 39274 vector signed short); 39275 vector bool short vec_vcmpequh (vector unsigned short, 39276 vector unsigned short); 39277 39278 vector bool char vec_vcmpequb (vector signed char, vector signed char); 39279 vector bool char vec_vcmpequb (vector unsigned char, 39280 vector unsigned char); 39281 39282 vector bool int vec_cmpge (vector float, vector float); 39283 39284 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 39285 vector bool char vec_cmpgt (vector signed char, vector signed char); 39286 vector bool short vec_cmpgt (vector unsigned short, 39287 vector unsigned short); 39288 vector bool short vec_cmpgt (vector signed short, vector signed short); 39289 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 39290 vector bool int vec_cmpgt (vector signed int, vector signed int); 39291 vector bool int vec_cmpgt (vector float, vector float); 39292 39293 vector bool int vec_vcmpgtfp (vector float, vector float); 39294 39295 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 39296 39297 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 39298 39299 vector bool short vec_vcmpgtsh (vector signed short, 39300 vector signed short); 39301 39302 vector bool short vec_vcmpgtuh (vector unsigned short, 39303 vector unsigned short); 39304 39305 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 39306 39307 vector bool char vec_vcmpgtub (vector unsigned char, 39308 vector unsigned char); 39309 39310 vector bool int vec_cmple (vector float, vector float); 39311 39312 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 39313 vector bool char vec_cmplt (vector signed char, vector signed char); 39314 vector bool short vec_cmplt (vector unsigned short, 39315 vector unsigned short); 39316 vector bool short vec_cmplt (vector signed short, vector signed short); 39317 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 39318 vector bool int vec_cmplt (vector signed int, vector signed int); 39319 vector bool int vec_cmplt (vector float, vector float); 39320 39321 vector float vec_ctf (vector unsigned int, const int); 39322 vector float vec_ctf (vector signed int, const int); 39323 39324 vector float vec_vcfsx (vector signed int, const int); 39325 39326 vector float vec_vcfux (vector unsigned int, const int); 39327 39328 vector signed int vec_cts (vector float, const int); 39329 39330 vector unsigned int vec_ctu (vector float, const int); 39331 39332 void vec_dss (const int); 39333 39334 void vec_dssall (void); 39335 39336 void vec_dst (const vector unsigned char *, int, const int); 39337 void vec_dst (const vector signed char *, int, const int); 39338 void vec_dst (const vector bool char *, int, const int); 39339 void vec_dst (const vector unsigned short *, int, const int); 39340 void vec_dst (const vector signed short *, int, const int); 39341 void vec_dst (const vector bool short *, int, const int); 39342 void vec_dst (const vector pixel *, int, const int); 39343 void vec_dst (const vector unsigned int *, int, const int); 39344 void vec_dst (const vector signed int *, int, const int); 39345 void vec_dst (const vector bool int *, int, const int); 39346 void vec_dst (const vector float *, int, const int); 39347 void vec_dst (const unsigned char *, int, const int); 39348 void vec_dst (const signed char *, int, const int); 39349 void vec_dst (const unsigned short *, int, const int); 39350 void vec_dst (const short *, int, const int); 39351 void vec_dst (const unsigned int *, int, const int); 39352 void vec_dst (const int *, int, const int); 39353 void vec_dst (const unsigned long *, int, const int); 39354 void vec_dst (const long *, int, const int); 39355 void vec_dst (const float *, int, const int); 39356 39357 void vec_dstst (const vector unsigned char *, int, const int); 39358 void vec_dstst (const vector signed char *, int, const int); 39359 void vec_dstst (const vector bool char *, int, const int); 39360 void vec_dstst (const vector unsigned short *, int, const int); 39361 void vec_dstst (const vector signed short *, int, const int); 39362 void vec_dstst (const vector bool short *, int, const int); 39363 void vec_dstst (const vector pixel *, int, const int); 39364 void vec_dstst (const vector unsigned int *, int, const int); 39365 void vec_dstst (const vector signed int *, int, const int); 39366 void vec_dstst (const vector bool int *, int, const int); 39367 void vec_dstst (const vector float *, int, const int); 39368 void vec_dstst (const unsigned char *, int, const int); 39369 void vec_dstst (const signed char *, int, const int); 39370 void vec_dstst (const unsigned short *, int, const int); 39371 void vec_dstst (const short *, int, const int); 39372 void vec_dstst (const unsigned int *, int, const int); 39373 void vec_dstst (const int *, int, const int); 39374 void vec_dstst (const unsigned long *, int, const int); 39375 void vec_dstst (const long *, int, const int); 39376 void vec_dstst (const float *, int, const int); 39377 39378 void vec_dststt (const vector unsigned char *, int, const int); 39379 void vec_dststt (const vector signed char *, int, const int); 39380 void vec_dststt (const vector bool char *, int, const int); 39381 void vec_dststt (const vector unsigned short *, int, const int); 39382 void vec_dststt (const vector signed short *, int, const int); 39383 void vec_dststt (const vector bool short *, int, const int); 39384 void vec_dststt (const vector pixel *, int, const int); 39385 void vec_dststt (const vector unsigned int *, int, const int); 39386 void vec_dststt (const vector signed int *, int, const int); 39387 void vec_dststt (const vector bool int *, int, const int); 39388 void vec_dststt (const vector float *, int, const int); 39389 void vec_dststt (const unsigned char *, int, const int); 39390 void vec_dststt (const signed char *, int, const int); 39391 void vec_dststt (const unsigned short *, int, const int); 39392 void vec_dststt (const short *, int, const int); 39393 void vec_dststt (const unsigned int *, int, const int); 39394 void vec_dststt (const int *, int, const int); 39395 void vec_dststt (const unsigned long *, int, const int); 39396 void vec_dststt (const long *, int, const int); 39397 void vec_dststt (const float *, int, const int); 39398 39399 void vec_dstt (const vector unsigned char *, int, const int); 39400 void vec_dstt (const vector signed char *, int, const int); 39401 void vec_dstt (const vector bool char *, int, const int); 39402 void vec_dstt (const vector unsigned short *, int, const int); 39403 void vec_dstt (const vector signed short *, int, const int); 39404 void vec_dstt (const vector bool short *, int, const int); 39405 void vec_dstt (const vector pixel *, int, const int); 39406 void vec_dstt (const vector unsigned int *, int, const int); 39407 void vec_dstt (const vector signed int *, int, const int); 39408 void vec_dstt (const vector bool int *, int, const int); 39409 void vec_dstt (const vector float *, int, const int); 39410 void vec_dstt (const unsigned char *, int, const int); 39411 void vec_dstt (const signed char *, int, const int); 39412 void vec_dstt (const unsigned short *, int, const int); 39413 void vec_dstt (const short *, int, const int); 39414 void vec_dstt (const unsigned int *, int, const int); 39415 void vec_dstt (const int *, int, const int); 39416 void vec_dstt (const unsigned long *, int, const int); 39417 void vec_dstt (const long *, int, const int); 39418 void vec_dstt (const float *, int, const int); 39419 39420 vector float vec_expte (vector float); 39421 39422 vector float vec_floor (vector float); 39423 39424 vector float vec_ld (int, const vector float *); 39425 vector float vec_ld (int, const float *); 39426 vector bool int vec_ld (int, const vector bool int *); 39427 vector signed int vec_ld (int, const vector signed int *); 39428 vector signed int vec_ld (int, const int *); 39429 vector signed int vec_ld (int, const long *); 39430 vector unsigned int vec_ld (int, const vector unsigned int *); 39431 vector unsigned int vec_ld (int, const unsigned int *); 39432 vector unsigned int vec_ld (int, const unsigned long *); 39433 vector bool short vec_ld (int, const vector bool short *); 39434 vector pixel vec_ld (int, const vector pixel *); 39435 vector signed short vec_ld (int, const vector signed short *); 39436 vector signed short vec_ld (int, const short *); 39437 vector unsigned short vec_ld (int, const vector unsigned short *); 39438 vector unsigned short vec_ld (int, const unsigned short *); 39439 vector bool char vec_ld (int, const vector bool char *); 39440 vector signed char vec_ld (int, const vector signed char *); 39441 vector signed char vec_ld (int, const signed char *); 39442 vector unsigned char vec_ld (int, const vector unsigned char *); 39443 vector unsigned char vec_ld (int, const unsigned char *); 39444 39445 vector signed char vec_lde (int, const signed char *); 39446 vector unsigned char vec_lde (int, const unsigned char *); 39447 vector signed short vec_lde (int, const short *); 39448 vector unsigned short vec_lde (int, const unsigned short *); 39449 vector float vec_lde (int, const float *); 39450 vector signed int vec_lde (int, const int *); 39451 vector unsigned int vec_lde (int, const unsigned int *); 39452 vector signed int vec_lde (int, const long *); 39453 vector unsigned int vec_lde (int, const unsigned long *); 39454 39455 vector float vec_lvewx (int, float *); 39456 vector signed int vec_lvewx (int, int *); 39457 vector unsigned int vec_lvewx (int, unsigned int *); 39458 vector signed int vec_lvewx (int, long *); 39459 vector unsigned int vec_lvewx (int, unsigned long *); 39460 39461 vector signed short vec_lvehx (int, short *); 39462 vector unsigned short vec_lvehx (int, unsigned short *); 39463 39464 vector signed char vec_lvebx (int, char *); 39465 vector unsigned char vec_lvebx (int, unsigned char *); 39466 39467 vector float vec_ldl (int, const vector float *); 39468 vector float vec_ldl (int, const float *); 39469 vector bool int vec_ldl (int, const vector bool int *); 39470 vector signed int vec_ldl (int, const vector signed int *); 39471 vector signed int vec_ldl (int, const int *); 39472 vector signed int vec_ldl (int, const long *); 39473 vector unsigned int vec_ldl (int, const vector unsigned int *); 39474 vector unsigned int vec_ldl (int, const unsigned int *); 39475 vector unsigned int vec_ldl (int, const unsigned long *); 39476 vector bool short vec_ldl (int, const vector bool short *); 39477 vector pixel vec_ldl (int, const vector pixel *); 39478 vector signed short vec_ldl (int, const vector signed short *); 39479 vector signed short vec_ldl (int, const short *); 39480 vector unsigned short vec_ldl (int, const vector unsigned short *); 39481 vector unsigned short vec_ldl (int, const unsigned short *); 39482 vector bool char vec_ldl (int, const vector bool char *); 39483 vector signed char vec_ldl (int, const vector signed char *); 39484 vector signed char vec_ldl (int, const signed char *); 39485 vector unsigned char vec_ldl (int, const vector unsigned char *); 39486 vector unsigned char vec_ldl (int, const unsigned char *); 39487 39488 vector float vec_loge (vector float); 39489 39490 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 39491 vector unsigned char vec_lvsl (int, const volatile signed char *); 39492 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 39493 vector unsigned char vec_lvsl (int, const volatile short *); 39494 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 39495 vector unsigned char vec_lvsl (int, const volatile int *); 39496 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 39497 vector unsigned char vec_lvsl (int, const volatile long *); 39498 vector unsigned char vec_lvsl (int, const volatile float *); 39499 39500 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 39501 vector unsigned char vec_lvsr (int, const volatile signed char *); 39502 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 39503 vector unsigned char vec_lvsr (int, const volatile short *); 39504 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 39505 vector unsigned char vec_lvsr (int, const volatile int *); 39506 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 39507 vector unsigned char vec_lvsr (int, const volatile long *); 39508 vector unsigned char vec_lvsr (int, const volatile float *); 39509 39510 vector float vec_madd (vector float, vector float, vector float); 39511 39512 vector signed short vec_madds (vector signed short, 39513 vector signed short, 39514 vector signed short); 39515 39516 vector unsigned char vec_max (vector bool char, vector unsigned char); 39517 vector unsigned char vec_max (vector unsigned char, vector bool char); 39518 vector unsigned char vec_max (vector unsigned char, 39519 vector unsigned char); 39520 vector signed char vec_max (vector bool char, vector signed char); 39521 vector signed char vec_max (vector signed char, vector bool char); 39522 vector signed char vec_max (vector signed char, vector signed char); 39523 vector unsigned short vec_max (vector bool short, 39524 vector unsigned short); 39525 vector unsigned short vec_max (vector unsigned short, 39526 vector bool short); 39527 vector unsigned short vec_max (vector unsigned short, 39528 vector unsigned short); 39529 vector signed short vec_max (vector bool short, vector signed short); 39530 vector signed short vec_max (vector signed short, vector bool short); 39531 vector signed short vec_max (vector signed short, vector signed short); 39532 vector unsigned int vec_max (vector bool int, vector unsigned int); 39533 vector unsigned int vec_max (vector unsigned int, vector bool int); 39534 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 39535 vector signed int vec_max (vector bool int, vector signed int); 39536 vector signed int vec_max (vector signed int, vector bool int); 39537 vector signed int vec_max (vector signed int, vector signed int); 39538 vector float vec_max (vector float, vector float); 39539 39540 vector float vec_vmaxfp (vector float, vector float); 39541 39542 vector signed int vec_vmaxsw (vector bool int, vector signed int); 39543 vector signed int vec_vmaxsw (vector signed int, vector bool int); 39544 vector signed int vec_vmaxsw (vector signed int, vector signed int); 39545 39546 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 39547 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 39548 vector unsigned int vec_vmaxuw (vector unsigned int, 39549 vector unsigned int); 39550 39551 vector signed short vec_vmaxsh (vector bool short, vector signed short); 39552 vector signed short vec_vmaxsh (vector signed short, vector bool short); 39553 vector signed short vec_vmaxsh (vector signed short, 39554 vector signed short); 39555 39556 vector unsigned short vec_vmaxuh (vector bool short, 39557 vector unsigned short); 39558 vector unsigned short vec_vmaxuh (vector unsigned short, 39559 vector bool short); 39560 vector unsigned short vec_vmaxuh (vector unsigned short, 39561 vector unsigned short); 39562 39563 vector signed char vec_vmaxsb (vector bool char, vector signed char); 39564 vector signed char vec_vmaxsb (vector signed char, vector bool char); 39565 vector signed char vec_vmaxsb (vector signed char, vector signed char); 39566 39567 vector unsigned char vec_vmaxub (vector bool char, 39568 vector unsigned char); 39569 vector unsigned char vec_vmaxub (vector unsigned char, 39570 vector bool char); 39571 vector unsigned char vec_vmaxub (vector unsigned char, 39572 vector unsigned char); 39573 39574 vector bool char vec_mergeh (vector bool char, vector bool char); 39575 vector signed char vec_mergeh (vector signed char, vector signed char); 39576 vector unsigned char vec_mergeh (vector unsigned char, 39577 vector unsigned char); 39578 vector bool short vec_mergeh (vector bool short, vector bool short); 39579 vector pixel vec_mergeh (vector pixel, vector pixel); 39580 vector signed short vec_mergeh (vector signed short, 39581 vector signed short); 39582 vector unsigned short vec_mergeh (vector unsigned short, 39583 vector unsigned short); 39584 vector float vec_mergeh (vector float, vector float); 39585 vector bool int vec_mergeh (vector bool int, vector bool int); 39586 vector signed int vec_mergeh (vector signed int, vector signed int); 39587 vector unsigned int vec_mergeh (vector unsigned int, 39588 vector unsigned int); 39589 39590 vector float vec_vmrghw (vector float, vector float); 39591 vector bool int vec_vmrghw (vector bool int, vector bool int); 39592 vector signed int vec_vmrghw (vector signed int, vector signed int); 39593 vector unsigned int vec_vmrghw (vector unsigned int, 39594 vector unsigned int); 39595 39596 vector bool short vec_vmrghh (vector bool short, vector bool short); 39597 vector signed short vec_vmrghh (vector signed short, 39598 vector signed short); 39599 vector unsigned short vec_vmrghh (vector unsigned short, 39600 vector unsigned short); 39601 vector pixel vec_vmrghh (vector pixel, vector pixel); 39602 39603 vector bool char vec_vmrghb (vector bool char, vector bool char); 39604 vector signed char vec_vmrghb (vector signed char, vector signed char); 39605 vector unsigned char vec_vmrghb (vector unsigned char, 39606 vector unsigned char); 39607 39608 vector bool char vec_mergel (vector bool char, vector bool char); 39609 vector signed char vec_mergel (vector signed char, vector signed char); 39610 vector unsigned char vec_mergel (vector unsigned char, 39611 vector unsigned char); 39612 vector bool short vec_mergel (vector bool short, vector bool short); 39613 vector pixel vec_mergel (vector pixel, vector pixel); 39614 vector signed short vec_mergel (vector signed short, 39615 vector signed short); 39616 vector unsigned short vec_mergel (vector unsigned short, 39617 vector unsigned short); 39618 vector float vec_mergel (vector float, vector float); 39619 vector bool int vec_mergel (vector bool int, vector bool int); 39620 vector signed int vec_mergel (vector signed int, vector signed int); 39621 vector unsigned int vec_mergel (vector unsigned int, 39622 vector unsigned int); 39623 39624 vector float vec_vmrglw (vector float, vector float); 39625 vector signed int vec_vmrglw (vector signed int, vector signed int); 39626 vector unsigned int vec_vmrglw (vector unsigned int, 39627 vector unsigned int); 39628 vector bool int vec_vmrglw (vector bool int, vector bool int); 39629 39630 vector bool short vec_vmrglh (vector bool short, vector bool short); 39631 vector signed short vec_vmrglh (vector signed short, 39632 vector signed short); 39633 vector unsigned short vec_vmrglh (vector unsigned short, 39634 vector unsigned short); 39635 vector pixel vec_vmrglh (vector pixel, vector pixel); 39636 39637 vector bool char vec_vmrglb (vector bool char, vector bool char); 39638 vector signed char vec_vmrglb (vector signed char, vector signed char); 39639 vector unsigned char vec_vmrglb (vector unsigned char, 39640 vector unsigned char); 39641 39642 vector unsigned short vec_mfvscr (void); 39643 39644 vector unsigned char vec_min (vector bool char, vector unsigned char); 39645 vector unsigned char vec_min (vector unsigned char, vector bool char); 39646 vector unsigned char vec_min (vector unsigned char, 39647 vector unsigned char); 39648 vector signed char vec_min (vector bool char, vector signed char); 39649 vector signed char vec_min (vector signed char, vector bool char); 39650 vector signed char vec_min (vector signed char, vector signed char); 39651 vector unsigned short vec_min (vector bool short, 39652 vector unsigned short); 39653 vector unsigned short vec_min (vector unsigned short, 39654 vector bool short); 39655 vector unsigned short vec_min (vector unsigned short, 39656 vector unsigned short); 39657 vector signed short vec_min (vector bool short, vector signed short); 39658 vector signed short vec_min (vector signed short, vector bool short); 39659 vector signed short vec_min (vector signed short, vector signed short); 39660 vector unsigned int vec_min (vector bool int, vector unsigned int); 39661 vector unsigned int vec_min (vector unsigned int, vector bool int); 39662 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 39663 vector signed int vec_min (vector bool int, vector signed int); 39664 vector signed int vec_min (vector signed int, vector bool int); 39665 vector signed int vec_min (vector signed int, vector signed int); 39666 vector float vec_min (vector float, vector float); 39667 39668 vector float vec_vminfp (vector float, vector float); 39669 39670 vector signed int vec_vminsw (vector bool int, vector signed int); 39671 vector signed int vec_vminsw (vector signed int, vector bool int); 39672 vector signed int vec_vminsw (vector signed int, vector signed int); 39673 39674 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 39675 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 39676 vector unsigned int vec_vminuw (vector unsigned int, 39677 vector unsigned int); 39678 39679 vector signed short vec_vminsh (vector bool short, vector signed short); 39680 vector signed short vec_vminsh (vector signed short, vector bool short); 39681 vector signed short vec_vminsh (vector signed short, 39682 vector signed short); 39683 39684 vector unsigned short vec_vminuh (vector bool short, 39685 vector unsigned short); 39686 vector unsigned short vec_vminuh (vector unsigned short, 39687 vector bool short); 39688 vector unsigned short vec_vminuh (vector unsigned short, 39689 vector unsigned short); 39690 39691 vector signed char vec_vminsb (vector bool char, vector signed char); 39692 vector signed char vec_vminsb (vector signed char, vector bool char); 39693 vector signed char vec_vminsb (vector signed char, vector signed char); 39694 39695 vector unsigned char vec_vminub (vector bool char, 39696 vector unsigned char); 39697 vector unsigned char vec_vminub (vector unsigned char, 39698 vector bool char); 39699 vector unsigned char vec_vminub (vector unsigned char, 39700 vector unsigned char); 39701 39702 vector signed short vec_mladd (vector signed short, 39703 vector signed short, 39704 vector signed short); 39705 vector signed short vec_mladd (vector signed short, 39706 vector unsigned short, 39707 vector unsigned short); 39708 vector signed short vec_mladd (vector unsigned short, 39709 vector signed short, 39710 vector signed short); 39711 vector unsigned short vec_mladd (vector unsigned short, 39712 vector unsigned short, 39713 vector unsigned short); 39714 39715 vector signed short vec_mradds (vector signed short, 39716 vector signed short, 39717 vector signed short); 39718 39719 vector unsigned int vec_msum (vector unsigned char, 39720 vector unsigned char, 39721 vector unsigned int); 39722 vector signed int vec_msum (vector signed char, 39723 vector unsigned char, 39724 vector signed int); 39725 vector unsigned int vec_msum (vector unsigned short, 39726 vector unsigned short, 39727 vector unsigned int); 39728 vector signed int vec_msum (vector signed short, 39729 vector signed short, 39730 vector signed int); 39731 39732 vector signed int vec_vmsumshm (vector signed short, 39733 vector signed short, 39734 vector signed int); 39735 39736 vector unsigned int vec_vmsumuhm (vector unsigned short, 39737 vector unsigned short, 39738 vector unsigned int); 39739 39740 vector signed int vec_vmsummbm (vector signed char, 39741 vector unsigned char, 39742 vector signed int); 39743 39744 vector unsigned int vec_vmsumubm (vector unsigned char, 39745 vector unsigned char, 39746 vector unsigned int); 39747 39748 vector unsigned int vec_msums (vector unsigned short, 39749 vector unsigned short, 39750 vector unsigned int); 39751 vector signed int vec_msums (vector signed short, 39752 vector signed short, 39753 vector signed int); 39754 39755 vector signed int vec_vmsumshs (vector signed short, 39756 vector signed short, 39757 vector signed int); 39758 39759 vector unsigned int vec_vmsumuhs (vector unsigned short, 39760 vector unsigned short, 39761 vector unsigned int); 39762 39763 void vec_mtvscr (vector signed int); 39764 void vec_mtvscr (vector unsigned int); 39765 void vec_mtvscr (vector bool int); 39766 void vec_mtvscr (vector signed short); 39767 void vec_mtvscr (vector unsigned short); 39768 void vec_mtvscr (vector bool short); 39769 void vec_mtvscr (vector pixel); 39770 void vec_mtvscr (vector signed char); 39771 void vec_mtvscr (vector unsigned char); 39772 void vec_mtvscr (vector bool char); 39773 39774 vector unsigned short vec_mule (vector unsigned char, 39775 vector unsigned char); 39776 vector signed short vec_mule (vector signed char, 39777 vector signed char); 39778 vector unsigned int vec_mule (vector unsigned short, 39779 vector unsigned short); 39780 vector signed int vec_mule (vector signed short, vector signed short); 39781 39782 vector signed int vec_vmulesh (vector signed short, 39783 vector signed short); 39784 39785 vector unsigned int vec_vmuleuh (vector unsigned short, 39786 vector unsigned short); 39787 39788 vector signed short vec_vmulesb (vector signed char, 39789 vector signed char); 39790 39791 vector unsigned short vec_vmuleub (vector unsigned char, 39792 vector unsigned char); 39793 39794 vector unsigned short vec_mulo (vector unsigned char, 39795 vector unsigned char); 39796 vector signed short vec_mulo (vector signed char, vector signed char); 39797 vector unsigned int vec_mulo (vector unsigned short, 39798 vector unsigned short); 39799 vector signed int vec_mulo (vector signed short, vector signed short); 39800 39801 vector signed int vec_vmulosh (vector signed short, 39802 vector signed short); 39803 39804 vector unsigned int vec_vmulouh (vector unsigned short, 39805 vector unsigned short); 39806 39807 vector signed short vec_vmulosb (vector signed char, 39808 vector signed char); 39809 39810 vector unsigned short vec_vmuloub (vector unsigned char, 39811 vector unsigned char); 39812 39813 vector float vec_nmsub (vector float, vector float, vector float); 39814 39815 vector float vec_nor (vector float, vector float); 39816 vector signed int vec_nor (vector signed int, vector signed int); 39817 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 39818 vector bool int vec_nor (vector bool int, vector bool int); 39819 vector signed short vec_nor (vector signed short, vector signed short); 39820 vector unsigned short vec_nor (vector unsigned short, 39821 vector unsigned short); 39822 vector bool short vec_nor (vector bool short, vector bool short); 39823 vector signed char vec_nor (vector signed char, vector signed char); 39824 vector unsigned char vec_nor (vector unsigned char, 39825 vector unsigned char); 39826 vector bool char vec_nor (vector bool char, vector bool char); 39827 39828 vector float vec_or (vector float, vector float); 39829 vector float vec_or (vector float, vector bool int); 39830 vector float vec_or (vector bool int, vector float); 39831 vector bool int vec_or (vector bool int, vector bool int); 39832 vector signed int vec_or (vector bool int, vector signed int); 39833 vector signed int vec_or (vector signed int, vector bool int); 39834 vector signed int vec_or (vector signed int, vector signed int); 39835 vector unsigned int vec_or (vector bool int, vector unsigned int); 39836 vector unsigned int vec_or (vector unsigned int, vector bool int); 39837 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 39838 vector bool short vec_or (vector bool short, vector bool short); 39839 vector signed short vec_or (vector bool short, vector signed short); 39840 vector signed short vec_or (vector signed short, vector bool short); 39841 vector signed short vec_or (vector signed short, vector signed short); 39842 vector unsigned short vec_or (vector bool short, vector unsigned short); 39843 vector unsigned short vec_or (vector unsigned short, vector bool short); 39844 vector unsigned short vec_or (vector unsigned short, 39845 vector unsigned short); 39846 vector signed char vec_or (vector bool char, vector signed char); 39847 vector bool char vec_or (vector bool char, vector bool char); 39848 vector signed char vec_or (vector signed char, vector bool char); 39849 vector signed char vec_or (vector signed char, vector signed char); 39850 vector unsigned char vec_or (vector bool char, vector unsigned char); 39851 vector unsigned char vec_or (vector unsigned char, vector bool char); 39852 vector unsigned char vec_or (vector unsigned char, 39853 vector unsigned char); 39854 39855 vector signed char vec_pack (vector signed short, vector signed short); 39856 vector unsigned char vec_pack (vector unsigned short, 39857 vector unsigned short); 39858 vector bool char vec_pack (vector bool short, vector bool short); 39859 vector signed short vec_pack (vector signed int, vector signed int); 39860 vector unsigned short vec_pack (vector unsigned int, 39861 vector unsigned int); 39862 vector bool short vec_pack (vector bool int, vector bool int); 39863 39864 vector bool short vec_vpkuwum (vector bool int, vector bool int); 39865 vector signed short vec_vpkuwum (vector signed int, vector signed int); 39866 vector unsigned short vec_vpkuwum (vector unsigned int, 39867 vector unsigned int); 39868 39869 vector bool char vec_vpkuhum (vector bool short, vector bool short); 39870 vector signed char vec_vpkuhum (vector signed short, 39871 vector signed short); 39872 vector unsigned char vec_vpkuhum (vector unsigned short, 39873 vector unsigned short); 39874 39875 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 39876 39877 vector unsigned char vec_packs (vector unsigned short, 39878 vector unsigned short); 39879 vector signed char vec_packs (vector signed short, vector signed short); 39880 vector unsigned short vec_packs (vector unsigned int, 39881 vector unsigned int); 39882 vector signed short vec_packs (vector signed int, vector signed int); 39883 39884 vector signed short vec_vpkswss (vector signed int, vector signed int); 39885 39886 vector unsigned short vec_vpkuwus (vector unsigned int, 39887 vector unsigned int); 39888 39889 vector signed char vec_vpkshss (vector signed short, 39890 vector signed short); 39891 39892 vector unsigned char vec_vpkuhus (vector unsigned short, 39893 vector unsigned short); 39894 39895 vector unsigned char vec_packsu (vector unsigned short, 39896 vector unsigned short); 39897 vector unsigned char vec_packsu (vector signed short, 39898 vector signed short); 39899 vector unsigned short vec_packsu (vector unsigned int, 39900 vector unsigned int); 39901 vector unsigned short vec_packsu (vector signed int, vector signed int); 39902 39903 vector unsigned short vec_vpkswus (vector signed int, 39904 vector signed int); 39905 39906 vector unsigned char vec_vpkshus (vector signed short, 39907 vector signed short); 39908 39909 vector float vec_perm (vector float, 39910 vector float, 39911 vector unsigned char); 39912 vector signed int vec_perm (vector signed int, 39913 vector signed int, 39914 vector unsigned char); 39915 vector unsigned int vec_perm (vector unsigned int, 39916 vector unsigned int, 39917 vector unsigned char); 39918 vector bool int vec_perm (vector bool int, 39919 vector bool int, 39920 vector unsigned char); 39921 vector signed short vec_perm (vector signed short, 39922 vector signed short, 39923 vector unsigned char); 39924 vector unsigned short vec_perm (vector unsigned short, 39925 vector unsigned short, 39926 vector unsigned char); 39927 vector bool short vec_perm (vector bool short, 39928 vector bool short, 39929 vector unsigned char); 39930 vector pixel vec_perm (vector pixel, 39931 vector pixel, 39932 vector unsigned char); 39933 vector signed char vec_perm (vector signed char, 39934 vector signed char, 39935 vector unsigned char); 39936 vector unsigned char vec_perm (vector unsigned char, 39937 vector unsigned char, 39938 vector unsigned char); 39939 vector bool char vec_perm (vector bool char, 39940 vector bool char, 39941 vector unsigned char); 39942 39943 vector float vec_re (vector float); 39944 39945 vector signed char vec_rl (vector signed char, 39946 vector unsigned char); 39947 vector unsigned char vec_rl (vector unsigned char, 39948 vector unsigned char); 39949 vector signed short vec_rl (vector signed short, vector unsigned short); 39950 vector unsigned short vec_rl (vector unsigned short, 39951 vector unsigned short); 39952 vector signed int vec_rl (vector signed int, vector unsigned int); 39953 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 39954 39955 vector signed int vec_vrlw (vector signed int, vector unsigned int); 39956 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 39957 39958 vector signed short vec_vrlh (vector signed short, 39959 vector unsigned short); 39960 vector unsigned short vec_vrlh (vector unsigned short, 39961 vector unsigned short); 39962 39963 vector signed char vec_vrlb (vector signed char, vector unsigned char); 39964 vector unsigned char vec_vrlb (vector unsigned char, 39965 vector unsigned char); 39966 39967 vector float vec_round (vector float); 39968 39969 vector float vec_recip (vector float, vector float); 39970 39971 vector float vec_rsqrt (vector float); 39972 39973 vector float vec_rsqrte (vector float); 39974 39975 vector float vec_sel (vector float, vector float, vector bool int); 39976 vector float vec_sel (vector float, vector float, vector unsigned int); 39977 vector signed int vec_sel (vector signed int, 39978 vector signed int, 39979 vector bool int); 39980 vector signed int vec_sel (vector signed int, 39981 vector signed int, 39982 vector unsigned int); 39983 vector unsigned int vec_sel (vector unsigned int, 39984 vector unsigned int, 39985 vector bool int); 39986 vector unsigned int vec_sel (vector unsigned int, 39987 vector unsigned int, 39988 vector unsigned int); 39989 vector bool int vec_sel (vector bool int, 39990 vector bool int, 39991 vector bool int); 39992 vector bool int vec_sel (vector bool int, 39993 vector bool int, 39994 vector unsigned int); 39995 vector signed short vec_sel (vector signed short, 39996 vector signed short, 39997 vector bool short); 39998 vector signed short vec_sel (vector signed short, 39999 vector signed short, 40000 vector unsigned short); 40001 vector unsigned short vec_sel (vector unsigned short, 40002 vector unsigned short, 40003 vector bool short); 40004 vector unsigned short vec_sel (vector unsigned short, 40005 vector unsigned short, 40006 vector unsigned short); 40007 vector bool short vec_sel (vector bool short, 40008 vector bool short, 40009 vector bool short); 40010 vector bool short vec_sel (vector bool short, 40011 vector bool short, 40012 vector unsigned short); 40013 vector signed char vec_sel (vector signed char, 40014 vector signed char, 40015 vector bool char); 40016 vector signed char vec_sel (vector signed char, 40017 vector signed char, 40018 vector unsigned char); 40019 vector unsigned char vec_sel (vector unsigned char, 40020 vector unsigned char, 40021 vector bool char); 40022 vector unsigned char vec_sel (vector unsigned char, 40023 vector unsigned char, 40024 vector unsigned char); 40025 vector bool char vec_sel (vector bool char, 40026 vector bool char, 40027 vector bool char); 40028 vector bool char vec_sel (vector bool char, 40029 vector bool char, 40030 vector unsigned char); 40031 40032 vector signed char vec_sl (vector signed char, 40033 vector unsigned char); 40034 vector unsigned char vec_sl (vector unsigned char, 40035 vector unsigned char); 40036 vector signed short vec_sl (vector signed short, vector unsigned short); 40037 vector unsigned short vec_sl (vector unsigned short, 40038 vector unsigned short); 40039 vector signed int vec_sl (vector signed int, vector unsigned int); 40040 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 40041 40042 vector signed int vec_vslw (vector signed int, vector unsigned int); 40043 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 40044 40045 vector signed short vec_vslh (vector signed short, 40046 vector unsigned short); 40047 vector unsigned short vec_vslh (vector unsigned short, 40048 vector unsigned short); 40049 40050 vector signed char vec_vslb (vector signed char, vector unsigned char); 40051 vector unsigned char vec_vslb (vector unsigned char, 40052 vector unsigned char); 40053 40054 vector float vec_sld (vector float, vector float, const int); 40055 vector signed int vec_sld (vector signed int, 40056 vector signed int, 40057 const int); 40058 vector unsigned int vec_sld (vector unsigned int, 40059 vector unsigned int, 40060 const int); 40061 vector bool int vec_sld (vector bool int, 40062 vector bool int, 40063 const int); 40064 vector signed short vec_sld (vector signed short, 40065 vector signed short, 40066 const int); 40067 vector unsigned short vec_sld (vector unsigned short, 40068 vector unsigned short, 40069 const int); 40070 vector bool short vec_sld (vector bool short, 40071 vector bool short, 40072 const int); 40073 vector pixel vec_sld (vector pixel, 40074 vector pixel, 40075 const int); 40076 vector signed char vec_sld (vector signed char, 40077 vector signed char, 40078 const int); 40079 vector unsigned char vec_sld (vector unsigned char, 40080 vector unsigned char, 40081 const int); 40082 vector bool char vec_sld (vector bool char, 40083 vector bool char, 40084 const int); 40085 40086 vector signed int vec_sll (vector signed int, 40087 vector unsigned int); 40088 vector signed int vec_sll (vector signed int, 40089 vector unsigned short); 40090 vector signed int vec_sll (vector signed int, 40091 vector unsigned char); 40092 vector unsigned int vec_sll (vector unsigned int, 40093 vector unsigned int); 40094 vector unsigned int vec_sll (vector unsigned int, 40095 vector unsigned short); 40096 vector unsigned int vec_sll (vector unsigned int, 40097 vector unsigned char); 40098 vector bool int vec_sll (vector bool int, 40099 vector unsigned int); 40100 vector bool int vec_sll (vector bool int, 40101 vector unsigned short); 40102 vector bool int vec_sll (vector bool int, 40103 vector unsigned char); 40104 vector signed short vec_sll (vector signed short, 40105 vector unsigned int); 40106 vector signed short vec_sll (vector signed short, 40107 vector unsigned short); 40108 vector signed short vec_sll (vector signed short, 40109 vector unsigned char); 40110 vector unsigned short vec_sll (vector unsigned short, 40111 vector unsigned int); 40112 vector unsigned short vec_sll (vector unsigned short, 40113 vector unsigned short); 40114 vector unsigned short vec_sll (vector unsigned short, 40115 vector unsigned char); 40116 vector bool short vec_sll (vector bool short, vector unsigned int); 40117 vector bool short vec_sll (vector bool short, vector unsigned short); 40118 vector bool short vec_sll (vector bool short, vector unsigned char); 40119 vector pixel vec_sll (vector pixel, vector unsigned int); 40120 vector pixel vec_sll (vector pixel, vector unsigned short); 40121 vector pixel vec_sll (vector pixel, vector unsigned char); 40122 vector signed char vec_sll (vector signed char, vector unsigned int); 40123 vector signed char vec_sll (vector signed char, vector unsigned short); 40124 vector signed char vec_sll (vector signed char, vector unsigned char); 40125 vector unsigned char vec_sll (vector unsigned char, 40126 vector unsigned int); 40127 vector unsigned char vec_sll (vector unsigned char, 40128 vector unsigned short); 40129 vector unsigned char vec_sll (vector unsigned char, 40130 vector unsigned char); 40131 vector bool char vec_sll (vector bool char, vector unsigned int); 40132 vector bool char vec_sll (vector bool char, vector unsigned short); 40133 vector bool char vec_sll (vector bool char, vector unsigned char); 40134 40135 vector float vec_slo (vector float, vector signed char); 40136 vector float vec_slo (vector float, vector unsigned char); 40137 vector signed int vec_slo (vector signed int, vector signed char); 40138 vector signed int vec_slo (vector signed int, vector unsigned char); 40139 vector unsigned int vec_slo (vector unsigned int, vector signed char); 40140 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 40141 vector signed short vec_slo (vector signed short, vector signed char); 40142 vector signed short vec_slo (vector signed short, vector unsigned char); 40143 vector unsigned short vec_slo (vector unsigned short, 40144 vector signed char); 40145 vector unsigned short vec_slo (vector unsigned short, 40146 vector unsigned char); 40147 vector pixel vec_slo (vector pixel, vector signed char); 40148 vector pixel vec_slo (vector pixel, vector unsigned char); 40149 vector signed char vec_slo (vector signed char, vector signed char); 40150 vector signed char vec_slo (vector signed char, vector unsigned char); 40151 vector unsigned char vec_slo (vector unsigned char, vector signed char); 40152 vector unsigned char vec_slo (vector unsigned char, 40153 vector unsigned char); 40154 40155 vector signed char vec_splat (vector signed char, const int); 40156 vector unsigned char vec_splat (vector unsigned char, const int); 40157 vector bool char vec_splat (vector bool char, const int); 40158 vector signed short vec_splat (vector signed short, const int); 40159 vector unsigned short vec_splat (vector unsigned short, const int); 40160 vector bool short vec_splat (vector bool short, const int); 40161 vector pixel vec_splat (vector pixel, const int); 40162 vector float vec_splat (vector float, const int); 40163 vector signed int vec_splat (vector signed int, const int); 40164 vector unsigned int vec_splat (vector unsigned int, const int); 40165 vector bool int vec_splat (vector bool int, const int); 40166 40167 vector float vec_vspltw (vector float, const int); 40168 vector signed int vec_vspltw (vector signed int, const int); 40169 vector unsigned int vec_vspltw (vector unsigned int, const int); 40170 vector bool int vec_vspltw (vector bool int, const int); 40171 40172 vector bool short vec_vsplth (vector bool short, const int); 40173 vector signed short vec_vsplth (vector signed short, const int); 40174 vector unsigned short vec_vsplth (vector unsigned short, const int); 40175 vector pixel vec_vsplth (vector pixel, const int); 40176 40177 vector signed char vec_vspltb (vector signed char, const int); 40178 vector unsigned char vec_vspltb (vector unsigned char, const int); 40179 vector bool char vec_vspltb (vector bool char, const int); 40180 40181 vector signed char vec_splat_s8 (const int); 40182 40183 vector signed short vec_splat_s16 (const int); 40184 40185 vector signed int vec_splat_s32 (const int); 40186 40187 vector unsigned char vec_splat_u8 (const int); 40188 40189 vector unsigned short vec_splat_u16 (const int); 40190 40191 vector unsigned int vec_splat_u32 (const int); 40192 40193 vector signed char vec_sr (vector signed char, vector unsigned char); 40194 vector unsigned char vec_sr (vector unsigned char, 40195 vector unsigned char); 40196 vector signed short vec_sr (vector signed short, 40197 vector unsigned short); 40198 vector unsigned short vec_sr (vector unsigned short, 40199 vector unsigned short); 40200 vector signed int vec_sr (vector signed int, vector unsigned int); 40201 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 40202 40203 vector signed int vec_vsrw (vector signed int, vector unsigned int); 40204 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 40205 40206 vector signed short vec_vsrh (vector signed short, 40207 vector unsigned short); 40208 vector unsigned short vec_vsrh (vector unsigned short, 40209 vector unsigned short); 40210 40211 vector signed char vec_vsrb (vector signed char, vector unsigned char); 40212 vector unsigned char vec_vsrb (vector unsigned char, 40213 vector unsigned char); 40214 40215 vector signed char vec_sra (vector signed char, vector unsigned char); 40216 vector unsigned char vec_sra (vector unsigned char, 40217 vector unsigned char); 40218 vector signed short vec_sra (vector signed short, 40219 vector unsigned short); 40220 vector unsigned short vec_sra (vector unsigned short, 40221 vector unsigned short); 40222 vector signed int vec_sra (vector signed int, vector unsigned int); 40223 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 40224 40225 vector signed int vec_vsraw (vector signed int, vector unsigned int); 40226 vector unsigned int vec_vsraw (vector unsigned int, 40227 vector unsigned int); 40228 40229 vector signed short vec_vsrah (vector signed short, 40230 vector unsigned short); 40231 vector unsigned short vec_vsrah (vector unsigned short, 40232 vector unsigned short); 40233 40234 vector signed char vec_vsrab (vector signed char, vector unsigned char); 40235 vector unsigned char vec_vsrab (vector unsigned char, 40236 vector unsigned char); 40237 40238 vector signed int vec_srl (vector signed int, vector unsigned int); 40239 vector signed int vec_srl (vector signed int, vector unsigned short); 40240 vector signed int vec_srl (vector signed int, vector unsigned char); 40241 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 40242 vector unsigned int vec_srl (vector unsigned int, 40243 vector unsigned short); 40244 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 40245 vector bool int vec_srl (vector bool int, vector unsigned int); 40246 vector bool int vec_srl (vector bool int, vector unsigned short); 40247 vector bool int vec_srl (vector bool int, vector unsigned char); 40248 vector signed short vec_srl (vector signed short, vector unsigned int); 40249 vector signed short vec_srl (vector signed short, 40250 vector unsigned short); 40251 vector signed short vec_srl (vector signed short, vector unsigned char); 40252 vector unsigned short vec_srl (vector unsigned short, 40253 vector unsigned int); 40254 vector unsigned short vec_srl (vector unsigned short, 40255 vector unsigned short); 40256 vector unsigned short vec_srl (vector unsigned short, 40257 vector unsigned char); 40258 vector bool short vec_srl (vector bool short, vector unsigned int); 40259 vector bool short vec_srl (vector bool short, vector unsigned short); 40260 vector bool short vec_srl (vector bool short, vector unsigned char); 40261 vector pixel vec_srl (vector pixel, vector unsigned int); 40262 vector pixel vec_srl (vector pixel, vector unsigned short); 40263 vector pixel vec_srl (vector pixel, vector unsigned char); 40264 vector signed char vec_srl (vector signed char, vector unsigned int); 40265 vector signed char vec_srl (vector signed char, vector unsigned short); 40266 vector signed char vec_srl (vector signed char, vector unsigned char); 40267 vector unsigned char vec_srl (vector unsigned char, 40268 vector unsigned int); 40269 vector unsigned char vec_srl (vector unsigned char, 40270 vector unsigned short); 40271 vector unsigned char vec_srl (vector unsigned char, 40272 vector unsigned char); 40273 vector bool char vec_srl (vector bool char, vector unsigned int); 40274 vector bool char vec_srl (vector bool char, vector unsigned short); 40275 vector bool char vec_srl (vector bool char, vector unsigned char); 40276 40277 vector float vec_sro (vector float, vector signed char); 40278 vector float vec_sro (vector float, vector unsigned char); 40279 vector signed int vec_sro (vector signed int, vector signed char); 40280 vector signed int vec_sro (vector signed int, vector unsigned char); 40281 vector unsigned int vec_sro (vector unsigned int, vector signed char); 40282 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 40283 vector signed short vec_sro (vector signed short, vector signed char); 40284 vector signed short vec_sro (vector signed short, vector unsigned char); 40285 vector unsigned short vec_sro (vector unsigned short, 40286 vector signed char); 40287 vector unsigned short vec_sro (vector unsigned short, 40288 vector unsigned char); 40289 vector pixel vec_sro (vector pixel, vector signed char); 40290 vector pixel vec_sro (vector pixel, vector unsigned char); 40291 vector signed char vec_sro (vector signed char, vector signed char); 40292 vector signed char vec_sro (vector signed char, vector unsigned char); 40293 vector unsigned char vec_sro (vector unsigned char, vector signed char); 40294 vector unsigned char vec_sro (vector unsigned char, 40295 vector unsigned char); 40296 40297 void vec_st (vector float, int, vector float *); 40298 void vec_st (vector float, int, float *); 40299 void vec_st (vector signed int, int, vector signed int *); 40300 void vec_st (vector signed int, int, int *); 40301 void vec_st (vector unsigned int, int, vector unsigned int *); 40302 void vec_st (vector unsigned int, int, unsigned int *); 40303 void vec_st (vector bool int, int, vector bool int *); 40304 void vec_st (vector bool int, int, unsigned int *); 40305 void vec_st (vector bool int, int, int *); 40306 void vec_st (vector signed short, int, vector signed short *); 40307 void vec_st (vector signed short, int, short *); 40308 void vec_st (vector unsigned short, int, vector unsigned short *); 40309 void vec_st (vector unsigned short, int, unsigned short *); 40310 void vec_st (vector bool short, int, vector bool short *); 40311 void vec_st (vector bool short, int, unsigned short *); 40312 void vec_st (vector pixel, int, vector pixel *); 40313 void vec_st (vector pixel, int, unsigned short *); 40314 void vec_st (vector pixel, int, short *); 40315 void vec_st (vector bool short, int, short *); 40316 void vec_st (vector signed char, int, vector signed char *); 40317 void vec_st (vector signed char, int, signed char *); 40318 void vec_st (vector unsigned char, int, vector unsigned char *); 40319 void vec_st (vector unsigned char, int, unsigned char *); 40320 void vec_st (vector bool char, int, vector bool char *); 40321 void vec_st (vector bool char, int, unsigned char *); 40322 void vec_st (vector bool char, int, signed char *); 40323 40324 void vec_ste (vector signed char, int, signed char *); 40325 void vec_ste (vector unsigned char, int, unsigned char *); 40326 void vec_ste (vector bool char, int, signed char *); 40327 void vec_ste (vector bool char, int, unsigned char *); 40328 void vec_ste (vector signed short, int, short *); 40329 void vec_ste (vector unsigned short, int, unsigned short *); 40330 void vec_ste (vector bool short, int, short *); 40331 void vec_ste (vector bool short, int, unsigned short *); 40332 void vec_ste (vector pixel, int, short *); 40333 void vec_ste (vector pixel, int, unsigned short *); 40334 void vec_ste (vector float, int, float *); 40335 void vec_ste (vector signed int, int, int *); 40336 void vec_ste (vector unsigned int, int, unsigned int *); 40337 void vec_ste (vector bool int, int, int *); 40338 void vec_ste (vector bool int, int, unsigned int *); 40339 40340 void vec_stvewx (vector float, int, float *); 40341 void vec_stvewx (vector signed int, int, int *); 40342 void vec_stvewx (vector unsigned int, int, unsigned int *); 40343 void vec_stvewx (vector bool int, int, int *); 40344 void vec_stvewx (vector bool int, int, unsigned int *); 40345 40346 void vec_stvehx (vector signed short, int, short *); 40347 void vec_stvehx (vector unsigned short, int, unsigned short *); 40348 void vec_stvehx (vector bool short, int, short *); 40349 void vec_stvehx (vector bool short, int, unsigned short *); 40350 void vec_stvehx (vector pixel, int, short *); 40351 void vec_stvehx (vector pixel, int, unsigned short *); 40352 40353 void vec_stvebx (vector signed char, int, signed char *); 40354 void vec_stvebx (vector unsigned char, int, unsigned char *); 40355 void vec_stvebx (vector bool char, int, signed char *); 40356 void vec_stvebx (vector bool char, int, unsigned char *); 40357 40358 void vec_stl (vector float, int, vector float *); 40359 void vec_stl (vector float, int, float *); 40360 void vec_stl (vector signed int, int, vector signed int *); 40361 void vec_stl (vector signed int, int, int *); 40362 void vec_stl (vector unsigned int, int, vector unsigned int *); 40363 void vec_stl (vector unsigned int, int, unsigned int *); 40364 void vec_stl (vector bool int, int, vector bool int *); 40365 void vec_stl (vector bool int, int, unsigned int *); 40366 void vec_stl (vector bool int, int, int *); 40367 void vec_stl (vector signed short, int, vector signed short *); 40368 void vec_stl (vector signed short, int, short *); 40369 void vec_stl (vector unsigned short, int, vector unsigned short *); 40370 void vec_stl (vector unsigned short, int, unsigned short *); 40371 void vec_stl (vector bool short, int, vector bool short *); 40372 void vec_stl (vector bool short, int, unsigned short *); 40373 void vec_stl (vector bool short, int, short *); 40374 void vec_stl (vector pixel, int, vector pixel *); 40375 void vec_stl (vector pixel, int, unsigned short *); 40376 void vec_stl (vector pixel, int, short *); 40377 void vec_stl (vector signed char, int, vector signed char *); 40378 void vec_stl (vector signed char, int, signed char *); 40379 void vec_stl (vector unsigned char, int, vector unsigned char *); 40380 void vec_stl (vector unsigned char, int, unsigned char *); 40381 void vec_stl (vector bool char, int, vector bool char *); 40382 void vec_stl (vector bool char, int, unsigned char *); 40383 void vec_stl (vector bool char, int, signed char *); 40384 40385 vector signed char vec_sub (vector bool char, vector signed char); 40386 vector signed char vec_sub (vector signed char, vector bool char); 40387 vector signed char vec_sub (vector signed char, vector signed char); 40388 vector unsigned char vec_sub (vector bool char, vector unsigned char); 40389 vector unsigned char vec_sub (vector unsigned char, vector bool char); 40390 vector unsigned char vec_sub (vector unsigned char, 40391 vector unsigned char); 40392 vector signed short vec_sub (vector bool short, vector signed short); 40393 vector signed short vec_sub (vector signed short, vector bool short); 40394 vector signed short vec_sub (vector signed short, vector signed short); 40395 vector unsigned short vec_sub (vector bool short, 40396 vector unsigned short); 40397 vector unsigned short vec_sub (vector unsigned short, 40398 vector bool short); 40399 vector unsigned short vec_sub (vector unsigned short, 40400 vector unsigned short); 40401 vector signed int vec_sub (vector bool int, vector signed int); 40402 vector signed int vec_sub (vector signed int, vector bool int); 40403 vector signed int vec_sub (vector signed int, vector signed int); 40404 vector unsigned int vec_sub (vector bool int, vector unsigned int); 40405 vector unsigned int vec_sub (vector unsigned int, vector bool int); 40406 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 40407 vector float vec_sub (vector float, vector float); 40408 40409 vector float vec_vsubfp (vector float, vector float); 40410 40411 vector signed int vec_vsubuwm (vector bool int, vector signed int); 40412 vector signed int vec_vsubuwm (vector signed int, vector bool int); 40413 vector signed int vec_vsubuwm (vector signed int, vector signed int); 40414 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 40415 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 40416 vector unsigned int vec_vsubuwm (vector unsigned int, 40417 vector unsigned int); 40418 40419 vector signed short vec_vsubuhm (vector bool short, 40420 vector signed short); 40421 vector signed short vec_vsubuhm (vector signed short, 40422 vector bool short); 40423 vector signed short vec_vsubuhm (vector signed short, 40424 vector signed short); 40425 vector unsigned short vec_vsubuhm (vector bool short, 40426 vector unsigned short); 40427 vector unsigned short vec_vsubuhm (vector unsigned short, 40428 vector bool short); 40429 vector unsigned short vec_vsubuhm (vector unsigned short, 40430 vector unsigned short); 40431 40432 vector signed char vec_vsububm (vector bool char, vector signed char); 40433 vector signed char vec_vsububm (vector signed char, vector bool char); 40434 vector signed char vec_vsububm (vector signed char, vector signed char); 40435 vector unsigned char vec_vsububm (vector bool char, 40436 vector unsigned char); 40437 vector unsigned char vec_vsububm (vector unsigned char, 40438 vector bool char); 40439 vector unsigned char vec_vsububm (vector unsigned char, 40440 vector unsigned char); 40441 40442 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 40443 40444 vector unsigned char vec_subs (vector bool char, vector unsigned char); 40445 vector unsigned char vec_subs (vector unsigned char, vector bool char); 40446 vector unsigned char vec_subs (vector unsigned char, 40447 vector unsigned char); 40448 vector signed char vec_subs (vector bool char, vector signed char); 40449 vector signed char vec_subs (vector signed char, vector bool char); 40450 vector signed char vec_subs (vector signed char, vector signed char); 40451 vector unsigned short vec_subs (vector bool short, 40452 vector unsigned short); 40453 vector unsigned short vec_subs (vector unsigned short, 40454 vector bool short); 40455 vector unsigned short vec_subs (vector unsigned short, 40456 vector unsigned short); 40457 vector signed short vec_subs (vector bool short, vector signed short); 40458 vector signed short vec_subs (vector signed short, vector bool short); 40459 vector signed short vec_subs (vector signed short, vector signed short); 40460 vector unsigned int vec_subs (vector bool int, vector unsigned int); 40461 vector unsigned int vec_subs (vector unsigned int, vector bool int); 40462 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 40463 vector signed int vec_subs (vector bool int, vector signed int); 40464 vector signed int vec_subs (vector signed int, vector bool int); 40465 vector signed int vec_subs (vector signed int, vector signed int); 40466 40467 vector signed int vec_vsubsws (vector bool int, vector signed int); 40468 vector signed int vec_vsubsws (vector signed int, vector bool int); 40469 vector signed int vec_vsubsws (vector signed int, vector signed int); 40470 40471 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 40472 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 40473 vector unsigned int vec_vsubuws (vector unsigned int, 40474 vector unsigned int); 40475 40476 vector signed short vec_vsubshs (vector bool short, 40477 vector signed short); 40478 vector signed short vec_vsubshs (vector signed short, 40479 vector bool short); 40480 vector signed short vec_vsubshs (vector signed short, 40481 vector signed short); 40482 40483 vector unsigned short vec_vsubuhs (vector bool short, 40484 vector unsigned short); 40485 vector unsigned short vec_vsubuhs (vector unsigned short, 40486 vector bool short); 40487 vector unsigned short vec_vsubuhs (vector unsigned short, 40488 vector unsigned short); 40489 40490 vector signed char vec_vsubsbs (vector bool char, vector signed char); 40491 vector signed char vec_vsubsbs (vector signed char, vector bool char); 40492 vector signed char vec_vsubsbs (vector signed char, vector signed char); 40493 40494 vector unsigned char vec_vsububs (vector bool char, 40495 vector unsigned char); 40496 vector unsigned char vec_vsububs (vector unsigned char, 40497 vector bool char); 40498 vector unsigned char vec_vsububs (vector unsigned char, 40499 vector unsigned char); 40500 40501 vector unsigned int vec_sum4s (vector unsigned char, 40502 vector unsigned int); 40503 vector signed int vec_sum4s (vector signed char, vector signed int); 40504 vector signed int vec_sum4s (vector signed short, vector signed int); 40505 40506 vector signed int vec_vsum4shs (vector signed short, vector signed int); 40507 40508 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 40509 40510 vector unsigned int vec_vsum4ubs (vector unsigned char, 40511 vector unsigned int); 40512 40513 vector signed int vec_sum2s (vector signed int, vector signed int); 40514 40515 vector signed int vec_sums (vector signed int, vector signed int); 40516 40517 vector float vec_trunc (vector float); 40518 40519 vector signed short vec_unpackh (vector signed char); 40520 vector bool short vec_unpackh (vector bool char); 40521 vector signed int vec_unpackh (vector signed short); 40522 vector bool int vec_unpackh (vector bool short); 40523 vector unsigned int vec_unpackh (vector pixel); 40524 40525 vector bool int vec_vupkhsh (vector bool short); 40526 vector signed int vec_vupkhsh (vector signed short); 40527 40528 vector unsigned int vec_vupkhpx (vector pixel); 40529 40530 vector bool short vec_vupkhsb (vector bool char); 40531 vector signed short vec_vupkhsb (vector signed char); 40532 40533 vector signed short vec_unpackl (vector signed char); 40534 vector bool short vec_unpackl (vector bool char); 40535 vector unsigned int vec_unpackl (vector pixel); 40536 vector signed int vec_unpackl (vector signed short); 40537 vector bool int vec_unpackl (vector bool short); 40538 40539 vector unsigned int vec_vupklpx (vector pixel); 40540 40541 vector bool int vec_vupklsh (vector bool short); 40542 vector signed int vec_vupklsh (vector signed short); 40543 40544 vector bool short vec_vupklsb (vector bool char); 40545 vector signed short vec_vupklsb (vector signed char); 40546 40547 vector float vec_xor (vector float, vector float); 40548 vector float vec_xor (vector float, vector bool int); 40549 vector float vec_xor (vector bool int, vector float); 40550 vector bool int vec_xor (vector bool int, vector bool int); 40551 vector signed int vec_xor (vector bool int, vector signed int); 40552 vector signed int vec_xor (vector signed int, vector bool int); 40553 vector signed int vec_xor (vector signed int, vector signed int); 40554 vector unsigned int vec_xor (vector bool int, vector unsigned int); 40555 vector unsigned int vec_xor (vector unsigned int, vector bool int); 40556 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 40557 vector bool short vec_xor (vector bool short, vector bool short); 40558 vector signed short vec_xor (vector bool short, vector signed short); 40559 vector signed short vec_xor (vector signed short, vector bool short); 40560 vector signed short vec_xor (vector signed short, vector signed short); 40561 vector unsigned short vec_xor (vector bool short, 40562 vector unsigned short); 40563 vector unsigned short vec_xor (vector unsigned short, 40564 vector bool short); 40565 vector unsigned short vec_xor (vector unsigned short, 40566 vector unsigned short); 40567 vector signed char vec_xor (vector bool char, vector signed char); 40568 vector bool char vec_xor (vector bool char, vector bool char); 40569 vector signed char vec_xor (vector signed char, vector bool char); 40570 vector signed char vec_xor (vector signed char, vector signed char); 40571 vector unsigned char vec_xor (vector bool char, vector unsigned char); 40572 vector unsigned char vec_xor (vector unsigned char, vector bool char); 40573 vector unsigned char vec_xor (vector unsigned char, 40574 vector unsigned char); 40575 40576 int vec_all_eq (vector signed char, vector bool char); 40577 int vec_all_eq (vector signed char, vector signed char); 40578 int vec_all_eq (vector unsigned char, vector bool char); 40579 int vec_all_eq (vector unsigned char, vector unsigned char); 40580 int vec_all_eq (vector bool char, vector bool char); 40581 int vec_all_eq (vector bool char, vector unsigned char); 40582 int vec_all_eq (vector bool char, vector signed char); 40583 int vec_all_eq (vector signed short, vector bool short); 40584 int vec_all_eq (vector signed short, vector signed short); 40585 int vec_all_eq (vector unsigned short, vector bool short); 40586 int vec_all_eq (vector unsigned short, vector unsigned short); 40587 int vec_all_eq (vector bool short, vector bool short); 40588 int vec_all_eq (vector bool short, vector unsigned short); 40589 int vec_all_eq (vector bool short, vector signed short); 40590 int vec_all_eq (vector pixel, vector pixel); 40591 int vec_all_eq (vector signed int, vector bool int); 40592 int vec_all_eq (vector signed int, vector signed int); 40593 int vec_all_eq (vector unsigned int, vector bool int); 40594 int vec_all_eq (vector unsigned int, vector unsigned int); 40595 int vec_all_eq (vector bool int, vector bool int); 40596 int vec_all_eq (vector bool int, vector unsigned int); 40597 int vec_all_eq (vector bool int, vector signed int); 40598 int vec_all_eq (vector float, vector float); 40599 40600 int vec_all_ge (vector bool char, vector unsigned char); 40601 int vec_all_ge (vector unsigned char, vector bool char); 40602 int vec_all_ge (vector unsigned char, vector unsigned char); 40603 int vec_all_ge (vector bool char, vector signed char); 40604 int vec_all_ge (vector signed char, vector bool char); 40605 int vec_all_ge (vector signed char, vector signed char); 40606 int vec_all_ge (vector bool short, vector unsigned short); 40607 int vec_all_ge (vector unsigned short, vector bool short); 40608 int vec_all_ge (vector unsigned short, vector unsigned short); 40609 int vec_all_ge (vector signed short, vector signed short); 40610 int vec_all_ge (vector bool short, vector signed short); 40611 int vec_all_ge (vector signed short, vector bool short); 40612 int vec_all_ge (vector bool int, vector unsigned int); 40613 int vec_all_ge (vector unsigned int, vector bool int); 40614 int vec_all_ge (vector unsigned int, vector unsigned int); 40615 int vec_all_ge (vector bool int, vector signed int); 40616 int vec_all_ge (vector signed int, vector bool int); 40617 int vec_all_ge (vector signed int, vector signed int); 40618 int vec_all_ge (vector float, vector float); 40619 40620 int vec_all_gt (vector bool char, vector unsigned char); 40621 int vec_all_gt (vector unsigned char, vector bool char); 40622 int vec_all_gt (vector unsigned char, vector unsigned char); 40623 int vec_all_gt (vector bool char, vector signed char); 40624 int vec_all_gt (vector signed char, vector bool char); 40625 int vec_all_gt (vector signed char, vector signed char); 40626 int vec_all_gt (vector bool short, vector unsigned short); 40627 int vec_all_gt (vector unsigned short, vector bool short); 40628 int vec_all_gt (vector unsigned short, vector unsigned short); 40629 int vec_all_gt (vector bool short, vector signed short); 40630 int vec_all_gt (vector signed short, vector bool short); 40631 int vec_all_gt (vector signed short, vector signed short); 40632 int vec_all_gt (vector bool int, vector unsigned int); 40633 int vec_all_gt (vector unsigned int, vector bool int); 40634 int vec_all_gt (vector unsigned int, vector unsigned int); 40635 int vec_all_gt (vector bool int, vector signed int); 40636 int vec_all_gt (vector signed int, vector bool int); 40637 int vec_all_gt (vector signed int, vector signed int); 40638 int vec_all_gt (vector float, vector float); 40639 40640 int vec_all_in (vector float, vector float); 40641 40642 int vec_all_le (vector bool char, vector unsigned char); 40643 int vec_all_le (vector unsigned char, vector bool char); 40644 int vec_all_le (vector unsigned char, vector unsigned char); 40645 int vec_all_le (vector bool char, vector signed char); 40646 int vec_all_le (vector signed char, vector bool char); 40647 int vec_all_le (vector signed char, vector signed char); 40648 int vec_all_le (vector bool short, vector unsigned short); 40649 int vec_all_le (vector unsigned short, vector bool short); 40650 int vec_all_le (vector unsigned short, vector unsigned short); 40651 int vec_all_le (vector bool short, vector signed short); 40652 int vec_all_le (vector signed short, vector bool short); 40653 int vec_all_le (vector signed short, vector signed short); 40654 int vec_all_le (vector bool int, vector unsigned int); 40655 int vec_all_le (vector unsigned int, vector bool int); 40656 int vec_all_le (vector unsigned int, vector unsigned int); 40657 int vec_all_le (vector bool int, vector signed int); 40658 int vec_all_le (vector signed int, vector bool int); 40659 int vec_all_le (vector signed int, vector signed int); 40660 int vec_all_le (vector float, vector float); 40661 40662 int vec_all_lt (vector bool char, vector unsigned char); 40663 int vec_all_lt (vector unsigned char, vector bool char); 40664 int vec_all_lt (vector unsigned char, vector unsigned char); 40665 int vec_all_lt (vector bool char, vector signed char); 40666 int vec_all_lt (vector signed char, vector bool char); 40667 int vec_all_lt (vector signed char, vector signed char); 40668 int vec_all_lt (vector bool short, vector unsigned short); 40669 int vec_all_lt (vector unsigned short, vector bool short); 40670 int vec_all_lt (vector unsigned short, vector unsigned short); 40671 int vec_all_lt (vector bool short, vector signed short); 40672 int vec_all_lt (vector signed short, vector bool short); 40673 int vec_all_lt (vector signed short, vector signed short); 40674 int vec_all_lt (vector bool int, vector unsigned int); 40675 int vec_all_lt (vector unsigned int, vector bool int); 40676 int vec_all_lt (vector unsigned int, vector unsigned int); 40677 int vec_all_lt (vector bool int, vector signed int); 40678 int vec_all_lt (vector signed int, vector bool int); 40679 int vec_all_lt (vector signed int, vector signed int); 40680 int vec_all_lt (vector float, vector float); 40681 40682 int vec_all_nan (vector float); 40683 40684 int vec_all_ne (vector signed char, vector bool char); 40685 int vec_all_ne (vector signed char, vector signed char); 40686 int vec_all_ne (vector unsigned char, vector bool char); 40687 int vec_all_ne (vector unsigned char, vector unsigned char); 40688 int vec_all_ne (vector bool char, vector bool char); 40689 int vec_all_ne (vector bool char, vector unsigned char); 40690 int vec_all_ne (vector bool char, vector signed char); 40691 int vec_all_ne (vector signed short, vector bool short); 40692 int vec_all_ne (vector signed short, vector signed short); 40693 int vec_all_ne (vector unsigned short, vector bool short); 40694 int vec_all_ne (vector unsigned short, vector unsigned short); 40695 int vec_all_ne (vector bool short, vector bool short); 40696 int vec_all_ne (vector bool short, vector unsigned short); 40697 int vec_all_ne (vector bool short, vector signed short); 40698 int vec_all_ne (vector pixel, vector pixel); 40699 int vec_all_ne (vector signed int, vector bool int); 40700 int vec_all_ne (vector signed int, vector signed int); 40701 int vec_all_ne (vector unsigned int, vector bool int); 40702 int vec_all_ne (vector unsigned int, vector unsigned int); 40703 int vec_all_ne (vector bool int, vector bool int); 40704 int vec_all_ne (vector bool int, vector unsigned int); 40705 int vec_all_ne (vector bool int, vector signed int); 40706 int vec_all_ne (vector float, vector float); 40707 40708 int vec_all_nge (vector float, vector float); 40709 40710 int vec_all_ngt (vector float, vector float); 40711 40712 int vec_all_nle (vector float, vector float); 40713 40714 int vec_all_nlt (vector float, vector float); 40715 40716 int vec_all_numeric (vector float); 40717 40718 int vec_any_eq (vector signed char, vector bool char); 40719 int vec_any_eq (vector signed char, vector signed char); 40720 int vec_any_eq (vector unsigned char, vector bool char); 40721 int vec_any_eq (vector unsigned char, vector unsigned char); 40722 int vec_any_eq (vector bool char, vector bool char); 40723 int vec_any_eq (vector bool char, vector unsigned char); 40724 int vec_any_eq (vector bool char, vector signed char); 40725 int vec_any_eq (vector signed short, vector bool short); 40726 int vec_any_eq (vector signed short, vector signed short); 40727 int vec_any_eq (vector unsigned short, vector bool short); 40728 int vec_any_eq (vector unsigned short, vector unsigned short); 40729 int vec_any_eq (vector bool short, vector bool short); 40730 int vec_any_eq (vector bool short, vector unsigned short); 40731 int vec_any_eq (vector bool short, vector signed short); 40732 int vec_any_eq (vector pixel, vector pixel); 40733 int vec_any_eq (vector signed int, vector bool int); 40734 int vec_any_eq (vector signed int, vector signed int); 40735 int vec_any_eq (vector unsigned int, vector bool int); 40736 int vec_any_eq (vector unsigned int, vector unsigned int); 40737 int vec_any_eq (vector bool int, vector bool int); 40738 int vec_any_eq (vector bool int, vector unsigned int); 40739 int vec_any_eq (vector bool int, vector signed int); 40740 int vec_any_eq (vector float, vector float); 40741 40742 int vec_any_ge (vector signed char, vector bool char); 40743 int vec_any_ge (vector unsigned char, vector bool char); 40744 int vec_any_ge (vector unsigned char, vector unsigned char); 40745 int vec_any_ge (vector signed char, vector signed char); 40746 int vec_any_ge (vector bool char, vector unsigned char); 40747 int vec_any_ge (vector bool char, vector signed char); 40748 int vec_any_ge (vector unsigned short, vector bool short); 40749 int vec_any_ge (vector unsigned short, vector unsigned short); 40750 int vec_any_ge (vector signed short, vector signed short); 40751 int vec_any_ge (vector signed short, vector bool short); 40752 int vec_any_ge (vector bool short, vector unsigned short); 40753 int vec_any_ge (vector bool short, vector signed short); 40754 int vec_any_ge (vector signed int, vector bool int); 40755 int vec_any_ge (vector unsigned int, vector bool int); 40756 int vec_any_ge (vector unsigned int, vector unsigned int); 40757 int vec_any_ge (vector signed int, vector signed int); 40758 int vec_any_ge (vector bool int, vector unsigned int); 40759 int vec_any_ge (vector bool int, vector signed int); 40760 int vec_any_ge (vector float, vector float); 40761 40762 int vec_any_gt (vector bool char, vector unsigned char); 40763 int vec_any_gt (vector unsigned char, vector bool char); 40764 int vec_any_gt (vector unsigned char, vector unsigned char); 40765 int vec_any_gt (vector bool char, vector signed char); 40766 int vec_any_gt (vector signed char, vector bool char); 40767 int vec_any_gt (vector signed char, vector signed char); 40768 int vec_any_gt (vector bool short, vector unsigned short); 40769 int vec_any_gt (vector unsigned short, vector bool short); 40770 int vec_any_gt (vector unsigned short, vector unsigned short); 40771 int vec_any_gt (vector bool short, vector signed short); 40772 int vec_any_gt (vector signed short, vector bool short); 40773 int vec_any_gt (vector signed short, vector signed short); 40774 int vec_any_gt (vector bool int, vector unsigned int); 40775 int vec_any_gt (vector unsigned int, vector bool int); 40776 int vec_any_gt (vector unsigned int, vector unsigned int); 40777 int vec_any_gt (vector bool int, vector signed int); 40778 int vec_any_gt (vector signed int, vector bool int); 40779 int vec_any_gt (vector signed int, vector signed int); 40780 int vec_any_gt (vector float, vector float); 40781 40782 int vec_any_le (vector bool char, vector unsigned char); 40783 int vec_any_le (vector unsigned char, vector bool char); 40784 int vec_any_le (vector unsigned char, vector unsigned char); 40785 int vec_any_le (vector bool char, vector signed char); 40786 int vec_any_le (vector signed char, vector bool char); 40787 int vec_any_le (vector signed char, vector signed char); 40788 int vec_any_le (vector bool short, vector unsigned short); 40789 int vec_any_le (vector unsigned short, vector bool short); 40790 int vec_any_le (vector unsigned short, vector unsigned short); 40791 int vec_any_le (vector bool short, vector signed short); 40792 int vec_any_le (vector signed short, vector bool short); 40793 int vec_any_le (vector signed short, vector signed short); 40794 int vec_any_le (vector bool int, vector unsigned int); 40795 int vec_any_le (vector unsigned int, vector bool int); 40796 int vec_any_le (vector unsigned int, vector unsigned int); 40797 int vec_any_le (vector bool int, vector signed int); 40798 int vec_any_le (vector signed int, vector bool int); 40799 int vec_any_le (vector signed int, vector signed int); 40800 int vec_any_le (vector float, vector float); 40801 40802 int vec_any_lt (vector bool char, vector unsigned char); 40803 int vec_any_lt (vector unsigned char, vector bool char); 40804 int vec_any_lt (vector unsigned char, vector unsigned char); 40805 int vec_any_lt (vector bool char, vector signed char); 40806 int vec_any_lt (vector signed char, vector bool char); 40807 int vec_any_lt (vector signed char, vector signed char); 40808 int vec_any_lt (vector bool short, vector unsigned short); 40809 int vec_any_lt (vector unsigned short, vector bool short); 40810 int vec_any_lt (vector unsigned short, vector unsigned short); 40811 int vec_any_lt (vector bool short, vector signed short); 40812 int vec_any_lt (vector signed short, vector bool short); 40813 int vec_any_lt (vector signed short, vector signed short); 40814 int vec_any_lt (vector bool int, vector unsigned int); 40815 int vec_any_lt (vector unsigned int, vector bool int); 40816 int vec_any_lt (vector unsigned int, vector unsigned int); 40817 int vec_any_lt (vector bool int, vector signed int); 40818 int vec_any_lt (vector signed int, vector bool int); 40819 int vec_any_lt (vector signed int, vector signed int); 40820 int vec_any_lt (vector float, vector float); 40821 40822 int vec_any_nan (vector float); 40823 40824 int vec_any_ne (vector signed char, vector bool char); 40825 int vec_any_ne (vector signed char, vector signed char); 40826 int vec_any_ne (vector unsigned char, vector bool char); 40827 int vec_any_ne (vector unsigned char, vector unsigned char); 40828 int vec_any_ne (vector bool char, vector bool char); 40829 int vec_any_ne (vector bool char, vector unsigned char); 40830 int vec_any_ne (vector bool char, vector signed char); 40831 int vec_any_ne (vector signed short, vector bool short); 40832 int vec_any_ne (vector signed short, vector signed short); 40833 int vec_any_ne (vector unsigned short, vector bool short); 40834 int vec_any_ne (vector unsigned short, vector unsigned short); 40835 int vec_any_ne (vector bool short, vector bool short); 40836 int vec_any_ne (vector bool short, vector unsigned short); 40837 int vec_any_ne (vector bool short, vector signed short); 40838 int vec_any_ne (vector pixel, vector pixel); 40839 int vec_any_ne (vector signed int, vector bool int); 40840 int vec_any_ne (vector signed int, vector signed int); 40841 int vec_any_ne (vector unsigned int, vector bool int); 40842 int vec_any_ne (vector unsigned int, vector unsigned int); 40843 int vec_any_ne (vector bool int, vector bool int); 40844 int vec_any_ne (vector bool int, vector unsigned int); 40845 int vec_any_ne (vector bool int, vector signed int); 40846 int vec_any_ne (vector float, vector float); 40847 40848 int vec_any_nge (vector float, vector float); 40849 40850 int vec_any_ngt (vector float, vector float); 40851 40852 int vec_any_nle (vector float, vector float); 40853 40854 int vec_any_nlt (vector float, vector float); 40855 40856 int vec_any_numeric (vector float); 40857 40858 int vec_any_out (vector float, vector float); 40859 40860 If the vector/scalar (VSX) instruction set is available, the following 40861 additional functions are available: 40862 40863 vector double vec_abs (vector double); 40864 vector double vec_add (vector double, vector double); 40865 vector double vec_and (vector double, vector double); 40866 vector double vec_and (vector double, vector bool long); 40867 vector double vec_and (vector bool long, vector double); 40868 vector double vec_andc (vector double, vector double); 40869 vector double vec_andc (vector double, vector bool long); 40870 vector double vec_andc (vector bool long, vector double); 40871 vector double vec_ceil (vector double); 40872 vector bool long vec_cmpeq (vector double, vector double); 40873 vector bool long vec_cmpge (vector double, vector double); 40874 vector bool long vec_cmpgt (vector double, vector double); 40875 vector bool long vec_cmple (vector double, vector double); 40876 vector bool long vec_cmplt (vector double, vector double); 40877 vector float vec_div (vector float, vector float); 40878 vector double vec_div (vector double, vector double); 40879 vector double vec_floor (vector double); 40880 vector double vec_ld (int, const vector double *); 40881 vector double vec_ld (int, const double *); 40882 vector double vec_ldl (int, const vector double *); 40883 vector double vec_ldl (int, const double *); 40884 vector unsigned char vec_lvsl (int, const volatile double *); 40885 vector unsigned char vec_lvsr (int, const volatile double *); 40886 vector double vec_madd (vector double, vector double, vector double); 40887 vector double vec_max (vector double, vector double); 40888 vector double vec_min (vector double, vector double); 40889 vector float vec_msub (vector float, vector float, vector float); 40890 vector double vec_msub (vector double, vector double, vector double); 40891 vector float vec_mul (vector float, vector float); 40892 vector double vec_mul (vector double, vector double); 40893 vector float vec_nearbyint (vector float); 40894 vector double vec_nearbyint (vector double); 40895 vector float vec_nmadd (vector float, vector float, vector float); 40896 vector double vec_nmadd (vector double, vector double, vector double); 40897 vector double vec_nmsub (vector double, vector double, vector double); 40898 vector double vec_nor (vector double, vector double); 40899 vector double vec_or (vector double, vector double); 40900 vector double vec_or (vector double, vector bool long); 40901 vector double vec_or (vector bool long, vector double); 40902 vector double vec_perm (vector double, 40903 vector double, 40904 vector unsigned char); 40905 vector double vec_rint (vector double); 40906 vector double vec_recip (vector double, vector double); 40907 vector double vec_rsqrt (vector double); 40908 vector double vec_rsqrte (vector double); 40909 vector double vec_sel (vector double, vector double, vector bool long); 40910 vector double vec_sel (vector double, vector double, vector unsigned long); 40911 vector double vec_sub (vector double, vector double); 40912 vector float vec_sqrt (vector float); 40913 vector double vec_sqrt (vector double); 40914 void vec_st (vector double, int, vector double *); 40915 void vec_st (vector double, int, double *); 40916 vector double vec_trunc (vector double); 40917 vector double vec_xor (vector double, vector double); 40918 vector double vec_xor (vector double, vector bool long); 40919 vector double vec_xor (vector bool long, vector double); 40920 int vec_all_eq (vector double, vector double); 40921 int vec_all_ge (vector double, vector double); 40922 int vec_all_gt (vector double, vector double); 40923 int vec_all_le (vector double, vector double); 40924 int vec_all_lt (vector double, vector double); 40925 int vec_all_nan (vector double); 40926 int vec_all_ne (vector double, vector double); 40927 int vec_all_nge (vector double, vector double); 40928 int vec_all_ngt (vector double, vector double); 40929 int vec_all_nle (vector double, vector double); 40930 int vec_all_nlt (vector double, vector double); 40931 int vec_all_numeric (vector double); 40932 int vec_any_eq (vector double, vector double); 40933 int vec_any_ge (vector double, vector double); 40934 int vec_any_gt (vector double, vector double); 40935 int vec_any_le (vector double, vector double); 40936 int vec_any_lt (vector double, vector double); 40937 int vec_any_nan (vector double); 40938 int vec_any_ne (vector double, vector double); 40939 int vec_any_nge (vector double, vector double); 40940 int vec_any_ngt (vector double, vector double); 40941 int vec_any_nle (vector double, vector double); 40942 int vec_any_nlt (vector double, vector double); 40943 int vec_any_numeric (vector double); 40944 40945 vector double vec_vsx_ld (int, const vector double *); 40946 vector double vec_vsx_ld (int, const double *); 40947 vector float vec_vsx_ld (int, const vector float *); 40948 vector float vec_vsx_ld (int, const float *); 40949 vector bool int vec_vsx_ld (int, const vector bool int *); 40950 vector signed int vec_vsx_ld (int, const vector signed int *); 40951 vector signed int vec_vsx_ld (int, const int *); 40952 vector signed int vec_vsx_ld (int, const long *); 40953 vector unsigned int vec_vsx_ld (int, const vector unsigned int *); 40954 vector unsigned int vec_vsx_ld (int, const unsigned int *); 40955 vector unsigned int vec_vsx_ld (int, const unsigned long *); 40956 vector bool short vec_vsx_ld (int, const vector bool short *); 40957 vector pixel vec_vsx_ld (int, const vector pixel *); 40958 vector signed short vec_vsx_ld (int, const vector signed short *); 40959 vector signed short vec_vsx_ld (int, const short *); 40960 vector unsigned short vec_vsx_ld (int, const vector unsigned short *); 40961 vector unsigned short vec_vsx_ld (int, const unsigned short *); 40962 vector bool char vec_vsx_ld (int, const vector bool char *); 40963 vector signed char vec_vsx_ld (int, const vector signed char *); 40964 vector signed char vec_vsx_ld (int, const signed char *); 40965 vector unsigned char vec_vsx_ld (int, const vector unsigned char *); 40966 vector unsigned char vec_vsx_ld (int, const unsigned char *); 40967 40968 void vec_vsx_st (vector double, int, vector double *); 40969 void vec_vsx_st (vector double, int, double *); 40970 void vec_vsx_st (vector float, int, vector float *); 40971 void vec_vsx_st (vector float, int, float *); 40972 void vec_vsx_st (vector signed int, int, vector signed int *); 40973 void vec_vsx_st (vector signed int, int, int *); 40974 void vec_vsx_st (vector unsigned int, int, vector unsigned int *); 40975 void vec_vsx_st (vector unsigned int, int, unsigned int *); 40976 void vec_vsx_st (vector bool int, int, vector bool int *); 40977 void vec_vsx_st (vector bool int, int, unsigned int *); 40978 void vec_vsx_st (vector bool int, int, int *); 40979 void vec_vsx_st (vector signed short, int, vector signed short *); 40980 void vec_vsx_st (vector signed short, int, short *); 40981 void vec_vsx_st (vector unsigned short, int, vector unsigned short *); 40982 void vec_vsx_st (vector unsigned short, int, unsigned short *); 40983 void vec_vsx_st (vector bool short, int, vector bool short *); 40984 void vec_vsx_st (vector bool short, int, unsigned short *); 40985 void vec_vsx_st (vector pixel, int, vector pixel *); 40986 void vec_vsx_st (vector pixel, int, unsigned short *); 40987 void vec_vsx_st (vector pixel, int, short *); 40988 void vec_vsx_st (vector bool short, int, short *); 40989 void vec_vsx_st (vector signed char, int, vector signed char *); 40990 void vec_vsx_st (vector signed char, int, signed char *); 40991 void vec_vsx_st (vector unsigned char, int, vector unsigned char *); 40992 void vec_vsx_st (vector unsigned char, int, unsigned char *); 40993 void vec_vsx_st (vector bool char, int, vector bool char *); 40994 void vec_vsx_st (vector bool char, int, unsigned char *); 40995 void vec_vsx_st (vector bool char, int, signed char *); 40996 40997 vector double vec_xxpermdi (vector double, vector double, int); 40998 vector float vec_xxpermdi (vector float, vector float, int); 40999 vector long long vec_xxpermdi (vector long long, vector long long, int); 41000 vector unsigned long long vec_xxpermdi (vector unsigned long long, 41001 vector unsigned long long, int); 41002 vector int vec_xxpermdi (vector int, vector int, int); 41003 vector unsigned int vec_xxpermdi (vector unsigned int, 41004 vector unsigned int, int); 41005 vector short vec_xxpermdi (vector short, vector short, int); 41006 vector unsigned short vec_xxpermdi (vector unsigned short, 41007 vector unsigned short, int); 41008 vector signed char vec_xxpermdi (vector signed char, vector signed char, int); 41009 vector unsigned char vec_xxpermdi (vector unsigned char, 41010 vector unsigned char, int); 41011 41012 vector double vec_xxsldi (vector double, vector double, int); 41013 vector float vec_xxsldi (vector float, vector float, int); 41014 vector long long vec_xxsldi (vector long long, vector long long, int); 41015 vector unsigned long long vec_xxsldi (vector unsigned long long, 41016 vector unsigned long long, int); 41017 vector int vec_xxsldi (vector int, vector int, int); 41018 vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int); 41019 vector short vec_xxsldi (vector short, vector short, int); 41020 vector unsigned short vec_xxsldi (vector unsigned short, 41021 vector unsigned short, int); 41022 vector signed char vec_xxsldi (vector signed char, vector signed char, int); 41023 vector unsigned char vec_xxsldi (vector unsigned char, 41024 vector unsigned char, int); 41025 41026 Note that the `vec_ld' and `vec_st' built-in functions always generate 41027 the AltiVec `LVX' and `STVX' instructions even if the VSX instruction 41028 set is available. The `vec_vsx_ld' and `vec_vsx_st' built-in functions 41029 always generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X' 41030 instructions. 41031 41032 If the ISA 2.07 additions to the vector/scalar (power8-vector) 41033 instruction set is available, the following additional functions are 41034 available for both 32-bit and 64-bit targets. For 64-bit targets, you 41035 can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG 41036 instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of 41037 VECTOR UNSIGNED LONG LONG. 41038 41039 vector long long vec_abs (vector long long); 41040 41041 vector long long vec_add (vector long long, vector long long); 41042 vector unsigned long long vec_add (vector unsigned long long, 41043 vector unsigned long long); 41044 41045 int vec_all_eq (vector long long, vector long long); 41046 int vec_all_ge (vector long long, vector long long); 41047 int vec_all_gt (vector long long, vector long long); 41048 int vec_all_le (vector long long, vector long long); 41049 int vec_all_lt (vector long long, vector long long); 41050 int vec_all_ne (vector long long, vector long long); 41051 int vec_any_eq (vector long long, vector long long); 41052 int vec_any_ge (vector long long, vector long long); 41053 int vec_any_gt (vector long long, vector long long); 41054 int vec_any_le (vector long long, vector long long); 41055 int vec_any_lt (vector long long, vector long long); 41056 int vec_any_ne (vector long long, vector long long); 41057 41058 vector long long vec_eqv (vector long long, vector long long); 41059 vector long long vec_eqv (vector bool long long, vector long long); 41060 vector long long vec_eqv (vector long long, vector bool long long); 41061 vector unsigned long long vec_eqv (vector unsigned long long, 41062 vector unsigned long long); 41063 vector unsigned long long vec_eqv (vector bool long long, 41064 vector unsigned long long); 41065 vector unsigned long long vec_eqv (vector unsigned long long, 41066 vector bool long long); 41067 vector int vec_eqv (vector int, vector int); 41068 vector int vec_eqv (vector bool int, vector int); 41069 vector int vec_eqv (vector int, vector bool int); 41070 vector unsigned int vec_eqv (vector unsigned int, vector unsigned int); 41071 vector unsigned int vec_eqv (vector bool unsigned int, 41072 vector unsigned int); 41073 vector unsigned int vec_eqv (vector unsigned int, 41074 vector bool unsigned int); 41075 vector short vec_eqv (vector short, vector short); 41076 vector short vec_eqv (vector bool short, vector short); 41077 vector short vec_eqv (vector short, vector bool short); 41078 vector unsigned short vec_eqv (vector unsigned short, vector unsigned short); 41079 vector unsigned short vec_eqv (vector bool unsigned short, 41080 vector unsigned short); 41081 vector unsigned short vec_eqv (vector unsigned short, 41082 vector bool unsigned short); 41083 vector signed char vec_eqv (vector signed char, vector signed char); 41084 vector signed char vec_eqv (vector bool signed char, vector signed char); 41085 vector signed char vec_eqv (vector signed char, vector bool signed char); 41086 vector unsigned char vec_eqv (vector unsigned char, vector unsigned char); 41087 vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char); 41088 vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char); 41089 41090 vector long long vec_max (vector long long, vector long long); 41091 vector unsigned long long vec_max (vector unsigned long long, 41092 vector unsigned long long); 41093 41094 vector long long vec_min (vector long long, vector long long); 41095 vector unsigned long long vec_min (vector unsigned long long, 41096 vector unsigned long long); 41097 41098 vector long long vec_nand (vector long long, vector long long); 41099 vector long long vec_nand (vector bool long long, vector long long); 41100 vector long long vec_nand (vector long long, vector bool long long); 41101 vector unsigned long long vec_nand (vector unsigned long long, 41102 vector unsigned long long); 41103 vector unsigned long long vec_nand (vector bool long long, 41104 vector unsigned long long); 41105 vector unsigned long long vec_nand (vector unsigned long long, 41106 vector bool long long); 41107 vector int vec_nand (vector int, vector int); 41108 vector int vec_nand (vector bool int, vector int); 41109 vector int vec_nand (vector int, vector bool int); 41110 vector unsigned int vec_nand (vector unsigned int, vector unsigned int); 41111 vector unsigned int vec_nand (vector bool unsigned int, 41112 vector unsigned int); 41113 vector unsigned int vec_nand (vector unsigned int, 41114 vector bool unsigned int); 41115 vector short vec_nand (vector short, vector short); 41116 vector short vec_nand (vector bool short, vector short); 41117 vector short vec_nand (vector short, vector bool short); 41118 vector unsigned short vec_nand (vector unsigned short, vector unsigned short); 41119 vector unsigned short vec_nand (vector bool unsigned short, 41120 vector unsigned short); 41121 vector unsigned short vec_nand (vector unsigned short, 41122 vector bool unsigned short); 41123 vector signed char vec_nand (vector signed char, vector signed char); 41124 vector signed char vec_nand (vector bool signed char, vector signed char); 41125 vector signed char vec_nand (vector signed char, vector bool signed char); 41126 vector unsigned char vec_nand (vector unsigned char, vector unsigned char); 41127 vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char); 41128 vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char); 41129 41130 vector long long vec_orc (vector long long, vector long long); 41131 vector long long vec_orc (vector bool long long, vector long long); 41132 vector long long vec_orc (vector long long, vector bool long long); 41133 vector unsigned long long vec_orc (vector unsigned long long, 41134 vector unsigned long long); 41135 vector unsigned long long vec_orc (vector bool long long, 41136 vector unsigned long long); 41137 vector unsigned long long vec_orc (vector unsigned long long, 41138 vector bool long long); 41139 vector int vec_orc (vector int, vector int); 41140 vector int vec_orc (vector bool int, vector int); 41141 vector int vec_orc (vector int, vector bool int); 41142 vector unsigned int vec_orc (vector unsigned int, vector unsigned int); 41143 vector unsigned int vec_orc (vector bool unsigned int, 41144 vector unsigned int); 41145 vector unsigned int vec_orc (vector unsigned int, 41146 vector bool unsigned int); 41147 vector short vec_orc (vector short, vector short); 41148 vector short vec_orc (vector bool short, vector short); 41149 vector short vec_orc (vector short, vector bool short); 41150 vector unsigned short vec_orc (vector unsigned short, vector unsigned short); 41151 vector unsigned short vec_orc (vector bool unsigned short, 41152 vector unsigned short); 41153 vector unsigned short vec_orc (vector unsigned short, 41154 vector bool unsigned short); 41155 vector signed char vec_orc (vector signed char, vector signed char); 41156 vector signed char vec_orc (vector bool signed char, vector signed char); 41157 vector signed char vec_orc (vector signed char, vector bool signed char); 41158 vector unsigned char vec_orc (vector unsigned char, vector unsigned char); 41159 vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char); 41160 vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char); 41161 41162 vector int vec_pack (vector long long, vector long long); 41163 vector unsigned int vec_pack (vector unsigned long long, 41164 vector unsigned long long); 41165 vector bool int vec_pack (vector bool long long, vector bool long long); 41166 41167 vector int vec_packs (vector long long, vector long long); 41168 vector unsigned int vec_packs (vector unsigned long long, 41169 vector unsigned long long); 41170 41171 vector unsigned int vec_packsu (vector long long, vector long long); 41172 41173 vector long long vec_rl (vector long long, 41174 vector unsigned long long); 41175 vector long long vec_rl (vector unsigned long long, 41176 vector unsigned long long); 41177 41178 vector long long vec_sl (vector long long, vector unsigned long long); 41179 vector long long vec_sl (vector unsigned long long, 41180 vector unsigned long long); 41181 41182 vector long long vec_sr (vector long long, vector unsigned long long); 41183 vector unsigned long long char vec_sr (vector unsigned long long, 41184 vector unsigned long long); 41185 41186 vector long long vec_sra (vector long long, vector unsigned long long); 41187 vector unsigned long long vec_sra (vector unsigned long long, 41188 vector unsigned long long); 41189 41190 vector long long vec_sub (vector long long, vector long long); 41191 vector unsigned long long vec_sub (vector unsigned long long, 41192 vector unsigned long long); 41193 41194 vector long long vec_unpackh (vector int); 41195 vector unsigned long long vec_unpackh (vector unsigned int); 41196 41197 vector long long vec_unpackl (vector int); 41198 vector unsigned long long vec_unpackl (vector unsigned int); 41199 41200 vector long long vec_vaddudm (vector long long, vector long long); 41201 vector long long vec_vaddudm (vector bool long long, vector long long); 41202 vector long long vec_vaddudm (vector long long, vector bool long long); 41203 vector unsigned long long vec_vaddudm (vector unsigned long long, 41204 vector unsigned long long); 41205 vector unsigned long long vec_vaddudm (vector bool unsigned long long, 41206 vector unsigned long long); 41207 vector unsigned long long vec_vaddudm (vector unsigned long long, 41208 vector bool unsigned long long); 41209 41210 vector long long vec_vbpermq (vector signed char, vector signed char); 41211 vector long long vec_vbpermq (vector unsigned char, vector unsigned char); 41212 41213 vector long long vec_vclz (vector long long); 41214 vector unsigned long long vec_vclz (vector unsigned long long); 41215 vector int vec_vclz (vector int); 41216 vector unsigned int vec_vclz (vector int); 41217 vector short vec_vclz (vector short); 41218 vector unsigned short vec_vclz (vector unsigned short); 41219 vector signed char vec_vclz (vector signed char); 41220 vector unsigned char vec_vclz (vector unsigned char); 41221 41222 vector signed char vec_vclzb (vector signed char); 41223 vector unsigned char vec_vclzb (vector unsigned char); 41224 41225 vector long long vec_vclzd (vector long long); 41226 vector unsigned long long vec_vclzd (vector unsigned long long); 41227 41228 vector short vec_vclzh (vector short); 41229 vector unsigned short vec_vclzh (vector unsigned short); 41230 41231 vector int vec_vclzw (vector int); 41232 vector unsigned int vec_vclzw (vector int); 41233 41234 vector signed char vec_vgbbd (vector signed char); 41235 vector unsigned char vec_vgbbd (vector unsigned char); 41236 41237 vector long long vec_vmaxsd (vector long long, vector long long); 41238 41239 vector unsigned long long vec_vmaxud (vector unsigned long long, 41240 unsigned vector long long); 41241 41242 vector long long vec_vminsd (vector long long, vector long long); 41243 41244 vector unsigned long long vec_vminud (vector long long, 41245 vector long long); 41246 41247 vector int vec_vpksdss (vector long long, vector long long); 41248 vector unsigned int vec_vpksdss (vector long long, vector long long); 41249 41250 vector unsigned int vec_vpkudus (vector unsigned long long, 41251 vector unsigned long long); 41252 41253 vector int vec_vpkudum (vector long long, vector long long); 41254 vector unsigned int vec_vpkudum (vector unsigned long long, 41255 vector unsigned long long); 41256 vector bool int vec_vpkudum (vector bool long long, vector bool long long); 41257 41258 vector long long vec_vpopcnt (vector long long); 41259 vector unsigned long long vec_vpopcnt (vector unsigned long long); 41260 vector int vec_vpopcnt (vector int); 41261 vector unsigned int vec_vpopcnt (vector int); 41262 vector short vec_vpopcnt (vector short); 41263 vector unsigned short vec_vpopcnt (vector unsigned short); 41264 vector signed char vec_vpopcnt (vector signed char); 41265 vector unsigned char vec_vpopcnt (vector unsigned char); 41266 41267 vector signed char vec_vpopcntb (vector signed char); 41268 vector unsigned char vec_vpopcntb (vector unsigned char); 41269 41270 vector long long vec_vpopcntd (vector long long); 41271 vector unsigned long long vec_vpopcntd (vector unsigned long long); 41272 41273 vector short vec_vpopcnth (vector short); 41274 vector unsigned short vec_vpopcnth (vector unsigned short); 41275 41276 vector int vec_vpopcntw (vector int); 41277 vector unsigned int vec_vpopcntw (vector int); 41278 41279 vector long long vec_vrld (vector long long, vector unsigned long long); 41280 vector unsigned long long vec_vrld (vector unsigned long long, 41281 vector unsigned long long); 41282 41283 vector long long vec_vsld (vector long long, vector unsigned long long); 41284 vector long long vec_vsld (vector unsigned long long, 41285 vector unsigned long long); 41286 41287 vector long long vec_vsrad (vector long long, vector unsigned long long); 41288 vector unsigned long long vec_vsrad (vector unsigned long long, 41289 vector unsigned long long); 41290 41291 vector long long vec_vsrd (vector long long, vector unsigned long long); 41292 vector unsigned long long char vec_vsrd (vector unsigned long long, 41293 vector unsigned long long); 41294 41295 vector long long vec_vsubudm (vector long long, vector long long); 41296 vector long long vec_vsubudm (vector bool long long, vector long long); 41297 vector long long vec_vsubudm (vector long long, vector bool long long); 41298 vector unsigned long long vec_vsubudm (vector unsigned long long, 41299 vector unsigned long long); 41300 vector unsigned long long vec_vsubudm (vector bool long long, 41301 vector unsigned long long); 41302 vector unsigned long long vec_vsubudm (vector unsigned long long, 41303 vector bool long long); 41304 41305 vector long long vec_vupkhsw (vector int); 41306 vector unsigned long long vec_vupkhsw (vector unsigned int); 41307 41308 vector long long vec_vupklsw (vector int); 41309 vector unsigned long long vec_vupklsw (vector int); 41310 41311 If the ISA 2.07 additions to the vector/scalar (power8-vector) 41312 instruction set is available, the following additional functions are 41313 available for 64-bit targets. New vector types (VECTOR __INT128_T and 41314 VECTOR __UINT128_T) are available to hold the __INT128_T and 41315 __UINT128_T types to use these builtins. 41316 41317 The normal vector extract, and set operations work on VECTOR 41318 __INT128_T and VECTOR __UINT128_T types, but the index value must be 0. 41319 41320 vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t); 41321 vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t); 41322 41323 vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t); 41324 vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t); 41325 41326 vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t, 41327 vector __int128_t); 41328 vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t, 41329 vector __uint128_t); 41330 41331 vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t, 41332 vector __int128_t); 41333 vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t, 41334 vector __uint128_t); 41335 41336 vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t, 41337 vector __int128_t); 41338 vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t, 41339 vector __uint128_t); 41340 41341 vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t, 41342 vector __int128_t); 41343 vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t, 41344 vector __uint128_t); 41345 41346 vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t); 41347 vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t); 41348 41349 __int128_t vec_vsubuqm (__int128_t, __int128_t); 41350 __uint128_t vec_vsubuqm (__uint128_t, __uint128_t); 41351 41352 vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t); 41353 int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t); 41354 int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t); 41355 int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t); 41356 int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t); 41357 vector __int128_t bcdsub (vector __int128_t, vector__int128_t); 41358 int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t); 41359 int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t); 41360 int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t); 41361 int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t); 41362 41363 If the cryptographic instructions are enabled (`-mcrypto' or 41364 `-mcpu=power8'), the following builtins are enabled. 41365 41366 vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long); 41367 41368 vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long, 41369 vector unsigned long long); 41370 41371 vector unsigned long long __builtin_crypto_vcipherlast 41372 (vector unsigned long long, 41373 vector unsigned long long); 41374 41375 vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long, 41376 vector unsigned long long); 41377 41378 vector unsigned long long __builtin_crypto_vncipherlast 41379 (vector unsigned long long, 41380 vector unsigned long long); 41381 41382 vector unsigned char __builtin_crypto_vpermxor (vector unsigned char, 41383 vector unsigned char, 41384 vector unsigned char); 41385 41386 vector unsigned short __builtin_crypto_vpermxor (vector unsigned short, 41387 vector unsigned short, 41388 vector unsigned short); 41389 41390 vector unsigned int __builtin_crypto_vpermxor (vector unsigned int, 41391 vector unsigned int, 41392 vector unsigned int); 41393 41394 vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long, 41395 vector unsigned long long, 41396 vector unsigned long long); 41397 41398 vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char, 41399 vector unsigned char); 41400 41401 vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short, 41402 vector unsigned short); 41403 41404 vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int, 41405 vector unsigned int); 41406 41407 vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long, 41408 vector unsigned long long); 41409 41410 vector unsigned long long __builtin_crypto_vshasigmad 41411 (vector unsigned long long, int, int); 41412 41413 vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, 41414 int, int); 41415 41416 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and 41417 __BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant 41418 integer that is 0 or 1. The third argument to these builtin functions 41419 must be a constant integer in the range of 0 to 15. 41420 41421 41422 File: gcc.info, Node: PowerPC Hardware Transactional Memory Built-in Functions, Next: RX Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins 41423 41424 6.56.16 PowerPC Hardware Transactional Memory Built-in Functions 41425 ---------------------------------------------------------------- 41426 41427 GCC provides two interfaces for accessing the Hardware Transactional 41428 Memory (HTM) instructions available on some of the PowerPC family of 41429 prcoessors (eg, POWER8). The two interfaces come in a low level 41430 interface, consisting of built-in functions specific to PowerPC and a 41431 higher level interface consisting of inline functions that are common 41432 between PowerPC and S/390. 41433 41434 6.56.16.1 PowerPC HTM Low Level Built-in Functions 41435 .................................................. 41436 41437 The following low level built-in functions are available with `-mhtm' 41438 or `-mcpu=CPU' where CPU is `power8' or later. They all generate the 41439 machine instruction that is part of the name. 41440 41441 The HTM built-ins return true or false depending on their success and 41442 their arguments match exactly the type and order of the associated 41443 hardware instruction's operands. Refer to the ISA manual for a 41444 description of each instruction's operands. 41445 41446 unsigned int __builtin_tbegin (unsigned int) 41447 unsigned int __builtin_tend (unsigned int) 41448 41449 unsigned int __builtin_tabort (unsigned int) 41450 unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int) 41451 unsigned int __builtin_tabortdci (unsigned int, unsigned int, int) 41452 unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int) 41453 unsigned int __builtin_tabortwci (unsigned int, unsigned int, int) 41454 41455 unsigned int __builtin_tcheck (unsigned int) 41456 unsigned int __builtin_treclaim (unsigned int) 41457 unsigned int __builtin_trechkpt (void) 41458 unsigned int __builtin_tsr (unsigned int) 41459 41460 In addition to the above HTM built-ins, we have added built-ins for 41461 some common extended mnemonics of the HTM instructions: 41462 41463 unsigned int __builtin_tendall (void) 41464 unsigned int __builtin_tresume (void) 41465 unsigned int __builtin_tsuspend (void) 41466 41467 The following set of built-in functions are available to gain access 41468 to the HTM specific special purpose registers. 41469 41470 unsigned long __builtin_get_texasr (void) 41471 unsigned long __builtin_get_texasru (void) 41472 unsigned long __builtin_get_tfhar (void) 41473 unsigned long __builtin_get_tfiar (void) 41474 41475 void __builtin_set_texasr (unsigned long); 41476 void __builtin_set_texasru (unsigned long); 41477 void __builtin_set_tfhar (unsigned long); 41478 void __builtin_set_tfiar (unsigned long); 41479 41480 Example usage of these low level built-in functions may look like: 41481 41482 #include <htmintrin.h> 41483 41484 int num_retries = 10; 41485 41486 while (1) 41487 { 41488 if (__builtin_tbegin (0)) 41489 { 41490 /* Transaction State Initiated. */ 41491 if (is_locked (lock)) 41492 __builtin_tabort (0); 41493 ... transaction code... 41494 __builtin_tend (0); 41495 break; 41496 } 41497 else 41498 { 41499 /* Transaction State Failed. Use locks if the transaction 41500 failure is "persistent" or we've tried too many times. */ 41501 if (num_retries-- <= 0 41502 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ())) 41503 { 41504 acquire_lock (lock); 41505 ... non transactional fallback path... 41506 release_lock (lock); 41507 break; 41508 } 41509 } 41510 } 41511 41512 One final built-in function has been added that returns the value of 41513 the 2-bit Transaction State field of the Machine Status Register (MSR) 41514 as stored in `CR0'. 41515 41516 unsigned long __builtin_ttest (void) 41517 41518 This built-in can be used to determine the current transaction state 41519 using the following code example: 41520 41521 #include <htmintrin.h> 41522 41523 unsigned char tx_state = _HTM_STATE (__builtin_ttest ()); 41524 41525 if (tx_state == _HTM_TRANSACTIONAL) 41526 { 41527 /* Code to use in transactional state. */ 41528 } 41529 else if (tx_state == _HTM_NONTRANSACTIONAL) 41530 { 41531 /* Code to use in non-transactional state. */ 41532 } 41533 else if (tx_state == _HTM_SUSPENDED) 41534 { 41535 /* Code to use in transaction suspended state. */ 41536 } 41537 41538 6.56.16.2 PowerPC HTM High Level Inline Functions 41539 ................................................. 41540 41541 The following high level HTM interface is made available by including 41542 `<htmxlintrin.h>' and using `-mhtm' or `-mcpu=CPU' where CPU is 41543 `power8' or later. This interface is common between PowerPC and S/390, 41544 allowing users to write one HTM source implementation that can be 41545 compiled and executed on either system. 41546 41547 long __TM_simple_begin (void) 41548 long __TM_begin (void* const TM_buff) 41549 long __TM_end (void) 41550 void __TM_abort (void) 41551 void __TM_named_abort (unsigned char const code) 41552 void __TM_resume (void) 41553 void __TM_suspend (void) 41554 41555 long __TM_is_user_abort (void* const TM_buff) 41556 long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code) 41557 long __TM_is_illegal (void* const TM_buff) 41558 long __TM_is_footprint_exceeded (void* const TM_buff) 41559 long __TM_nesting_depth (void* const TM_buff) 41560 long __TM_is_nested_too_deep(void* const TM_buff) 41561 long __TM_is_conflict(void* const TM_buff) 41562 long __TM_is_failure_persistent(void* const TM_buff) 41563 long __TM_failure_address(void* const TM_buff) 41564 long long __TM_failure_code(void* const TM_buff) 41565 41566 Using these common set of HTM inline functions, we can create a more 41567 portable version of the HTM example in the previous section that will 41568 work on either PowerPC or S/390: 41569 41570 #include <htmxlintrin.h> 41571 41572 int num_retries = 10; 41573 TM_buff_type TM_buff; 41574 41575 while (1) 41576 { 41577 if (__TM_begin (TM_buff)) 41578 { 41579 /* Transaction State Initiated. */ 41580 if (is_locked (lock)) 41581 __TM_abort (); 41582 ... transaction code... 41583 __TM_end (); 41584 break; 41585 } 41586 else 41587 { 41588 /* Transaction State Failed. Use locks if the transaction 41589 failure is "persistent" or we've tried too many times. */ 41590 if (num_retries-- <= 0 41591 || __TM_is_failure_persistent (TM_buff)) 41592 { 41593 acquire_lock (lock); 41594 ... non transactional fallback path... 41595 release_lock (lock); 41596 break; 41597 } 41598 } 41599 } 41600 41601 41602 File: gcc.info, Node: RX Built-in Functions, Next: S/390 System z Built-in Functions, Prev: PowerPC Hardware Transactional Memory Built-in Functions, Up: Target Builtins 41603 41604 6.56.17 RX Built-in Functions 41605 ----------------------------- 41606 41607 GCC supports some of the RX instructions which cannot be expressed in 41608 the C programming language via the use of built-in functions. The 41609 following functions are supported: 41610 41611 -- Built-in Function: void __builtin_rx_brk (void) 41612 Generates the `brk' machine instruction. 41613 41614 -- Built-in Function: void __builtin_rx_clrpsw (int) 41615 Generates the `clrpsw' machine instruction to clear the specified 41616 bit in the processor status word. 41617 41618 -- Built-in Function: void __builtin_rx_int (int) 41619 Generates the `int' machine instruction to generate an interrupt 41620 with the specified value. 41621 41622 -- Built-in Function: void __builtin_rx_machi (int, int) 41623 Generates the `machi' machine instruction to add the result of 41624 multiplying the top 16 bits of the two arguments into the 41625 accumulator. 41626 41627 -- Built-in Function: void __builtin_rx_maclo (int, int) 41628 Generates the `maclo' machine instruction to add the result of 41629 multiplying the bottom 16 bits of the two arguments into the 41630 accumulator. 41631 41632 -- Built-in Function: void __builtin_rx_mulhi (int, int) 41633 Generates the `mulhi' machine instruction to place the result of 41634 multiplying the top 16 bits of the two arguments into the 41635 accumulator. 41636 41637 -- Built-in Function: void __builtin_rx_mullo (int, int) 41638 Generates the `mullo' machine instruction to place the result of 41639 multiplying the bottom 16 bits of the two arguments into the 41640 accumulator. 41641 41642 -- Built-in Function: int __builtin_rx_mvfachi (void) 41643 Generates the `mvfachi' machine instruction to read the top 32 41644 bits of the accumulator. 41645 41646 -- Built-in Function: int __builtin_rx_mvfacmi (void) 41647 Generates the `mvfacmi' machine instruction to read the middle 32 41648 bits of the accumulator. 41649 41650 -- Built-in Function: int __builtin_rx_mvfc (int) 41651 Generates the `mvfc' machine instruction which reads the control 41652 register specified in its argument and returns its value. 41653 41654 -- Built-in Function: void __builtin_rx_mvtachi (int) 41655 Generates the `mvtachi' machine instruction to set the top 32 bits 41656 of the accumulator. 41657 41658 -- Built-in Function: void __builtin_rx_mvtaclo (int) 41659 Generates the `mvtaclo' machine instruction to set the bottom 32 41660 bits of the accumulator. 41661 41662 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val) 41663 Generates the `mvtc' machine instruction which sets control 41664 register number `reg' to `val'. 41665 41666 -- Built-in Function: void __builtin_rx_mvtipl (int) 41667 Generates the `mvtipl' machine instruction set the interrupt 41668 priority level. 41669 41670 -- Built-in Function: void __builtin_rx_racw (int) 41671 Generates the `racw' machine instruction to round the accumulator 41672 according to the specified mode. 41673 41674 -- Built-in Function: int __builtin_rx_revw (int) 41675 Generates the `revw' machine instruction which swaps the bytes in 41676 the argument so that bits 0-7 now occupy bits 8-15 and vice versa, 41677 and also bits 16-23 occupy bits 24-31 and vice versa. 41678 41679 -- Built-in Function: void __builtin_rx_rmpa (void) 41680 Generates the `rmpa' machine instruction which initiates a 41681 repeated multiply and accumulate sequence. 41682 41683 -- Built-in Function: void __builtin_rx_round (float) 41684 Generates the `round' machine instruction which returns the 41685 floating-point argument rounded according to the current rounding 41686 mode set in the floating-point status word register. 41687 41688 -- Built-in Function: int __builtin_rx_sat (int) 41689 Generates the `sat' machine instruction which returns the 41690 saturated value of the argument. 41691 41692 -- Built-in Function: void __builtin_rx_setpsw (int) 41693 Generates the `setpsw' machine instruction to set the specified 41694 bit in the processor status word. 41695 41696 -- Built-in Function: void __builtin_rx_wait (void) 41697 Generates the `wait' machine instruction. 41698 41699 41700 File: gcc.info, Node: S/390 System z Built-in Functions, Next: SH Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins 41701 41702 6.56.18 S/390 System z Built-in Functions 41703 ----------------------------------------- 41704 41705 -- Built-in Function: int __builtin_tbegin (void*) 41706 Generates the `tbegin' machine instruction starting a 41707 non-constraint hardware transaction. If the parameter is non-NULL 41708 the memory area is used to store the transaction diagnostic buffer 41709 and will be passed as first operand to `tbegin'. This buffer can 41710 be defined using the `struct __htm_tdb' C struct defined in 41711 `htmintrin.h' and must reside on a double-word boundary. The 41712 second tbegin operand is set to `0xff0c'. This enables 41713 save/restore of all GPRs and disables aborts for FPR and AR 41714 manipulations inside the transaction body. The condition code set 41715 by the tbegin instruction is returned as integer value. The tbegin 41716 instruction by definition overwrites the content of all FPRs. The 41717 compiler will generate code which saves and restores the FPRs. For 41718 soft-float code it is recommended to used the `*_nofloat' variant. 41719 In order to prevent a TDB from being written it is required to 41720 pass an constant zero value as parameter. Passing the zero value 41721 through a variable is not sufficient. Although modifications of 41722 access registers inside the transaction will not trigger an 41723 transaction abort it is not supported to actually modify them. 41724 Access registers do not get saved when entering a transaction. 41725 They will have undefined state when reaching the abort code. 41726 41727 Macros for the possible return codes of tbegin are defined in the 41728 `htmintrin.h' header file: 41729 41730 `_HTM_TBEGIN_STARTED' 41731 `tbegin' has been executed as part of normal processing. The 41732 transaction body is supposed to be executed. 41733 41734 `_HTM_TBEGIN_INDETERMINATE' 41735 The transaction was aborted due to an indeterminate condition which 41736 might be persistent. 41737 41738 `_HTM_TBEGIN_TRANSIENT' 41739 The transaction aborted due to a transient failure. The 41740 transaction should be re-executed in that case. 41741 41742 `_HTM_TBEGIN_PERSISTENT' 41743 The transaction aborted due to a persistent failure. Re-execution 41744 under same circumstances will not be productive. 41745 41746 -- Macro: _HTM_FIRST_USER_ABORT_CODE 41747 The `_HTM_FIRST_USER_ABORT_CODE' defined in `htmintrin.h' 41748 specifies the first abort code which can be used for 41749 `__builtin_tabort'. Values below this threshold are reserved for 41750 machine use. 41751 41752 -- Data type: struct __htm_tdb 41753 The `struct __htm_tdb' defined in `htmintrin.h' describes the 41754 structure of the transaction diagnostic block as specified in the 41755 Principles of Operation manual chapter 5-91. 41756 41757 -- Built-in Function: int __builtin_tbegin_nofloat (void*) 41758 Same as `__builtin_tbegin' but without FPR saves and restores. 41759 Using this variant in code making use of FPRs will leave the FPRs 41760 in undefined state when entering the transaction abort handler 41761 code. 41762 41763 -- Built-in Function: int __builtin_tbegin_retry (void*, int) 41764 In addition to `__builtin_tbegin' a loop for transient failures is 41765 generated. If tbegin returns a condition code of 2 the transaction 41766 will be retried as often as specified in the second argument. The 41767 perform processor assist instruction is used to tell the CPU about 41768 the number of fails so far. 41769 41770 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int) 41771 Same as `__builtin_tbegin_retry' but without FPR saves and 41772 restores. Using this variant in code making use of FPRs will leave 41773 the FPRs in undefined state when entering the transaction abort 41774 handler code. 41775 41776 -- Built-in Function: void __builtin_tbeginc (void) 41777 Generates the `tbeginc' machine instruction starting a constraint 41778 hardware transaction. The second operand is set to `0xff08'. 41779 41780 -- Built-in Function: int __builtin_tend (void) 41781 Generates the `tend' machine instruction finishing a transaction 41782 and making the changes visible to other threads. The condition 41783 code generated by tend is returned as integer value. 41784 41785 -- Built-in Function: void __builtin_tabort (int) 41786 Generates the `tabort' machine instruction with the specified 41787 abort code. Abort codes from 0 through 255 are reserved and will 41788 result in an error message. 41789 41790 -- Built-in Function: void __builtin_tx_assist (int) 41791 Generates the `ppa rX,rY,1' machine instruction. Where the 41792 integer parameter is loaded into rX and a value of zero is loaded 41793 into rY. The integer parameter specifies the number of times the 41794 transaction repeatedly aborted. 41795 41796 -- Built-in Function: int __builtin_tx_nesting_depth (void) 41797 Generates the `etnd' machine instruction. The current nesting 41798 depth is returned as integer value. For a nesting depth of 0 the 41799 code is not executed as part of an transaction. 41800 41801 -- Built-in Function: void __builtin_non_tx_store (uint64_t *, 41802 uint64_t) 41803 Generates the `ntstg' machine instruction. The second argument is 41804 written to the first arguments location. The store operation will 41805 not be rolled-back in case of an transaction abort. 41806 41807 41808 File: gcc.info, Node: SH Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: S/390 System z Built-in Functions, Up: Target Builtins 41809 41810 6.56.19 SH Built-in Functions 41811 ----------------------------- 41812 41813 The following built-in functions are supported on the SH1, SH2, SH3 and 41814 SH4 families of processors: 41815 41816 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR) 41817 Sets the `GBR' register to the specified value PTR. This is 41818 usually used by system code that manages threads and execution 41819 contexts. The compiler normally does not generate code that 41820 modifies the contents of `GBR' and thus the value is preserved 41821 across function calls. Changing the `GBR' value in user code must 41822 be done with caution, since the compiler might use `GBR' in order 41823 to access thread local variables. 41824 41825 41826 -- Built-in Function: void * __builtin_thread_pointer (void) 41827 Returns the value that is currently set in the `GBR' register. 41828 Memory loads and stores that use the thread pointer as a base 41829 address are turned into `GBR' based displacement loads and stores, 41830 if possible. For example: 41831 struct my_tcb 41832 { 41833 int a, b, c, d, e; 41834 }; 41835 41836 int get_tcb_value (void) 41837 { 41838 // Generate `mov.l @(8,gbr),r0' instruction 41839 return ((my_tcb*)__builtin_thread_pointer ())->c; 41840 } 41841 41842 41843 File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: SH Built-in Functions, Up: Target Builtins 41844 41845 6.56.20 SPARC VIS Built-in Functions 41846 ------------------------------------ 41847 41848 GCC supports SIMD operations on the SPARC using both the generic vector 41849 extensions (*note Vector Extensions::) as well as built-in functions for 41850 the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 41851 switch, the VIS extension is exposed as the following built-in 41852 functions: 41853 41854 typedef int v1si __attribute__ ((vector_size (4))); 41855 typedef int v2si __attribute__ ((vector_size (8))); 41856 typedef short v4hi __attribute__ ((vector_size (8))); 41857 typedef short v2hi __attribute__ ((vector_size (4))); 41858 typedef unsigned char v8qi __attribute__ ((vector_size (8))); 41859 typedef unsigned char v4qi __attribute__ ((vector_size (4))); 41860 41861 void __builtin_vis_write_gsr (int64_t); 41862 int64_t __builtin_vis_read_gsr (void); 41863 41864 void * __builtin_vis_alignaddr (void *, long); 41865 void * __builtin_vis_alignaddrl (void *, long); 41866 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 41867 v2si __builtin_vis_faligndatav2si (v2si, v2si); 41868 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 41869 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 41870 41871 v4hi __builtin_vis_fexpand (v4qi); 41872 41873 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 41874 v4hi __builtin_vis_fmul8x16au (v4qi, v2hi); 41875 v4hi __builtin_vis_fmul8x16al (v4qi, v2hi); 41876 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 41877 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 41878 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 41879 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 41880 41881 v4qi __builtin_vis_fpack16 (v4hi); 41882 v8qi __builtin_vis_fpack32 (v2si, v8qi); 41883 v2hi __builtin_vis_fpackfix (v2si); 41884 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 41885 41886 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 41887 41888 long __builtin_vis_edge8 (void *, void *); 41889 long __builtin_vis_edge8l (void *, void *); 41890 long __builtin_vis_edge16 (void *, void *); 41891 long __builtin_vis_edge16l (void *, void *); 41892 long __builtin_vis_edge32 (void *, void *); 41893 long __builtin_vis_edge32l (void *, void *); 41894 41895 long __builtin_vis_fcmple16 (v4hi, v4hi); 41896 long __builtin_vis_fcmple32 (v2si, v2si); 41897 long __builtin_vis_fcmpne16 (v4hi, v4hi); 41898 long __builtin_vis_fcmpne32 (v2si, v2si); 41899 long __builtin_vis_fcmpgt16 (v4hi, v4hi); 41900 long __builtin_vis_fcmpgt32 (v2si, v2si); 41901 long __builtin_vis_fcmpeq16 (v4hi, v4hi); 41902 long __builtin_vis_fcmpeq32 (v2si, v2si); 41903 41904 v4hi __builtin_vis_fpadd16 (v4hi, v4hi); 41905 v2hi __builtin_vis_fpadd16s (v2hi, v2hi); 41906 v2si __builtin_vis_fpadd32 (v2si, v2si); 41907 v1si __builtin_vis_fpadd32s (v1si, v1si); 41908 v4hi __builtin_vis_fpsub16 (v4hi, v4hi); 41909 v2hi __builtin_vis_fpsub16s (v2hi, v2hi); 41910 v2si __builtin_vis_fpsub32 (v2si, v2si); 41911 v1si __builtin_vis_fpsub32s (v1si, v1si); 41912 41913 long __builtin_vis_array8 (long, long); 41914 long __builtin_vis_array16 (long, long); 41915 long __builtin_vis_array32 (long, long); 41916 41917 When you use the `-mvis2' switch, the VIS version 2.0 built-in 41918 functions also become available: 41919 41920 long __builtin_vis_bmask (long, long); 41921 int64_t __builtin_vis_bshuffledi (int64_t, int64_t); 41922 v2si __builtin_vis_bshufflev2si (v2si, v2si); 41923 v4hi __builtin_vis_bshufflev2si (v4hi, v4hi); 41924 v8qi __builtin_vis_bshufflev2si (v8qi, v8qi); 41925 41926 long __builtin_vis_edge8n (void *, void *); 41927 long __builtin_vis_edge8ln (void *, void *); 41928 long __builtin_vis_edge16n (void *, void *); 41929 long __builtin_vis_edge16ln (void *, void *); 41930 long __builtin_vis_edge32n (void *, void *); 41931 long __builtin_vis_edge32ln (void *, void *); 41932 41933 When you use the `-mvis3' switch, the VIS version 3.0 built-in 41934 functions also become available: 41935 41936 void __builtin_vis_cmask8 (long); 41937 void __builtin_vis_cmask16 (long); 41938 void __builtin_vis_cmask32 (long); 41939 41940 v4hi __builtin_vis_fchksm16 (v4hi, v4hi); 41941 41942 v4hi __builtin_vis_fsll16 (v4hi, v4hi); 41943 v4hi __builtin_vis_fslas16 (v4hi, v4hi); 41944 v4hi __builtin_vis_fsrl16 (v4hi, v4hi); 41945 v4hi __builtin_vis_fsra16 (v4hi, v4hi); 41946 v2si __builtin_vis_fsll16 (v2si, v2si); 41947 v2si __builtin_vis_fslas16 (v2si, v2si); 41948 v2si __builtin_vis_fsrl16 (v2si, v2si); 41949 v2si __builtin_vis_fsra16 (v2si, v2si); 41950 41951 long __builtin_vis_pdistn (v8qi, v8qi); 41952 41953 v4hi __builtin_vis_fmean16 (v4hi, v4hi); 41954 41955 int64_t __builtin_vis_fpadd64 (int64_t, int64_t); 41956 int64_t __builtin_vis_fpsub64 (int64_t, int64_t); 41957 41958 v4hi __builtin_vis_fpadds16 (v4hi, v4hi); 41959 v2hi __builtin_vis_fpadds16s (v2hi, v2hi); 41960 v4hi __builtin_vis_fpsubs16 (v4hi, v4hi); 41961 v2hi __builtin_vis_fpsubs16s (v2hi, v2hi); 41962 v2si __builtin_vis_fpadds32 (v2si, v2si); 41963 v1si __builtin_vis_fpadds32s (v1si, v1si); 41964 v2si __builtin_vis_fpsubs32 (v2si, v2si); 41965 v1si __builtin_vis_fpsubs32s (v1si, v1si); 41966 41967 long __builtin_vis_fucmple8 (v8qi, v8qi); 41968 long __builtin_vis_fucmpne8 (v8qi, v8qi); 41969 long __builtin_vis_fucmpgt8 (v8qi, v8qi); 41970 long __builtin_vis_fucmpeq8 (v8qi, v8qi); 41971 41972 float __builtin_vis_fhadds (float, float); 41973 double __builtin_vis_fhaddd (double, double); 41974 float __builtin_vis_fhsubs (float, float); 41975 double __builtin_vis_fhsubd (double, double); 41976 float __builtin_vis_fnhadds (float, float); 41977 double __builtin_vis_fnhaddd (double, double); 41978 41979 int64_t __builtin_vis_umulxhi (int64_t, int64_t); 41980 int64_t __builtin_vis_xmulx (int64_t, int64_t); 41981 int64_t __builtin_vis_xmulxhi (int64_t, int64_t); 41982 41983 41984 File: gcc.info, Node: SPU Built-in Functions, Next: TI C6X Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 41985 41986 6.56.21 SPU Built-in Functions 41987 ------------------------------ 41988 41989 GCC provides extensions for the SPU processor as described in the 41990 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 41991 found at `http://cell.scei.co.jp/' or 41992 `http://www.ibm.com/developerworks/power/cell/'. GCC's implementation 41993 differs in several ways. 41994 41995 * The optional extension of specifying vector constants in 41996 parentheses is not supported. 41997 41998 * A vector initializer requires no cast if the vector constant is of 41999 the same type as the variable it is initializing. 42000 42001 * If `signed' or `unsigned' is omitted, the signedness of the vector 42002 type is the default signedness of the base type. The default 42003 varies depending on the operating system, so a portable program 42004 should always specify the signedness. 42005 42006 * By default, the keyword `__vector' is added. The macro `vector' is 42007 defined in `<spu_intrinsics.h>' and can be undefined. 42008 42009 * GCC allows using a `typedef' name as the type specifier for a 42010 vector type. 42011 42012 * For C, overloaded functions are implemented with macros so the 42013 following does not work: 42014 42015 spu_add ((vector signed int){1, 2, 3, 4}, foo); 42016 42017 Since `spu_add' is a macro, the vector constant in the example is 42018 treated as four separate arguments. Wrap the entire argument in 42019 parentheses for this to work. 42020 42021 * The extended version of `__builtin_expect' is not supported. 42022 42023 42024 _Note:_ Only the interface described in the aforementioned 42025 specification is supported. Internally, GCC uses built-in functions to 42026 implement the required functionality, but these are not supported and 42027 are subject to change without notice. 42028 42029 42030 File: gcc.info, Node: TI C6X Built-in Functions, Next: TILE-Gx Built-in Functions, Prev: SPU Built-in Functions, Up: Target Builtins 42031 42032 6.56.22 TI C6X Built-in Functions 42033 --------------------------------- 42034 42035 GCC provides intrinsics to access certain instructions of the TI C6X 42036 processors. These intrinsics, listed below, are available after 42037 inclusion of the `c6x_intrinsics.h' header file. They map directly to 42038 C6X instructions. 42039 42040 42041 int _sadd (int, int) 42042 int _ssub (int, int) 42043 int _sadd2 (int, int) 42044 int _ssub2 (int, int) 42045 long long _mpy2 (int, int) 42046 long long _smpy2 (int, int) 42047 int _add4 (int, int) 42048 int _sub4 (int, int) 42049 int _saddu4 (int, int) 42050 42051 int _smpy (int, int) 42052 int _smpyh (int, int) 42053 int _smpyhl (int, int) 42054 int _smpylh (int, int) 42055 42056 int _sshl (int, int) 42057 int _subc (int, int) 42058 42059 int _avg2 (int, int) 42060 int _avgu4 (int, int) 42061 42062 int _clrr (int, int) 42063 int _extr (int, int) 42064 int _extru (int, int) 42065 int _abs (int) 42066 int _abs2 (int) 42067 42068 42069 File: gcc.info, Node: TILE-Gx Built-in Functions, Next: TILEPro Built-in Functions, Prev: TI C6X Built-in Functions, Up: Target Builtins 42070 42071 6.56.23 TILE-Gx Built-in Functions 42072 ---------------------------------- 42073 42074 GCC provides intrinsics to access every instruction of the TILE-Gx 42075 processor. The intrinsics are of the form: 42076 42077 42078 unsigned long long __insn_OP (...) 42079 42080 Where OP is the name of the instruction. Refer to the ISA manual for 42081 the complete list of instructions. 42082 42083 GCC also provides intrinsics to directly access the network registers. 42084 The intrinsics are: 42085 42086 42087 unsigned long long __tile_idn0_receive (void) 42088 unsigned long long __tile_idn1_receive (void) 42089 unsigned long long __tile_udn0_receive (void) 42090 unsigned long long __tile_udn1_receive (void) 42091 unsigned long long __tile_udn2_receive (void) 42092 unsigned long long __tile_udn3_receive (void) 42093 void __tile_idn_send (unsigned long long) 42094 void __tile_udn_send (unsigned long long) 42095 42096 The intrinsic `void __tile_network_barrier (void)' is used to 42097 guarantee that no network operations before it are reordered with those 42098 after it. 42099 42100 42101 File: gcc.info, Node: TILEPro Built-in Functions, Prev: TILE-Gx Built-in Functions, Up: Target Builtins 42102 42103 6.56.24 TILEPro Built-in Functions 42104 ---------------------------------- 42105 42106 GCC provides intrinsics to access every instruction of the TILEPro 42107 processor. The intrinsics are of the form: 42108 42109 42110 unsigned __insn_OP (...) 42111 42112 where OP is the name of the instruction. Refer to the ISA manual for 42113 the complete list of instructions. 42114 42115 GCC also provides intrinsics to directly access the network registers. 42116 The intrinsics are: 42117 42118 42119 unsigned __tile_idn0_receive (void) 42120 unsigned __tile_idn1_receive (void) 42121 unsigned __tile_sn_receive (void) 42122 unsigned __tile_udn0_receive (void) 42123 unsigned __tile_udn1_receive (void) 42124 unsigned __tile_udn2_receive (void) 42125 unsigned __tile_udn3_receive (void) 42126 void __tile_idn_send (unsigned) 42127 void __tile_sn_send (unsigned) 42128 void __tile_udn_send (unsigned) 42129 42130 The intrinsic `void __tile_network_barrier (void)' is used to 42131 guarantee that no network operations before it are reordered with those 42132 after it. 42133 42134 42135 File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 42136 42137 6.57 Format Checks Specific to Particular Target Machines 42138 ========================================================= 42139 42140 For some target machines, GCC supports additional options to the format 42141 attribute (*note Declaring Attributes of Functions: Function 42142 Attributes.). 42143 42144 * Menu: 42145 42146 * Solaris Format Checks:: 42147 * Darwin Format Checks:: 42148 42149 42150 File: gcc.info, Node: Solaris Format Checks, Next: Darwin Format Checks, Up: Target Format Checks 42151 42152 6.57.1 Solaris Format Checks 42153 ---------------------------- 42154 42155 Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 42156 `cmn_err' accepts a subset of the standard `printf' conversions, and 42157 the two-argument `%b' conversion for displaying bit-fields. See the 42158 Solaris man page for `cmn_err' for more information. 42159 42160 42161 File: gcc.info, Node: Darwin Format Checks, Prev: Solaris Format Checks, Up: Target Format Checks 42162 42163 6.57.2 Darwin Format Checks 42164 --------------------------- 42165 42166 Darwin targets support the `CFString' (or `__CFString__') in the format 42167 attribute context. Declarations made with such attribution are parsed 42168 for correct syntax and format argument types. However, parsing of the 42169 format string itself is currently undefined and is not carried out by 42170 this version of the compiler. 42171 42172 Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers) 42173 may also be used as format arguments. Note that the relevant headers 42174 are only likely to be available on Darwin (OSX) installations. On such 42175 installations, the XCode and system documentation provide descriptions 42176 of `CFString', `CFStringRefs' and associated functions. 42177 42178 42179 File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 42180 42181 6.58 Pragmas Accepted by GCC 42182 ============================ 42183 42184 GCC supports several types of pragmas, primarily in order to compile 42185 code originally written for other compilers. Note that in general we 42186 do not recommend the use of pragmas; *Note Function Attributes::, for 42187 further explanation. 42188 42189 * Menu: 42190 42191 * ARM Pragmas:: 42192 * M32C Pragmas:: 42193 * MeP Pragmas:: 42194 * RS/6000 and PowerPC Pragmas:: 42195 * Darwin Pragmas:: 42196 * Solaris Pragmas:: 42197 * Symbol-Renaming Pragmas:: 42198 * Structure-Packing Pragmas:: 42199 * Weak Pragmas:: 42200 * Diagnostic Pragmas:: 42201 * Visibility Pragmas:: 42202 * Push/Pop Macro Pragmas:: 42203 * Function Specific Option Pragmas:: 42204 42205 42206 File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 42207 42208 6.58.1 ARM Pragmas 42209 ------------------ 42210 42211 The ARM target defines pragmas for controlling the default addition of 42212 `long_call' and `short_call' attributes to functions. *Note Function 42213 Attributes::, for information about the effects of these attributes. 42214 42215 `long_calls' 42216 Set all subsequent functions to have the `long_call' attribute. 42217 42218 `no_long_calls' 42219 Set all subsequent functions to have the `short_call' attribute. 42220 42221 `long_calls_off' 42222 Do not affect the `long_call' or `short_call' attributes of 42223 subsequent functions. 42224 42225 42226 File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas 42227 42228 6.58.2 M32C Pragmas 42229 ------------------- 42230 42231 `GCC memregs NUMBER' 42232 Overrides the command-line option `-memregs=' for the current 42233 file. Use with care! This pragma must be before any function in 42234 the file, and mixing different memregs values in different objects 42235 may make them incompatible. This pragma is useful when a 42236 performance-critical function uses a memreg for temporary values, 42237 as it may allow you to reduce the number of memregs used. 42238 42239 `ADDRESS NAME ADDRESS' 42240 For any declared symbols matching NAME, this does three things to 42241 that symbol: it forces the symbol to be located at the given 42242 address (a number), it forces the symbol to be volatile, and it 42243 changes the symbol's scope to be static. This pragma exists for 42244 compatibility with other compilers, but note that the common 42245 `1234H' numeric syntax is not supported (use `0x1234' instead). 42246 Example: 42247 42248 #pragma ADDRESS port3 0x103 42249 char port3; 42250 42251 42252 42253 File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas 42254 42255 6.58.3 MeP Pragmas 42256 ------------------ 42257 42258 `custom io_volatile (on|off)' 42259 Overrides the command-line option `-mio-volatile' for the current 42260 file. Note that for compatibility with future GCC releases, this 42261 option should only be used once before any `io' variables in each 42262 file. 42263 42264 `GCC coprocessor available REGISTERS' 42265 Specifies which coprocessor registers are available to the register 42266 allocator. REGISTERS may be a single register, register range 42267 separated by ellipses, or comma-separated list of those. Example: 42268 42269 #pragma GCC coprocessor available $c0...$c10, $c28 42270 42271 `GCC coprocessor call_saved REGISTERS' 42272 Specifies which coprocessor registers are to be saved and restored 42273 by any function using them. REGISTERS may be a single register, 42274 register range separated by ellipses, or comma-separated list of 42275 those. Example: 42276 42277 #pragma GCC coprocessor call_saved $c4...$c6, $c31 42278 42279 `GCC coprocessor subclass '(A|B|C|D)' = REGISTERS' 42280 Creates and defines a register class. These register classes can 42281 be used by inline `asm' constructs. REGISTERS may be a single 42282 register, register range separated by ellipses, or comma-separated 42283 list of those. Example: 42284 42285 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6 42286 42287 asm ("cpfoo %0" : "=B" (x)); 42288 42289 `GCC disinterrupt NAME , NAME ...' 42290 For the named functions, the compiler adds code to disable 42291 interrupts for the duration of those functions. If any functions 42292 so named are not encountered in the source, a warning is emitted 42293 that the pragma is not used. Examples: 42294 42295 #pragma disinterrupt foo 42296 #pragma disinterrupt bar, grill 42297 int foo () { ... } 42298 42299 `GCC call NAME , NAME ...' 42300 For the named functions, the compiler always uses a 42301 register-indirect call model when calling the named functions. 42302 Examples: 42303 42304 extern int foo (); 42305 #pragma call foo 42306 42307 42308 42309 File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas 42310 42311 6.58.4 RS/6000 and PowerPC Pragmas 42312 ---------------------------------- 42313 42314 The RS/6000 and PowerPC targets define one pragma for controlling 42315 whether or not the `longcall' attribute is added to function 42316 declarations by default. This pragma overrides the `-mlongcall' 42317 option, but not the `longcall' and `shortcall' attributes. *Note 42318 RS/6000 and PowerPC Options::, for more information about when long 42319 calls are and are not necessary. 42320 42321 `longcall (1)' 42322 Apply the `longcall' attribute to all subsequent function 42323 declarations. 42324 42325 `longcall (0)' 42326 Do not apply the `longcall' attribute to subsequent function 42327 declarations. 42328 42329 42330 File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 42331 42332 6.58.5 Darwin Pragmas 42333 --------------------- 42334 42335 The following pragmas are available for all architectures running the 42336 Darwin operating system. These are useful for compatibility with other 42337 Mac OS compilers. 42338 42339 `mark TOKENS...' 42340 This pragma is accepted, but has no effect. 42341 42342 `options align=ALIGNMENT' 42343 This pragma sets the alignment of fields in structures. The 42344 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 42345 `power', to emulate PowerPC alignment. Uses of this pragma nest 42346 properly; to restore the previous setting, use `reset' for the 42347 ALIGNMENT. 42348 42349 `segment TOKENS...' 42350 This pragma is accepted, but has no effect. 42351 42352 `unused (VAR [, VAR]...)' 42353 This pragma declares variables to be possibly unused. GCC does not 42354 produce warnings for the listed variables. The effect is similar 42355 to that of the `unused' attribute, except that this pragma may 42356 appear anywhere within the variables' scopes. 42357 42358 42359 File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 42360 42361 6.58.6 Solaris Pragmas 42362 ---------------------- 42363 42364 The Solaris target supports `#pragma redefine_extname' (*note 42365 Symbol-Renaming Pragmas::). It also supports additional `#pragma' 42366 directives for compatibility with the system compiler. 42367 42368 `align ALIGNMENT (VARIABLE [, VARIABLE]...)' 42369 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 42370 This is the same as GCC's `aligned' attribute *note Variable 42371 Attributes::). Macro expansion occurs on the arguments to this 42372 pragma when compiling C and Objective-C. It does not currently 42373 occur when compiling C++, but this is a bug which may be fixed in 42374 a future release. 42375 42376 `fini (FUNCTION [, FUNCTION]...)' 42377 This pragma causes each listed FUNCTION to be called after main, 42378 or during shared module unloading, by adding a call to the `.fini' 42379 section. 42380 42381 `init (FUNCTION [, FUNCTION]...)' 42382 This pragma causes each listed FUNCTION to be called during 42383 initialization (before `main') or during shared module loading, by 42384 adding a call to the `.init' section. 42385 42386 42387 42388 File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 42389 42390 6.58.7 Symbol-Renaming Pragmas 42391 ------------------------------ 42392 42393 For compatibility with the Solaris system headers, GCC supports two 42394 `#pragma' directives that change the name used in assembly for a given 42395 declaration. To get this effect on all platforms supported by GCC, use 42396 the asm labels extension (*note Asm Labels::). 42397 42398 `redefine_extname OLDNAME NEWNAME' 42399 This pragma gives the C function OLDNAME the assembly symbol 42400 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' is 42401 defined if this pragma is available (currently on all platforms). 42402 42403 This pragma and the asm labels extension interact in a complicated 42404 manner. Here are some corner cases you may want to be aware of. 42405 42406 1. Both pragmas silently apply only to declarations with external 42407 linkage. Asm labels do not have this restriction. 42408 42409 2. In C++, both pragmas silently apply only to declarations with "C" 42410 linkage. Again, asm labels do not have this restriction. 42411 42412 3. If any of the three ways of changing the assembly name of a 42413 declaration is applied to a declaration whose assembly name has 42414 already been determined (either by a previous use of one of these 42415 features, or because the compiler needed the assembly name in 42416 order to generate code), and the new name is different, a warning 42417 issues and the name does not change. 42418 42419 4. The OLDNAME used by `#pragma redefine_extname' is always the 42420 C-language name. 42421 42422 42423 File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 42424 42425 6.58.8 Structure-Packing Pragmas 42426 -------------------------------- 42427 42428 For compatibility with Microsoft Windows compilers, GCC supports a set 42429 of `#pragma' directives that change the maximum alignment of members of 42430 structures (other than zero-width bit-fields), unions, and classes 42431 subsequently defined. The N value below always is required to be a 42432 small power of two and specifies the new alignment in bytes. 42433 42434 1. `#pragma pack(N)' simply sets the new alignment. 42435 42436 2. `#pragma pack()' sets the alignment to the one that was in effect 42437 when compilation started (see also command-line option 42438 `-fpack-struct[=N]' *note Code Gen Options::). 42439 42440 3. `#pragma pack(push[,N])' pushes the current alignment setting on 42441 an internal stack and then optionally sets the new alignment. 42442 42443 4. `#pragma pack(pop)' restores the alignment setting to the one 42444 saved at the top of the internal stack (and removes that stack 42445 entry). Note that `#pragma pack([N])' does not influence this 42446 internal stack; thus it is possible to have `#pragma pack(push)' 42447 followed by multiple `#pragma pack(N)' instances and finalized by 42448 a single `#pragma pack(pop)'. 42449 42450 Some targets, e.g. i386 and PowerPC, support the `ms_struct' `#pragma' 42451 which lays out a structure as the documented `__attribute__ 42452 ((ms_struct))'. 42453 1. `#pragma ms_struct on' turns on the layout for structures declared. 42454 42455 2. `#pragma ms_struct off' turns off the layout for structures 42456 declared. 42457 42458 3. `#pragma ms_struct reset' goes back to the default layout. 42459 42460 42461 File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 42462 42463 6.58.9 Weak Pragmas 42464 ------------------- 42465 42466 For compatibility with SVR4, GCC supports a set of `#pragma' directives 42467 for declaring symbols to be weak, and defining weak aliases. 42468 42469 `#pragma weak SYMBOL' 42470 This pragma declares SYMBOL to be weak, as if the declaration had 42471 the attribute of the same name. The pragma may appear before or 42472 after the declaration of SYMBOL. It is not an error for SYMBOL to 42473 never be defined at all. 42474 42475 `#pragma weak SYMBOL1 = SYMBOL2' 42476 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 42477 an error if SYMBOL2 is not defined in the current translation unit. 42478 42479 42480 File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 42481 42482 6.58.10 Diagnostic Pragmas 42483 -------------------------- 42484 42485 GCC allows the user to selectively enable or disable certain types of 42486 diagnostics, and change the kind of the diagnostic. For example, a 42487 project's policy might require that all sources compile with `-Werror' 42488 but certain files might have exceptions allowing specific types of 42489 warnings. Or, a project might selectively enable diagnostics and treat 42490 them as errors depending on which preprocessor macros are defined. 42491 42492 `#pragma GCC diagnostic KIND OPTION' 42493 Modifies the disposition of a diagnostic. Note that not all 42494 diagnostics are modifiable; at the moment only warnings (normally 42495 controlled by `-W...') can be controlled, and not all of them. 42496 Use `-fdiagnostics-show-option' to determine which diagnostics are 42497 controllable and which option controls them. 42498 42499 KIND is `error' to treat this diagnostic as an error, `warning' to 42500 treat it like a warning (even if `-Werror' is in effect), or 42501 `ignored' if the diagnostic is to be ignored. OPTION is a double 42502 quoted string that matches the command-line option. 42503 42504 #pragma GCC diagnostic warning "-Wformat" 42505 #pragma GCC diagnostic error "-Wformat" 42506 #pragma GCC diagnostic ignored "-Wformat" 42507 42508 Note that these pragmas override any command-line options. GCC 42509 keeps track of the location of each pragma, and issues diagnostics 42510 according to the state as of that point in the source file. Thus, 42511 pragmas occurring after a line do not affect diagnostics caused by 42512 that line. 42513 42514 `#pragma GCC diagnostic push' 42515 `#pragma GCC diagnostic pop' 42516 Causes GCC to remember the state of the diagnostics as of each 42517 `push', and restore to that point at each `pop'. If a `pop' has 42518 no matching `push', the command-line options are restored. 42519 42520 #pragma GCC diagnostic error "-Wuninitialized" 42521 foo(a); /* error is given for this one */ 42522 #pragma GCC diagnostic push 42523 #pragma GCC diagnostic ignored "-Wuninitialized" 42524 foo(b); /* no diagnostic for this one */ 42525 #pragma GCC diagnostic pop 42526 foo(c); /* error is given for this one */ 42527 #pragma GCC diagnostic pop 42528 foo(d); /* depends on command-line options */ 42529 42530 42531 GCC also offers a simple mechanism for printing messages during 42532 compilation. 42533 42534 `#pragma message STRING' 42535 Prints STRING as a compiler message on compilation. The message 42536 is informational only, and is neither a compilation warning nor an 42537 error. 42538 42539 #pragma message "Compiling " __FILE__ "..." 42540 42541 STRING may be parenthesized, and is printed with location 42542 information. For example, 42543 42544 #define DO_PRAGMA(x) _Pragma (#x) 42545 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 42546 42547 TODO(Remember to fix this) 42548 42549 prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to 42550 fix this'. 42551 42552 42553 42554 File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 42555 42556 6.58.11 Visibility Pragmas 42557 -------------------------- 42558 42559 `#pragma GCC visibility push(VISIBILITY)' 42560 `#pragma GCC visibility pop' 42561 This pragma allows the user to set the visibility for multiple 42562 declarations without having to give each a visibility attribute 42563 *Note Function Attributes::, for more information about visibility 42564 and the attribute syntax. 42565 42566 In C++, `#pragma GCC visibility' affects only namespace-scope 42567 declarations. Class members and template specializations are not 42568 affected; if you want to override the visibility for a particular 42569 member or instantiation, you must use an attribute. 42570 42571 42572 42573 File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 42574 42575 6.58.12 Push/Pop Macro Pragmas 42576 ------------------------------ 42577 42578 For compatibility with Microsoft Windows compilers, GCC supports 42579 `#pragma push_macro("MACRO_NAME")' and `#pragma 42580 pop_macro("MACRO_NAME")'. 42581 42582 `#pragma push_macro("MACRO_NAME")' 42583 This pragma saves the value of the macro named as MACRO_NAME to 42584 the top of the stack for this macro. 42585 42586 `#pragma pop_macro("MACRO_NAME")' 42587 This pragma sets the value of the macro named as MACRO_NAME to the 42588 value on top of the stack for this macro. If the stack for 42589 MACRO_NAME is empty, the value of the macro remains unchanged. 42590 42591 For example: 42592 42593 #define X 1 42594 #pragma push_macro("X") 42595 #undef X 42596 #define X -1 42597 #pragma pop_macro("X") 42598 int x [X]; 42599 42600 In this example, the definition of X as 1 is saved by `#pragma 42601 push_macro' and restored by `#pragma pop_macro'. 42602 42603 42604 File: gcc.info, Node: Function Specific Option Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 42605 42606 6.58.13 Function Specific Option Pragmas 42607 ---------------------------------------- 42608 42609 `#pragma GCC target ("STRING"...)' 42610 This pragma allows you to set target specific options for functions 42611 defined later in the source file. One or more strings can be 42612 specified. Each function that is defined after this point is as 42613 if `attribute((target("STRING")))' was specified for that 42614 function. The parenthesis around the options is optional. *Note 42615 Function Attributes::, for more information about the `target' 42616 attribute and the attribute syntax. 42617 42618 The `#pragma GCC target' attribute is not implemented in GCC 42619 versions earlier than 4.4 for the i386/x86_64 and 4.6 for the 42620 PowerPC back ends. At present, it is not implemented for other 42621 back ends. 42622 42623 `#pragma GCC optimize ("STRING"...)' 42624 This pragma allows you to set global optimization options for 42625 functions defined later in the source file. One or more strings 42626 can be specified. Each function that is defined after this point 42627 is as if `attribute((optimize("STRING")))' was specified for that 42628 function. The parenthesis around the options is optional. *Note 42629 Function Attributes::, for more information about the `optimize' 42630 attribute and the attribute syntax. 42631 42632 The `#pragma GCC optimize' pragma is not implemented in GCC 42633 versions earlier than 4.4. 42634 42635 `#pragma GCC push_options' 42636 `#pragma GCC pop_options' 42637 These pragmas maintain a stack of the current target and 42638 optimization options. It is intended for include files where you 42639 temporarily want to switch to using a different `#pragma GCC 42640 target' or `#pragma GCC optimize' and then to pop back to the 42641 previous options. 42642 42643 The `#pragma GCC push_options' and `#pragma GCC pop_options' 42644 pragmas are not implemented in GCC versions earlier than 4.4. 42645 42646 `#pragma GCC reset_options' 42647 This pragma clears the current `#pragma GCC target' and `#pragma 42648 GCC optimize' to use the default switches as specified on the 42649 command line. 42650 42651 The `#pragma GCC reset_options' pragma is not implemented in GCC 42652 versions earlier than 4.4. 42653 42654 42655 File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 42656 42657 6.59 Unnamed struct/union fields within structs/unions 42658 ====================================================== 42659 42660 As permitted by ISO C11 and for compatibility with other compilers, GCC 42661 allows you to define a structure or union that contains, as fields, 42662 structures and unions without names. For example: 42663 42664 struct { 42665 int a; 42666 union { 42667 int b; 42668 float c; 42669 }; 42670 int d; 42671 } foo; 42672 42673 In this example, you are able to access members of the unnamed union 42674 with code like `foo.b'. Note that only unnamed structs and unions are 42675 allowed, you may not have, for example, an unnamed `int'. 42676 42677 You must never create such structures that cause ambiguous field 42678 definitions. For example, in this structure: 42679 42680 struct { 42681 int a; 42682 struct { 42683 int a; 42684 }; 42685 } foo; 42686 42687 it is ambiguous which `a' is being referred to with `foo.a'. The 42688 compiler gives errors for such constructs. 42689 42690 Unless `-fms-extensions' is used, the unnamed field must be a 42691 structure or union definition without a tag (for example, `struct { int 42692 a; };'). If `-fms-extensions' is used, the field may also be a 42693 definition with a tag such as `struct foo { int a; };', a reference to 42694 a previously defined structure or union such as `struct foo;', or a 42695 reference to a `typedef' name for a previously defined structure or 42696 union type. 42697 42698 The option `-fplan9-extensions' enables `-fms-extensions' as well as 42699 two other extensions. First, a pointer to a structure is automatically 42700 converted to a pointer to an anonymous field for assignments and 42701 function calls. For example: 42702 42703 struct s1 { int a; }; 42704 struct s2 { struct s1; }; 42705 extern void f1 (struct s1 *); 42706 void f2 (struct s2 *p) { f1 (p); } 42707 42708 In the call to `f1' inside `f2', the pointer `p' is converted into a 42709 pointer to the anonymous field. 42710 42711 Second, when the type of an anonymous field is a `typedef' for a 42712 `struct' or `union', code may refer to the field using the name of the 42713 `typedef'. 42714 42715 typedef struct { int a; } s1; 42716 struct s2 { s1; }; 42717 s1 f1 (struct s2 *p) { return p->s1; } 42718 42719 These usages are only permitted when they are not ambiguous. 42720 42721 42722 File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 42723 42724 6.60 Thread-Local Storage 42725 ========================= 42726 42727 Thread-local storage (TLS) is a mechanism by which variables are 42728 allocated such that there is one instance of the variable per extant 42729 thread. The runtime model GCC uses to implement this originates in the 42730 IA-64 processor-specific ABI, but has since been migrated to other 42731 processors as well. It requires significant support from the linker 42732 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 42733 `libpthread.so'), so it is not available everywhere. 42734 42735 At the user level, the extension is visible with a new storage class 42736 keyword: `__thread'. For example: 42737 42738 __thread int i; 42739 extern __thread struct state s; 42740 static __thread char *p; 42741 42742 The `__thread' specifier may be used alone, with the `extern' or 42743 `static' specifiers, but with no other storage class specifier. When 42744 used with `extern' or `static', `__thread' must appear immediately 42745 after the other storage class specifier. 42746 42747 The `__thread' specifier may be applied to any global, file-scoped 42748 static, function-scoped static, or static data member of a class. It 42749 may not be applied to block-scoped automatic or non-static data member. 42750 42751 When the address-of operator is applied to a thread-local variable, it 42752 is evaluated at run time and returns the address of the current thread's 42753 instance of that variable. An address so obtained may be used by any 42754 thread. When a thread terminates, any pointers to thread-local 42755 variables in that thread become invalid. 42756 42757 No static initialization may refer to the address of a thread-local 42758 variable. 42759 42760 In C++, if an initializer is present for a thread-local variable, it 42761 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 42762 standard. 42763 42764 See ELF Handling For Thread-Local Storage 42765 (http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of 42766 the four thread-local storage addressing models, and how the runtime is 42767 expected to function. 42768 42769 * Menu: 42770 42771 * C99 Thread-Local Edits:: 42772 * C++98 Thread-Local Edits:: 42773 42774 42775 File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 42776 42777 6.60.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 42778 ------------------------------------------------------- 42779 42780 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 42781 document the exact semantics of the language extension. 42782 42783 * `5.1.2 Execution environments' 42784 42785 Add new text after paragraph 1 42786 42787 Within either execution environment, a "thread" is a flow of 42788 control within a program. It is implementation defined 42789 whether or not there may be more than one thread associated 42790 with a program. It is implementation defined how threads 42791 beyond the first are created, the name and type of the 42792 function called at thread startup, and how threads may be 42793 terminated. However, objects with thread storage duration 42794 shall be initialized before thread startup. 42795 42796 * `6.2.4 Storage durations of objects' 42797 42798 Add new text before paragraph 3 42799 42800 An object whose identifier is declared with the storage-class 42801 specifier `__thread' has "thread storage duration". Its 42802 lifetime is the entire execution of the thread, and its 42803 stored value is initialized only once, prior to thread 42804 startup. 42805 42806 * `6.4.1 Keywords' 42807 42808 Add `__thread'. 42809 42810 * `6.7.1 Storage-class specifiers' 42811 42812 Add `__thread' to the list of storage class specifiers in 42813 paragraph 1. 42814 42815 Change paragraph 2 to 42816 42817 With the exception of `__thread', at most one storage-class 42818 specifier may be given [...]. The `__thread' specifier may 42819 be used alone, or immediately following `extern' or `static'. 42820 42821 Add new text after paragraph 6 42822 42823 The declaration of an identifier for a variable that has 42824 block scope that specifies `__thread' shall also specify 42825 either `extern' or `static'. 42826 42827 The `__thread' specifier shall be used only with variables. 42828 42829 42830 File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 42831 42832 6.60.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 42833 -------------------------------------------------------- 42834 42835 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 42836 that document the exact semantics of the language extension. 42837 42838 * [intro.execution] 42839 42840 New text after paragraph 4 42841 42842 A "thread" is a flow of control within the abstract machine. 42843 It is implementation defined whether or not there may be more 42844 than one thread. 42845 42846 New text after paragraph 7 42847 42848 It is unspecified whether additional action must be taken to 42849 ensure when and whether side effects are visible to other 42850 threads. 42851 42852 * [lex.key] 42853 42854 Add `__thread'. 42855 42856 * [basic.start.main] 42857 42858 Add after paragraph 5 42859 42860 The thread that begins execution at the `main' function is 42861 called the "main thread". It is implementation defined how 42862 functions beginning threads other than the main thread are 42863 designated or typed. A function so designated, as well as 42864 the `main' function, is called a "thread startup function". 42865 It is implementation defined what happens if a thread startup 42866 function returns. It is implementation defined what happens 42867 to other threads when any thread calls `exit'. 42868 42869 * [basic.start.init] 42870 42871 Add after paragraph 4 42872 42873 The storage for an object of thread storage duration shall be 42874 statically initialized before the first statement of the 42875 thread startup function. An object of thread storage 42876 duration shall not require dynamic initialization. 42877 42878 * [basic.start.term] 42879 42880 Add after paragraph 3 42881 42882 The type of an object with thread storage duration shall not 42883 have a non-trivial destructor, nor shall it be an array type 42884 whose elements (directly or indirectly) have non-trivial 42885 destructors. 42886 42887 * [basic.stc] 42888 42889 Add "thread storage duration" to the list in paragraph 1. 42890 42891 Change paragraph 2 42892 42893 Thread, static, and automatic storage durations are 42894 associated with objects introduced by declarations [...]. 42895 42896 Add `__thread' to the list of specifiers in paragraph 3. 42897 42898 * [basic.stc.thread] 42899 42900 New section before [basic.stc.static] 42901 42902 The keyword `__thread' applied to a non-local object gives the 42903 object thread storage duration. 42904 42905 A local variable or class data member declared both `static' 42906 and `__thread' gives the variable or member thread storage 42907 duration. 42908 42909 * [basic.stc.static] 42910 42911 Change paragraph 1 42912 42913 All objects that have neither thread storage duration, dynamic 42914 storage duration nor are local [...]. 42915 42916 * [dcl.stc] 42917 42918 Add `__thread' to the list in paragraph 1. 42919 42920 Change paragraph 1 42921 42922 With the exception of `__thread', at most one 42923 STORAGE-CLASS-SPECIFIER shall appear in a given 42924 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 42925 alone, or immediately following the `extern' or `static' 42926 specifiers. [...] 42927 42928 Add after paragraph 5 42929 42930 The `__thread' specifier can be applied only to the names of 42931 objects and to anonymous unions. 42932 42933 * [class.mem] 42934 42935 Add after paragraph 6 42936 42937 Non-`static' members shall not be `__thread'. 42938 42939 42940 File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 42941 42942 6.61 Binary constants using the `0b' prefix 42943 =========================================== 42944 42945 Integer constants can be written as binary constants, consisting of a 42946 sequence of `0' and `1' digits, prefixed by `0b' or `0B'. This is 42947 particularly useful in environments that operate a lot on the bit level 42948 (like microcontrollers). 42949 42950 The following statements are identical: 42951 42952 i = 42; 42953 i = 0x2a; 42954 i = 052; 42955 i = 0b101010; 42956 42957 The type of these constants follows the same rules as for octal or 42958 hexadecimal integer constants, so suffixes like `L' or `UL' can be 42959 applied. 42960 42961 42962 File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 42963 42964 7 Extensions to the C++ Language 42965 ******************************** 42966 42967 The GNU compiler provides these extensions to the C++ language (and you 42968 can also use most of the C language extensions in your C++ programs). 42969 If you want to write code that checks whether these features are 42970 available, you can test for the GNU compiler the same way as for C 42971 programs: check for a predefined macro `__GNUC__'. You can also use 42972 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 42973 (cpp)Common Predefined Macros.). 42974 42975 * Menu: 42976 42977 * C++ Volatiles:: What constitutes an access to a volatile object. 42978 * Restricted Pointers:: C99 restricted pointers and references. 42979 * Vague Linkage:: Where G++ puts inlines, vtables and such. 42980 * C++ Interface:: You can use a single C++ header file for both 42981 declarations and definitions. 42982 * Template Instantiation:: Methods for ensuring that exactly one copy of 42983 each needed template instantiation is emitted. 42984 * Bound member functions:: You can extract a function pointer to the 42985 method denoted by a `->*' or `.*' expression. 42986 * C++ Attributes:: Variable, function, and type attributes for C++ only. 42987 * Function Multiversioning:: Declaring multiple function versions. 42988 * Namespace Association:: Strong using-directives for namespace association. 42989 * Type Traits:: Compiler support for type traits 42990 * Java Exceptions:: Tweaking exception handling to work with Java. 42991 * Deprecated Features:: Things will disappear from G++. 42992 * Backwards Compatibility:: Compatibilities with earlier definitions of C++. 42993 42994 42995 File: gcc.info, Node: C++ Volatiles, Next: Restricted Pointers, Up: C++ Extensions 42996 42997 7.1 When is a Volatile C++ Object Accessed? 42998 =========================================== 42999 43000 The C++ standard differs from the C standard in its treatment of 43001 volatile objects. It fails to specify what constitutes a volatile 43002 access, except to say that C++ should behave in a similar manner to C 43003 with respect to volatiles, where possible. However, the different 43004 lvalueness of expressions between C and C++ complicate the behavior. 43005 G++ behaves the same as GCC for volatile access, *Note Volatiles: C 43006 Extensions, for a description of GCC's behavior. 43007 43008 The C and C++ language specifications differ when an object is 43009 accessed in a void context: 43010 43011 volatile int *src = SOMEVALUE; 43012 *src; 43013 43014 The C++ standard specifies that such expressions do not undergo lvalue 43015 to rvalue conversion, and that the type of the dereferenced object may 43016 be incomplete. The C++ standard does not specify explicitly that it is 43017 lvalue to rvalue conversion that is responsible for causing an access. 43018 There is reason to believe that it is, because otherwise certain simple 43019 expressions become undefined. However, because it would surprise most 43020 programmers, G++ treats dereferencing a pointer to volatile object of 43021 complete type as GCC would do for an equivalent type in C. When the 43022 object has incomplete type, G++ issues a warning; if you wish to force 43023 an error, you must force a conversion to rvalue with, for instance, a 43024 static cast. 43025 43026 When using a reference to volatile, G++ does not treat equivalent 43027 expressions as accesses to volatiles, but instead issues a warning that 43028 no volatile is accessed. The rationale for this is that otherwise it 43029 becomes difficult to determine where volatile access occur, and not 43030 possible to ignore the return value from functions returning volatile 43031 references. Again, if you wish to force a read, cast the reference to 43032 an rvalue. 43033 43034 G++ implements the same behavior as GCC does when assigning to a 43035 volatile object--there is no reread of the assigned-to object, the 43036 assigned rvalue is reused. Note that in C++ assignment expressions are 43037 lvalues, and if used as an lvalue, the volatile object is referred to. 43038 For instance, VREF refers to VOBJ, as expected, in the following 43039 example: 43040 43041 volatile int vobj; 43042 volatile int &vref = vobj = SOMETHING; 43043 43044 43045 File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: C++ Volatiles, Up: C++ Extensions 43046 43047 7.2 Restricting Pointer Aliasing 43048 ================================ 43049 43050 As with the C front end, G++ understands the C99 feature of restricted 43051 pointers, specified with the `__restrict__', or `__restrict' type 43052 qualifier. Because you cannot compile C++ by specifying the `-std=c99' 43053 language flag, `restrict' is not a keyword in C++. 43054 43055 In addition to allowing restricted pointers, you can specify restricted 43056 references, which indicate that the reference is not aliased in the 43057 local context. 43058 43059 void fn (int *__restrict__ rptr, int &__restrict__ rref) 43060 { 43061 /* ... */ 43062 } 43063 43064 In the body of `fn', RPTR points to an unaliased integer and RREF 43065 refers to a (different) unaliased integer. 43066 43067 You may also specify whether a member function's THIS pointer is 43068 unaliased by using `__restrict__' as a member function qualifier. 43069 43070 void T::fn () __restrict__ 43071 { 43072 /* ... */ 43073 } 43074 43075 Within the body of `T::fn', THIS has the effective definition `T 43076 *__restrict__ const this'. Notice that the interpretation of a 43077 `__restrict__' member function qualifier is different to that of 43078 `const' or `volatile' qualifier, in that it is applied to the pointer 43079 rather than the object. This is consistent with other compilers that 43080 implement restricted pointers. 43081 43082 As with all outermost parameter qualifiers, `__restrict__' is ignored 43083 in function definition matching. This means you only need to specify 43084 `__restrict__' in a function definition, rather than in a function 43085 prototype as well. 43086 43087 43088 File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 43089 43090 7.3 Vague Linkage 43091 ================= 43092 43093 There are several constructs in C++ that require space in the object 43094 file but are not clearly tied to a single translation unit. We say that 43095 these constructs have "vague linkage". Typically such constructs are 43096 emitted wherever they are needed, though sometimes we can be more 43097 clever. 43098 43099 Inline Functions 43100 Inline functions are typically defined in a header file which can 43101 be included in many different compilations. Hopefully they can 43102 usually be inlined, but sometimes an out-of-line copy is 43103 necessary, if the address of the function is taken or if inlining 43104 fails. In general, we emit an out-of-line copy in all translation 43105 units where one is needed. As an exception, we only emit inline 43106 virtual functions with the vtable, since it always requires a copy. 43107 43108 Local static variables and string constants used in an inline 43109 function are also considered to have vague linkage, since they 43110 must be shared between all inlined and out-of-line instances of 43111 the function. 43112 43113 VTables 43114 C++ virtual functions are implemented in most compilers using a 43115 lookup table, known as a vtable. The vtable contains pointers to 43116 the virtual functions provided by a class, and each object of the 43117 class contains a pointer to its vtable (or vtables, in some 43118 multiple-inheritance situations). If the class declares any 43119 non-inline, non-pure virtual functions, the first one is chosen as 43120 the "key method" for the class, and the vtable is only emitted in 43121 the translation unit where the key method is defined. 43122 43123 _Note:_ If the chosen key method is later defined as inline, the 43124 vtable is still emitted in every translation unit that defines it. 43125 Make sure that any inline virtuals are declared inline in the class 43126 body, even if they are not defined there. 43127 43128 `type_info' objects 43129 C++ requires information about types to be written out in order to 43130 implement `dynamic_cast', `typeid' and exception handling. For 43131 polymorphic classes (classes with virtual functions), the 43132 `type_info' object is written out along with the vtable so that 43133 `dynamic_cast' can determine the dynamic type of a class object at 43134 run time. For all other types, we write out the `type_info' 43135 object when it is used: when applying `typeid' to an expression, 43136 throwing an object, or referring to a type in a catch clause or 43137 exception specification. 43138 43139 Template Instantiations 43140 Most everything in this section also applies to template 43141 instantiations, but there are other options as well. *Note 43142 Where's the Template?: Template Instantiation. 43143 43144 43145 When used with GNU ld version 2.8 or later on an ELF system such as 43146 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 43147 these constructs will be discarded at link time. This is known as 43148 COMDAT support. 43149 43150 On targets that don't support COMDAT, but do support weak symbols, GCC 43151 uses them. This way one copy overrides all the others, but the unused 43152 copies still take up space in the executable. 43153 43154 For targets that do not support either COMDAT or weak symbols, most 43155 entities with vague linkage are emitted as local symbols to avoid 43156 duplicate definition errors from the linker. This does not happen for 43157 local statics in inlines, however, as having multiple copies almost 43158 certainly breaks things. 43159 43160 *Note Declarations and Definitions in One Header: C++ Interface, for 43161 another way to control placement of these constructs. 43162 43163 43164 File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 43165 43166 7.4 #pragma interface and implementation 43167 ======================================== 43168 43169 `#pragma interface' and `#pragma implementation' provide the user with 43170 a way of explicitly directing the compiler to emit entities with vague 43171 linkage (and debugging information) in a particular translation unit. 43172 43173 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 43174 cases, because of COMDAT support and the "key method" heuristic 43175 mentioned in *note Vague Linkage::. Using them can actually cause your 43176 program to grow due to unnecessary out-of-line copies of inline 43177 functions. Currently (3.4) the only benefit of these `#pragma's is 43178 reduced duplication of debugging information, and that should be 43179 addressed soon on DWARF 2 targets with the use of COMDAT groups. 43180 43181 `#pragma interface' 43182 `#pragma interface "SUBDIR/OBJECTS.h"' 43183 Use this directive in _header files_ that define object classes, 43184 to save space in most of the object files that use those classes. 43185 Normally, local copies of certain information (backup copies of 43186 inline member functions, debugging information, and the internal 43187 tables that implement virtual functions) must be kept in each 43188 object file that includes class definitions. You can use this 43189 pragma to avoid such duplication. When a header file containing 43190 `#pragma interface' is included in a compilation, this auxiliary 43191 information is not generated (unless the main input source file 43192 itself uses `#pragma implementation'). Instead, the object files 43193 contain references to be resolved at link time. 43194 43195 The second form of this directive is useful for the case where you 43196 have multiple headers with the same name in different directories. 43197 If you use this form, you must specify the same string to `#pragma 43198 implementation'. 43199 43200 `#pragma implementation' 43201 `#pragma implementation "OBJECTS.h"' 43202 Use this pragma in a _main input file_, when you want full output 43203 from included header files to be generated (and made globally 43204 visible). The included header file, in turn, should use `#pragma 43205 interface'. Backup copies of inline member functions, debugging 43206 information, and the internal tables used to implement virtual 43207 functions are all generated in implementation files. 43208 43209 If you use `#pragma implementation' with no argument, it applies to 43210 an include file with the same basename(1) as your source file. 43211 For example, in `allclass.cc', giving just `#pragma implementation' 43212 by itself is equivalent to `#pragma implementation "allclass.h"'. 43213 43214 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 43215 an implementation file whenever you would include it from 43216 `allclass.cc' even if you never specified `#pragma 43217 implementation'. This was deemed to be more trouble than it was 43218 worth, however, and disabled. 43219 43220 Use the string argument if you want a single implementation file to 43221 include code from multiple header files. (You must also use 43222 `#include' to include the header file; `#pragma implementation' 43223 only specifies how to use the file--it doesn't actually include 43224 it.) 43225 43226 There is no way to split up the contents of a single header file 43227 into multiple implementation files. 43228 43229 `#pragma implementation' and `#pragma interface' also have an effect 43230 on function inlining. 43231 43232 If you define a class in a header file marked with `#pragma 43233 interface', the effect on an inline function defined in that class is 43234 similar to an explicit `extern' declaration--the compiler emits no code 43235 at all to define an independent version of the function. Its 43236 definition is used only for inlining with its callers. 43237 43238 Conversely, when you include the same header file in a main source file 43239 that declares it as `#pragma implementation', the compiler emits code 43240 for the function itself; this defines a version of the function that 43241 can be found via pointers (or by callers compiled without inlining). 43242 If all calls to the function can be inlined, you can avoid emitting the 43243 function by compiling with `-fno-implement-inlines'. If any calls are 43244 not inlined, you will get linker errors. 43245 43246 ---------- Footnotes ---------- 43247 43248 (1) A file's "basename" is the name stripped of all leading path 43249 information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 43250 43251 43252 File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 43253 43254 7.5 Where's the Template? 43255 ========================= 43256 43257 C++ templates are the first language feature to require more 43258 intelligence from the environment than one usually finds on a UNIX 43259 system. Somehow the compiler and linker have to make sure that each 43260 template instance occurs exactly once in the executable if it is needed, 43261 and not at all otherwise. There are two basic approaches to this 43262 problem, which are referred to as the Borland model and the Cfront 43263 model. 43264 43265 Borland model 43266 Borland C++ solved the template instantiation problem by adding 43267 the code equivalent of common blocks to their linker; the compiler 43268 emits template instances in each translation unit that uses them, 43269 and the linker collapses them together. The advantage of this 43270 model is that the linker only has to consider the object files 43271 themselves; there is no external complexity to worry about. This 43272 disadvantage is that compilation time is increased because the 43273 template code is being compiled repeatedly. Code written for this 43274 model tends to include definitions of all templates in the header 43275 file, since they must be seen to be instantiated. 43276 43277 Cfront model 43278 The AT&T C++ translator, Cfront, solved the template instantiation 43279 problem by creating the notion of a template repository, an 43280 automatically maintained place where template instances are 43281 stored. A more modern version of the repository works as follows: 43282 As individual object files are built, the compiler places any 43283 template definitions and instantiations encountered in the 43284 repository. At link time, the link wrapper adds in the objects in 43285 the repository and compiles any needed instances that were not 43286 previously emitted. The advantages of this model are more optimal 43287 compilation speed and the ability to use the system linker; to 43288 implement the Borland model a compiler vendor also needs to 43289 replace the linker. The disadvantages are vastly increased 43290 complexity, and thus potential for error; for some code this can be 43291 just as transparent, but in practice it can been very difficult to 43292 build multiple programs in one directory and one program in 43293 multiple directories. Code written for this model tends to 43294 separate definitions of non-inline member templates into a 43295 separate file, which should be compiled separately. 43296 43297 When used with GNU ld version 2.8 or later on an ELF system such as 43298 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 43299 Borland model. On other systems, G++ implements neither automatic 43300 model. 43301 43302 You have the following options for dealing with template 43303 instantiations: 43304 43305 1. Compile your template-using code with `-frepo'. The compiler 43306 generates files with the extension `.rpo' listing all of the 43307 template instantiations used in the corresponding object files that 43308 could be instantiated there; the link wrapper, `collect2', then 43309 updates the `.rpo' files to tell the compiler where to place those 43310 instantiations and rebuild any affected object files. The 43311 link-time overhead is negligible after the first pass, as the 43312 compiler continues to place the instantiations in the same files. 43313 43314 This is your best option for application code written for the 43315 Borland model, as it just works. Code written for the Cfront model 43316 needs to be modified so that the template definitions are 43317 available at one or more points of instantiation; usually this is 43318 as simple as adding `#include <tmethods.cc>' to the end of each 43319 template header. 43320 43321 For library code, if you want the library to provide all of the 43322 template instantiations it needs, just try to link all of its 43323 object files together; the link will fail, but cause the 43324 instantiations to be generated as a side effect. Be warned, 43325 however, that this may cause conflicts if multiple libraries try 43326 to provide the same instantiations. For greater control, use 43327 explicit instantiation as described in the next option. 43328 43329 2. Compile your code with `-fno-implicit-templates' to disable the 43330 implicit generation of template instances, and explicitly 43331 instantiate all the ones you use. This approach requires more 43332 knowledge of exactly which instances you need than do the others, 43333 but it's less mysterious and allows greater control. You can 43334 scatter the explicit instantiations throughout your program, 43335 perhaps putting them in the translation units where the instances 43336 are used or the translation units that define the templates 43337 themselves; you can put all of the explicit instantiations you 43338 need into one big file; or you can create small files like 43339 43340 #include "Foo.h" 43341 #include "Foo.cc" 43342 43343 template class Foo<int>; 43344 template ostream& operator << 43345 (ostream&, const Foo<int>&); 43346 43347 for each of the instances you need, and create a template 43348 instantiation library from those. 43349 43350 If you are using Cfront-model code, you can probably get away with 43351 not using `-fno-implicit-templates' when compiling files that don't 43352 `#include' the member template definitions. 43353 43354 If you use one big file to do the instantiations, you may want to 43355 compile it without `-fno-implicit-templates' so you get all of the 43356 instances required by your explicit instantiations (but not by any 43357 other files) without having to specify them as well. 43358 43359 The ISO C++ 2011 standard allows forward declaration of explicit 43360 instantiations (with `extern'). G++ supports explicit instantiation 43361 declarations in C++98 mode and has extended the template 43362 instantiation syntax to support instantiation of the compiler 43363 support data for a template class (i.e. the vtable) without 43364 instantiating any of its members (with `inline'), and 43365 instantiation of only the static data members of a template class, 43366 without the support data or member functions (with (`static'): 43367 43368 extern template int max (int, int); 43369 inline template class Foo<int>; 43370 static template class Foo<int>; 43371 43372 3. Do nothing. Pretend G++ does implement automatic instantiation 43373 management. Code written for the Borland model works fine, but 43374 each translation unit contains instances of each of the templates 43375 it uses. In a large program, this can lead to an unacceptable 43376 amount of code duplication. 43377 43378 43379 File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 43380 43381 7.6 Extracting the function pointer from a bound pointer to member function 43382 =========================================================================== 43383 43384 In C++, pointer to member functions (PMFs) are implemented using a wide 43385 pointer of sorts to handle all the possible call mechanisms; the PMF 43386 needs to store information about how to adjust the `this' pointer, and 43387 if the function pointed to is virtual, where to find the vtable, and 43388 where in the vtable to look for the member function. If you are using 43389 PMFs in an inner loop, you should really reconsider that decision. If 43390 that is not an option, you can extract the pointer to the function that 43391 would be called for a given object/PMF pair and call it directly inside 43392 the inner loop, to save a bit of time. 43393 43394 Note that you still pay the penalty for the call through a function 43395 pointer; on most modern architectures, such a call defeats the branch 43396 prediction features of the CPU. This is also true of normal virtual 43397 function calls. 43398 43399 The syntax for this extension is 43400 43401 extern A a; 43402 extern int (A::*fp)(); 43403 typedef int (*fptr)(A *); 43404 43405 fptr p = (fptr)(a.*fp); 43406 43407 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 43408 object is needed to obtain the address of the function. They can be 43409 converted to function pointers directly: 43410 43411 fptr p1 = (fptr)(&A::foo); 43412 43413 You must specify `-Wno-pmf-conversions' to use this extension. 43414 43415 43416 File: gcc.info, Node: C++ Attributes, Next: Function Multiversioning, Prev: Bound member functions, Up: C++ Extensions 43417 43418 7.7 C++-Specific Variable, Function, and Type Attributes 43419 ======================================================== 43420 43421 Some attributes only make sense for C++ programs. 43422 43423 `abi_tag ("TAG", ...)' 43424 The `abi_tag' attribute can be applied to a function or class 43425 declaration. It modifies the mangled name of the function or 43426 class to incorporate the tag name, in order to distinguish the 43427 function or class from an earlier version with a different ABI; 43428 perhaps the class has changed size, or the function has a 43429 different return type that is not encoded in the mangled name. 43430 43431 The argument can be a list of strings of arbitrary length. The 43432 strings are sorted on output, so the order of the list is 43433 unimportant. 43434 43435 A redeclaration of a function or class must not add new ABI tags, 43436 since doing so would change the mangled name. 43437 43438 The `-Wabi-tag' flag enables a warning about a class which does 43439 not have all the ABI tags used by its subobjects and virtual 43440 functions; for users with code that needs to coexist with an 43441 earlier ABI, using this option can help to find all affected types 43442 that need to be tagged. 43443 43444 `init_priority (PRIORITY)' 43445 In Standard C++, objects defined at namespace scope are guaranteed 43446 to be initialized in an order in strict accordance with that of 43447 their definitions _in a given translation unit_. No guarantee is 43448 made for initializations across translation units. However, GNU 43449 C++ allows users to control the order of initialization of objects 43450 defined at namespace scope with the `init_priority' attribute by 43451 specifying a relative PRIORITY, a constant integral expression 43452 currently bounded between 101 and 65535 inclusive. Lower numbers 43453 indicate a higher priority. 43454 43455 In the following example, `A' would normally be created before 43456 `B', but the `init_priority' attribute reverses that order: 43457 43458 Some_Class A __attribute__ ((init_priority (2000))); 43459 Some_Class B __attribute__ ((init_priority (543))); 43460 43461 Note that the particular values of PRIORITY do not matter; only 43462 their relative ordering. 43463 43464 `java_interface' 43465 This type attribute informs C++ that the class is a Java 43466 interface. It may only be applied to classes declared within an 43467 `extern "Java"' block. Calls to methods declared in this 43468 interface are dispatched using GCJ's interface table mechanism, 43469 instead of regular virtual table dispatch. 43470 43471 43472 See also *note Namespace Association::. 43473 43474 43475 File: gcc.info, Node: Function Multiversioning, Next: Namespace Association, Prev: C++ Attributes, Up: C++ Extensions 43476 43477 7.8 Function Multiversioning 43478 ============================ 43479 43480 With the GNU C++ front end, for target i386, you may specify multiple 43481 versions of a function, where each function is specialized for a 43482 specific target feature. At runtime, the appropriate version of the 43483 function is automatically executed depending on the characteristics of 43484 the execution platform. Here is an example. 43485 43486 __attribute__ ((target ("default"))) 43487 int foo () 43488 { 43489 // The default version of foo. 43490 return 0; 43491 } 43492 43493 __attribute__ ((target ("sse4.2"))) 43494 int foo () 43495 { 43496 // foo version for SSE4.2 43497 return 1; 43498 } 43499 43500 __attribute__ ((target ("arch=atom"))) 43501 int foo () 43502 { 43503 // foo version for the Intel ATOM processor 43504 return 2; 43505 } 43506 43507 __attribute__ ((target ("arch=amdfam10"))) 43508 int foo () 43509 { 43510 // foo version for the AMD Family 0x10 processors. 43511 return 3; 43512 } 43513 43514 int main () 43515 { 43516 int (*p)() = &foo; 43517 assert ((*p) () == foo ()); 43518 return 0; 43519 } 43520 43521 In the above example, four versions of function foo are created. The 43522 first version of foo with the target attribute "default" is the default 43523 version. This version gets executed when no other target specific 43524 version qualifies for execution on a particular platform. A new version 43525 of foo is created by using the same function signature but with a 43526 different target string. Function foo is called or a pointer to it is 43527 taken just like a regular function. GCC takes care of doing the 43528 dispatching to call the right version at runtime. Refer to the GCC 43529 wiki on Function Multiversioning 43530 (http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details. 43531 43532 43533 File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: Function Multiversioning, Up: C++ Extensions 43534 43535 7.9 Namespace Association 43536 ========================= 43537 43538 *Caution:* The semantics of this extension are equivalent to C++ 2011 43539 inline namespaces. Users should use inline namespaces instead as this 43540 extension will be removed in future versions of G++. 43541 43542 A using-directive with `__attribute ((strong))' is stronger than a 43543 normal using-directive in two ways: 43544 43545 * Templates from the used namespace can be specialized and explicitly 43546 instantiated as though they were members of the using namespace. 43547 43548 * The using namespace is considered an associated namespace of all 43549 templates in the used namespace for purposes of argument-dependent 43550 name lookup. 43551 43552 The used namespace must be nested within the using namespace so that 43553 normal unqualified lookup works properly. 43554 43555 This is useful for composing a namespace transparently from 43556 implementation namespaces. For example: 43557 43558 namespace std { 43559 namespace debug { 43560 template <class T> struct A { }; 43561 } 43562 using namespace debug __attribute ((__strong__)); 43563 template <> struct A<int> { }; // ok to specialize 43564 43565 template <class T> void f (A<T>); 43566 } 43567 43568 int main() 43569 { 43570 f (std::A<float>()); // lookup finds std::f 43571 f (std::A<int>()); 43572 } 43573 43574 43575 File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 43576 43577 7.10 Type Traits 43578 ================ 43579 43580 The C++ front end implements syntactic extensions that allow 43581 compile-time determination of various characteristics of a type (or of a 43582 pair of types). 43583 43584 `__has_nothrow_assign (type)' 43585 If `type' is const qualified or is a reference type then the trait 43586 is false. Otherwise if `__has_trivial_assign (type)' is true then 43587 the trait is true, else if `type' is a cv class or union type with 43588 copy assignment operators that are known not to throw an exception 43589 then the trait is true, else it is false. Requires: `type' shall 43590 be a complete type, (possibly cv-qualified) `void', or an array of 43591 unknown bound. 43592 43593 `__has_nothrow_copy (type)' 43594 If `__has_trivial_copy (type)' is true then the trait is true, 43595 else if `type' is a cv class or union type with copy constructors 43596 that are known not to throw an exception then the trait is true, 43597 else it is false. Requires: `type' shall be a complete type, 43598 (possibly cv-qualified) `void', or an array of unknown bound. 43599 43600 `__has_nothrow_constructor (type)' 43601 If `__has_trivial_constructor (type)' is true then the trait is 43602 true, else if `type' is a cv class or union type (or array 43603 thereof) with a default constructor that is known not to throw an 43604 exception then the trait is true, else it is false. Requires: 43605 `type' shall be a complete type, (possibly cv-qualified) `void', 43606 or an array of unknown bound. 43607 43608 `__has_trivial_assign (type)' 43609 If `type' is const qualified or is a reference type then the trait 43610 is false. Otherwise if `__is_pod (type)' is true then the trait is 43611 true, else if `type' is a cv class or union type with a trivial 43612 copy assignment ([class.copy]) then the trait is true, else it is 43613 false. Requires: `type' shall be a complete type, (possibly 43614 cv-qualified) `void', or an array of unknown bound. 43615 43616 `__has_trivial_copy (type)' 43617 If `__is_pod (type)' is true or `type' is a reference type then 43618 the trait is true, else if `type' is a cv class or union type with 43619 a trivial copy constructor ([class.copy]) then the trait is true, 43620 else it is false. Requires: `type' shall be a complete type, 43621 (possibly cv-qualified) `void', or an array of unknown bound. 43622 43623 `__has_trivial_constructor (type)' 43624 If `__is_pod (type)' is true then the trait is true, else if 43625 `type' is a cv class or union type (or array thereof) with a 43626 trivial default constructor ([class.ctor]) then the trait is true, 43627 else it is false. Requires: `type' shall be a complete type, 43628 (possibly cv-qualified) `void', or an array of unknown bound. 43629 43630 `__has_trivial_destructor (type)' 43631 If `__is_pod (type)' is true or `type' is a reference type then 43632 the trait is true, else if `type' is a cv class or union type (or 43633 array thereof) with a trivial destructor ([class.dtor]) then the 43634 trait is true, else it is false. Requires: `type' shall be a 43635 complete type, (possibly cv-qualified) `void', or an array of 43636 unknown bound. 43637 43638 `__has_virtual_destructor (type)' 43639 If `type' is a class type with a virtual destructor ([class.dtor]) 43640 then the trait is true, else it is false. Requires: `type' shall 43641 be a complete type, (possibly cv-qualified) `void', or an array of 43642 unknown bound. 43643 43644 `__is_abstract (type)' 43645 If `type' is an abstract class ([class.abstract]) then the trait 43646 is true, else it is false. Requires: `type' shall be a complete 43647 type, (possibly cv-qualified) `void', or an array of unknown bound. 43648 43649 `__is_base_of (base_type, derived_type)' 43650 If `base_type' is a base class of `derived_type' ([class.derived]) 43651 then the trait is true, otherwise it is false. Top-level cv 43652 qualifications of `base_type' and `derived_type' are ignored. For 43653 the purposes of this trait, a class type is considered is own 43654 base. Requires: if `__is_class (base_type)' and `__is_class 43655 (derived_type)' are true and `base_type' and `derived_type' are 43656 not the same type (disregarding cv-qualifiers), `derived_type' 43657 shall be a complete type. Diagnostic is produced if this 43658 requirement is not met. 43659 43660 `__is_class (type)' 43661 If `type' is a cv class type, and not a union type 43662 ([basic.compound]) the trait is true, else it is false. 43663 43664 `__is_empty (type)' 43665 If `__is_class (type)' is false then the trait is false. 43666 Otherwise `type' is considered empty if and only if: `type' has no 43667 non-static data members, or all non-static data members, if any, 43668 are bit-fields of length 0, and `type' has no virtual members, and 43669 `type' has no virtual base classes, and `type' has no base classes 43670 `base_type' for which `__is_empty (base_type)' is false. 43671 Requires: `type' shall be a complete type, (possibly cv-qualified) 43672 `void', or an array of unknown bound. 43673 43674 `__is_enum (type)' 43675 If `type' is a cv enumeration type ([basic.compound]) the trait is 43676 true, else it is false. 43677 43678 `__is_literal_type (type)' 43679 If `type' is a literal type ([basic.types]) the trait is true, 43680 else it is false. Requires: `type' shall be a complete type, 43681 (possibly cv-qualified) `void', or an array of unknown bound. 43682 43683 `__is_pod (type)' 43684 If `type' is a cv POD type ([basic.types]) then the trait is true, 43685 else it is false. Requires: `type' shall be a complete type, 43686 (possibly cv-qualified) `void', or an array of unknown bound. 43687 43688 `__is_polymorphic (type)' 43689 If `type' is a polymorphic class ([class.virtual]) then the trait 43690 is true, else it is false. Requires: `type' shall be a complete 43691 type, (possibly cv-qualified) `void', or an array of unknown bound. 43692 43693 `__is_standard_layout (type)' 43694 If `type' is a standard-layout type ([basic.types]) the trait is 43695 true, else it is false. Requires: `type' shall be a complete 43696 type, (possibly cv-qualified) `void', or an array of unknown bound. 43697 43698 `__is_trivial (type)' 43699 If `type' is a trivial type ([basic.types]) the trait is true, 43700 else it is false. Requires: `type' shall be a complete type, 43701 (possibly cv-qualified) `void', or an array of unknown bound. 43702 43703 `__is_union (type)' 43704 If `type' is a cv union type ([basic.compound]) the trait is true, 43705 else it is false. 43706 43707 `__underlying_type (type)' 43708 The underlying type of `type'. Requires: `type' shall be an 43709 enumeration type ([dcl.enum]). 43710 43711 43712 43713 File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 43714 43715 7.11 Java Exceptions 43716 ==================== 43717 43718 The Java language uses a slightly different exception handling model 43719 from C++. Normally, GNU C++ automatically detects when you are writing 43720 C++ code that uses Java exceptions, and handle them appropriately. 43721 However, if C++ code only needs to execute destructors when Java 43722 exceptions are thrown through it, GCC guesses incorrectly. Sample 43723 problematic code is: 43724 43725 struct S { ~S(); }; 43726 extern void bar(); // is written in Java, and may throw exceptions 43727 void foo() 43728 { 43729 S s; 43730 bar(); 43731 } 43732 43733 The usual effect of an incorrect guess is a link failure, complaining of 43734 a missing routine called `__gxx_personality_v0'. 43735 43736 You can inform the compiler that Java exceptions are to be used in a 43737 translation unit, irrespective of what it might think, by writing 43738 `#pragma GCC java_exceptions' at the head of the file. This `#pragma' 43739 must appear before any functions that throw or catch exceptions, or run 43740 destructors when exceptions are thrown through them. 43741 43742 You cannot mix Java and C++ exceptions in the same translation unit. 43743 It is believed to be safe to throw a C++ exception from one file through 43744 another file compiled for the Java exception model, or vice versa, but 43745 there may be bugs in this area. 43746 43747 43748 File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 43749 43750 7.12 Deprecated Features 43751 ======================== 43752 43753 In the past, the GNU C++ compiler was extended to experiment with new 43754 features, at a time when the C++ language was still evolving. Now that 43755 the C++ standard is complete, some of those features are superseded by 43756 superior alternatives. Using the old features might cause a warning in 43757 some cases that the feature will be dropped in the future. In other 43758 cases, the feature might be gone already. 43759 43760 While the list below is not exhaustive, it documents some of the 43761 options that are now deprecated: 43762 43763 `-fexternal-templates' 43764 `-falt-external-templates' 43765 These are two of the many ways for G++ to implement template 43766 instantiation. *Note Template Instantiation::. The C++ standard 43767 clearly defines how template definitions have to be organized 43768 across implementation units. G++ has an implicit instantiation 43769 mechanism that should work just fine for standard-conforming code. 43770 43771 `-fstrict-prototype' 43772 `-fno-strict-prototype' 43773 Previously it was possible to use an empty prototype parameter 43774 list to indicate an unspecified number of parameters (like C), 43775 rather than no parameters, as C++ demands. This feature has been 43776 removed, except where it is required for backwards compatibility. 43777 *Note Backwards Compatibility::. 43778 43779 G++ allows a virtual function returning `void *' to be overridden by 43780 one returning a different pointer type. This extension to the 43781 covariant return type rules is now deprecated and will be removed from a 43782 future version. 43783 43784 The G++ minimum and maximum operators (`<?' and `>?') and their 43785 compound forms (`<?=') and `>?=') have been deprecated and are now 43786 removed from G++. Code using these operators should be modified to use 43787 `std::min' and `std::max' instead. 43788 43789 The named return value extension has been deprecated, and is now 43790 removed from G++. 43791 43792 The use of initializer lists with new expressions has been deprecated, 43793 and is now removed from G++. 43794 43795 Floating and complex non-type template parameters have been deprecated, 43796 and are now removed from G++. 43797 43798 The implicit typename extension has been deprecated and is now removed 43799 from G++. 43800 43801 The use of default arguments in function pointers, function typedefs 43802 and other places where they are not permitted by the standard is 43803 deprecated and will be removed from a future version of G++. 43804 43805 G++ allows floating-point literals to appear in integral constant 43806 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 43807 deprecated and will be removed from a future version. 43808 43809 G++ allows static data members of const floating-point type to be 43810 declared with an initializer in a class definition. The standard only 43811 allows initializers for static members of const integral types and const 43812 enumeration types so this extension has been deprecated and will be 43813 removed from a future version. 43814 43815 43816 File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 43817 43818 7.13 Backwards Compatibility 43819 ============================ 43820 43821 Now that there is a definitive ISO standard C++, G++ has a specification 43822 to adhere to. The C++ language evolved over time, and features that 43823 used to be acceptable in previous drafts of the standard, such as the 43824 ARM [Annotated C++ Reference Manual], are no longer accepted. In order 43825 to allow compilation of C++ written to such drafts, G++ contains some 43826 backwards compatibilities. _All such backwards compatibility features 43827 are liable to disappear in future versions of G++._ They should be 43828 considered deprecated. *Note Deprecated Features::. 43829 43830 `For scope' 43831 If a variable is declared at for scope, it used to remain in scope 43832 until the end of the scope that contained the for statement 43833 (rather than just within the for scope). G++ retains this, but 43834 issues a warning, if such a variable is accessed outside the for 43835 scope. 43836 43837 `Implicit C language' 43838 Old C system header files did not contain an `extern "C" {...}' 43839 scope to set the language. On such systems, all header files are 43840 implicitly scoped inside a C language scope. Also, an empty 43841 prototype `()' is treated as an unspecified number of arguments, 43842 rather than no arguments, as C++ demands. 43843 43844 43845 File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 43846 43847 8 GNU Objective-C features 43848 ************************** 43849 43850 This document is meant to describe some of the GNU Objective-C 43851 features. It is not intended to teach you Objective-C. There are 43852 several resources on the Internet that present the language. 43853 43854 * Menu: 43855 43856 * GNU Objective-C runtime API:: 43857 * Executing code before main:: 43858 * Type encoding:: 43859 * Garbage Collection:: 43860 * Constant string objects:: 43861 * compatibility_alias:: 43862 * Exceptions:: 43863 * Synchronization:: 43864 * Fast enumeration:: 43865 * Messaging with the GNU Objective-C runtime:: 43866 43867 43868 File: gcc.info, Node: GNU Objective-C runtime API, Next: Executing code before main, Up: Objective-C 43869 43870 8.1 GNU Objective-C runtime API 43871 =============================== 43872 43873 This section is specific for the GNU Objective-C runtime. If you are 43874 using a different runtime, you can skip it. 43875 43876 The GNU Objective-C runtime provides an API that allows you to 43877 interact with the Objective-C runtime system, querying the live runtime 43878 structures and even manipulating them. This allows you for example to 43879 inspect and navigate classes, methods and protocols; to define new 43880 classes or new methods, and even to modify existing classes or 43881 protocols. 43882 43883 If you are using a "Foundation" library such as GNUstep-Base, this 43884 library will provide you with a rich set of functionality to do most of 43885 the inspection tasks, and you probably will only need direct access to 43886 the GNU Objective-C runtime API to define new classes or methods. 43887 43888 * Menu: 43889 43890 * Modern GNU Objective-C runtime API:: 43891 * Traditional GNU Objective-C runtime API:: 43892 43893 43894 File: gcc.info, Node: Modern GNU Objective-C runtime API, Next: Traditional GNU Objective-C runtime API, Up: GNU Objective-C runtime API 43895 43896 8.1.1 Modern GNU Objective-C runtime API 43897 ---------------------------------------- 43898 43899 The GNU Objective-C runtime provides an API which is similar to the one 43900 provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime. The 43901 API is documented in the public header files of the GNU Objective-C 43902 runtime: 43903 43904 * `objc/objc.h': this is the basic Objective-C header file, defining 43905 the basic Objective-C types such as `id', `Class' and `BOOL'. You 43906 have to include this header to do almost anything with Objective-C. 43907 43908 * `objc/runtime.h': this header declares most of the public runtime 43909 API functions allowing you to inspect and manipulate the 43910 Objective-C runtime data structures. These functions are fairly 43911 standardized across Objective-C runtimes and are almost identical 43912 to the Apple/NeXT Objective-C runtime ones. It does not declare 43913 functions in some specialized areas (constructing and forwarding 43914 message invocations, threading) which are in the other headers 43915 below. You have to include `objc/objc.h' and `objc/runtime.h' to 43916 use any of the functions, such as `class_getName()', declared in 43917 `objc/runtime.h'. 43918 43919 * `objc/message.h': this header declares public functions used to 43920 construct, deconstruct and forward message invocations. Because 43921 messaging is done in quite a different way on different runtimes, 43922 functions in this header are specific to the GNU Objective-C 43923 runtime implementation. 43924 43925 * `objc/objc-exception.h': this header declares some public 43926 functions related to Objective-C exceptions. For example 43927 functions in this header allow you to throw an Objective-C 43928 exception from plain C/C++ code. 43929 43930 * `objc/objc-sync.h': this header declares some public functions 43931 related to the Objective-C `@synchronized()' syntax, allowing you 43932 to emulate an Objective-C `@synchronized()' block in plain C/C++ 43933 code. 43934 43935 * `objc/thr.h': this header declares a public runtime API threading 43936 layer that is only provided by the GNU Objective-C runtime. It 43937 declares functions such as `objc_mutex_lock()', which provide a 43938 platform-independent set of threading functions. 43939 43940 43941 The header files contain detailed documentation for each function in 43942 the GNU Objective-C runtime API. 43943 43944 43945 File: gcc.info, Node: Traditional GNU Objective-C runtime API, Prev: Modern GNU Objective-C runtime API, Up: GNU Objective-C runtime API 43946 43947 8.1.2 Traditional GNU Objective-C runtime API 43948 --------------------------------------------- 43949 43950 The GNU Objective-C runtime used to provide a different API, which we 43951 call the "traditional" GNU Objective-C runtime API. Functions 43952 belonging to this API are easy to recognize because they use a 43953 different naming convention, such as `class_get_super_class()' 43954 (traditional API) instead of `class_getSuperclass()' (modern API). 43955 Software using this API includes the file `objc/objc-api.h' where it is 43956 declared. 43957 43958 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer 43959 available. 43960 43961 43962 File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: GNU Objective-C runtime API, Up: Objective-C 43963 43964 8.2 `+load': Executing code before main 43965 ======================================= 43966 43967 This section is specific for the GNU Objective-C runtime. If you are 43968 using a different runtime, you can skip it. 43969 43970 The GNU Objective-C runtime provides a way that allows you to execute 43971 code before the execution of the program enters the `main' function. 43972 The code is executed on a per-class and a per-category basis, through a 43973 special class method `+load'. 43974 43975 This facility is very useful if you want to initialize global variables 43976 which can be accessed by the program directly, without sending a message 43977 to the class first. The usual way to initialize global variables, in 43978 the `+initialize' method, might not be useful because `+initialize' is 43979 only called when the first message is sent to a class object, which in 43980 some cases could be too late. 43981 43982 Suppose for example you have a `FileStream' class that declares 43983 `Stdin', `Stdout' and `Stderr' as global variables, like below: 43984 43985 43986 FileStream *Stdin = nil; 43987 FileStream *Stdout = nil; 43988 FileStream *Stderr = nil; 43989 43990 @implementation FileStream 43991 43992 + (void)initialize 43993 { 43994 Stdin = [[FileStream new] initWithFd:0]; 43995 Stdout = [[FileStream new] initWithFd:1]; 43996 Stderr = [[FileStream new] initWithFd:2]; 43997 } 43998 43999 /* Other methods here */ 44000 @end 44001 44002 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 44003 in `+initialize' occurs too late. The programmer can send a message to 44004 one of these objects before the variables are actually initialized, 44005 thus sending messages to the `nil' object. The `+initialize' method 44006 which actually initializes the global variables is not invoked until 44007 the first message is sent to the class object. The solution would 44008 require these variables to be initialized just before entering `main'. 44009 44010 The correct solution of the above problem is to use the `+load' method 44011 instead of `+initialize': 44012 44013 44014 @implementation FileStream 44015 44016 + (void)load 44017 { 44018 Stdin = [[FileStream new] initWithFd:0]; 44019 Stdout = [[FileStream new] initWithFd:1]; 44020 Stderr = [[FileStream new] initWithFd:2]; 44021 } 44022 44023 /* Other methods here */ 44024 @end 44025 44026 The `+load' is a method that is not overridden by categories. If a 44027 class and a category of it both implement `+load', both methods are 44028 invoked. This allows some additional initializations to be performed in 44029 a category. 44030 44031 This mechanism is not intended to be a replacement for `+initialize'. 44032 You should be aware of its limitations when you decide to use it 44033 instead of `+initialize'. 44034 44035 * Menu: 44036 44037 * What you can and what you cannot do in +load:: 44038 44039 44040 File: gcc.info, Node: What you can and what you cannot do in +load, Up: Executing code before main 44041 44042 8.2.1 What you can and what you cannot do in `+load' 44043 ---------------------------------------------------- 44044 44045 `+load' is to be used only as a last resort. Because it is executed 44046 very early, most of the Objective-C runtime machinery will not be ready 44047 when `+load' is executed; hence `+load' works best for executing C code 44048 that is independent on the Objective-C runtime. 44049 44050 The `+load' implementation in the GNU runtime guarantees you the 44051 following things: 44052 44053 * you can write whatever C code you like; 44054 44055 * you can allocate and send messages to objects whose class is 44056 implemented in the same file; 44057 44058 * the `+load' implementation of all super classes of a class are 44059 executed before the `+load' of that class is executed; 44060 44061 * the `+load' implementation of a class is executed before the 44062 `+load' implementation of any category. 44063 44064 44065 In particular, the following things, even if they can work in a 44066 particular case, are not guaranteed: 44067 44068 * allocation of or sending messages to arbitrary objects; 44069 44070 * allocation of or sending messages to objects whose classes have a 44071 category implemented in the same file; 44072 44073 * sending messages to Objective-C constant strings (`@"this is a 44074 constant string"'); 44075 44076 44077 You should make no assumptions about receiving `+load' in sibling 44078 classes when you write `+load' of a class. The order in which sibling 44079 classes receive `+load' is not guaranteed. 44080 44081 The order in which `+load' and `+initialize' are called could be 44082 problematic if this matters. If you don't allocate objects inside 44083 `+load', it is guaranteed that `+load' is called before `+initialize'. 44084 If you create an object inside `+load' the `+initialize' method of 44085 object's class is invoked even if `+load' was not invoked. Note if you 44086 explicitly call `+load' on a class, `+initialize' will be called first. 44087 To avoid possible problems try to implement only one of these methods. 44088 44089 The `+load' method is also invoked when a bundle is dynamically loaded 44090 into your running program. This happens automatically without any 44091 intervening operation from you. When you write bundles and you need to 44092 write `+load' you can safely create and send messages to objects whose 44093 classes already exist in the running program. The same restrictions as 44094 above apply to classes defined in bundle. 44095 44096 44097 File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 44098 44099 8.3 Type encoding 44100 ================= 44101 44102 This is an advanced section. Type encodings are used extensively by 44103 the compiler and by the runtime, but you generally do not need to know 44104 about them to use Objective-C. 44105 44106 The Objective-C compiler generates type encodings for all the types. 44107 These type encodings are used at runtime to find out information about 44108 selectors and methods and about objects and classes. 44109 44110 The types are encoded in the following way: 44111 44112 `_Bool' `B' 44113 `char' `c' 44114 `unsigned char' `C' 44115 `short' `s' 44116 `unsigned short' `S' 44117 `int' `i' 44118 `unsigned int' `I' 44119 `long' `l' 44120 `unsigned long' `L' 44121 `long long' `q' 44122 `unsigned long `Q' 44123 long' 44124 `float' `f' 44125 `double' `d' 44126 `long double' `D' 44127 `void' `v' 44128 `id' `@' 44129 `Class' `#' 44130 `SEL' `:' 44131 `char*' `*' 44132 `enum' an `enum' is encoded exactly as the integer type that 44133 the compiler uses for it, which depends on the 44134 enumeration values. Often the compiler users 44135 `unsigned int', which is then encoded as `I'. 44136 unknown type `?' 44137 Complex types `j' followed by the inner type. For example 44138 `_Complex double' is encoded as "jd". 44139 bit-fields `b' followed by the starting position of the 44140 bit-field, the type of the bit-field and the size of 44141 the bit-field (the bit-fields encoding was changed 44142 from the NeXT's compiler encoding, see below) 44143 44144 The encoding of bit-fields has changed to allow bit-fields to be 44145 properly handled by the runtime functions that compute sizes and 44146 alignments of types that contain bit-fields. The previous encoding 44147 contained only the size of the bit-field. Using only this information 44148 it is not possible to reliably compute the size occupied by the 44149 bit-field. This is very important in the presence of the Boehm's 44150 garbage collector because the objects are allocated using the typed 44151 memory facility available in this collector. The typed memory 44152 allocation requires information about where the pointers are located 44153 inside the object. 44154 44155 The position in the bit-field is the position, counting in bits, of the 44156 bit closest to the beginning of the structure. 44157 44158 The non-atomic types are encoded as follows: 44159 44160 pointers `^' followed by the pointed type. 44161 arrays `[' followed by the number of elements in the array 44162 followed by the type of the elements followed by `]' 44163 structures `{' followed by the name of the structure (or `?' if the 44164 structure is unnamed), the `=' sign, the type of the 44165 members and by `}' 44166 unions `(' followed by the name of the structure (or `?' if the 44167 union is unnamed), the `=' sign, the type of the members 44168 followed by `)' 44169 vectors `![' followed by the vector_size (the number of bytes 44170 composing the vector) followed by a comma, followed by 44171 the alignment (in bytes) of the vector, followed by the 44172 type of the elements followed by `]' 44173 44174 Here are some types and their encodings, as they are generated by the 44175 compiler on an i386 machine: 44176 44177 44178 Objective-C type Compiler encoding 44179 int a[10]; `[10i]' 44180 struct { `{?=i[3f]b128i3b131i2c}' 44181 int i; 44182 float f[3]; 44183 int a:3; 44184 int b:2; 44185 char c; 44186 } 44187 int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine) 44188 44189 44190 In addition to the types the compiler also encodes the type 44191 specifiers. The table below describes the encoding of the current 44192 Objective-C type specifiers: 44193 44194 44195 Specifier Encoding 44196 `const' `r' 44197 `in' `n' 44198 `inout' `N' 44199 `out' `o' 44200 `bycopy' `O' 44201 `byref' `R' 44202 `oneway' `V' 44203 44204 44205 The type specifiers are encoded just before the type. Unlike types 44206 however, the type specifiers are only encoded when they appear in method 44207 argument types. 44208 44209 Note how `const' interacts with pointers: 44210 44211 44212 Objective-C type Compiler encoding 44213 const int `ri' 44214 const int* `^ri' 44215 int *const `r^i' 44216 44217 44218 `const int*' is a pointer to a `const int', and so is encoded as 44219 `^ri'. `int* const', instead, is a `const' pointer to an `int', and so 44220 is encoded as `r^i'. 44221 44222 Finally, there is a complication when encoding `const char *' versus 44223 `char * const'. Because `char *' is encoded as `*' and not as `^c', 44224 there is no way to express the fact that `r' applies to the pointer or 44225 to the pointee. 44226 44227 Hence, it is assumed as a convention that `r*' means `const char *' 44228 (since it is what is most often meant), and there is no way to encode 44229 `char *const'. `char *const' would simply be encoded as `*', and the 44230 `const' is lost. 44231 44232 * Menu: 44233 44234 * Legacy type encoding:: 44235 * @encode:: 44236 * Method signatures:: 44237 44238 44239 File: gcc.info, Node: Legacy type encoding, Next: @encode, Up: Type encoding 44240 44241 8.3.1 Legacy type encoding 44242 -------------------------- 44243 44244 Unfortunately, historically GCC used to have a number of bugs in its 44245 encoding code. The NeXT runtime expects GCC to emit type encodings in 44246 this historical format (compatible with GCC-3.3), so when using the 44247 NeXT runtime, GCC will introduce on purpose a number of incorrect 44248 encodings: 44249 44250 * the read-only qualifier of the pointee gets emitted before the '^'. 44251 The read-only qualifier of the pointer itself gets ignored, unless 44252 it is a typedef. Also, the 'r' is only emitted for the outermost 44253 type. 44254 44255 * 32-bit longs are encoded as 'l' or 'L', but not always. For 44256 typedefs, the compiler uses 'i' or 'I' instead if encoding a 44257 struct field or a pointer. 44258 44259 * `enum's are always encoded as 'i' (int) even if they are actually 44260 unsigned or long. 44261 44262 44263 In addition to that, the NeXT runtime uses a different encoding for 44264 bitfields. It encodes them as `b' followed by the size, without a bit 44265 offset or the underlying field type. 44266 44267 44268 File: gcc.info, Node: @encode, Next: Method signatures, Prev: Legacy type encoding, Up: Type encoding 44269 44270 8.3.2 @encode 44271 ------------- 44272 44273 GNU Objective-C supports the `@encode' syntax that allows you to create 44274 a type encoding from a C/Objective-C type. For example, `@encode(int)' 44275 is compiled by the compiler into `"i"'. 44276 44277 `@encode' does not support type qualifiers other than `const'. For 44278 example, `@encode(const char*)' is valid and is compiled into `"r*"', 44279 while `@encode(bycopy char *)' is invalid and will cause a compilation 44280 error. 44281 44282 44283 File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding 44284 44285 8.3.3 Method signatures 44286 ----------------------- 44287 44288 This section documents the encoding of method types, which is rarely 44289 needed to use Objective-C. You should skip it at a first reading; the 44290 runtime provides functions that will work on methods and can walk 44291 through the list of parameters and interpret them for you. These 44292 functions are part of the public "API" and are the preferred way to 44293 interact with method signatures from user code. 44294 44295 But if you need to debug a problem with method signatures and need to 44296 know how they are implemented (i.e., the "ABI"), read on. 44297 44298 Methods have their "signature" encoded and made available to the 44299 runtime. The "signature" encodes all the information required to 44300 dynamically build invocations of the method at runtime: return type and 44301 arguments. 44302 44303 The "signature" is a null-terminated string, composed of the following: 44304 44305 * The return type, including type qualifiers. For example, a method 44306 returning `int' would have `i' here. 44307 44308 * The total size (in bytes) required to pass all the parameters. 44309 This includes the two hidden parameters (the object `self' and the 44310 method selector `_cmd'). 44311 44312 * Each argument, with the type encoding, followed by the offset (in 44313 bytes) of the argument in the list of parameters. 44314 44315 44316 For example, a method with no arguments and returning `int' would have 44317 the signature `i8@0:4' if the size of a pointer is 4. The signature is 44318 interpreted as follows: the `i' is the return type (an `int'), the `8' 44319 is the total size of the parameters in bytes (two pointers each of size 44320 4), the `@0' is the first parameter (an object at byte offset `0') and 44321 `:4' is the second parameter (a `SEL' at byte offset `4'). 44322 44323 You can easily find more examples by running the "strings" program on 44324 an Objective-C object file compiled by GCC. You'll see a lot of 44325 strings that look very much like `i8@0:4'. They are signatures of 44326 Objective-C methods. 44327 44328 44329 File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 44330 44331 8.4 Garbage Collection 44332 ====================== 44333 44334 This section is specific for the GNU Objective-C runtime. If you are 44335 using a different runtime, you can skip it. 44336 44337 Support for garbage collection with the GNU runtime has been added by 44338 using a powerful conservative garbage collector, known as the 44339 Boehm-Demers-Weiser conservative garbage collector. 44340 44341 To enable the support for it you have to configure the compiler using 44342 an additional argument, `--enable-objc-gc'. This will build the 44343 boehm-gc library, and build an additional runtime library which has 44344 several enhancements to support the garbage collector. The new library 44345 has a new name, `libobjc_gc.a' to not conflict with the 44346 non-garbage-collected library. 44347 44348 When the garbage collector is used, the objects are allocated using the 44349 so-called typed memory allocation mechanism available in the 44350 Boehm-Demers-Weiser collector. This mode requires precise information 44351 on where pointers are located inside objects. This information is 44352 computed once per class, immediately after the class has been 44353 initialized. 44354 44355 There is a new runtime function `class_ivar_set_gcinvisible()' which 44356 can be used to declare a so-called "weak pointer" reference. Such a 44357 pointer is basically hidden for the garbage collector; this can be 44358 useful in certain situations, especially when you want to keep track of 44359 the allocated objects, yet allow them to be collected. This kind of 44360 pointers can only be members of objects, you cannot declare a global 44361 pointer as a weak reference. Every type which is a pointer type can be 44362 declared a weak pointer, including `id', `Class' and `SEL'. 44363 44364 Here is an example of how to use this feature. Suppose you want to 44365 implement a class whose instances hold a weak pointer reference; the 44366 following class does this: 44367 44368 44369 @interface WeakPointer : Object 44370 { 44371 const void* weakPointer; 44372 } 44373 44374 - initWithPointer:(const void*)p; 44375 - (const void*)weakPointer; 44376 @end 44377 44378 44379 @implementation WeakPointer 44380 44381 + (void)initialize 44382 { 44383 if (self == objc_lookUpClass ("WeakPointer")) 44384 class_ivar_set_gcinvisible (self, "weakPointer", YES); 44385 } 44386 44387 - initWithPointer:(const void*)p 44388 { 44389 weakPointer = p; 44390 return self; 44391 } 44392 44393 - (const void*)weakPointer 44394 { 44395 return weakPointer; 44396 } 44397 44398 @end 44399 44400 Weak pointers are supported through a new type character specifier 44401 represented by the `!' character. The `class_ivar_set_gcinvisible()' 44402 function adds or removes this specifier to the string type description 44403 of the instance variable named as argument. 44404 44405 44406 File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 44407 44408 8.5 Constant string objects 44409 =========================== 44410 44411 GNU Objective-C provides constant string objects that are generated 44412 directly by the compiler. You declare a constant string object by 44413 prefixing a C constant string with the character `@': 44414 44415 id myString = @"this is a constant string object"; 44416 44417 The constant string objects are by default instances of the 44418 `NXConstantString' class which is provided by the GNU Objective-C 44419 runtime. To get the definition of this class you must include the 44420 `objc/NXConstStr.h' header file. 44421 44422 User defined libraries may want to implement their own constant string 44423 class. To be able to support them, the GNU Objective-C compiler 44424 provides a new command line options 44425 `-fconstant-string-class=CLASS-NAME'. The provided class should adhere 44426 to a strict structure, the same as `NXConstantString''s structure: 44427 44428 44429 @interface MyConstantStringClass 44430 { 44431 Class isa; 44432 char *c_string; 44433 unsigned int len; 44434 } 44435 @end 44436 44437 `NXConstantString' inherits from `Object'; user class libraries may 44438 choose to inherit the customized constant string class from a different 44439 class than `Object'. There is no requirement in the methods the 44440 constant string class has to implement, but the final ivar layout of 44441 the class must be the compatible with the given structure. 44442 44443 When the compiler creates the statically allocated constant string 44444 object, the `c_string' field will be filled by the compiler with the 44445 string; the `length' field will be filled by the compiler with the 44446 string length; the `isa' pointer will be filled with `NULL' by the 44447 compiler, and it will later be fixed up automatically at runtime by the 44448 GNU Objective-C runtime library to point to the class which was set by 44449 the `-fconstant-string-class' option when the object file is loaded (if 44450 you wonder how it works behind the scenes, the name of the class to 44451 use, and the list of static objects to fixup, are stored by the 44452 compiler in the object file in a place where the GNU runtime library 44453 will find them at runtime). 44454 44455 As a result, when a file is compiled with the 44456 `-fconstant-string-class' option, all the constant string objects will 44457 be instances of the class specified as argument to this option. It is 44458 possible to have multiple compilation units referring to different 44459 constant string classes, neither the compiler nor the linker impose any 44460 restrictions in doing this. 44461 44462 44463 File: gcc.info, Node: compatibility_alias, Next: Exceptions, Prev: Constant string objects, Up: Objective-C 44464 44465 8.6 compatibility_alias 44466 ======================= 44467 44468 The keyword `@compatibility_alias' allows you to define a class name as 44469 equivalent to another class name. For example: 44470 44471 @compatibility_alias WOApplication GSWApplication; 44472 44473 tells the compiler that each time it encounters `WOApplication' as a 44474 class name, it should replace it with `GSWApplication' (that is, 44475 `WOApplication' is just an alias for `GSWApplication'). 44476 44477 There are some constraints on how this can be used-- 44478 44479 * `WOApplication' (the alias) must not be an existing class; 44480 44481 * `GSWApplication' (the real class) must be an existing class. 44482 44483 44484 44485 File: gcc.info, Node: Exceptions, Next: Synchronization, Prev: compatibility_alias, Up: Objective-C 44486 44487 8.7 Exceptions 44488 ============== 44489 44490 GNU Objective-C provides exception support built into the language, as 44491 in the following example: 44492 44493 @try { 44494 ... 44495 @throw expr; 44496 ... 44497 } 44498 @catch (AnObjCClass *exc) { 44499 ... 44500 @throw expr; 44501 ... 44502 @throw; 44503 ... 44504 } 44505 @catch (AnotherClass *exc) { 44506 ... 44507 } 44508 @catch (id allOthers) { 44509 ... 44510 } 44511 @finally { 44512 ... 44513 @throw expr; 44514 ... 44515 } 44516 44517 The `@throw' statement may appear anywhere in an Objective-C or 44518 Objective-C++ program; when used inside of a `@catch' block, the 44519 `@throw' may appear without an argument (as shown above), in which case 44520 the object caught by the `@catch' will be rethrown. 44521 44522 Note that only (pointers to) Objective-C objects may be thrown and 44523 caught using this scheme. When an object is thrown, it will be caught 44524 by the nearest `@catch' clause capable of handling objects of that 44525 type, analogously to how `catch' blocks work in C++ and Java. A 44526 `@catch(id ...)' clause (as shown above) may also be provided to catch 44527 any and all Objective-C exceptions not caught by previous `@catch' 44528 clauses (if any). 44529 44530 The `@finally' clause, if present, will be executed upon exit from the 44531 immediately preceding `@try ... @catch' section. This will happen 44532 regardless of whether any exceptions are thrown, caught or rethrown 44533 inside the `@try ... @catch' section, analogously to the behavior of 44534 the `finally' clause in Java. 44535 44536 There are several caveats to using the new exception mechanism: 44537 44538 * The `-fobjc-exceptions' command line option must be used when 44539 compiling Objective-C files that use exceptions. 44540 44541 * With the GNU runtime, exceptions are always implemented as "native" 44542 exceptions and it is recommended that the `-fexceptions' and 44543 `-shared-libgcc' options are used when linking. 44544 44545 * With the NeXT runtime, although currently designed to be binary 44546 compatible with `NS_HANDLER'-style idioms provided by the 44547 `NSException' class, the new exceptions can only be used on Mac OS 44548 X 10.3 (Panther) and later systems, due to additional functionality 44549 needed in the NeXT Objective-C runtime. 44550 44551 * As mentioned above, the new exceptions do not support handling 44552 types other than Objective-C objects. Furthermore, when used from 44553 Objective-C++, the Objective-C exception model does not 44554 interoperate with C++ exceptions at this time. This means you 44555 cannot `@throw' an exception from Objective-C and `catch' it in 44556 C++, or vice versa (i.e., `throw ... @catch'). 44557 44558 44559 File: gcc.info, Node: Synchronization, Next: Fast enumeration, Prev: Exceptions, Up: Objective-C 44560 44561 8.8 Synchronization 44562 =================== 44563 44564 GNU Objective-C provides support for synchronized blocks: 44565 44566 @synchronized (ObjCClass *guard) { 44567 ... 44568 } 44569 44570 Upon entering the `@synchronized' block, a thread of execution shall 44571 first check whether a lock has been placed on the corresponding `guard' 44572 object by another thread. If it has, the current thread shall wait 44573 until the other thread relinquishes its lock. Once `guard' becomes 44574 available, the current thread will place its own lock on it, execute 44575 the code contained in the `@synchronized' block, and finally relinquish 44576 the lock (thereby making `guard' available to other threads). 44577 44578 Unlike Java, Objective-C does not allow for entire methods to be 44579 marked `@synchronized'. Note that throwing exceptions out of 44580 `@synchronized' blocks is allowed, and will cause the guarding object 44581 to be unlocked properly. 44582 44583 Because of the interactions between synchronization and exception 44584 handling, you can only use `@synchronized' when compiling with 44585 exceptions enabled, that is with the command line option 44586 `-fobjc-exceptions'. 44587 44588 44589 File: gcc.info, Node: Fast enumeration, Next: Messaging with the GNU Objective-C runtime, Prev: Synchronization, Up: Objective-C 44590 44591 8.9 Fast enumeration 44592 ==================== 44593 44594 * Menu: 44595 44596 * Using fast enumeration:: 44597 * c99-like fast enumeration syntax:: 44598 * Fast enumeration details:: 44599 * Fast enumeration protocol:: 44600 44601 44602 File: gcc.info, Node: Using fast enumeration, Next: c99-like fast enumeration syntax, Up: Fast enumeration 44603 44604 8.9.1 Using fast enumeration 44605 ---------------------------- 44606 44607 GNU Objective-C provides support for the fast enumeration syntax: 44608 44609 id array = ...; 44610 id object; 44611 44612 for (object in array) 44613 { 44614 /* Do something with 'object' */ 44615 } 44616 44617 `array' needs to be an Objective-C object (usually a collection 44618 object, for example an array, a dictionary or a set) which implements 44619 the "Fast Enumeration Protocol" (see below). If you are using a 44620 Foundation library such as GNUstep Base or Apple Cocoa Foundation, all 44621 collection objects in the library implement this protocol and can be 44622 used in this way. 44623 44624 The code above would iterate over all objects in `array'. For each of 44625 them, it assigns it to `object', then executes the `Do something with 44626 'object'' statements. 44627 44628 Here is a fully worked-out example using a Foundation library (which 44629 provides the implementation of `NSArray', `NSString' and `NSLog'): 44630 44631 NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil]; 44632 NSString *object; 44633 44634 for (object in array) 44635 NSLog (@"Iterating over %@", object); 44636 44637 44638 File: gcc.info, Node: c99-like fast enumeration syntax, Next: Fast enumeration details, Prev: Using fast enumeration, Up: Fast enumeration 44639 44640 8.9.2 c99-like fast enumeration syntax 44641 -------------------------------------- 44642 44643 A c99-like declaration syntax is also allowed: 44644 44645 id array = ...; 44646 44647 for (id object in array) 44648 { 44649 /* Do something with 'object' */ 44650 } 44651 44652 this is completely equivalent to: 44653 44654 id array = ...; 44655 44656 { 44657 id object; 44658 for (object in array) 44659 { 44660 /* Do something with 'object' */ 44661 } 44662 } 44663 44664 but can save some typing. 44665 44666 Note that the option `-std=c99' is not required to allow this syntax 44667 in Objective-C. 44668 44669 44670 File: gcc.info, Node: Fast enumeration details, Next: Fast enumeration protocol, Prev: c99-like fast enumeration syntax, Up: Fast enumeration 44671 44672 8.9.3 Fast enumeration details 44673 ------------------------------ 44674 44675 Here is a more technical description with the gory details. Consider 44676 the code 44677 44678 for (OBJECT EXPRESSION in COLLECTION EXPRESSION) 44679 { 44680 STATEMENTS 44681 } 44682 44683 here is what happens when you run it: 44684 44685 * `COLLECTION EXPRESSION' is evaluated exactly once and the result 44686 is used as the collection object to iterate over. This means it 44687 is safe to write code such as `for (object in [NSDictionary 44688 keyEnumerator]) ...'. 44689 44690 * the iteration is implemented by the compiler by repeatedly getting 44691 batches of objects from the collection object using the fast 44692 enumeration protocol (see below), then iterating over all objects 44693 in the batch. This is faster than a normal enumeration where 44694 objects are retrieved one by one (hence the name "fast 44695 enumeration"). 44696 44697 * if there are no objects in the collection, then `OBJECT 44698 EXPRESSION' is set to `nil' and the loop immediately terminates. 44699 44700 * if there are objects in the collection, then for each object in the 44701 collection (in the order they are returned) `OBJECT EXPRESSION' is 44702 set to the object, then `STATEMENTS' are executed. 44703 44704 * `STATEMENTS' can contain `break' and `continue' commands, which 44705 will abort the iteration or skip to the next loop iteration as 44706 expected. 44707 44708 * when the iteration ends because there are no more objects to 44709 iterate over, `OBJECT EXPRESSION' is set to `nil'. This allows 44710 you to determine whether the iteration finished because a `break' 44711 command was used (in which case `OBJECT EXPRESSION' will remain 44712 set to the last object that was iterated over) or because it 44713 iterated over all the objects (in which case `OBJECT EXPRESSION' 44714 will be set to `nil'). 44715 44716 * `STATEMENTS' must not make any changes to the collection object; 44717 if they do, it is a hard error and the fast enumeration terminates 44718 by invoking `objc_enumerationMutation', a runtime function that 44719 normally aborts the program but which can be customized by 44720 Foundation libraries via `objc_set_mutation_handler' to do 44721 something different, such as raising an exception. 44722 44723 44724 44725 File: gcc.info, Node: Fast enumeration protocol, Prev: Fast enumeration details, Up: Fast enumeration 44726 44727 8.9.4 Fast enumeration protocol 44728 ------------------------------- 44729 44730 If you want your own collection object to be usable with fast 44731 enumeration, you need to have it implement the method 44732 44733 - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state 44734 objects: (id *)objects 44735 count: (unsigned long)len; 44736 44737 where `NSFastEnumerationState' must be defined in your code as follows: 44738 44739 typedef struct 44740 { 44741 unsigned long state; 44742 id *itemsPtr; 44743 unsigned long *mutationsPtr; 44744 unsigned long extra[5]; 44745 } NSFastEnumerationState; 44746 44747 If no `NSFastEnumerationState' is defined in your code, the compiler 44748 will automatically replace `NSFastEnumerationState *' with `struct 44749 __objcFastEnumerationState *', where that type is silently defined by 44750 the compiler in an identical way. This can be confusing and we 44751 recommend that you define `NSFastEnumerationState' (as shown above) 44752 instead. 44753 44754 The method is called repeatedly during a fast enumeration to retrieve 44755 batches of objects. Each invocation of the method should retrieve the 44756 next batch of objects. 44757 44758 The return value of the method is the number of objects in the current 44759 batch; this should not exceed `len', which is the maximum size of a 44760 batch as requested by the caller. The batch itself is returned in the 44761 `itemsPtr' field of the `NSFastEnumerationState' struct. 44762 44763 To help with returning the objects, the `objects' array is a C array 44764 preallocated by the caller (on the stack) of size `len'. In many cases 44765 you can put the objects you want to return in that `objects' array, 44766 then do `itemsPtr = objects'. But you don't have to; if your 44767 collection already has the objects to return in some form of C array, 44768 it could return them from there instead. 44769 44770 The `state' and `extra' fields of the `NSFastEnumerationState' 44771 structure allows your collection object to keep track of the state of 44772 the enumeration. In a simple array implementation, `state' may keep 44773 track of the index of the last object that was returned, and `extra' 44774 may be unused. 44775 44776 The `mutationsPtr' field of the `NSFastEnumerationState' is used to 44777 keep track of mutations. It should point to a number; before working 44778 on each object, the fast enumeration loop will check that this number 44779 has not changed. If it has, a mutation has happened and the fast 44780 enumeration will abort. So, `mutationsPtr' could be set to point to 44781 some sort of version number of your collection, which is increased by 44782 one every time there is a change (for example when an object is added 44783 or removed). Or, if you are content with less strict mutation checks, 44784 it could point to the number of objects in your collection or some 44785 other value that can be checked to perform an approximate check that 44786 the collection has not been mutated. 44787 44788 Finally, note how we declared the `len' argument and the return value 44789 to be of type `unsigned long'. They could also be declared to be of 44790 type `unsigned int' and everything would still work. 44791 44792 44793 File: gcc.info, Node: Messaging with the GNU Objective-C runtime, Prev: Fast enumeration, Up: Objective-C 44794 44795 8.10 Messaging with the GNU Objective-C runtime 44796 =============================================== 44797 44798 This section is specific for the GNU Objective-C runtime. If you are 44799 using a different runtime, you can skip it. 44800 44801 The implementation of messaging in the GNU Objective-C runtime is 44802 designed to be portable, and so is based on standard C. 44803 44804 Sending a message in the GNU Objective-C runtime is composed of two 44805 separate steps. First, there is a call to the lookup function, 44806 `objc_msg_lookup ()' (or, in the case of messages to super, 44807 `objc_msg_lookup_super ()'). This runtime function takes as argument 44808 the receiver and the selector of the method to be called; it returns 44809 the `IMP', that is a pointer to the function implementing the method. 44810 The second step of method invocation consists of casting this pointer 44811 function to the appropriate function pointer type, and calling the 44812 function pointed to it with the right arguments. 44813 44814 For example, when the compiler encounters a method invocation such as 44815 `[object init]', it compiles it into a call to `objc_msg_lookup 44816 (object, @selector(init))' followed by a cast of the returned value to 44817 the appropriate function pointer type, and then it calls it. 44818 44819 * Menu: 44820 44821 * Dynamically registering methods:: 44822 * Forwarding hook:: 44823 44824 44825 File: gcc.info, Node: Dynamically registering methods, Next: Forwarding hook, Up: Messaging with the GNU Objective-C runtime 44826 44827 8.10.1 Dynamically registering methods 44828 -------------------------------------- 44829 44830 If `objc_msg_lookup()' does not find a suitable method implementation, 44831 because the receiver does not implement the required method, it tries 44832 to see if the class can dynamically register the method. 44833 44834 To do so, the runtime checks if the class of the receiver implements 44835 the method 44836 44837 + (BOOL) resolveInstanceMethod: (SEL)selector; 44838 44839 in the case of an instance method, or 44840 44841 + (BOOL) resolveClassMethod: (SEL)selector; 44842 44843 in the case of a class method. If the class implements it, the 44844 runtime invokes it, passing as argument the selector of the original 44845 method, and if it returns `YES', the runtime tries the lookup again, 44846 which could now succeed if a matching method was added dynamically by 44847 `+resolveInstanceMethod:' or `+resolveClassMethod:'. 44848 44849 This allows classes to dynamically register methods (by adding them to 44850 the class using `class_addMethod') when they are first called. To do 44851 so, a class should implement `+resolveInstanceMethod:' (or, depending 44852 on the case, `+resolveClassMethod:') and have it recognize the 44853 selectors of methods that can be registered dynamically at runtime, 44854 register them, and return `YES'. It should return `NO' for methods 44855 that it does not dynamically registered at runtime. 44856 44857 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not 44858 implemented or returns `NO', the runtime then tries the forwarding hook. 44859 44860 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was 44861 added to the GNU Objective-C runtime in GCC version 4.6. 44862 44863 44864 File: gcc.info, Node: Forwarding hook, Prev: Dynamically registering methods, Up: Messaging with the GNU Objective-C runtime 44865 44866 8.10.2 Forwarding hook 44867 ---------------------- 44868 44869 The GNU Objective-C runtime provides a hook, called 44870 `__objc_msg_forward2', which is called by `objc_msg_lookup()' when it 44871 can't find a method implementation in the runtime tables and after 44872 calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been 44873 attempted and did not succeed in dynamically registering the method. 44874 44875 To configure the hook, you set the global variable 44876 `__objc_msg_forward2' to a function with the same argument and return 44877 types of `objc_msg_lookup()'. When `objc_msg_lookup()' can not find a 44878 method implementation, it invokes the hook function you provided to get 44879 a method implementation to return. So, in practice 44880 `__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by 44881 adding some custom code that is called to do a further lookup when no 44882 standard method implementation can be found using the normal lookup. 44883 44884 This hook is generally reserved for "Foundation" libraries such as 44885 GNUstep Base, which use it to implement their high-level method 44886 forwarding API, typically based around the `forwardInvocation:' method. 44887 So, unless you are implementing your own "Foundation" library, you 44888 should not set this hook. 44889 44890 In a typical forwarding implementation, the `__objc_msg_forward2' hook 44891 function determines the argument and return type of the method that is 44892 being looked up, and then creates a function that takes these arguments 44893 and has that return type, and returns it to the caller. Creating this 44894 function is non-trivial and is typically performed using a dedicated 44895 library such as `libffi'. 44896 44897 The forwarding method implementation thus created is returned by 44898 `objc_msg_lookup()' and is executed as if it was a normal method 44899 implementation. When the forwarding method implementation is called, 44900 it is usually expected to pack all arguments into some sort of object 44901 (typically, an `NSInvocation' in a "Foundation" library), and hand it 44902 over to the programmer (`forwardInvocation:') who is then allowed to 44903 manipulate the method invocation using a high-level API provided by the 44904 "Foundation" library. For example, the programmer may want to examine 44905 the method invocation arguments and name and potentially change them 44906 before forwarding the method invocation to one or more local objects 44907 (`performInvocation:') or even to remote objects (by using Distributed 44908 Objects or some other mechanism). When all this completes, the return 44909 value is passed back and must be returned correctly to the original 44910 caller. 44911 44912 Note that the GNU Objective-C runtime currently provides no support 44913 for method forwarding or method invocations other than the 44914 `__objc_msg_forward2' hook. 44915 44916 If the forwarding hook does not exist or returns `NULL', the runtime 44917 currently attempts forwarding using an older, deprecated API, and if 44918 that fails, it aborts the program. In future versions of the GNU 44919 Objective-C runtime, the runtime will immediately abort. 44920 44921 44922 File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 44923 44924 9 Binary Compatibility 44925 ********************** 44926 44927 Binary compatibility encompasses several related concepts: 44928 44929 "application binary interface (ABI)" 44930 The set of runtime conventions followed by all of the tools that 44931 deal with binary representations of a program, including 44932 compilers, assemblers, linkers, and language runtime support. 44933 Some ABIs are formal with a written specification, possibly 44934 designed by multiple interested parties. Others are simply the 44935 way things are actually done by a particular set of tools. 44936 44937 "ABI conformance" 44938 A compiler conforms to an ABI if it generates code that follows 44939 all of the specifications enumerated by that ABI. A library 44940 conforms to an ABI if it is implemented according to that ABI. An 44941 application conforms to an ABI if it is built using tools that 44942 conform to that ABI and does not contain source code that 44943 specifically changes behavior specified by the ABI. 44944 44945 "calling conventions" 44946 Calling conventions are a subset of an ABI that specify of how 44947 arguments are passed and function results are returned. 44948 44949 "interoperability" 44950 Different sets of tools are interoperable if they generate files 44951 that can be used in the same program. The set of tools includes 44952 compilers, assemblers, linkers, libraries, header files, startup 44953 files, and debuggers. Binaries produced by different sets of 44954 tools are not interoperable unless they implement the same ABI. 44955 This applies to different versions of the same tools as well as 44956 tools from different vendors. 44957 44958 "intercallability" 44959 Whether a function in a binary built by one set of tools can call a 44960 function in a binary built by a different set of tools is a subset 44961 of interoperability. 44962 44963 "implementation-defined features" 44964 Language standards include lists of implementation-defined 44965 features whose behavior can vary from one implementation to 44966 another. Some of these features are normally covered by a 44967 platform's ABI and others are not. The features that are not 44968 covered by an ABI generally affect how a program behaves, but not 44969 intercallability. 44970 44971 "compatibility" 44972 Conformance to the same ABI and the same behavior of 44973 implementation-defined features are both relevant for 44974 compatibility. 44975 44976 The application binary interface implemented by a C or C++ compiler 44977 affects code generation and runtime support for: 44978 44979 * size and alignment of data types 44980 44981 * layout of structured types 44982 44983 * calling conventions 44984 44985 * register usage conventions 44986 44987 * interfaces for runtime arithmetic support 44988 44989 * object file formats 44990 44991 In addition, the application binary interface implemented by a C++ 44992 compiler affects code generation and runtime support for: 44993 * name mangling 44994 44995 * exception handling 44996 44997 * invoking constructors and destructors 44998 44999 * layout, alignment, and padding of classes 45000 45001 * layout and alignment of virtual tables 45002 45003 Some GCC compilation options cause the compiler to generate code that 45004 does not conform to the platform's default ABI. Other options cause 45005 different program behavior for implementation-defined features that are 45006 not covered by an ABI. These options are provided for consistency with 45007 other compilers that do not follow the platform's default ABI or the 45008 usual behavior of implementation-defined features for the platform. Be 45009 very careful about using such options. 45010 45011 Most platforms have a well-defined ABI that covers C code, but ABIs 45012 that cover C++ functionality are not yet common. 45013 45014 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 45015 written, vendor-neutral C++ ABI that was designed to be specific to 45016 64-bit Itanium but also includes generic specifications that apply to 45017 any platform. This C++ ABI is also implemented by other compiler 45018 vendors on some platforms, notably GNU/Linux and BSD systems. We have 45019 tried hard to provide a stable ABI that will be compatible with future 45020 GCC releases, but it is possible that we will encounter problems that 45021 make this difficult. Such problems could include different 45022 interpretations of the C++ ABI by different vendors, bugs in the ABI, or 45023 bugs in the implementation of the ABI in different compilers. GCC's 45024 `-Wabi' switch warns when G++ generates code that is probably not 45025 compatible with the C++ ABI. 45026 45027 The C++ library used with a C++ compiler includes the Standard C++ 45028 Library, with functionality defined in the C++ Standard, plus language 45029 runtime support. The runtime support is included in a C++ ABI, but 45030 there is no formal ABI for the Standard C++ Library. Two 45031 implementations of that library are interoperable if one follows the 45032 de-facto ABI of the other and if they are both built with the same 45033 compiler, or with compilers that conform to the same ABI for C++ 45034 compiler and runtime support. 45035 45036 When G++ and another C++ compiler conform to the same C++ ABI, but the 45037 implementations of the Standard C++ Library that they normally use do 45038 not follow the same ABI for the Standard C++ Library, object files 45039 built with those compilers can be used in the same program only if they 45040 use the same C++ library. This requires specifying the location of the 45041 C++ library header files when invoking the compiler whose usual library 45042 is not being used. The location of GCC's C++ header files depends on 45043 how the GCC build was configured, but can be seen by using the G++ `-v' 45044 option. With default configuration options for G++ 3.3 the compile 45045 line for a different C++ compiler needs to include 45046 45047 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 45048 45049 Similarly, compiling code with G++ that must use a C++ library other 45050 than the GNU C++ library requires specifying the location of the header 45051 files for that other library. 45052 45053 The most straightforward way to link a program to use a particular C++ 45054 library is to use a C++ driver that specifies that C++ library by 45055 default. The `g++' driver, for example, tells the linker where to find 45056 GCC's C++ library (`libstdc++') plus the other libraries and startup 45057 files it needs, in the proper order. 45058 45059 If a program must use a different C++ library and it's not possible to 45060 do the final link using a C++ driver that uses that library by default, 45061 it is necessary to tell `g++' the location and name of that library. 45062 It might also be necessary to specify different startup files and other 45063 runtime support libraries, and to suppress the use of GCC's support 45064 libraries with one or more of the options `-nostdlib', `-nostartfiles', 45065 and `-nodefaultlibs'. 45066 45067 45068 File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 45069 45070 10 `gcov'--a Test Coverage Program 45071 ********************************** 45072 45073 `gcov' is a tool you can use in conjunction with GCC to test code 45074 coverage in your programs. 45075 45076 * Menu: 45077 45078 * Gcov Intro:: Introduction to gcov. 45079 * Invoking Gcov:: How to use gcov. 45080 * Gcov and Optimization:: Using gcov with GCC optimization. 45081 * Gcov Data Files:: The files used by gcov. 45082 * Cross-profiling:: Data file relocation. 45083 45084 45085 File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 45086 45087 10.1 Introduction to `gcov' 45088 =========================== 45089 45090 `gcov' is a test coverage program. Use it in concert with GCC to 45091 analyze your programs to help create more efficient, faster running 45092 code and to discover untested parts of your program. You can use 45093 `gcov' as a profiling tool to help discover where your optimization 45094 efforts will best affect your code. You can also use `gcov' along with 45095 the other profiling tool, `gprof', to assess which parts of your code 45096 use the greatest amount of computing time. 45097 45098 Profiling tools help you analyze your code's performance. Using a 45099 profiler such as `gcov' or `gprof', you can find out some basic 45100 performance statistics, such as: 45101 45102 * how often each line of code executes 45103 45104 * what lines of code are actually executed 45105 45106 * how much computing time each section of code uses 45107 45108 Once you know these things about how your code works when compiled, you 45109 can look at each module to see which modules should be optimized. 45110 `gcov' helps you determine where to work on optimization. 45111 45112 Software developers also use coverage testing in concert with 45113 testsuites, to make sure software is actually good enough for a release. 45114 Testsuites can verify that a program works as expected; a coverage 45115 program tests to see how much of the program is exercised by the 45116 testsuite. Developers can then determine what kinds of test cases need 45117 to be added to the testsuites to create both better testing and a better 45118 final product. 45119 45120 You should compile your code without optimization if you plan to use 45121 `gcov' because the optimization, by combining some lines of code into 45122 one function, may not give you as much information as you need to look 45123 for `hot spots' where the code is using a great deal of computer time. 45124 Likewise, because `gcov' accumulates statistics by line (at the lowest 45125 resolution), it works best with a programming style that places only 45126 one statement on each line. If you use complicated macros that expand 45127 to loops or to other control structures, the statistics are less 45128 helpful--they only report on the line where the macro call appears. If 45129 your complex macros behave like functions, you can replace them with 45130 inline functions to solve this problem. 45131 45132 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 45133 many times each line of a source file `SOURCEFILE.c' has executed. You 45134 can use these logfiles along with `gprof' to aid in fine-tuning the 45135 performance of your programs. `gprof' gives timing information you can 45136 use along with the information you get from `gcov'. 45137 45138 `gcov' works only on code compiled with GCC. It is not compatible 45139 with any other profiling or test coverage mechanism. 45140 45141 45142 File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 45143 45144 10.2 Invoking `gcov' 45145 ==================== 45146 45147 gcov [OPTIONS] FILES 45148 45149 `gcov' accepts the following options: 45150 45151 `-h' 45152 `--help' 45153 Display help about using `gcov' (on the standard output), and exit 45154 without doing any further processing. 45155 45156 `-v' 45157 `--version' 45158 Display the `gcov' version number (on the standard output), and 45159 exit without doing any further processing. 45160 45161 `-a' 45162 `--all-blocks' 45163 Write individual execution counts for every basic block. Normally 45164 gcov outputs execution counts only for the main blocks of a line. 45165 With this option you can determine if blocks within a single line 45166 are not being executed. 45167 45168 `-b' 45169 `--branch-probabilities' 45170 Write branch frequencies to the output file, and write branch 45171 summary info to the standard output. This option allows you to 45172 see how often each branch in your program was taken. 45173 Unconditional branches will not be shown, unless the `-u' option 45174 is given. 45175 45176 `-c' 45177 `--branch-counts' 45178 Write branch frequencies as the number of branches taken, rather 45179 than the percentage of branches taken. 45180 45181 `-n' 45182 `--no-output' 45183 Do not create the `gcov' output file. 45184 45185 `-l' 45186 `--long-file-names' 45187 Create long file names for included source files. For example, if 45188 the header file `x.h' contains code, and was included in the file 45189 `a.c', then running `gcov' on the file `a.c' will produce an 45190 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 45191 can be useful if `x.h' is included in multiple source files and 45192 you want to see the individual contributions. If you use the `-p' 45193 option, both the including and included file names will be 45194 complete path names. 45195 45196 `-p' 45197 `--preserve-paths' 45198 Preserve complete path information in the names of generated 45199 `.gcov' files. Without this option, just the filename component is 45200 used. With this option, all directories are used, with `/' 45201 characters translated to `#' characters, `.' directory components 45202 removed and unremoveable `..' components renamed to `^'. This is 45203 useful if sourcefiles are in several different directories. 45204 45205 `-r' 45206 `--relative-only' 45207 Only output information about source files with a relative pathname 45208 (after source prefix elision). Absolute paths are usually system 45209 header files and coverage of any inline functions therein is 45210 normally uninteresting. 45211 45212 `-f' 45213 `--function-summaries' 45214 Output summaries for each function in addition to the file level 45215 summary. 45216 45217 `-o DIRECTORY|FILE' 45218 `--object-directory DIRECTORY' 45219 `--object-file FILE' 45220 Specify either the directory containing the gcov data files, or the 45221 object path name. The `.gcno', and `.gcda' data files are 45222 searched for using this option. If a directory is specified, the 45223 data files are in that directory and named after the input file 45224 name, without its extension. If a file is specified here, the 45225 data files are named after that file, without its extension. 45226 45227 `-s DIRECTORY' 45228 `--source-prefix DIRECTORY' 45229 A prefix for source file names to remove when generating the output 45230 coverage files. This option is useful when building in a separate 45231 directory, and the pathname to the source directory is not wanted 45232 when determining the output file names. Note that this prefix 45233 detection is applied before determining whether the source file is 45234 absolute. 45235 45236 `-u' 45237 `--unconditional-branches' 45238 When branch probabilities are given, include those of 45239 unconditional branches. Unconditional branches are normally not 45240 interesting. 45241 45242 `-d' 45243 `--display-progress' 45244 Display the progress on the standard output. 45245 45246 45247 `gcov' should be run with the current directory the same as that when 45248 you invoked the compiler. Otherwise it will not be able to locate the 45249 source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 45250 current directory. These contain the coverage information of the 45251 source file they correspond to. One `.gcov' file is produced for each 45252 source (or header) file containing code, which was compiled to produce 45253 the data files. The MANGLEDNAME part of the output file name is 45254 usually simply the source file name, but can be something more 45255 complicated if the `-l' or `-p' options are given. Refer to those 45256 options for details. 45257 45258 If you invoke `gcov' with multiple input files, the contributions from 45259 each input file are summed. Typically you would invoke it with the 45260 same list of files as the final link of your executable. 45261 45262 The `.gcov' files contain the `:' separated fields along with program 45263 source code. The format is 45264 45265 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 45266 45267 Additional block information may succeed each line, when requested by 45268 command line option. The EXECUTION_COUNT is `-' for lines containing 45269 no code. Unexecuted lines are marked `#####' or `====', depending on 45270 whether they are reachable by non-exceptional paths or only exceptional 45271 paths such as C++ exception handlers, respectively. 45272 45273 Some lines of information at the start have LINE_NUMBER of zero. 45274 These preamble lines are of the form 45275 45276 -:0:TAG:VALUE 45277 45278 The ordering and number of these preamble lines will be augmented as 45279 `gcov' development progresses -- do not rely on them remaining 45280 unchanged. Use TAG to locate a particular preamble line. 45281 45282 The additional block information is of the form 45283 45284 TAG INFORMATION 45285 45286 The INFORMATION is human readable, but designed to be simple enough 45287 for machine parsing too. 45288 45289 When printing percentages, 0% and 100% are only printed when the values 45290 are _exactly_ 0% and 100% respectively. Other values which would 45291 conventionally be rounded to 0% or 100% are instead printed as the 45292 nearest non-boundary value. 45293 45294 When using `gcov', you must first compile your program with two 45295 special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 45296 compiler to generate additional information needed by gcov (basically a 45297 flow graph of the program) and also includes additional code in the 45298 object files for generating the extra profiling information needed by 45299 gcov. These additional files are placed in the directory where the 45300 object file is located. 45301 45302 Running the program will cause profile output to be generated. For 45303 each source file compiled with `-fprofile-arcs', an accompanying 45304 `.gcda' file will be placed in the object file directory. 45305 45306 Running `gcov' with your program's source file names as arguments will 45307 now produce a listing of the code along with frequency of execution for 45308 each line. For example, if your program is called `tmp.c', this is 45309 what you see when you use the basic `gcov' facility: 45310 45311 $ gcc -fprofile-arcs -ftest-coverage tmp.c 45312 $ a.out 45313 $ gcov tmp.c 45314 90.00% of 10 source lines executed in file tmp.c 45315 Creating tmp.c.gcov. 45316 45317 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 45318 45319 -: 0:Source:tmp.c 45320 -: 0:Graph:tmp.gcno 45321 -: 0:Data:tmp.gcda 45322 -: 0:Runs:1 45323 -: 0:Programs:1 45324 -: 1:#include <stdio.h> 45325 -: 2: 45326 -: 3:int main (void) 45327 1: 4:{ 45328 1: 5: int i, total; 45329 -: 6: 45330 1: 7: total = 0; 45331 -: 8: 45332 11: 9: for (i = 0; i < 10; i++) 45333 10: 10: total += i; 45334 -: 11: 45335 1: 12: if (total != 45) 45336 #####: 13: printf ("Failure\n"); 45337 -: 14: else 45338 1: 15: printf ("Success\n"); 45339 1: 16: return 0; 45340 -: 17:} 45341 45342 When you use the `-a' option, you will get individual block counts, 45343 and the output looks like this: 45344 45345 -: 0:Source:tmp.c 45346 -: 0:Graph:tmp.gcno 45347 -: 0:Data:tmp.gcda 45348 -: 0:Runs:1 45349 -: 0:Programs:1 45350 -: 1:#include <stdio.h> 45351 -: 2: 45352 -: 3:int main (void) 45353 1: 4:{ 45354 1: 4-block 0 45355 1: 5: int i, total; 45356 -: 6: 45357 1: 7: total = 0; 45358 -: 8: 45359 11: 9: for (i = 0; i < 10; i++) 45360 11: 9-block 0 45361 10: 10: total += i; 45362 10: 10-block 0 45363 -: 11: 45364 1: 12: if (total != 45) 45365 1: 12-block 0 45366 #####: 13: printf ("Failure\n"); 45367 $$$$$: 13-block 0 45368 -: 14: else 45369 1: 15: printf ("Success\n"); 45370 1: 15-block 0 45371 1: 16: return 0; 45372 1: 16-block 0 45373 -: 17:} 45374 45375 In this mode, each basic block is only shown on one line - the last 45376 line of the block. A multi-line block will only contribute to the 45377 execution count of that last line, and other lines will not be shown to 45378 contain code, unless previous blocks end on those lines. The total 45379 execution count of a line is shown and subsequent lines show the 45380 execution counts for individual blocks that end on that line. After 45381 each block, the branch and call counts of the block will be shown, if 45382 the `-b' option is given. 45383 45384 Because of the way GCC instruments calls, a call count can be shown 45385 after a line with no individual blocks. As you can see, line 13 45386 contains a basic block that was not executed. 45387 45388 When you use the `-b' option, your output looks like this: 45389 45390 $ gcov -b tmp.c 45391 90.00% of 10 source lines executed in file tmp.c 45392 80.00% of 5 branches executed in file tmp.c 45393 80.00% of 5 branches taken at least once in file tmp.c 45394 50.00% of 2 calls executed in file tmp.c 45395 Creating tmp.c.gcov. 45396 45397 Here is a sample of a resulting `tmp.c.gcov' file: 45398 45399 -: 0:Source:tmp.c 45400 -: 0:Graph:tmp.gcno 45401 -: 0:Data:tmp.gcda 45402 -: 0:Runs:1 45403 -: 0:Programs:1 45404 -: 1:#include <stdio.h> 45405 -: 2: 45406 -: 3:int main (void) 45407 function main called 1 returned 1 blocks executed 75% 45408 1: 4:{ 45409 1: 5: int i, total; 45410 -: 6: 45411 1: 7: total = 0; 45412 -: 8: 45413 11: 9: for (i = 0; i < 10; i++) 45414 branch 0 taken 91% (fallthrough) 45415 branch 1 taken 9% 45416 10: 10: total += i; 45417 -: 11: 45418 1: 12: if (total != 45) 45419 branch 0 taken 0% (fallthrough) 45420 branch 1 taken 100% 45421 #####: 13: printf ("Failure\n"); 45422 call 0 never executed 45423 -: 14: else 45424 1: 15: printf ("Success\n"); 45425 call 0 called 1 returned 100% 45426 1: 16: return 0; 45427 -: 17:} 45428 45429 For each function, a line is printed showing how many times the 45430 function is called, how many times it returns and what percentage of the 45431 function's blocks were executed. 45432 45433 For each basic block, a line is printed after the last line of the 45434 basic block describing the branch or call that ends the basic block. 45435 There can be multiple branches and calls listed for a single source 45436 line if there are multiple basic blocks that end on that line. In this 45437 case, the branches and calls are each given a number. There is no 45438 simple way to map these branches and calls back to source constructs. 45439 In general, though, the lowest numbered branch or call will correspond 45440 to the leftmost construct on the source line. 45441 45442 For a branch, if it was executed at least once, then a percentage 45443 indicating the number of times the branch was taken divided by the 45444 number of times the branch was executed will be printed. Otherwise, the 45445 message "never executed" is printed. 45446 45447 For a call, if it was executed at least once, then a percentage 45448 indicating the number of times the call returned divided by the number 45449 of times the call was executed will be printed. This will usually be 45450 100%, but may be less for functions that call `exit' or `longjmp', and 45451 thus may not return every time they are called. 45452 45453 The execution counts are cumulative. If the example program were 45454 executed again without removing the `.gcda' file, the count for the 45455 number of times each line in the source was executed would be added to 45456 the results of the previous run(s). This is potentially useful in 45457 several ways. For example, it could be used to accumulate data over a 45458 number of program runs as part of a test verification suite, or to 45459 provide more accurate long-term information over a large number of 45460 program runs. 45461 45462 The data in the `.gcda' files is saved immediately before the program 45463 exits. For each source file compiled with `-fprofile-arcs', the 45464 profiling code first attempts to read in an existing `.gcda' file; if 45465 the file doesn't match the executable (differing number of basic block 45466 counts) it will ignore the contents of the file. It then adds in the 45467 new execution counts and finally writes the data to the file. 45468 45469 45470 File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 45471 45472 10.3 Using `gcov' with GCC Optimization 45473 ======================================= 45474 45475 If you plan to use `gcov' to help optimize your code, you must first 45476 compile your program with two special GCC options: `-fprofile-arcs 45477 -ftest-coverage'. Aside from that, you can use any other GCC options; 45478 but if you want to prove that every single line in your program was 45479 executed, you should not compile with optimization at the same time. 45480 On some machines the optimizer can eliminate some simple code lines by 45481 combining them with other lines. For example, code like this: 45482 45483 if (a != b) 45484 c = 1; 45485 else 45486 c = 0; 45487 45488 can be compiled into one instruction on some machines. In this case, 45489 there is no way for `gcov' to calculate separate execution counts for 45490 each line because there isn't separate code for each line. Hence the 45491 `gcov' output looks like this if you compiled the program with 45492 optimization: 45493 45494 100: 12:if (a != b) 45495 100: 13: c = 1; 45496 100: 14:else 45497 100: 15: c = 0; 45498 45499 The output shows that this block of code, combined by optimization, 45500 executed 100 times. In one sense this result is correct, because there 45501 was only one instruction representing all four of these lines. However, 45502 the output does not indicate how many times the result was 0 and how 45503 many times the result was 1. 45504 45505 Inlineable functions can create unexpected line counts. Line counts 45506 are shown for the source code of the inlineable function, but what is 45507 shown depends on where the function is inlined, or if it is not inlined 45508 at all. 45509 45510 If the function is not inlined, the compiler must emit an out of line 45511 copy of the function, in any object file that needs it. If `fileA.o' 45512 and `fileB.o' both contain out of line bodies of a particular 45513 inlineable function, they will also both contain coverage counts for 45514 that function. When `fileA.o' and `fileB.o' are linked together, the 45515 linker will, on many systems, select one of those out of line bodies 45516 for all calls to that function, and remove or ignore the other. 45517 Unfortunately, it will not remove the coverage counters for the unused 45518 function body. Hence when instrumented, all but one use of that 45519 function will show zero counts. 45520 45521 If the function is inlined in several places, the block structure in 45522 each location might not be the same. For instance, a condition might 45523 now be calculable at compile time in some instances. Because the 45524 coverage of all the uses of the inline function will be shown for the 45525 same source lines, the line counts themselves might seem inconsistent. 45526 45527 Long-running applications can use the `_gcov_reset' and `_gcov_dump' 45528 facilities to restrict profile collection to the program region of 45529 interest. Calling `_gcov_reset(void)' will clear all profile counters 45530 to zero, and calling `_gcov_dump(void)' will cause the profile 45531 information collected at that point to be dumped to `.gcda' output 45532 files. 45533 45534 45535 File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 45536 45537 10.4 Brief description of `gcov' data files 45538 =========================================== 45539 45540 `gcov' uses two files for profiling. The names of these files are 45541 derived from the original _object_ file by substituting the file suffix 45542 with either `.gcno', or `.gcda'. The files contain coverage and 45543 profile data stored in a platform-independent format. The `.gcno' 45544 files are placed in the same directory as the object file. By default, 45545 the `.gcda' files are also stored in the same directory as the object 45546 file, but the GCC `-fprofile-dir' option may be used to store the 45547 `.gcda' files in a separate directory. 45548 45549 The `.gcno' notes file is generated when the source file is compiled 45550 with the GCC `-ftest-coverage' option. It contains information to 45551 reconstruct the basic block graphs and assign source line numbers to 45552 blocks. 45553 45554 The `.gcda' count data file is generated when a program containing 45555 object files built with the GCC `-fprofile-arcs' option is executed. A 45556 separate `.gcda' file is created for each object file compiled with 45557 this option. It contains arc transition counts, value profile counts, 45558 and some summary information. 45559 45560 The full details of the file format is specified in `gcov-io.h', and 45561 functions provided in that header file should be used to access the 45562 coverage files. 45563 45564 45565 File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 45566 45567 10.5 Data file relocation to support cross-profiling 45568 ==================================================== 45569 45570 Running the program will cause profile output to be generated. For each 45571 source file compiled with `-fprofile-arcs', an accompanying `.gcda' 45572 file will be placed in the object file directory. That implicitly 45573 requires running the program on the same system as it was built or 45574 having the same absolute directory structure on the target system. The 45575 program will try to create the needed directory structure, if it is not 45576 already present. 45577 45578 To support cross-profiling, a program compiled with `-fprofile-arcs' 45579 can relocate the data files based on two environment variables: 45580 45581 * GCOV_PREFIX contains the prefix to add to the absolute paths in 45582 the object file. Prefix can be absolute, or relative. The default 45583 is no prefix. 45584 45585 * GCOV_PREFIX_STRIP indicates the how many initial directory names 45586 to strip off the hardwired absolute paths. Default value is 0. 45587 45588 _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is 45589 undefined, then a relative path is made out of the hardwired 45590 absolute paths. 45591 45592 For example, if the object file `/user/build/foo.o' was built with 45593 `-fprofile-arcs', the final executable will try to create the data file 45594 `/user/build/foo.gcda' when running on the target system. This will 45595 fail if the corresponding directory does not exist and it is unable to 45596 create it. This can be overcome by, for example, setting the 45597 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 45598 Such a setting will name the data file `/target/run/build/foo.gcda'. 45599 45600 You must move the data files to the expected directory tree in order to 45601 use them for profile directed optimizations (`--use-profile'), or to 45602 use the `gcov' tool. 45603 45604 45605 File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 45606 45607 11 Known Causes of Trouble with GCC 45608 *********************************** 45609 45610 This section describes known problems that affect users of GCC. Most 45611 of these are not GCC bugs per se--if they were, we would fix them. But 45612 the result for a user may be like the result of a bug. 45613 45614 Some of these problems are due to bugs in other software, some are 45615 missing features that are too much work to add, and some are places 45616 where people's opinions differ as to what is best. 45617 45618 * Menu: 45619 45620 * Actual Bugs:: Bugs we will fix later. 45621 * Interoperation:: Problems using GCC with other compilers, 45622 and with certain linkers, assemblers and debuggers. 45623 * Incompatibilities:: GCC is incompatible with traditional C. 45624 * Fixed Headers:: GCC uses corrected versions of system header files. 45625 This is necessary, but doesn't always work smoothly. 45626 * Standard Libraries:: GCC uses the system C library, which might not be 45627 compliant with the ISO C standard. 45628 * Disappointments:: Regrettable things we can't change, but not quite bugs. 45629 * C++ Misunderstandings:: Common misunderstandings with GNU C++. 45630 * Non-bugs:: Things we think are right, but some others disagree. 45631 * Warnings and Errors:: Which problems in your code get warnings, 45632 and which get errors. 45633 45634 45635 File: gcc.info, Node: Actual Bugs, Next: Interoperation, Up: Trouble 45636 45637 11.1 Actual Bugs We Haven't Fixed Yet 45638 ===================================== 45639 45640 * The `fixincludes' script interacts badly with automounters; if the 45641 directory of system header files is automounted, it tends to be 45642 unmounted while `fixincludes' is running. This would seem to be a 45643 bug in the automounter. We don't know any good way to work around 45644 it. 45645 45646 45647 File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Actual Bugs, Up: Trouble 45648 45649 11.2 Interoperation 45650 =================== 45651 45652 This section lists various difficulties encountered in using GCC 45653 together with other compilers or with the assemblers, linkers, 45654 libraries and debuggers on certain systems. 45655 45656 * On many platforms, GCC supports a different ABI for C++ than do 45657 other compilers, so the object files compiled by GCC cannot be 45658 used with object files generated by another C++ compiler. 45659 45660 An area where the difference is most apparent is name mangling. 45661 The use of different name mangling is intentional, to protect you 45662 from more subtle problems. Compilers differ as to many internal 45663 details of C++ implementation, including: how class instances are 45664 laid out, how multiple inheritance is implemented, and how virtual 45665 function calls are handled. If the name encoding were made the 45666 same, your programs would link against libraries provided from 45667 other compilers--but the programs would then crash when run. 45668 Incompatible libraries are then detected at link time, rather than 45669 at run time. 45670 45671 * On some BSD systems, including some versions of Ultrix, use of 45672 profiling causes static variable destructors (currently used only 45673 in C++) not to be run. 45674 45675 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 45676 boundary, and it expects every `double' to be so aligned. The Sun 45677 compiler usually gives `double' values 8-byte alignment, with one 45678 exception: function arguments of type `double' may not be aligned. 45679 45680 As a result, if a function compiled with Sun CC takes the address 45681 of an argument of type `double' and passes this pointer of type 45682 `double *' to a function compiled with GCC, dereferencing the 45683 pointer may cause a fatal signal. 45684 45685 One way to solve this problem is to compile your entire program 45686 with GCC. Another solution is to modify the function that is 45687 compiled with Sun CC to copy the argument into a local variable; 45688 local variables are always properly aligned. A third solution is 45689 to modify the function that uses the pointer to dereference it via 45690 the following function `access_double' instead of directly with 45691 `*': 45692 45693 inline double 45694 access_double (double *unaligned_ptr) 45695 { 45696 union d2i { double d; int i[2]; }; 45697 45698 union d2i *p = (union d2i *) unaligned_ptr; 45699 union d2i u; 45700 45701 u.i[0] = p->i[0]; 45702 u.i[1] = p->i[1]; 45703 45704 return u.d; 45705 } 45706 45707 Storing into the pointer can be done likewise with the same union. 45708 45709 * On Solaris, the `malloc' function in the `libmalloc.a' library may 45710 allocate memory that is only 4 byte aligned. Since GCC on the 45711 SPARC assumes that doubles are 8 byte aligned, this may result in a 45712 fatal signal if doubles are stored in memory allocated by the 45713 `libmalloc.a' library. 45714 45715 The solution is to not use the `libmalloc.a' library. Use instead 45716 `malloc' and related functions from `libc.a'; they do not have 45717 this problem. 45718 45719 * On the HP PA machine, ADB sometimes fails to work on functions 45720 compiled with GCC. Specifically, it fails to work on functions 45721 that use `alloca' or variable-size arrays. This is because GCC 45722 doesn't generate HP-UX unwind descriptors for such functions. It 45723 may even be impossible to generate them. 45724 45725 * Debugging (`-g') is not supported on the HP PA machine, unless you 45726 use the preliminary GNU tools. 45727 45728 * Taking the address of a label may generate errors from the HP-UX 45729 PA assembler. GAS for the PA does not have this problem. 45730 45731 * Using floating point parameters for indirect calls to static 45732 functions will not work when using the HP assembler. There simply 45733 is no way for GCC to specify what registers hold arguments for 45734 static functions when using the HP assembler. GAS for the PA does 45735 not have this problem. 45736 45737 * In extremely rare cases involving some very large functions you may 45738 receive errors from the HP linker complaining about an out of 45739 bounds unconditional branch offset. This used to occur more often 45740 in previous versions of GCC, but is now exceptionally rare. If 45741 you should run into it, you can work around by making your 45742 function smaller. 45743 45744 * GCC compiled code sometimes emits warnings from the HP-UX 45745 assembler of the form: 45746 45747 (warning) Use of GR3 when 45748 frame >= 8192 may cause conflict. 45749 45750 These warnings are harmless and can be safely ignored. 45751 45752 * In extremely rare cases involving some very large functions you may 45753 receive errors from the AIX Assembler complaining about a 45754 displacement that is too large. If you should run into it, you 45755 can work around by making your function smaller. 45756 45757 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 45758 semantics which merges global symbols between libraries and 45759 applications, especially necessary for C++ streams functionality. 45760 This is not the default behavior of AIX shared libraries and 45761 dynamic linking. `libstdc++.a' is built on AIX with 45762 "runtime-linking" enabled so that symbol merging can occur. To 45763 utilize this feature, the application linked with `libstdc++.a' 45764 must include the `-Wl,-brtl' flag on the link line. G++ cannot 45765 impose this because this option may interfere with the semantics 45766 of the user program and users may not always use `g++' to link his 45767 or her application. Applications are not required to use the 45768 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 45769 library which is not dependent on the symbol merging semantics 45770 will continue to function correctly. 45771 45772 * An application can interpose its own definition of functions for 45773 functions invoked by `libstdc++.a' with "runtime-linking" enabled 45774 on AIX. To accomplish this the application must be linked with 45775 "runtime-linking" option and the functions explicitly must be 45776 exported by the application (`-Wl,-brtl,-bE:exportfile'). 45777 45778 * AIX on the RS/6000 provides support (NLS) for environments outside 45779 of the United States. Compilers and assemblers use NLS to support 45780 locale-specific representations of various objects including 45781 floating-point numbers (`.' vs `,' for separating decimal 45782 fractions). There have been problems reported where the library 45783 linked with GCC does not produce the same floating-point formats 45784 that the assembler accepts. If you have this problem, set the 45785 `LANG' environment variable to `C' or `En_US'. 45786 45787 * Even if you specify `-fdollars-in-identifiers', you cannot 45788 successfully use `$' in identifiers on the RS/6000 due to a 45789 restriction in the IBM assembler. GAS supports these identifiers. 45790 45791 45792 45793 File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 45794 45795 11.3 Incompatibilities of GCC 45796 ============================= 45797 45798 There are several noteworthy incompatibilities between GNU C and K&R 45799 (non-ISO) versions of C. 45800 45801 * GCC normally makes string constants read-only. If several 45802 identical-looking string constants are used, GCC stores only one 45803 copy of the string. 45804 45805 One consequence is that you cannot call `mktemp' with a string 45806 constant argument. The function `mktemp' always alters the string 45807 its argument points to. 45808 45809 Another consequence is that `sscanf' does not work on some very 45810 old systems when passed a string constant as its format control 45811 string or input. This is because `sscanf' incorrectly tries to 45812 write into the string constant. Likewise `fscanf' and `scanf'. 45813 45814 The solution to these problems is to change the program to use 45815 `char'-array variables with initialization strings for these 45816 purposes instead of string constants. 45817 45818 * `-2147483648' is positive. 45819 45820 This is because 2147483648 cannot fit in the type `int', so 45821 (following the ISO C rules) its data type is `unsigned long int'. 45822 Negating this value yields 2147483648 again. 45823 45824 * GCC does not substitute macro arguments when they appear inside of 45825 string constants. For example, the following macro in GCC 45826 45827 #define foo(a) "a" 45828 45829 will produce output `"a"' regardless of what the argument A is. 45830 45831 * When you use `setjmp' and `longjmp', the only automatic variables 45832 guaranteed to remain valid are those declared `volatile'. This is 45833 a consequence of automatic register allocation. Consider this 45834 function: 45835 45836 jmp_buf j; 45837 45838 foo () 45839 { 45840 int a, b; 45841 45842 a = fun1 (); 45843 if (setjmp (j)) 45844 return a; 45845 45846 a = fun2 (); 45847 /* `longjmp (j)' may occur in `fun3'. */ 45848 return a + fun3 (); 45849 } 45850 45851 Here `a' may or may not be restored to its first value when the 45852 `longjmp' occurs. If `a' is allocated in a register, then its 45853 first value is restored; otherwise, it keeps the last value stored 45854 in it. 45855 45856 If you use the `-W' option with the `-O' option, you will get a 45857 warning when GCC thinks such a problem might be possible. 45858 45859 * Programs that use preprocessing directives in the middle of macro 45860 arguments do not work with GCC. For example, a program like this 45861 will not work: 45862 45863 foobar ( 45864 #define luser 45865 hack) 45866 45867 ISO C does not permit such a construct. 45868 45869 * K&R compilers allow comments to cross over an inclusion boundary 45870 (i.e. started in an include file and ended in the including file). 45871 45872 * Declarations of external variables and functions within a block 45873 apply only to the block containing the declaration. In other 45874 words, they have the same scope as any other declaration in the 45875 same place. 45876 45877 In some other C compilers, an `extern' declaration affects all the 45878 rest of the file even if it happens within a block. 45879 45880 * In traditional C, you can combine `long', etc., with a typedef 45881 name, as shown here: 45882 45883 typedef int foo; 45884 typedef long foo bar; 45885 45886 In ISO C, this is not allowed: `long' and other type modifiers 45887 require an explicit `int'. 45888 45889 * PCC allows typedef names to be used as function parameters. 45890 45891 * Traditional C allows the following erroneous pair of declarations 45892 to appear together in a given scope: 45893 45894 typedef int foo; 45895 typedef foo foo; 45896 45897 * GCC treats all characters of identifiers as significant. 45898 According to K&R-1 (2.2), "No more than the first eight characters 45899 are significant, although more may be used.". Also according to 45900 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 45901 the first character must be a letter. The underscore _ counts as 45902 a letter.", but GCC also allows dollar signs in identifiers. 45903 45904 * PCC allows whitespace in the middle of compound assignment 45905 operators such as `+='. GCC, following the ISO standard, does not 45906 allow this. 45907 45908 * GCC complains about unterminated character constants inside of 45909 preprocessing conditionals that fail. Some programs have English 45910 comments enclosed in conditionals that are guaranteed to fail; if 45911 these comments contain apostrophes, GCC will probably report an 45912 error. For example, this code would produce an error: 45913 45914 #if 0 45915 You can't expect this to work. 45916 #endif 45917 45918 The best solution to such a problem is to put the text into an 45919 actual C comment delimited by `/*...*/'. 45920 45921 * Many user programs contain the declaration `long time ();'. In the 45922 past, the system header files on many systems did not actually 45923 declare `time', so it did not matter what type your program 45924 declared it to return. But in systems with ISO C headers, `time' 45925 is declared to return `time_t', and if that is not the same as 45926 `long', then `long time ();' is erroneous. 45927 45928 The solution is to change your program to use appropriate system 45929 headers (`<time.h>' on systems with ISO C headers) and not to 45930 declare `time' if the system header files declare it, or failing 45931 that to use `time_t' as the return type of `time'. 45932 45933 * When compiling functions that return `float', PCC converts it to a 45934 double. GCC actually returns a `float'. If you are concerned 45935 with PCC compatibility, you should declare your functions to return 45936 `double'; you might as well say what you mean. 45937 45938 * When compiling functions that return structures or unions, GCC 45939 output code normally uses a method different from that used on most 45940 versions of Unix. As a result, code compiled with GCC cannot call 45941 a structure-returning function compiled with PCC, and vice versa. 45942 45943 The method used by GCC is as follows: a structure or union which is 45944 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 45945 union with any other size is stored into an address supplied by 45946 the caller (usually in a special, fixed register, but on some 45947 machines it is passed on the stack). The target hook 45948 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 45949 45950 By contrast, PCC on most target machines returns structures and 45951 unions of any size by copying the data into an area of static 45952 storage, and then returning the address of that storage as if it 45953 were a pointer value. The caller must copy the data from that 45954 memory area to the place where the value is wanted. GCC does not 45955 use this method because it is slower and nonreentrant. 45956 45957 On some newer machines, PCC uses a reentrant convention for all 45958 structure and union returning. GCC on most of these machines uses 45959 a compatible convention when returning structures and unions in 45960 memory, but still returns small structures and unions in registers. 45961 45962 You can tell GCC to use a compatible convention for all structure 45963 and union returning with the option `-fpcc-struct-return'. 45964 45965 * GCC complains about program fragments such as `0x74ae-0x4000' 45966 which appear to be two hexadecimal constants separated by the minus 45967 operator. Actually, this string is a single "preprocessing token". 45968 Each such token must correspond to one token in C. Since this 45969 does not, GCC prints an error message. Although it may appear 45970 obvious that what is meant is an operator and two values, the ISO 45971 C standard specifically requires that this be treated as erroneous. 45972 45973 A "preprocessing token" is a "preprocessing number" if it begins 45974 with a digit and is followed by letters, underscores, digits, 45975 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 45976 character sequences. (In strict C90 mode, the sequences `p+', 45977 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 45978 45979 To make the above program fragment valid, place whitespace in 45980 front of the minus sign. This whitespace will end the 45981 preprocessing number. 45982 45983 45984 File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 45985 45986 11.4 Fixed Header Files 45987 ======================= 45988 45989 GCC needs to install corrected versions of some system header files. 45990 This is because most target systems have some header files that won't 45991 work with GCC unless they are changed. Some have bugs, some are 45992 incompatible with ISO C, and some depend on special features of other 45993 compilers. 45994 45995 Installing GCC automatically creates and installs the fixed header 45996 files, by running a program called `fixincludes'. Normally, you don't 45997 need to pay attention to this. But there are cases where it doesn't do 45998 the right thing automatically. 45999 46000 * If you update the system's header files, such as by installing a 46001 new system version, the fixed header files of GCC are not 46002 automatically updated. They can be updated using the `mkheaders' 46003 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 46004 46005 * On some systems, header file directories contain machine-specific 46006 symbolic links in certain places. This makes it possible to share 46007 most of the header files among hosts running the same version of 46008 the system on different machine models. 46009 46010 The programs that fix the header files do not understand this 46011 special way of using symbolic links; therefore, the directory of 46012 fixed header files is good only for the machine model used to 46013 build it. 46014 46015 It is possible to make separate sets of fixed header files for the 46016 different machine models, and arrange a structure of symbolic 46017 links so as to use the proper set, but you'll have to do this by 46018 hand. 46019 46020 46021 File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 46022 46023 11.5 Standard Libraries 46024 ======================= 46025 46026 GCC by itself attempts to be a conforming freestanding implementation. 46027 *Note Language Standards Supported by GCC: Standards, for details of 46028 what this means. Beyond the library facilities required of such an 46029 implementation, the rest of the C library is supplied by the vendor of 46030 the operating system. If that C library doesn't conform to the C 46031 standards, then your programs might get warnings (especially when using 46032 `-Wall') that you don't expect. 46033 46034 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 46035 while the C standard says that `sprintf' returns an `int'. The 46036 `fixincludes' program could make the prototype for this function match 46037 the Standard, but that would be wrong, since the function will still 46038 return `char *'. 46039 46040 If you need a Standard compliant library, then you need to find one, as 46041 GCC does not provide one. The GNU C library (called `glibc') provides 46042 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 46043 HURD-based GNU systems; no recent version of it supports other systems, 46044 though some very old versions did. Version 2.2 of the GNU C library 46045 includes nearly complete C99 support. You could also ask your 46046 operating system vendor if newer libraries are available. 46047 46048 46049 File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 46050 46051 11.6 Disappointments and Misunderstandings 46052 ========================================== 46053 46054 These problems are perhaps regrettable, but we don't know any practical 46055 way around them. 46056 46057 * Certain local variables aren't recognized by debuggers when you 46058 compile with optimization. 46059 46060 This occurs because sometimes GCC optimizes the variable out of 46061 existence. There is no way to tell the debugger how to compute the 46062 value such a variable "would have had", and it is not clear that 46063 would be desirable anyway. So GCC simply does not mention the 46064 eliminated variable when it writes debugging information. 46065 46066 You have to expect a certain amount of disagreement between the 46067 executable and your source code, when you use optimization. 46068 46069 * Users often think it is a bug when GCC reports an error for code 46070 like this: 46071 46072 int foo (struct mumble *); 46073 46074 struct mumble { ... }; 46075 46076 int foo (struct mumble *x) 46077 { ... } 46078 46079 This code really is erroneous, because the scope of `struct 46080 mumble' in the prototype is limited to the argument list 46081 containing it. It does not refer to the `struct mumble' defined 46082 with file scope immediately below--they are two unrelated types 46083 with similar names in different scopes. 46084 46085 But in the definition of `foo', the file-scope type is used 46086 because that is available to be inherited. Thus, the definition 46087 and the prototype do not match, and you get an error. 46088 46089 This behavior may seem silly, but it's what the ISO standard 46090 specifies. It is easy enough for you to make your code work by 46091 moving the definition of `struct mumble' above the prototype. 46092 It's not worth being incompatible with ISO C just to avoid an 46093 error for the example shown above. 46094 46095 * Accesses to bit-fields even in volatile objects works by accessing 46096 larger objects, such as a byte or a word. You cannot rely on what 46097 size of object is accessed in order to read or write the 46098 bit-field; it may even vary for a given bit-field according to the 46099 precise usage. 46100 46101 If you care about controlling the amount of memory that is 46102 accessed, use volatile but do not use bit-fields. 46103 46104 * GCC comes with shell scripts to fix certain known problems in 46105 system header files. They install corrected copies of various 46106 header files in a special directory where only GCC will normally 46107 look for them. The scripts adapt to various systems by searching 46108 all the system header files for the problem cases that we know 46109 about. 46110 46111 If new system header files are installed, nothing automatically 46112 arranges to update the corrected header files. They can be 46113 updated using the `mkheaders' script installed in 46114 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 46115 46116 * On 68000 and x86 systems, for instance, you can get paradoxical 46117 results if you test the precise values of floating point numbers. 46118 For example, you can find that a floating point value which is not 46119 a NaN is not equal to itself. This results from the fact that the 46120 floating point registers hold a few more bits of precision than 46121 fit in a `double' in memory. Compiled code moves values between 46122 memory and floating point registers at its convenience, and moving 46123 them into memory truncates them. 46124 46125 You can partially avoid this problem by using the `-ffloat-store' 46126 option (*note Optimize Options::). 46127 46128 * On AIX and other platforms without weak symbol support, templates 46129 need to be instantiated explicitly and symbols for static members 46130 of templates will not be generated. 46131 46132 * On AIX, GCC scans object files and library archives for static 46133 constructors and destructors when linking an application before the 46134 linker prunes unreferenced symbols. This is necessary to prevent 46135 the AIX linker from mistakenly assuming that static constructor or 46136 destructor are unused and removing them before the scanning can 46137 occur. All static constructors and destructors found will be 46138 referenced even though the modules in which they occur may not be 46139 used by the program. This may lead to both increased executable 46140 size and unexpected symbol references. 46141 46142 46143 File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble 46144 46145 11.7 Common Misunderstandings with GNU C++ 46146 ========================================== 46147 46148 C++ is a complex language and an evolving one, and its standard 46149 definition (the ISO C++ standard) was only recently completed. As a 46150 result, your C++ compiler may occasionally surprise you, even when its 46151 behavior is correct. This section discusses some areas that frequently 46152 give rise to questions of this sort. 46153 46154 * Menu: 46155 46156 * Static Definitions:: Static member declarations are not definitions 46157 * Name lookup:: Name lookup, templates, and accessing members of base classes 46158 * Temporaries:: Temporaries may vanish before you expect 46159 * Copy Assignment:: Copy Assignment operators copy virtual bases twice 46160 46161 46162 File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 46163 46164 11.7.1 Declare _and_ Define Static Members 46165 ------------------------------------------ 46166 46167 When a class has static data members, it is not enough to _declare_ the 46168 static member; you must also _define_ it. For example: 46169 46170 class Foo 46171 { 46172 ... 46173 void method(); 46174 static int bar; 46175 }; 46176 46177 This declaration only establishes that the class `Foo' has an `int' 46178 named `Foo::bar', and a member function named `Foo::method'. But you 46179 still need to define _both_ `method' and `bar' elsewhere. According to 46180 the ISO standard, you must supply an initializer in one (and only one) 46181 source file, such as: 46182 46183 int Foo::bar = 0; 46184 46185 Other C++ compilers may not correctly implement the standard behavior. 46186 As a result, when you switch to `g++' from one of these compilers, you 46187 may discover that a program that appeared to work correctly in fact 46188 does not conform to the standard: `g++' reports as undefined symbols 46189 any static data members that lack definitions. 46190 46191 46192 File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 46193 46194 11.7.2 Name lookup, templates, and accessing members of base classes 46195 -------------------------------------------------------------------- 46196 46197 The C++ standard prescribes that all names that are not dependent on 46198 template parameters are bound to their present definitions when parsing 46199 a template function or class.(1) Only names that are dependent are 46200 looked up at the point of instantiation. For example, consider 46201 46202 void foo(double); 46203 46204 struct A { 46205 template <typename T> 46206 void f () { 46207 foo (1); // 1 46208 int i = N; // 2 46209 T t; 46210 t.bar(); // 3 46211 foo (t); // 4 46212 } 46213 46214 static const int N; 46215 }; 46216 46217 Here, the names `foo' and `N' appear in a context that does not depend 46218 on the type of `T'. The compiler will thus require that they are 46219 defined in the context of use in the template, not only before the 46220 point of instantiation, and will here use `::foo(double)' and `A::N', 46221 respectively. In particular, it will convert the integer value to a 46222 `double' when passing it to `::foo(double)'. 46223 46224 Conversely, `bar' and the call to `foo' in the fourth marked line are 46225 used in contexts that do depend on the type of `T', so they are only 46226 looked up at the point of instantiation, and you can provide 46227 declarations for them after declaring the template, but before 46228 instantiating it. In particular, if you instantiate `A::f<int>', the 46229 last line will call an overloaded `::foo(int)' if one was provided, 46230 even if after the declaration of `struct A'. 46231 46232 This distinction between lookup of dependent and non-dependent names is 46233 called two-stage (or dependent) name lookup. G++ implements it since 46234 version 3.4. 46235 46236 Two-stage name lookup sometimes leads to situations with behavior 46237 different from non-template codes. The most common is probably this: 46238 46239 template <typename T> struct Base { 46240 int i; 46241 }; 46242 46243 template <typename T> struct Derived : public Base<T> { 46244 int get_i() { return i; } 46245 }; 46246 46247 In `get_i()', `i' is not used in a dependent context, so the compiler 46248 will look for a name declared at the enclosing namespace scope (which 46249 is the global scope here). It will not look into the base class, since 46250 that is dependent and you may declare specializations of `Base' even 46251 after declaring `Derived', so the compiler can't really know what `i' 46252 would refer to. If there is no global variable `i', then you will get 46253 an error message. 46254 46255 In order to make it clear that you want the member of the base class, 46256 you need to defer lookup until instantiation time, at which the base 46257 class is known. For this, you need to access `i' in a dependent 46258 context, by either using `this->i' (remember that `this' is of type 46259 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 46260 Alternatively, `Base<T>::i' might be brought into scope by a 46261 `using'-declaration. 46262 46263 Another, similar example involves calling member functions of a base 46264 class: 46265 46266 template <typename T> struct Base { 46267 int f(); 46268 }; 46269 46270 template <typename T> struct Derived : Base<T> { 46271 int g() { return f(); }; 46272 }; 46273 46274 Again, the call to `f()' is not dependent on template arguments (there 46275 are no arguments that depend on the type `T', and it is also not 46276 otherwise specified that the call should be in a dependent context). 46277 Thus a global declaration of such a function must be available, since 46278 the one in the base class is not visible until instantiation time. The 46279 compiler will consequently produce the following error message: 46280 46281 x.cc: In member function `int Derived<T>::g()': 46282 x.cc:6: error: there are no arguments to `f' that depend on a template 46283 parameter, so a declaration of `f' must be available 46284 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 46285 allowing the use of an undeclared name is deprecated) 46286 46287 To make the code valid either use `this->f()', or `Base<T>::f()'. 46288 Using the `-fpermissive' flag will also let the compiler accept the 46289 code, by marking all function calls for which no declaration is visible 46290 at the time of definition of the template for later lookup at 46291 instantiation time, as if it were a dependent call. We do not 46292 recommend using `-fpermissive' to work around invalid code, and it will 46293 also only catch cases where functions in base classes are called, not 46294 where variables in base classes are used (as in the example above). 46295 46296 Note that some compilers (including G++ versions prior to 3.4) get 46297 these examples wrong and accept above code without an error. Those 46298 compilers do not implement two-stage name lookup correctly. 46299 46300 ---------- Footnotes ---------- 46301 46302 (1) The C++ standard just uses the term "dependent" for names that 46303 depend on the type or value of template parameters. This shorter term 46304 will also be used in the rest of this section. 46305 46306 46307 File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 46308 46309 11.7.3 Temporaries May Vanish Before You Expect 46310 ----------------------------------------------- 46311 46312 It is dangerous to use pointers or references to _portions_ of a 46313 temporary object. The compiler may very well delete the object before 46314 you expect it to, leaving a pointer to garbage. The most common place 46315 where this problem crops up is in classes like string classes, 46316 especially ones that define a conversion function to type `char *' or 46317 `const char *'--which is one reason why the standard `string' class 46318 requires you to call the `c_str' member function. However, any class 46319 that returns a pointer to some internal structure is potentially 46320 subject to this problem. 46321 46322 For example, a program may use a function `strfunc' that returns 46323 `string' objects, and another function `charfunc' that operates on 46324 pointers to `char': 46325 46326 string strfunc (); 46327 void charfunc (const char *); 46328 46329 void 46330 f () 46331 { 46332 const char *p = strfunc().c_str(); 46333 ... 46334 charfunc (p); 46335 ... 46336 charfunc (p); 46337 } 46338 46339 In this situation, it may seem reasonable to save a pointer to the C 46340 string returned by the `c_str' member function and use that rather than 46341 call `c_str' repeatedly. However, the temporary string created by the 46342 call to `strfunc' is destroyed after `p' is initialized, at which point 46343 `p' is left pointing to freed memory. 46344 46345 Code like this may run successfully under some other compilers, 46346 particularly obsolete cfront-based compilers that delete temporaries 46347 along with normal local variables. However, the GNU C++ behavior is 46348 standard-conforming, so if your program depends on late destruction of 46349 temporaries it is not portable. 46350 46351 The safe way to write such code is to give the temporary a name, which 46352 forces it to remain until the end of the scope of the name. For 46353 example: 46354 46355 const string& tmp = strfunc (); 46356 charfunc (tmp.c_str ()); 46357 46358 46359 File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 46360 46361 11.7.4 Implicit Copy-Assignment for Virtual Bases 46362 ------------------------------------------------- 46363 46364 When a base class is virtual, only one subobject of the base class 46365 belongs to each full object. Also, the constructors and destructors are 46366 invoked only once, and called from the most-derived class. However, 46367 such objects behave unspecified when being assigned. For example: 46368 46369 struct Base{ 46370 char *name; 46371 Base(char *n) : name(strdup(n)){} 46372 Base& operator= (const Base& other){ 46373 free (name); 46374 name = strdup (other.name); 46375 } 46376 }; 46377 46378 struct A:virtual Base{ 46379 int val; 46380 A():Base("A"){} 46381 }; 46382 46383 struct B:virtual Base{ 46384 int bval; 46385 B():Base("B"){} 46386 }; 46387 46388 struct Derived:public A, public B{ 46389 Derived():Base("Derived"){} 46390 }; 46391 46392 void func(Derived &d1, Derived &d2) 46393 { 46394 d1 = d2; 46395 } 46396 46397 The C++ standard specifies that `Base::Base' is only called once when 46398 constructing or copy-constructing a Derived object. It is unspecified 46399 whether `Base::operator=' is called more than once when the implicit 46400 copy-assignment for Derived objects is invoked (as it is inside `func' 46401 in the example). 46402 46403 G++ implements the "intuitive" algorithm for copy-assignment: assign 46404 all direct bases, then assign all members. In that algorithm, the 46405 virtual base subobject can be encountered more than once. In the 46406 example, copying proceeds in the following order: `val', `name' (via 46407 `strdup'), `bval', and `name' again. 46408 46409 If application code relies on copy-assignment, a user-defined 46410 copy-assignment operator removes any uncertainties. With such an 46411 operator, the application can define whether and how the virtual base 46412 subobject is assigned. 46413 46414 46415 File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble 46416 46417 11.8 Certain Changes We Don't Want to Make 46418 ========================================== 46419 46420 This section lists changes that people frequently request, but which we 46421 do not make because we think GCC is better without them. 46422 46423 * Checking the number and type of arguments to a function which has 46424 an old-fashioned definition and no prototype. 46425 46426 Such a feature would work only occasionally--only for calls that 46427 appear in the same file as the called function, following the 46428 definition. The only way to check all calls reliably is to add a 46429 prototype for the function. But adding a prototype eliminates the 46430 motivation for this feature. So the feature is not worthwhile. 46431 46432 * Warning about using an expression whose type is signed as a shift 46433 count. 46434 46435 Shift count operands are probably signed more often than unsigned. 46436 Warning about this would cause far more annoyance than good. 46437 46438 * Warning about assigning a signed value to an unsigned variable. 46439 46440 Such assignments must be very common; warning about them would 46441 cause more annoyance than good. 46442 46443 * Warning when a non-void function value is ignored. 46444 46445 C contains many standard functions that return a value that most 46446 programs choose to ignore. One obvious example is `printf'. 46447 Warning about this practice only leads the defensive programmer to 46448 clutter programs with dozens of casts to `void'. Such casts are 46449 required so frequently that they become visual noise. Writing 46450 those casts becomes so automatic that they no longer convey useful 46451 information about the intentions of the programmer. For functions 46452 where the return value should never be ignored, use the 46453 `warn_unused_result' function attribute (*note Function 46454 Attributes::). 46455 46456 * Making `-fshort-enums' the default. 46457 46458 This would cause storage layout to be incompatible with most other 46459 C compilers. And it doesn't seem very important, given that you 46460 can get the same result in other ways. The case where it matters 46461 most is when the enumeration-valued object is inside a structure, 46462 and in that case you can specify a field width explicitly. 46463 46464 * Making bit-fields unsigned by default on particular machines where 46465 "the ABI standard" says to do so. 46466 46467 The ISO C standard leaves it up to the implementation whether a 46468 bit-field declared plain `int' is signed or not. This in effect 46469 creates two alternative dialects of C. 46470 46471 The GNU C compiler supports both dialects; you can specify the 46472 signed dialect with `-fsigned-bitfields' and the unsigned dialect 46473 with `-funsigned-bitfields'. However, this leaves open the 46474 question of which dialect to use by default. 46475 46476 Currently, the preferred dialect makes plain bit-fields signed, 46477 because this is simplest. Since `int' is the same as `signed int' 46478 in every other context, it is cleanest for them to be the same in 46479 bit-fields as well. 46480 46481 Some computer manufacturers have published Application Binary 46482 Interface standards which specify that plain bit-fields should be 46483 unsigned. It is a mistake, however, to say anything about this 46484 issue in an ABI. This is because the handling of plain bit-fields 46485 distinguishes two dialects of C. Both dialects are meaningful on 46486 every type of machine. Whether a particular object file was 46487 compiled using signed bit-fields or unsigned is of no concern to 46488 other object files, even if they access the same bit-fields in the 46489 same data structures. 46490 46491 A given program is written in one or the other of these two 46492 dialects. The program stands a chance to work on most any machine 46493 if it is compiled with the proper dialect. It is unlikely to work 46494 at all if compiled with the wrong dialect. 46495 46496 Many users appreciate the GNU C compiler because it provides an 46497 environment that is uniform across machines. These users would be 46498 inconvenienced if the compiler treated plain bit-fields 46499 differently on certain machines. 46500 46501 Occasionally users write programs intended only for a particular 46502 machine type. On these occasions, the users would benefit if the 46503 GNU C compiler were to support by default the same dialect as the 46504 other compilers on that machine. But such applications are rare. 46505 And users writing a program to run on more than one type of 46506 machine cannot possibly benefit from this kind of compatibility. 46507 46508 This is why GCC does and will treat plain bit-fields in the same 46509 fashion on all types of machines (by default). 46510 46511 There are some arguments for making bit-fields unsigned by default 46512 on all machines. If, for example, this becomes a universal de 46513 facto standard, it would make sense for GCC to go along with it. 46514 This is something to be considered in the future. 46515 46516 (Of course, users strongly concerned about portability should 46517 indicate explicitly in each bit-field whether it is signed or not. 46518 In this way, they write programs which have the same meaning in 46519 both C dialects.) 46520 46521 * Undefining `__STDC__' when `-ansi' is not used. 46522 46523 Currently, GCC defines `__STDC__' unconditionally. This provides 46524 good results in practice. 46525 46526 Programmers normally use conditionals on `__STDC__' to ask whether 46527 it is safe to use certain features of ISO C, such as function 46528 prototypes or ISO token concatenation. Since plain `gcc' supports 46529 all the features of ISO C, the correct answer to these questions is 46530 "yes". 46531 46532 Some users try to use `__STDC__' to check for the availability of 46533 certain library facilities. This is actually incorrect usage in 46534 an ISO C program, because the ISO C standard says that a conforming 46535 freestanding implementation should define `__STDC__' even though it 46536 does not have the library facilities. `gcc -ansi -pedantic' is a 46537 conforming freestanding implementation, and it is therefore 46538 required to define `__STDC__', even though it does not come with 46539 an ISO C library. 46540 46541 Sometimes people say that defining `__STDC__' in a compiler that 46542 does not completely conform to the ISO C standard somehow violates 46543 the standard. This is illogical. The standard is a standard for 46544 compilers that claim to support ISO C, such as `gcc -ansi'--not 46545 for other compilers such as plain `gcc'. Whatever the ISO C 46546 standard says is relevant to the design of plain `gcc' without 46547 `-ansi' only for pragmatic reasons, not as a requirement. 46548 46549 GCC normally defines `__STDC__' to be 1, and in addition defines 46550 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 46551 option for strict conformance to some version of ISO C. On some 46552 hosts, system include files use a different convention, where 46553 `__STDC__' is normally 0, but is 1 if the user specifies strict 46554 conformance to the C Standard. GCC follows the host convention 46555 when processing system include files, but when processing user 46556 files it follows the usual GNU C convention. 46557 46558 * Undefining `__STDC__' in C++. 46559 46560 Programs written to compile with C++-to-C translators get the 46561 value of `__STDC__' that goes with the C compiler that is 46562 subsequently used. These programs must test `__STDC__' to 46563 determine what kind of C preprocessor that compiler uses: whether 46564 they should concatenate tokens in the ISO C fashion or in the 46565 traditional fashion. 46566 46567 These programs work properly with GNU C++ if `__STDC__' is defined. 46568 They would not work otherwise. 46569 46570 In addition, many header files are written to provide prototypes 46571 in ISO C but not in traditional C. Many of these header files can 46572 work without change in C++ provided `__STDC__' is defined. If 46573 `__STDC__' is not defined, they will all fail, and will all need 46574 to be changed to test explicitly for C++ as well. 46575 46576 * Deleting "empty" loops. 46577 46578 Historically, GCC has not deleted "empty" loops under the 46579 assumption that the most likely reason you would put one in a 46580 program is to have a delay, so deleting them will not make real 46581 programs run any faster. 46582 46583 However, the rationale here is that optimization of a nonempty loop 46584 cannot produce an empty one. This held for carefully written C 46585 compiled with less powerful optimizers but is not always the case 46586 for carefully written C++ or with more powerful optimizers. Thus 46587 GCC will remove operations from loops whenever it can determine 46588 those operations are not externally visible (apart from the time 46589 taken to execute them, of course). In case the loop can be proved 46590 to be finite, GCC will also remove the loop itself. 46591 46592 Be aware of this when performing timing tests, for instance the 46593 following loop can be completely removed, provided 46594 `some_expression' can provably not change any global state. 46595 46596 { 46597 int sum = 0; 46598 int ix; 46599 46600 for (ix = 0; ix != 10000; ix++) 46601 sum += some_expression; 46602 } 46603 46604 Even though `sum' is accumulated in the loop, no use is made of 46605 that summation, so the accumulation can be removed. 46606 46607 * Making side effects happen in the same order as in some other 46608 compiler. 46609 46610 It is never safe to depend on the order of evaluation of side 46611 effects. For example, a function call like this may very well 46612 behave differently from one compiler to another: 46613 46614 void func (int, int); 46615 46616 int i = 2; 46617 func (i++, i++); 46618 46619 There is no guarantee (in either the C or the C++ standard language 46620 definitions) that the increments will be evaluated in any 46621 particular order. Either increment might happen first. `func' 46622 might get the arguments `2, 3', or it might get `3, 2', or even 46623 `2, 2'. 46624 46625 * Making certain warnings into errors by default. 46626 46627 Some ISO C testsuites report failure when the compiler does not 46628 produce an error message for a certain program. 46629 46630 ISO C requires a "diagnostic" message for certain kinds of invalid 46631 programs, but a warning is defined by GCC to count as a 46632 diagnostic. If GCC produces a warning but not an error, that is 46633 correct ISO C support. If testsuites call this "failure", they 46634 should be run with the GCC option `-pedantic-errors', which will 46635 turn these warnings into errors. 46636 46637 46638 46639 File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 46640 46641 11.9 Warning Messages and Error Messages 46642 ======================================== 46643 46644 The GNU compiler can produce two kinds of diagnostics: errors and 46645 warnings. Each kind has a different purpose: 46646 46647 "Errors" report problems that make it impossible to compile your 46648 program. GCC reports errors with the source file name and line 46649 number where the problem is apparent. 46650 46651 "Warnings" report other unusual conditions in your code that _may_ 46652 indicate a problem, although compilation can (and does) proceed. 46653 Warning messages also report the source file name and line number, 46654 but include the text `warning:' to distinguish them from error 46655 messages. 46656 46657 Warnings may indicate danger points where you should check to make sure 46658 that your program really does what you intend; or the use of obsolete 46659 features; or the use of nonstandard features of GNU C or C++. Many 46660 warnings are issued only if you ask for them, with one of the `-W' 46661 options (for instance, `-Wall' requests a variety of useful warnings). 46662 46663 GCC always tries to compile your program if possible; it never 46664 gratuitously rejects a program whose meaning is clear merely because 46665 (for instance) it fails to conform to a standard. In some cases, 46666 however, the C and C++ standards specify that certain extensions are 46667 forbidden, and a diagnostic _must_ be issued by a conforming compiler. 46668 The `-pedantic' option tells GCC to issue warnings in such cases; 46669 `-pedantic-errors' says to make them errors instead. This does not 46670 mean that _all_ non-ISO constructs get warnings or errors. 46671 46672 *Note Options to Request or Suppress Warnings: Warning Options, for 46673 more detail on these and related command-line options. 46674 46675 46676 File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 46677 46678 12 Reporting Bugs 46679 ***************** 46680 46681 Your bug reports play an essential role in making GCC reliable. 46682 46683 When you encounter a problem, the first thing to do is to see if it is 46684 already known. *Note Trouble::. If it isn't known, then you should 46685 report the problem. 46686 46687 * Menu: 46688 46689 * Criteria: Bug Criteria. Have you really found a bug? 46690 * Reporting: Bug Reporting. How to report a bug effectively. 46691 * Known: Trouble. Known problems. 46692 * Help: Service. Where to ask for help. 46693 46694 46695 File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 46696 46697 12.1 Have You Found a Bug? 46698 ========================== 46699 46700 If you are not sure whether you have found a bug, here are some 46701 guidelines: 46702 46703 * If the compiler gets a fatal signal, for any input whatever, that 46704 is a compiler bug. Reliable compilers never crash. 46705 46706 * If the compiler produces invalid assembly code, for any input 46707 whatever (except an `asm' statement), that is a compiler bug, 46708 unless the compiler reports errors (not just warnings) which would 46709 ordinarily prevent the assembler from being run. 46710 46711 * If the compiler produces valid assembly code that does not 46712 correctly execute the input source code, that is a compiler bug. 46713 46714 However, you must double-check to make sure, because you may have a 46715 program whose behavior is undefined, which happened by chance to 46716 give the desired results with another C or C++ compiler. 46717 46718 For example, in many nonoptimizing compilers, you can write `x;' 46719 at the end of a function instead of `return x;', with the same 46720 results. But the value of the function is undefined if `return' 46721 is omitted; it is not a bug when GCC produces different results. 46722 46723 Problems often result from expressions with two increment 46724 operators, as in `f (*p++, *p++)'. Your previous compiler might 46725 have interpreted that expression the way you intended; GCC might 46726 interpret it another way. Neither compiler is wrong. The bug is 46727 in your code. 46728 46729 After you have localized the error to a single source line, it 46730 should be easy to check for these things. If your program is 46731 correct and well defined, you have found a compiler bug. 46732 46733 * If the compiler produces an error message for valid input, that is 46734 a compiler bug. 46735 46736 * If the compiler does not produce an error message for invalid 46737 input, that is a compiler bug. However, you should note that your 46738 idea of "invalid input" might be someone else's idea of "an 46739 extension" or "support for traditional practice". 46740 46741 * If you are an experienced user of one of the languages GCC 46742 supports, your suggestions for improvement of GCC are welcome in 46743 any case. 46744 46745 46746 File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 46747 46748 12.2 How and where to Report Bugs 46749 ================================= 46750 46751 Bugs should be reported to the bug database at 46752 `http://gcc.gnu.org/bugs.html'. 46753 46754 46755 File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 46756 46757 13 How To Get Help with GCC 46758 *************************** 46759 46760 If you need help installing, using or changing GCC, there are two ways 46761 to find it: 46762 46763 * Send a message to a suitable network mailing list. First try 46764 <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if 46765 that brings no response, try <gcc (a] gcc.gnu.org>. For help changing 46766 GCC, ask <gcc (a] gcc.gnu.org>. If you think you have found a bug in 46767 GCC, please report it following the instructions at *note Bug 46768 Reporting::. 46769 46770 * Look in the service directory for someone who might help you for a 46771 fee. The service directory is found at 46772 `http://www.fsf.org/resources/service'. 46773 46774 For further information, see `http://gcc.gnu.org/faq.html#support'. 46775 46776 46777 File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 46778 46779 14 Contributing to GCC Development 46780 ********************************** 46781 46782 If you would like to help pretest GCC releases to assure they work well, 46783 current development sources are available by SVN (see 46784 `http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 46785 available for FTP; see `http://gcc.gnu.org/snapshots.html'. 46786 46787 If you would like to work on improvements to GCC, please read the 46788 advice at these URLs: 46789 46790 `http://gcc.gnu.org/contribute.html' 46791 `http://gcc.gnu.org/contributewhy.html' 46792 46793 for information on how to make useful contributions and avoid 46794 duplication of effort. Suggested projects are listed at 46795 `http://gcc.gnu.org/projects/'. 46796 46797 46798 File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 46799 46800 Funding Free Software 46801 ********************* 46802 46803 If you want to have more free software a few years from now, it makes 46804 sense for you to help encourage people to contribute funds for its 46805 development. The most effective approach known is to encourage 46806 commercial redistributors to donate. 46807 46808 Users of free software systems can boost the pace of development by 46809 encouraging for-a-fee distributors to donate part of their selling price 46810 to free software developers--the Free Software Foundation, and others. 46811 46812 The way to convince distributors to do this is to demand it and expect 46813 it from them. So when you compare distributors, judge them partly by 46814 how much they give to free software development. Show distributors 46815 they must compete to be the one who gives the most. 46816 46817 To make this approach work, you must insist on numbers that you can 46818 compare, such as, "We will donate ten dollars to the Frobnitz project 46819 for each disk sold." Don't be satisfied with a vague promise, such as 46820 "A portion of the profits are donated," since it doesn't give a basis 46821 for comparison. 46822 46823 Even a precise fraction "of the profits from this disk" is not very 46824 meaningful, since creative accounting and unrelated business decisions 46825 can greatly alter what fraction of the sales price counts as profit. 46826 If the price you pay is $50, ten percent of the profit is probably less 46827 than a dollar; it might be a few cents, or nothing at all. 46828 46829 Some redistributors do development work themselves. This is useful 46830 too; but to keep everyone honest, you need to inquire how much they do, 46831 and what kind. Some kinds of development make much more long-term 46832 difference than others. For example, maintaining a separate version of 46833 a program contributes very little; maintaining the standard version of a 46834 program for the whole community contributes much. Easy new ports 46835 contribute little, since someone else would surely do them; difficult 46836 ports such as adding a new CPU to the GNU Compiler Collection 46837 contribute more; major new features or packages contribute the most. 46838 46839 By establishing the idea that supporting further development is "the 46840 proper thing to do" when distributing free software for a fee, we can 46841 assure a steady flow of resources into making more free software. 46842 46843 Copyright (C) 1994 Free Software Foundation, Inc. 46844 Verbatim copying and redistribution of this section is permitted 46845 without royalty; alteration is not permitted. 46846 46847 46848 File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 46849 46850 The GNU Project and GNU/Linux 46851 ***************************** 46852 46853 The GNU Project was launched in 1984 to develop a complete Unix-like 46854 operating system which is free software: the GNU system. (GNU is a 46855 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 46856 Variants of the GNU operating system, which use the kernel Linux, are 46857 now widely used; though these systems are often referred to as "Linux", 46858 they are more accurately called GNU/Linux systems. 46859 46860 For more information, see: 46861 `http://www.gnu.org/' 46862 `http://www.gnu.org/gnu/linux-and-gnu.html' 46863 46864 46865 File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 46866 46867 GNU General Public License 46868 ************************** 46869 46870 Version 3, 29 June 2007 46871 46872 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 46873 46874 Everyone is permitted to copy and distribute verbatim copies of this 46875 license document, but changing it is not allowed. 46876 46877 Preamble 46878 ======== 46879 46880 The GNU General Public License is a free, copyleft license for software 46881 and other kinds of works. 46882 46883 The licenses for most software and other practical works are designed 46884 to take away your freedom to share and change the works. By contrast, 46885 the GNU General Public License is intended to guarantee your freedom to 46886 share and change all versions of a program-to make sure it remains free 46887 software for all its users. We, the Free Software Foundation, use the 46888 GNU General Public License for most of our software; it applies also to 46889 any other work released this way by its authors. You can apply it to 46890 your programs, too. 46891 46892 When we speak of free software, we are referring to freedom, not 46893 price. Our General Public Licenses are designed to make sure that you 46894 have the freedom to distribute copies of free software (and charge for 46895 them if you wish), that you receive source code or can get it if you 46896 want it, that you can change the software or use pieces of it in new 46897 free programs, and that you know you can do these things. 46898 46899 To protect your rights, we need to prevent others from denying you 46900 these rights or asking you to surrender the rights. Therefore, you 46901 have certain responsibilities if you distribute copies of the software, 46902 or if you modify it: responsibilities to respect the freedom of others. 46903 46904 For example, if you distribute copies of such a program, whether 46905 gratis or for a fee, you must pass on to the recipients the same 46906 freedoms that you received. You must make sure that they, too, receive 46907 or can get the source code. And you must show them these terms so they 46908 know their rights. 46909 46910 Developers that use the GNU GPL protect your rights with two steps: 46911 (1) assert copyright on the software, and (2) offer you this License 46912 giving you legal permission to copy, distribute and/or modify it. 46913 46914 For the developers' and authors' protection, the GPL clearly explains 46915 that there is no warranty for this free software. For both users' and 46916 authors' sake, the GPL requires that modified versions be marked as 46917 changed, so that their problems will not be attributed erroneously to 46918 authors of previous versions. 46919 46920 Some devices are designed to deny users access to install or run 46921 modified versions of the software inside them, although the 46922 manufacturer can do so. This is fundamentally incompatible with the 46923 aim of protecting users' freedom to change the software. The 46924 systematic pattern of such abuse occurs in the area of products for 46925 individuals to use, which is precisely where it is most unacceptable. 46926 Therefore, we have designed this version of the GPL to prohibit the 46927 practice for those products. If such problems arise substantially in 46928 other domains, we stand ready to extend this provision to those domains 46929 in future versions of the GPL, as needed to protect the freedom of 46930 users. 46931 46932 Finally, every program is threatened constantly by software patents. 46933 States should not allow patents to restrict development and use of 46934 software on general-purpose computers, but in those that do, we wish to 46935 avoid the special danger that patents applied to a free program could 46936 make it effectively proprietary. To prevent this, the GPL assures that 46937 patents cannot be used to render the program non-free. 46938 46939 The precise terms and conditions for copying, distribution and 46940 modification follow. 46941 46942 TERMS AND CONDITIONS 46943 ==================== 46944 46945 0. Definitions. 46946 46947 "This License" refers to version 3 of the GNU General Public 46948 License. 46949 46950 "Copyright" also means copyright-like laws that apply to other 46951 kinds of works, such as semiconductor masks. 46952 46953 "The Program" refers to any copyrightable work licensed under this 46954 License. Each licensee is addressed as "you". "Licensees" and 46955 "recipients" may be individuals or organizations. 46956 46957 To "modify" a work means to copy from or adapt all or part of the 46958 work in a fashion requiring copyright permission, other than the 46959 making of an exact copy. The resulting work is called a "modified 46960 version" of the earlier work or a work "based on" the earlier work. 46961 46962 A "covered work" means either the unmodified Program or a work 46963 based on the Program. 46964 46965 To "propagate" a work means to do anything with it that, without 46966 permission, would make you directly or secondarily liable for 46967 infringement under applicable copyright law, except executing it 46968 on a computer or modifying a private copy. Propagation includes 46969 copying, distribution (with or without modification), making 46970 available to the public, and in some countries other activities as 46971 well. 46972 46973 To "convey" a work means any kind of propagation that enables other 46974 parties to make or receive copies. Mere interaction with a user 46975 through a computer network, with no transfer of a copy, is not 46976 conveying. 46977 46978 An interactive user interface displays "Appropriate Legal Notices" 46979 to the extent that it includes a convenient and prominently visible 46980 feature that (1) displays an appropriate copyright notice, and (2) 46981 tells the user that there is no warranty for the work (except to 46982 the extent that warranties are provided), that licensees may 46983 convey the work under this License, and how to view a copy of this 46984 License. If the interface presents a list of user commands or 46985 options, such as a menu, a prominent item in the list meets this 46986 criterion. 46987 46988 1. Source Code. 46989 46990 The "source code" for a work means the preferred form of the work 46991 for making modifications to it. "Object code" means any 46992 non-source form of a work. 46993 46994 A "Standard Interface" means an interface that either is an 46995 official standard defined by a recognized standards body, or, in 46996 the case of interfaces specified for a particular programming 46997 language, one that is widely used among developers working in that 46998 language. 46999 47000 The "System Libraries" of an executable work include anything, 47001 other than the work as a whole, that (a) is included in the normal 47002 form of packaging a Major Component, but which is not part of that 47003 Major Component, and (b) serves only to enable use of the work 47004 with that Major Component, or to implement a Standard Interface 47005 for which an implementation is available to the public in source 47006 code form. A "Major Component", in this context, means a major 47007 essential component (kernel, window system, and so on) of the 47008 specific operating system (if any) on which the executable work 47009 runs, or a compiler used to produce the work, or an object code 47010 interpreter used to run it. 47011 47012 The "Corresponding Source" for a work in object code form means all 47013 the source code needed to generate, install, and (for an executable 47014 work) run the object code and to modify the work, including 47015 scripts to control those activities. However, it does not include 47016 the work's System Libraries, or general-purpose tools or generally 47017 available free programs which are used unmodified in performing 47018 those activities but which are not part of the work. For example, 47019 Corresponding Source includes interface definition files 47020 associated with source files for the work, and the source code for 47021 shared libraries and dynamically linked subprograms that the work 47022 is specifically designed to require, such as by intimate data 47023 communication or control flow between those subprograms and other 47024 parts of the work. 47025 47026 The Corresponding Source need not include anything that users can 47027 regenerate automatically from other parts of the Corresponding 47028 Source. 47029 47030 The Corresponding Source for a work in source code form is that 47031 same work. 47032 47033 2. Basic Permissions. 47034 47035 All rights granted under this License are granted for the term of 47036 copyright on the Program, and are irrevocable provided the stated 47037 conditions are met. This License explicitly affirms your unlimited 47038 permission to run the unmodified Program. The output from running 47039 a covered work is covered by this License only if the output, 47040 given its content, constitutes a covered work. This License 47041 acknowledges your rights of fair use or other equivalent, as 47042 provided by copyright law. 47043 47044 You may make, run and propagate covered works that you do not 47045 convey, without conditions so long as your license otherwise 47046 remains in force. You may convey covered works to others for the 47047 sole purpose of having them make modifications exclusively for 47048 you, or provide you with facilities for running those works, 47049 provided that you comply with the terms of this License in 47050 conveying all material for which you do not control copyright. 47051 Those thus making or running the covered works for you must do so 47052 exclusively on your behalf, under your direction and control, on 47053 terms that prohibit them from making any copies of your 47054 copyrighted material outside their relationship with you. 47055 47056 Conveying under any other circumstances is permitted solely under 47057 the conditions stated below. Sublicensing is not allowed; section 47058 10 makes it unnecessary. 47059 47060 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 47061 47062 No covered work shall be deemed part of an effective technological 47063 measure under any applicable law fulfilling obligations under 47064 article 11 of the WIPO copyright treaty adopted on 20 December 47065 1996, or similar laws prohibiting or restricting circumvention of 47066 such measures. 47067 47068 When you convey a covered work, you waive any legal power to forbid 47069 circumvention of technological measures to the extent such 47070 circumvention is effected by exercising rights under this License 47071 with respect to the covered work, and you disclaim any intention 47072 to limit operation or modification of the work as a means of 47073 enforcing, against the work's users, your or third parties' legal 47074 rights to forbid circumvention of technological measures. 47075 47076 4. Conveying Verbatim Copies. 47077 47078 You may convey verbatim copies of the Program's source code as you 47079 receive it, in any medium, provided that you conspicuously and 47080 appropriately publish on each copy an appropriate copyright notice; 47081 keep intact all notices stating that this License and any 47082 non-permissive terms added in accord with section 7 apply to the 47083 code; keep intact all notices of the absence of any warranty; and 47084 give all recipients a copy of this License along with the Program. 47085 47086 You may charge any price or no price for each copy that you convey, 47087 and you may offer support or warranty protection for a fee. 47088 47089 5. Conveying Modified Source Versions. 47090 47091 You may convey a work based on the Program, or the modifications to 47092 produce it from the Program, in the form of source code under the 47093 terms of section 4, provided that you also meet all of these 47094 conditions: 47095 47096 a. The work must carry prominent notices stating that you 47097 modified it, and giving a relevant date. 47098 47099 b. The work must carry prominent notices stating that it is 47100 released under this License and any conditions added under 47101 section 7. This requirement modifies the requirement in 47102 section 4 to "keep intact all notices". 47103 47104 c. You must license the entire work, as a whole, under this 47105 License to anyone who comes into possession of a copy. This 47106 License will therefore apply, along with any applicable 47107 section 7 additional terms, to the whole of the work, and all 47108 its parts, regardless of how they are packaged. This License 47109 gives no permission to license the work in any other way, but 47110 it does not invalidate such permission if you have separately 47111 received it. 47112 47113 d. If the work has interactive user interfaces, each must display 47114 Appropriate Legal Notices; however, if the Program has 47115 interactive interfaces that do not display Appropriate Legal 47116 Notices, your work need not make them do so. 47117 47118 A compilation of a covered work with other separate and independent 47119 works, which are not by their nature extensions of the covered 47120 work, and which are not combined with it such as to form a larger 47121 program, in or on a volume of a storage or distribution medium, is 47122 called an "aggregate" if the compilation and its resulting 47123 copyright are not used to limit the access or legal rights of the 47124 compilation's users beyond what the individual works permit. 47125 Inclusion of a covered work in an aggregate does not cause this 47126 License to apply to the other parts of the aggregate. 47127 47128 6. Conveying Non-Source Forms. 47129 47130 You may convey a covered work in object code form under the terms 47131 of sections 4 and 5, provided that you also convey the 47132 machine-readable Corresponding Source under the terms of this 47133 License, in one of these ways: 47134 47135 a. Convey the object code in, or embodied in, a physical product 47136 (including a physical distribution medium), accompanied by the 47137 Corresponding Source fixed on a durable physical medium 47138 customarily used for software interchange. 47139 47140 b. Convey the object code in, or embodied in, a physical product 47141 (including a physical distribution medium), accompanied by a 47142 written offer, valid for at least three years and valid for 47143 as long as you offer spare parts or customer support for that 47144 product model, to give anyone who possesses the object code 47145 either (1) a copy of the Corresponding Source for all the 47146 software in the product that is covered by this License, on a 47147 durable physical medium customarily used for software 47148 interchange, for a price no more than your reasonable cost of 47149 physically performing this conveying of source, or (2) access 47150 to copy the Corresponding Source from a network server at no 47151 charge. 47152 47153 c. Convey individual copies of the object code with a copy of 47154 the written offer to provide the Corresponding Source. This 47155 alternative is allowed only occasionally and noncommercially, 47156 and only if you received the object code with such an offer, 47157 in accord with subsection 6b. 47158 47159 d. Convey the object code by offering access from a designated 47160 place (gratis or for a charge), and offer equivalent access 47161 to the Corresponding Source in the same way through the same 47162 place at no further charge. You need not require recipients 47163 to copy the Corresponding Source along with the object code. 47164 If the place to copy the object code is a network server, the 47165 Corresponding Source may be on a different server (operated 47166 by you or a third party) that supports equivalent copying 47167 facilities, provided you maintain clear directions next to 47168 the object code saying where to find the Corresponding Source. 47169 Regardless of what server hosts the Corresponding Source, you 47170 remain obligated to ensure that it is available for as long 47171 as needed to satisfy these requirements. 47172 47173 e. Convey the object code using peer-to-peer transmission, 47174 provided you inform other peers where the object code and 47175 Corresponding Source of the work are being offered to the 47176 general public at no charge under subsection 6d. 47177 47178 47179 A separable portion of the object code, whose source code is 47180 excluded from the Corresponding Source as a System Library, need 47181 not be included in conveying the object code work. 47182 47183 A "User Product" is either (1) a "consumer product", which means 47184 any tangible personal property which is normally used for personal, 47185 family, or household purposes, or (2) anything designed or sold for 47186 incorporation into a dwelling. In determining whether a product 47187 is a consumer product, doubtful cases shall be resolved in favor of 47188 coverage. For a particular product received by a particular user, 47189 "normally used" refers to a typical or common use of that class of 47190 product, regardless of the status of the particular user or of the 47191 way in which the particular user actually uses, or expects or is 47192 expected to use, the product. A product is a consumer product 47193 regardless of whether the product has substantial commercial, 47194 industrial or non-consumer uses, unless such uses represent the 47195 only significant mode of use of the product. 47196 47197 "Installation Information" for a User Product means any methods, 47198 procedures, authorization keys, or other information required to 47199 install and execute modified versions of a covered work in that 47200 User Product from a modified version of its Corresponding Source. 47201 The information must suffice to ensure that the continued 47202 functioning of the modified object code is in no case prevented or 47203 interfered with solely because modification has been made. 47204 47205 If you convey an object code work under this section in, or with, 47206 or specifically for use in, a User Product, and the conveying 47207 occurs as part of a transaction in which the right of possession 47208 and use of the User Product is transferred to the recipient in 47209 perpetuity or for a fixed term (regardless of how the transaction 47210 is characterized), the Corresponding Source conveyed under this 47211 section must be accompanied by the Installation Information. But 47212 this requirement does not apply if neither you nor any third party 47213 retains the ability to install modified object code on the User 47214 Product (for example, the work has been installed in ROM). 47215 47216 The requirement to provide Installation Information does not 47217 include a requirement to continue to provide support service, 47218 warranty, or updates for a work that has been modified or 47219 installed by the recipient, or for the User Product in which it 47220 has been modified or installed. Access to a network may be denied 47221 when the modification itself materially and adversely affects the 47222 operation of the network or violates the rules and protocols for 47223 communication across the network. 47224 47225 Corresponding Source conveyed, and Installation Information 47226 provided, in accord with this section must be in a format that is 47227 publicly documented (and with an implementation available to the 47228 public in source code form), and must require no special password 47229 or key for unpacking, reading or copying. 47230 47231 7. Additional Terms. 47232 47233 "Additional permissions" are terms that supplement the terms of 47234 this License by making exceptions from one or more of its 47235 conditions. Additional permissions that are applicable to the 47236 entire Program shall be treated as though they were included in 47237 this License, to the extent that they are valid under applicable 47238 law. If additional permissions apply only to part of the Program, 47239 that part may be used separately under those permissions, but the 47240 entire Program remains governed by this License without regard to 47241 the additional permissions. 47242 47243 When you convey a copy of a covered work, you may at your option 47244 remove any additional permissions from that copy, or from any part 47245 of it. (Additional permissions may be written to require their own 47246 removal in certain cases when you modify the work.) You may place 47247 additional permissions on material, added by you to a covered work, 47248 for which you have or can give appropriate copyright permission. 47249 47250 Notwithstanding any other provision of this License, for material 47251 you add to a covered work, you may (if authorized by the copyright 47252 holders of that material) supplement the terms of this License 47253 with terms: 47254 47255 a. Disclaiming warranty or limiting liability differently from 47256 the terms of sections 15 and 16 of this License; or 47257 47258 b. Requiring preservation of specified reasonable legal notices 47259 or author attributions in that material or in the Appropriate 47260 Legal Notices displayed by works containing it; or 47261 47262 c. Prohibiting misrepresentation of the origin of that material, 47263 or requiring that modified versions of such material be 47264 marked in reasonable ways as different from the original 47265 version; or 47266 47267 d. Limiting the use for publicity purposes of names of licensors 47268 or authors of the material; or 47269 47270 e. Declining to grant rights under trademark law for use of some 47271 trade names, trademarks, or service marks; or 47272 47273 f. Requiring indemnification of licensors and authors of that 47274 material by anyone who conveys the material (or modified 47275 versions of it) with contractual assumptions of liability to 47276 the recipient, for any liability that these contractual 47277 assumptions directly impose on those licensors and authors. 47278 47279 All other non-permissive additional terms are considered "further 47280 restrictions" within the meaning of section 10. If the Program as 47281 you received it, or any part of it, contains a notice stating that 47282 it is governed by this License along with a term that is a further 47283 restriction, you may remove that term. If a license document 47284 contains a further restriction but permits relicensing or 47285 conveying under this License, you may add to a covered work 47286 material governed by the terms of that license document, provided 47287 that the further restriction does not survive such relicensing or 47288 conveying. 47289 47290 If you add terms to a covered work in accord with this section, you 47291 must place, in the relevant source files, a statement of the 47292 additional terms that apply to those files, or a notice indicating 47293 where to find the applicable terms. 47294 47295 Additional terms, permissive or non-permissive, may be stated in 47296 the form of a separately written license, or stated as exceptions; 47297 the above requirements apply either way. 47298 47299 8. Termination. 47300 47301 You may not propagate or modify a covered work except as expressly 47302 provided under this License. Any attempt otherwise to propagate or 47303 modify it is void, and will automatically terminate your rights 47304 under this License (including any patent licenses granted under 47305 the third paragraph of section 11). 47306 47307 However, if you cease all violation of this License, then your 47308 license from a particular copyright holder is reinstated (a) 47309 provisionally, unless and until the copyright holder explicitly 47310 and finally terminates your license, and (b) permanently, if the 47311 copyright holder fails to notify you of the violation by some 47312 reasonable means prior to 60 days after the cessation. 47313 47314 Moreover, your license from a particular copyright holder is 47315 reinstated permanently if the copyright holder notifies you of the 47316 violation by some reasonable means, this is the first time you have 47317 received notice of violation of this License (for any work) from 47318 that copyright holder, and you cure the violation prior to 30 days 47319 after your receipt of the notice. 47320 47321 Termination of your rights under this section does not terminate 47322 the licenses of parties who have received copies or rights from 47323 you under this License. If your rights have been terminated and 47324 not permanently reinstated, you do not qualify to receive new 47325 licenses for the same material under section 10. 47326 47327 9. Acceptance Not Required for Having Copies. 47328 47329 You are not required to accept this License in order to receive or 47330 run a copy of the Program. Ancillary propagation of a covered work 47331 occurring solely as a consequence of using peer-to-peer 47332 transmission to receive a copy likewise does not require 47333 acceptance. However, nothing other than this License grants you 47334 permission to propagate or modify any covered work. These actions 47335 infringe copyright if you do not accept this License. Therefore, 47336 by modifying or propagating a covered work, you indicate your 47337 acceptance of this License to do so. 47338 47339 10. Automatic Licensing of Downstream Recipients. 47340 47341 Each time you convey a covered work, the recipient automatically 47342 receives a license from the original licensors, to run, modify and 47343 propagate that work, subject to this License. You are not 47344 responsible for enforcing compliance by third parties with this 47345 License. 47346 47347 An "entity transaction" is a transaction transferring control of an 47348 organization, or substantially all assets of one, or subdividing an 47349 organization, or merging organizations. If propagation of a 47350 covered work results from an entity transaction, each party to that 47351 transaction who receives a copy of the work also receives whatever 47352 licenses to the work the party's predecessor in interest had or 47353 could give under the previous paragraph, plus a right to 47354 possession of the Corresponding Source of the work from the 47355 predecessor in interest, if the predecessor has it or can get it 47356 with reasonable efforts. 47357 47358 You may not impose any further restrictions on the exercise of the 47359 rights granted or affirmed under this License. For example, you 47360 may not impose a license fee, royalty, or other charge for 47361 exercise of rights granted under this License, and you may not 47362 initiate litigation (including a cross-claim or counterclaim in a 47363 lawsuit) alleging that any patent claim is infringed by making, 47364 using, selling, offering for sale, or importing the Program or any 47365 portion of it. 47366 47367 11. Patents. 47368 47369 A "contributor" is a copyright holder who authorizes use under this 47370 License of the Program or a work on which the Program is based. 47371 The work thus licensed is called the contributor's "contributor 47372 version". 47373 47374 A contributor's "essential patent claims" are all patent claims 47375 owned or controlled by the contributor, whether already acquired or 47376 hereafter acquired, that would be infringed by some manner, 47377 permitted by this License, of making, using, or selling its 47378 contributor version, but do not include claims that would be 47379 infringed only as a consequence of further modification of the 47380 contributor version. For purposes of this definition, "control" 47381 includes the right to grant patent sublicenses in a manner 47382 consistent with the requirements of this License. 47383 47384 Each contributor grants you a non-exclusive, worldwide, 47385 royalty-free patent license under the contributor's essential 47386 patent claims, to make, use, sell, offer for sale, import and 47387 otherwise run, modify and propagate the contents of its 47388 contributor version. 47389 47390 In the following three paragraphs, a "patent license" is any 47391 express agreement or commitment, however denominated, not to 47392 enforce a patent (such as an express permission to practice a 47393 patent or covenant not to sue for patent infringement). To 47394 "grant" such a patent license to a party means to make such an 47395 agreement or commitment not to enforce a patent against the party. 47396 47397 If you convey a covered work, knowingly relying on a patent 47398 license, and the Corresponding Source of the work is not available 47399 for anyone to copy, free of charge and under the terms of this 47400 License, through a publicly available network server or other 47401 readily accessible means, then you must either (1) cause the 47402 Corresponding Source to be so available, or (2) arrange to deprive 47403 yourself of the benefit of the patent license for this particular 47404 work, or (3) arrange, in a manner consistent with the requirements 47405 of this License, to extend the patent license to downstream 47406 recipients. "Knowingly relying" means you have actual knowledge 47407 that, but for the patent license, your conveying the covered work 47408 in a country, or your recipient's use of the covered work in a 47409 country, would infringe one or more identifiable patents in that 47410 country that you have reason to believe are valid. 47411 47412 If, pursuant to or in connection with a single transaction or 47413 arrangement, you convey, or propagate by procuring conveyance of, a 47414 covered work, and grant a patent license to some of the parties 47415 receiving the covered work authorizing them to use, propagate, 47416 modify or convey a specific copy of the covered work, then the 47417 patent license you grant is automatically extended to all 47418 recipients of the covered work and works based on it. 47419 47420 A patent license is "discriminatory" if it does not include within 47421 the scope of its coverage, prohibits the exercise of, or is 47422 conditioned on the non-exercise of one or more of the rights that 47423 are specifically granted under this License. You may not convey a 47424 covered work if you are a party to an arrangement with a third 47425 party that is in the business of distributing software, under 47426 which you make payment to the third party based on the extent of 47427 your activity of conveying the work, and under which the third 47428 party grants, to any of the parties who would receive the covered 47429 work from you, a discriminatory patent license (a) in connection 47430 with copies of the covered work conveyed by you (or copies made 47431 from those copies), or (b) primarily for and in connection with 47432 specific products or compilations that contain the covered work, 47433 unless you entered into that arrangement, or that patent license 47434 was granted, prior to 28 March 2007. 47435 47436 Nothing in this License shall be construed as excluding or limiting 47437 any implied license or other defenses to infringement that may 47438 otherwise be available to you under applicable patent law. 47439 47440 12. No Surrender of Others' Freedom. 47441 47442 If conditions are imposed on you (whether by court order, 47443 agreement or otherwise) that contradict the conditions of this 47444 License, they do not excuse you from the conditions of this 47445 License. If you cannot convey a covered work so as to satisfy 47446 simultaneously your obligations under this License and any other 47447 pertinent obligations, then as a consequence you may not convey it 47448 at all. For example, if you agree to terms that obligate you to 47449 collect a royalty for further conveying from those to whom you 47450 convey the Program, the only way you could satisfy both those 47451 terms and this License would be to refrain entirely from conveying 47452 the Program. 47453 47454 13. Use with the GNU Affero General Public License. 47455 47456 Notwithstanding any other provision of this License, you have 47457 permission to link or combine any covered work with a work licensed 47458 under version 3 of the GNU Affero General Public License into a 47459 single combined work, and to convey the resulting work. The terms 47460 of this License will continue to apply to the part which is the 47461 covered work, but the special requirements of the GNU Affero 47462 General Public License, section 13, concerning interaction through 47463 a network will apply to the combination as such. 47464 47465 14. Revised Versions of this License. 47466 47467 The Free Software Foundation may publish revised and/or new 47468 versions of the GNU General Public License from time to time. 47469 Such new versions will be similar in spirit to the present 47470 version, but may differ in detail to address new problems or 47471 concerns. 47472 47473 Each version is given a distinguishing version number. If the 47474 Program specifies that a certain numbered version of the GNU 47475 General Public License "or any later version" applies to it, you 47476 have the option of following the terms and conditions either of 47477 that numbered version or of any later version published by the 47478 Free Software Foundation. If the Program does not specify a 47479 version number of the GNU General Public License, you may choose 47480 any version ever published by the Free Software Foundation. 47481 47482 If the Program specifies that a proxy can decide which future 47483 versions of the GNU General Public License can be used, that 47484 proxy's public statement of acceptance of a version permanently 47485 authorizes you to choose that version for the Program. 47486 47487 Later license versions may give you additional or different 47488 permissions. However, no additional obligations are imposed on any 47489 author or copyright holder as a result of your choosing to follow a 47490 later version. 47491 47492 15. Disclaimer of Warranty. 47493 47494 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 47495 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 47496 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 47497 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 47498 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 47499 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 47500 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 47501 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 47502 NECESSARY SERVICING, REPAIR OR CORRECTION. 47503 47504 16. Limitation of Liability. 47505 47506 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 47507 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 47508 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 47509 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 47510 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 47511 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 47512 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 47513 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 47514 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 47515 THE POSSIBILITY OF SUCH DAMAGES. 47516 47517 17. Interpretation of Sections 15 and 16. 47518 47519 If the disclaimer of warranty and limitation of liability provided 47520 above cannot be given local legal effect according to their terms, 47521 reviewing courts shall apply local law that most closely 47522 approximates an absolute waiver of all civil liability in 47523 connection with the Program, unless a warranty or assumption of 47524 liability accompanies a copy of the Program in return for a fee. 47525 47526 47527 END OF TERMS AND CONDITIONS 47528 =========================== 47529 47530 How to Apply These Terms to Your New Programs 47531 ============================================= 47532 47533 If you develop a new program, and you want it to be of the greatest 47534 possible use to the public, the best way to achieve this is to make it 47535 free software which everyone can redistribute and change under these 47536 terms. 47537 47538 To do so, attach the following notices to the program. It is safest 47539 to attach them to the start of each source file to most effectively 47540 state the exclusion of warranty; and each file should have at least the 47541 "copyright" line and a pointer to where the full notice is found. 47542 47543 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 47544 Copyright (C) YEAR NAME OF AUTHOR 47545 47546 This program is free software: you can redistribute it and/or modify 47547 it under the terms of the GNU General Public License as published by 47548 the Free Software Foundation, either version 3 of the License, or (at 47549 your option) any later version. 47550 47551 This program is distributed in the hope that it will be useful, but 47552 WITHOUT ANY WARRANTY; without even the implied warranty of 47553 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 47554 General Public License for more details. 47555 47556 You should have received a copy of the GNU General Public License 47557 along with this program. If not, see `http://www.gnu.org/licenses/'. 47558 47559 Also add information on how to contact you by electronic and paper 47560 mail. 47561 47562 If the program does terminal interaction, make it output a short 47563 notice like this when it starts in an interactive mode: 47564 47565 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 47566 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 47567 This is free software, and you are welcome to redistribute it 47568 under certain conditions; type `show c' for details. 47569 47570 The hypothetical commands `show w' and `show c' should show the 47571 appropriate parts of the General Public License. Of course, your 47572 program's commands might be different; for a GUI interface, you would 47573 use an "about box". 47574 47575 You should also get your employer (if you work as a programmer) or 47576 school, if any, to sign a "copyright disclaimer" for the program, if 47577 necessary. For more information on this, and how to apply and follow 47578 the GNU GPL, see `http://www.gnu.org/licenses/'. 47579 47580 The GNU General Public License does not permit incorporating your 47581 program into proprietary programs. If your program is a subroutine 47582 library, you may consider it more useful to permit linking proprietary 47583 applications with the library. If this is what you want to do, use the 47584 GNU Lesser General Public License instead of this License. But first, 47585 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 47586 47587 47588 File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 47589 47590 GNU Free Documentation License 47591 ****************************** 47592 47593 Version 1.3, 3 November 2008 47594 47595 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 47596 `http://fsf.org/' 47597 47598 Everyone is permitted to copy and distribute verbatim copies 47599 of this license document, but changing it is not allowed. 47600 47601 0. PREAMBLE 47602 47603 The purpose of this License is to make a manual, textbook, or other 47604 functional and useful document "free" in the sense of freedom: to 47605 assure everyone the effective freedom to copy and redistribute it, 47606 with or without modifying it, either commercially or 47607 noncommercially. Secondarily, this License preserves for the 47608 author and publisher a way to get credit for their work, while not 47609 being considered responsible for modifications made by others. 47610 47611 This License is a kind of "copyleft", which means that derivative 47612 works of the document must themselves be free in the same sense. 47613 It complements the GNU General Public License, which is a copyleft 47614 license designed for free software. 47615 47616 We have designed this License in order to use it for manuals for 47617 free software, because free software needs free documentation: a 47618 free program should come with manuals providing the same freedoms 47619 that the software does. But this License is not limited to 47620 software manuals; it can be used for any textual work, regardless 47621 of subject matter or whether it is published as a printed book. 47622 We recommend this License principally for works whose purpose is 47623 instruction or reference. 47624 47625 1. APPLICABILITY AND DEFINITIONS 47626 47627 This License applies to any manual or other work, in any medium, 47628 that contains a notice placed by the copyright holder saying it 47629 can be distributed under the terms of this License. Such a notice 47630 grants a world-wide, royalty-free license, unlimited in duration, 47631 to use that work under the conditions stated herein. The 47632 "Document", below, refers to any such manual or work. Any member 47633 of the public is a licensee, and is addressed as "you". You 47634 accept the license if you copy, modify or distribute the work in a 47635 way requiring permission under copyright law. 47636 47637 A "Modified Version" of the Document means any work containing the 47638 Document or a portion of it, either copied verbatim, or with 47639 modifications and/or translated into another language. 47640 47641 A "Secondary Section" is a named appendix or a front-matter section 47642 of the Document that deals exclusively with the relationship of the 47643 publishers or authors of the Document to the Document's overall 47644 subject (or to related matters) and contains nothing that could 47645 fall directly within that overall subject. (Thus, if the Document 47646 is in part a textbook of mathematics, a Secondary Section may not 47647 explain any mathematics.) The relationship could be a matter of 47648 historical connection with the subject or with related matters, or 47649 of legal, commercial, philosophical, ethical or political position 47650 regarding them. 47651 47652 The "Invariant Sections" are certain Secondary Sections whose 47653 titles are designated, as being those of Invariant Sections, in 47654 the notice that says that the Document is released under this 47655 License. If a section does not fit the above definition of 47656 Secondary then it is not allowed to be designated as Invariant. 47657 The Document may contain zero Invariant Sections. If the Document 47658 does not identify any Invariant Sections then there are none. 47659 47660 The "Cover Texts" are certain short passages of text that are 47661 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 47662 that says that the Document is released under this License. A 47663 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 47664 be at most 25 words. 47665 47666 A "Transparent" copy of the Document means a machine-readable copy, 47667 represented in a format whose specification is available to the 47668 general public, that is suitable for revising the document 47669 straightforwardly with generic text editors or (for images 47670 composed of pixels) generic paint programs or (for drawings) some 47671 widely available drawing editor, and that is suitable for input to 47672 text formatters or for automatic translation to a variety of 47673 formats suitable for input to text formatters. A copy made in an 47674 otherwise Transparent file format whose markup, or absence of 47675 markup, has been arranged to thwart or discourage subsequent 47676 modification by readers is not Transparent. An image format is 47677 not Transparent if used for any substantial amount of text. A 47678 copy that is not "Transparent" is called "Opaque". 47679 47680 Examples of suitable formats for Transparent copies include plain 47681 ASCII without markup, Texinfo input format, LaTeX input format, 47682 SGML or XML using a publicly available DTD, and 47683 standard-conforming simple HTML, PostScript or PDF designed for 47684 human modification. Examples of transparent image formats include 47685 PNG, XCF and JPG. Opaque formats include proprietary formats that 47686 can be read and edited only by proprietary word processors, SGML or 47687 XML for which the DTD and/or processing tools are not generally 47688 available, and the machine-generated HTML, PostScript or PDF 47689 produced by some word processors for output purposes only. 47690 47691 The "Title Page" means, for a printed book, the title page itself, 47692 plus such following pages as are needed to hold, legibly, the 47693 material this License requires to appear in the title page. For 47694 works in formats which do not have any title page as such, "Title 47695 Page" means the text near the most prominent appearance of the 47696 work's title, preceding the beginning of the body of the text. 47697 47698 The "publisher" means any person or entity that distributes copies 47699 of the Document to the public. 47700 47701 A section "Entitled XYZ" means a named subunit of the Document 47702 whose title either is precisely XYZ or contains XYZ in parentheses 47703 following text that translates XYZ in another language. (Here XYZ 47704 stands for a specific section name mentioned below, such as 47705 "Acknowledgements", "Dedications", "Endorsements", or "History".) 47706 To "Preserve the Title" of such a section when you modify the 47707 Document means that it remains a section "Entitled XYZ" according 47708 to this definition. 47709 47710 The Document may include Warranty Disclaimers next to the notice 47711 which states that this License applies to the Document. These 47712 Warranty Disclaimers are considered to be included by reference in 47713 this License, but only as regards disclaiming warranties: any other 47714 implication that these Warranty Disclaimers may have is void and 47715 has no effect on the meaning of this License. 47716 47717 2. VERBATIM COPYING 47718 47719 You may copy and distribute the Document in any medium, either 47720 commercially or noncommercially, provided that this License, the 47721 copyright notices, and the license notice saying this License 47722 applies to the Document are reproduced in all copies, and that you 47723 add no other conditions whatsoever to those of this License. You 47724 may not use technical measures to obstruct or control the reading 47725 or further copying of the copies you make or distribute. However, 47726 you may accept compensation in exchange for copies. If you 47727 distribute a large enough number of copies you must also follow 47728 the conditions in section 3. 47729 47730 You may also lend copies, under the same conditions stated above, 47731 and you may publicly display copies. 47732 47733 3. COPYING IN QUANTITY 47734 47735 If you publish printed copies (or copies in media that commonly 47736 have printed covers) of the Document, numbering more than 100, and 47737 the Document's license notice requires Cover Texts, you must 47738 enclose the copies in covers that carry, clearly and legibly, all 47739 these Cover Texts: Front-Cover Texts on the front cover, and 47740 Back-Cover Texts on the back cover. Both covers must also clearly 47741 and legibly identify you as the publisher of these copies. The 47742 front cover must present the full title with all words of the 47743 title equally prominent and visible. You may add other material 47744 on the covers in addition. Copying with changes limited to the 47745 covers, as long as they preserve the title of the Document and 47746 satisfy these conditions, can be treated as verbatim copying in 47747 other respects. 47748 47749 If the required texts for either cover are too voluminous to fit 47750 legibly, you should put the first ones listed (as many as fit 47751 reasonably) on the actual cover, and continue the rest onto 47752 adjacent pages. 47753 47754 If you publish or distribute Opaque copies of the Document 47755 numbering more than 100, you must either include a 47756 machine-readable Transparent copy along with each Opaque copy, or 47757 state in or with each Opaque copy a computer-network location from 47758 which the general network-using public has access to download 47759 using public-standard network protocols a complete Transparent 47760 copy of the Document, free of added material. If you use the 47761 latter option, you must take reasonably prudent steps, when you 47762 begin distribution of Opaque copies in quantity, to ensure that 47763 this Transparent copy will remain thus accessible at the stated 47764 location until at least one year after the last time you 47765 distribute an Opaque copy (directly or through your agents or 47766 retailers) of that edition to the public. 47767 47768 It is requested, but not required, that you contact the authors of 47769 the Document well before redistributing any large number of 47770 copies, to give them a chance to provide you with an updated 47771 version of the Document. 47772 47773 4. MODIFICATIONS 47774 47775 You may copy and distribute a Modified Version of the Document 47776 under the conditions of sections 2 and 3 above, provided that you 47777 release the Modified Version under precisely this License, with 47778 the Modified Version filling the role of the Document, thus 47779 licensing distribution and modification of the Modified Version to 47780 whoever possesses a copy of it. In addition, you must do these 47781 things in the Modified Version: 47782 47783 A. Use in the Title Page (and on the covers, if any) a title 47784 distinct from that of the Document, and from those of 47785 previous versions (which should, if there were any, be listed 47786 in the History section of the Document). You may use the 47787 same title as a previous version if the original publisher of 47788 that version gives permission. 47789 47790 B. List on the Title Page, as authors, one or more persons or 47791 entities responsible for authorship of the modifications in 47792 the Modified Version, together with at least five of the 47793 principal authors of the Document (all of its principal 47794 authors, if it has fewer than five), unless they release you 47795 from this requirement. 47796 47797 C. State on the Title page the name of the publisher of the 47798 Modified Version, as the publisher. 47799 47800 D. Preserve all the copyright notices of the Document. 47801 47802 E. Add an appropriate copyright notice for your modifications 47803 adjacent to the other copyright notices. 47804 47805 F. Include, immediately after the copyright notices, a license 47806 notice giving the public permission to use the Modified 47807 Version under the terms of this License, in the form shown in 47808 the Addendum below. 47809 47810 G. Preserve in that license notice the full lists of Invariant 47811 Sections and required Cover Texts given in the Document's 47812 license notice. 47813 47814 H. Include an unaltered copy of this License. 47815 47816 I. Preserve the section Entitled "History", Preserve its Title, 47817 and add to it an item stating at least the title, year, new 47818 authors, and publisher of the Modified Version as given on 47819 the Title Page. If there is no section Entitled "History" in 47820 the Document, create one stating the title, year, authors, 47821 and publisher of the Document as given on its Title Page, 47822 then add an item describing the Modified Version as stated in 47823 the previous sentence. 47824 47825 J. Preserve the network location, if any, given in the Document 47826 for public access to a Transparent copy of the Document, and 47827 likewise the network locations given in the Document for 47828 previous versions it was based on. These may be placed in 47829 the "History" section. You may omit a network location for a 47830 work that was published at least four years before the 47831 Document itself, or if the original publisher of the version 47832 it refers to gives permission. 47833 47834 K. For any section Entitled "Acknowledgements" or "Dedications", 47835 Preserve the Title of the section, and preserve in the 47836 section all the substance and tone of each of the contributor 47837 acknowledgements and/or dedications given therein. 47838 47839 L. Preserve all the Invariant Sections of the Document, 47840 unaltered in their text and in their titles. Section numbers 47841 or the equivalent are not considered part of the section 47842 titles. 47843 47844 M. Delete any section Entitled "Endorsements". Such a section 47845 may not be included in the Modified Version. 47846 47847 N. Do not retitle any existing section to be Entitled 47848 "Endorsements" or to conflict in title with any Invariant 47849 Section. 47850 47851 O. Preserve any Warranty Disclaimers. 47852 47853 If the Modified Version includes new front-matter sections or 47854 appendices that qualify as Secondary Sections and contain no 47855 material copied from the Document, you may at your option 47856 designate some or all of these sections as invariant. To do this, 47857 add their titles to the list of Invariant Sections in the Modified 47858 Version's license notice. These titles must be distinct from any 47859 other section titles. 47860 47861 You may add a section Entitled "Endorsements", provided it contains 47862 nothing but endorsements of your Modified Version by various 47863 parties--for example, statements of peer review or that the text 47864 has been approved by an organization as the authoritative 47865 definition of a standard. 47866 47867 You may add a passage of up to five words as a Front-Cover Text, 47868 and a passage of up to 25 words as a Back-Cover Text, to the end 47869 of the list of Cover Texts in the Modified Version. Only one 47870 passage of Front-Cover Text and one of Back-Cover Text may be 47871 added by (or through arrangements made by) any one entity. If the 47872 Document already includes a cover text for the same cover, 47873 previously added by you or by arrangement made by the same entity 47874 you are acting on behalf of, you may not add another; but you may 47875 replace the old one, on explicit permission from the previous 47876 publisher that added the old one. 47877 47878 The author(s) and publisher(s) of the Document do not by this 47879 License give permission to use their names for publicity for or to 47880 assert or imply endorsement of any Modified Version. 47881 47882 5. COMBINING DOCUMENTS 47883 47884 You may combine the Document with other documents released under 47885 this License, under the terms defined in section 4 above for 47886 modified versions, provided that you include in the combination 47887 all of the Invariant Sections of all of the original documents, 47888 unmodified, and list them all as Invariant Sections of your 47889 combined work in its license notice, and that you preserve all 47890 their Warranty Disclaimers. 47891 47892 The combined work need only contain one copy of this License, and 47893 multiple identical Invariant Sections may be replaced with a single 47894 copy. If there are multiple Invariant Sections with the same name 47895 but different contents, make the title of each such section unique 47896 by adding at the end of it, in parentheses, the name of the 47897 original author or publisher of that section if known, or else a 47898 unique number. Make the same adjustment to the section titles in 47899 the list of Invariant Sections in the license notice of the 47900 combined work. 47901 47902 In the combination, you must combine any sections Entitled 47903 "History" in the various original documents, forming one section 47904 Entitled "History"; likewise combine any sections Entitled 47905 "Acknowledgements", and any sections Entitled "Dedications". You 47906 must delete all sections Entitled "Endorsements." 47907 47908 6. COLLECTIONS OF DOCUMENTS 47909 47910 You may make a collection consisting of the Document and other 47911 documents released under this License, and replace the individual 47912 copies of this License in the various documents with a single copy 47913 that is included in the collection, provided that you follow the 47914 rules of this License for verbatim copying of each of the 47915 documents in all other respects. 47916 47917 You may extract a single document from such a collection, and 47918 distribute it individually under this License, provided you insert 47919 a copy of this License into the extracted document, and follow 47920 this License in all other respects regarding verbatim copying of 47921 that document. 47922 47923 7. AGGREGATION WITH INDEPENDENT WORKS 47924 47925 A compilation of the Document or its derivatives with other 47926 separate and independent documents or works, in or on a volume of 47927 a storage or distribution medium, is called an "aggregate" if the 47928 copyright resulting from the compilation is not used to limit the 47929 legal rights of the compilation's users beyond what the individual 47930 works permit. When the Document is included in an aggregate, this 47931 License does not apply to the other works in the aggregate which 47932 are not themselves derivative works of the Document. 47933 47934 If the Cover Text requirement of section 3 is applicable to these 47935 copies of the Document, then if the Document is less than one half 47936 of the entire aggregate, the Document's Cover Texts may be placed 47937 on covers that bracket the Document within the aggregate, or the 47938 electronic equivalent of covers if the Document is in electronic 47939 form. Otherwise they must appear on printed covers that bracket 47940 the whole aggregate. 47941 47942 8. TRANSLATION 47943 47944 Translation is considered a kind of modification, so you may 47945 distribute translations of the Document under the terms of section 47946 4. Replacing Invariant Sections with translations requires special 47947 permission from their copyright holders, but you may include 47948 translations of some or all Invariant Sections in addition to the 47949 original versions of these Invariant Sections. You may include a 47950 translation of this License, and all the license notices in the 47951 Document, and any Warranty Disclaimers, provided that you also 47952 include the original English version of this License and the 47953 original versions of those notices and disclaimers. In case of a 47954 disagreement between the translation and the original version of 47955 this License or a notice or disclaimer, the original version will 47956 prevail. 47957 47958 If a section in the Document is Entitled "Acknowledgements", 47959 "Dedications", or "History", the requirement (section 4) to 47960 Preserve its Title (section 1) will typically require changing the 47961 actual title. 47962 47963 9. TERMINATION 47964 47965 You may not copy, modify, sublicense, or distribute the Document 47966 except as expressly provided under this License. Any attempt 47967 otherwise to copy, modify, sublicense, or distribute it is void, 47968 and will automatically terminate your rights under this License. 47969 47970 However, if you cease all violation of this License, then your 47971 license from a particular copyright holder is reinstated (a) 47972 provisionally, unless and until the copyright holder explicitly 47973 and finally terminates your license, and (b) permanently, if the 47974 copyright holder fails to notify you of the violation by some 47975 reasonable means prior to 60 days after the cessation. 47976 47977 Moreover, your license from a particular copyright holder is 47978 reinstated permanently if the copyright holder notifies you of the 47979 violation by some reasonable means, this is the first time you have 47980 received notice of violation of this License (for any work) from 47981 that copyright holder, and you cure the violation prior to 30 days 47982 after your receipt of the notice. 47983 47984 Termination of your rights under this section does not terminate 47985 the licenses of parties who have received copies or rights from 47986 you under this License. If your rights have been terminated and 47987 not permanently reinstated, receipt of a copy of some or all of 47988 the same material does not give you any rights to use it. 47989 47990 10. FUTURE REVISIONS OF THIS LICENSE 47991 47992 The Free Software Foundation may publish new, revised versions of 47993 the GNU Free Documentation License from time to time. Such new 47994 versions will be similar in spirit to the present version, but may 47995 differ in detail to address new problems or concerns. See 47996 `http://www.gnu.org/copyleft/'. 47997 47998 Each version of the License is given a distinguishing version 47999 number. If the Document specifies that a particular numbered 48000 version of this License "or any later version" applies to it, you 48001 have the option of following the terms and conditions either of 48002 that specified version or of any later version that has been 48003 published (not as a draft) by the Free Software Foundation. If 48004 the Document does not specify a version number of this License, 48005 you may choose any version ever published (not as a draft) by the 48006 Free Software Foundation. If the Document specifies that a proxy 48007 can decide which future versions of this License can be used, that 48008 proxy's public statement of acceptance of a version permanently 48009 authorizes you to choose that version for the Document. 48010 48011 11. RELICENSING 48012 48013 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 48014 World Wide Web server that publishes copyrightable works and also 48015 provides prominent facilities for anybody to edit those works. A 48016 public wiki that anybody can edit is an example of such a server. 48017 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 48018 site means any set of copyrightable works thus published on the MMC 48019 site. 48020 48021 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 48022 license published by Creative Commons Corporation, a not-for-profit 48023 corporation with a principal place of business in San Francisco, 48024 California, as well as future copyleft versions of that license 48025 published by that same organization. 48026 48027 "Incorporate" means to publish or republish a Document, in whole or 48028 in part, as part of another Document. 48029 48030 An MMC is "eligible for relicensing" if it is licensed under this 48031 License, and if all works that were first published under this 48032 License somewhere other than this MMC, and subsequently 48033 incorporated in whole or in part into the MMC, (1) had no cover 48034 texts or invariant sections, and (2) were thus incorporated prior 48035 to November 1, 2008. 48036 48037 The operator of an MMC Site may republish an MMC contained in the 48038 site under CC-BY-SA on the same site at any time before August 1, 48039 2009, provided the MMC is eligible for relicensing. 48040 48041 48042 ADDENDUM: How to use this License for your documents 48043 ==================================================== 48044 48045 To use this License in a document you have written, include a copy of 48046 the License in the document and put the following copyright and license 48047 notices just after the title page: 48048 48049 Copyright (C) YEAR YOUR NAME. 48050 Permission is granted to copy, distribute and/or modify this document 48051 under the terms of the GNU Free Documentation License, Version 1.3 48052 or any later version published by the Free Software Foundation; 48053 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 48054 Texts. A copy of the license is included in the section entitled ``GNU 48055 Free Documentation License''. 48056 48057 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 48058 replace the "with...Texts." line with this: 48059 48060 with the Invariant Sections being LIST THEIR TITLES, with 48061 the Front-Cover Texts being LIST, and with the Back-Cover Texts 48062 being LIST. 48063 48064 If you have Invariant Sections without Cover Texts, or some other 48065 combination of the three, merge those two alternatives to suit the 48066 situation. 48067 48068 If your document contains nontrivial examples of program code, we 48069 recommend releasing these examples in parallel under your choice of 48070 free software license, such as the GNU General Public License, to 48071 permit their use in free software. 48072 48073 48074 File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 48075 48076 Contributors to GCC 48077 ******************* 48078 48079 The GCC project would like to thank its many contributors. Without 48080 them the project would not have been nearly as successful as it has 48081 been. Any omissions in this list are accidental. Feel free to contact 48082 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or 48083 some of your contributions are not listed. Please keep this list in 48084 alphabetical order. 48085 48086 * Analog Devices helped implement the support for complex data types 48087 and iterators. 48088 48089 * John David Anglin for threading-related fixes and improvements to 48090 libstdc++-v3, and the HP-UX port. 48091 48092 * James van Artsdalen wrote the code that makes efficient use of the 48093 Intel 80387 register stack. 48094 48095 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 48096 Series port. 48097 48098 * Alasdair Baird for various bug fixes. 48099 48100 * Giovanni Bajo for analyzing lots of complicated C++ problem 48101 reports. 48102 48103 * Peter Barada for his work to improve code generation for new 48104 ColdFire cores. 48105 48106 * Gerald Baumgartner added the signature extension to the C++ front 48107 end. 48108 48109 * Godmar Back for his Java improvements and encouragement. 48110 48111 * Scott Bambrough for help porting the Java compiler. 48112 48113 * Wolfgang Bangerth for processing tons of bug reports. 48114 48115 * Jon Beniston for his Microsoft Windows port of Java and port to 48116 Lattice Mico32. 48117 48118 * Daniel Berlin for better DWARF2 support, faster/better 48119 optimizations, improved alias analysis, plus migrating GCC to 48120 Bugzilla. 48121 48122 * Geoff Berry for his Java object serialization work and various 48123 patches. 48124 48125 * David Binderman tests weekly snapshots of GCC trunk against Fedora 48126 Rawhide for several architectures. 48127 48128 * Uros Bizjak for the implementation of x87 math built-in functions 48129 and for various middle end and i386 back end improvements and bug 48130 fixes. 48131 48132 * Eric Blake for helping to make GCJ and libgcj conform to the 48133 specifications. 48134 48135 * Janne Blomqvist for contributions to GNU Fortran. 48136 48137 * Segher Boessenkool for various fixes. 48138 48139 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 48140 other Java work. 48141 48142 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 48143 miscellaneous clean-ups. 48144 48145 * Steven Bosscher for integrating the GNU Fortran front end into GCC 48146 and for contributing to the tree-ssa branch. 48147 48148 * Eric Botcazou for fixing middle- and backend bugs left and right. 48149 48150 * Per Bothner for his direction via the steering committee and 48151 various improvements to the infrastructure for supporting new 48152 languages. Chill front end implementation. Initial 48153 implementations of cpplib, fix-header, config.guess, libio, and 48154 past C++ library (libg++) maintainer. Dreaming up, designing and 48155 implementing much of GCJ. 48156 48157 * Devon Bowen helped port GCC to the Tahoe. 48158 48159 * Don Bowman for mips-vxworks contributions. 48160 48161 * Dave Brolley for work on cpplib and Chill. 48162 48163 * Paul Brook for work on the ARM architecture and maintaining GNU 48164 Fortran. 48165 48166 * Robert Brown implemented the support for Encore 32000 systems. 48167 48168 * Christian Bruel for improvements to local store elimination. 48169 48170 * Herman A.J. ten Brugge for various fixes. 48171 48172 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 48173 FAQ. 48174 48175 * Joe Buck for his direction via the steering committee. 48176 48177 * Craig Burley for leadership of the G77 Fortran effort. 48178 48179 * Stephan Buys for contributing Doxygen notes for libstdc++. 48180 48181 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 48182 to the C++ strings, streambufs and formatted I/O, hard detective 48183 work on the frustrating localization issues, and keeping up with 48184 the problem reports. 48185 48186 * John Carr for his alias work, SPARC hacking, infrastructure 48187 improvements, previous contributions to the steering committee, 48188 loop optimizations, etc. 48189 48190 * Stephane Carrez for 68HC11 and 68HC12 ports. 48191 48192 * Steve Chamberlain for support for the Renesas SH and H8 processors 48193 and the PicoJava processor, and for GCJ config fixes. 48194 48195 * Glenn Chambers for help with the GCJ FAQ. 48196 48197 * John-Marc Chandonia for various libgcj patches. 48198 48199 * Denis Chertykov for contributing and maintaining the AVR port, the 48200 first GCC port for an 8-bit architecture. 48201 48202 * Scott Christley for his Objective-C contributions. 48203 48204 * Eric Christopher for his Java porting help and clean-ups. 48205 48206 * Branko Cibej for more warning contributions. 48207 48208 * The GNU Classpath project for all of their merged runtime code. 48209 48210 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help', 48211 and other random hacking. 48212 48213 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 48214 48215 * R. Kelley Cook for making GCC buildable from a read-only directory 48216 as well as other miscellaneous build process and documentation 48217 clean-ups. 48218 48219 * Ralf Corsepius for SH testing and minor bug fixing. 48220 48221 * Stan Cox for care and feeding of the x86 port and lots of behind 48222 the scenes hacking. 48223 48224 * Alex Crain provided changes for the 3b1. 48225 48226 * Ian Dall for major improvements to the NS32k port. 48227 48228 * Paul Dale for his work to add uClinux platform support to the m68k 48229 backend. 48230 48231 * Dario Dariol contributed the four varieties of sample programs 48232 that print a copy of their source. 48233 48234 * Russell Davidson for fstream and stringstream fixes in libstdc++. 48235 48236 * Bud Davis for work on the G77 and GNU Fortran compilers. 48237 48238 * Mo DeJong for GCJ and libgcj bug fixes. 48239 48240 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 48241 various bug fixes, and the M32C, MeP, and RL78 ports. 48242 48243 * Arnaud Desitter for helping to debug GNU Fortran. 48244 48245 * Gabriel Dos Reis for contributions to G++, contributions and 48246 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 48247 including `valarray<>', `complex<>', maintaining the numerics 48248 library (including that pesky `<limits>' :-) and keeping 48249 up-to-date anything to do with numbers. 48250 48251 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 48252 ISO C99 support, CFG dumping support, etc., plus support of the 48253 C++ runtime libraries including for all kinds of C interface 48254 issues, contributing and maintaining `complex<>', sanity checking 48255 and disbursement, configuration architecture, libio maintenance, 48256 and early math work. 48257 48258 * Zdenek Dvorak for a new loop unroller and various fixes. 48259 48260 * Michael Eager for his work on the Xilinx MicroBlaze port. 48261 48262 * Richard Earnshaw for his ongoing work with the ARM. 48263 48264 * David Edelsohn for his direction via the steering committee, 48265 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 48266 loop changes, doing the entire AIX port of libstdc++ with his bare 48267 hands, and for ensuring GCC properly keeps working on AIX. 48268 48269 * Kevin Ediger for the floating point formatting of num_put::do_put 48270 in libstdc++. 48271 48272 * Phil Edwards for libstdc++ work including configuration hackery, 48273 documentation maintainer, chief breaker of the web pages, the 48274 occasional iostream bug fix, and work on shared library symbol 48275 versioning. 48276 48277 * Paul Eggert for random hacking all over GCC. 48278 48279 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 48280 configuration support for locales and fstream-related fixes. 48281 48282 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 48283 iostreams. 48284 48285 * Christian Ehrhardt for dealing with bug reports. 48286 48287 * Ben Elliston for his work to move the Objective-C runtime into its 48288 own subdirectory and for his work on autoconf. 48289 48290 * Revital Eres for work on the PowerPC 750CL port. 48291 48292 * Marc Espie for OpenBSD support. 48293 48294 * Doug Evans for much of the global optimization framework, arc, 48295 m32r, and SPARC work. 48296 48297 * Christopher Faylor for his work on the Cygwin port and for caring 48298 and feeding the gcc.gnu.org box and saving its users tons of spam. 48299 48300 * Fred Fish for BeOS support and Ada fixes. 48301 48302 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 48303 48304 * Peter Gerwinski for various bug fixes and the Pascal front end. 48305 48306 * Kaveh R. Ghazi for his direction via the steering committee, 48307 amazing work to make `-W -Wall -W* -Werror' useful, and testing 48308 GCC on a plethora of platforms. Kaveh extends his gratitude to 48309 the CAIP Center at Rutgers University for providing him with 48310 computing resources to work on Free Software from the late 1980s 48311 to 2010. 48312 48313 * John Gilmore for a donation to the FSF earmarked improving GNU 48314 Java. 48315 48316 * Judy Goldberg for c++ contributions. 48317 48318 * Torbjorn Granlund for various fixes and the c-torture testsuite, 48319 multiply- and divide-by-constant optimization, improved long long 48320 support, improved leaf function register allocation, and his 48321 direction via the steering committee. 48322 48323 * Anthony Green for his `-Os' contributions, the moxie port, and 48324 Java front end work. 48325 48326 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 48327 Java code. 48328 48329 * Michael K. Gschwind contributed the port to the PDP-11. 48330 48331 * Richard Guenther for his ongoing middle-end contributions and bug 48332 fixes and for release management. 48333 48334 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 48335 the support for Dwarf symbolic debugging information, and much of 48336 the support for System V Release 4. He has also worked heavily on 48337 the Intel 386 and 860 support. 48338 48339 * Sumanth Gundapaneni for contributing the CR16 port. 48340 48341 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 48342 GCSE. 48343 48344 * Bruno Haible for improvements in the runtime overhead for EH, new 48345 warnings and assorted bug fixes. 48346 48347 * Andrew Haley for his amazing Java compiler and library efforts. 48348 48349 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 48350 series 300. 48351 48352 * Michael Hayes for various thankless work he's done trying to get 48353 the c30/c40 ports functional. Lots of loop and unroll 48354 improvements and fixes. 48355 48356 * Dara Hazeghi for wading through myriads of target-specific bug 48357 reports. 48358 48359 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 48360 48361 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 48362 work, loop opts, and generally fixing lots of old problems we've 48363 ignored for years, flow rewrite and lots of further stuff, 48364 including reviewing tons of patches. 48365 48366 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 48367 various fixes. 48368 48369 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 48370 contributed the support for the Sony NEWS machine. 48371 48372 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 48373 various fixes. 48374 48375 * Katherine Holcomb for work on GNU Fortran. 48376 48377 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 48378 of testing and bug fixing, particularly of GCC configury code. 48379 48380 * Steve Holmgren for MachTen patches. 48381 48382 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 48383 48384 * Jan Hubicka for his x86 port improvements. 48385 48386 * Falk Hueffner for working on C and optimization bug reports. 48387 48388 * Bernardo Innocenti for his m68k work, including merging of 48389 ColdFire improvements and uClinux support. 48390 48391 * Christian Iseli for various bug fixes. 48392 48393 * Kamil Iskra for general m68k hacking. 48394 48395 * Lee Iverson for random fixes and MIPS testing. 48396 48397 * Andreas Jaeger for testing and benchmarking of GCC and various bug 48398 fixes. 48399 48400 * Jakub Jelinek for his SPARC work and sibling call optimizations as 48401 well as lots of bug fixes and test cases, and for improving the 48402 Java build system. 48403 48404 * Janis Johnson for ia64 testing and fixes, her quality improvement 48405 sidetracks, and web page maintenance. 48406 48407 * Kean Johnston for SCO OpenServer support and various fixes. 48408 48409 * Tim Josling for the sample language treelang based originally on 48410 Richard Kenner's "toy" language. 48411 48412 * Nicolai Josuttis for additional libstdc++ documentation. 48413 48414 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 48415 target. 48416 48417 * Steven G. Kargl for work on GNU Fortran. 48418 48419 * David Kashtan of SRI adapted GCC to VMS. 48420 48421 * Ryszard Kabatek for many, many libstdc++ bug fixes and 48422 optimizations of strings, especially member functions, and for 48423 auto_ptr fixes. 48424 48425 * Geoffrey Keating for his ongoing work to make the PPC work for 48426 GNU/Linux and his automatic regression tester. 48427 48428 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 48429 work in just about every part of libstdc++. 48430 48431 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 48432 MIL-STD-1750A. 48433 48434 * Richard Kenner of the New York University Ultracomputer Research 48435 Laboratory wrote the machine descriptions for the AMD 29000, the 48436 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 48437 support for instruction attributes. He also made changes to 48438 better support RISC processors including changes to common 48439 subexpression elimination, strength reduction, function calling 48440 sequence handling, and condition code support, in addition to 48441 generalizing the code for frame pointer elimination and delay slot 48442 scheduling. Richard Kenner was also the head maintainer of GCC 48443 for several years. 48444 48445 * Mumit Khan for various contributions to the Cygwin and Mingw32 48446 ports and maintaining binary releases for Microsoft Windows hosts, 48447 and for massive libstdc++ porting work to Cygwin/Mingw32. 48448 48449 * Robin Kirkham for cpu32 support. 48450 48451 * Mark Klein for PA improvements. 48452 48453 * Thomas Koenig for various bug fixes. 48454 48455 * Bruce Korb for the new and improved fixincludes code. 48456 48457 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 48458 effort. 48459 48460 * Charles LaBrec contributed the support for the Integrated Solutions 48461 68020 system. 48462 48463 * Asher Langton and Mike Kumbera for contributing Cray pointer 48464 support to GNU Fortran, and for other GNU Fortran improvements. 48465 48466 * Jeff Law for his direction via the steering committee, 48467 coordinating the entire egcs project and GCC 2.95, rolling out 48468 snapshots and releases, handling merges from GCC2, reviewing tons 48469 of patches that might have fallen through the cracks else, and 48470 random but extensive hacking. 48471 48472 * Walter Lee for work on the TILE-Gx and TILEPro ports. 48473 48474 * Marc Lehmann for his direction via the steering committee and 48475 helping with analysis and improvements of x86 performance. 48476 48477 * Victor Leikehman for work on GNU Fortran. 48478 48479 * Ted Lemon wrote parts of the RTL reader and printer. 48480 48481 * Kriang Lerdsuwanakij for C++ improvements including template as 48482 template parameter support, and many C++ fixes. 48483 48484 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 48485 and random work on the Java front end. 48486 48487 * Alain Lichnewsky ported GCC to the MIPS CPU. 48488 48489 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 48490 and patches. 48491 48492 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 48493 48494 * Chen Liqin for various S+core related fixes/improvement, and for 48495 maintaining the S+core port. 48496 48497 * Weiwen Liu for testing and various bug fixes. 48498 48499 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 48500 diagnostics fixes and improvements. 48501 48502 * Dave Love for his ongoing work with the Fortran front end and 48503 runtime libraries. 48504 48505 * Martin von Lo"wis for internal consistency checking infrastructure, 48506 various C++ improvements including namespace support, and tons of 48507 assistance with libstdc++/compiler merges. 48508 48509 * H.J. Lu for his previous contributions to the steering committee, 48510 many x86 bug reports, prototype patches, and keeping the GNU/Linux 48511 ports working. 48512 48513 * Greg McGary for random fixes and (someday) bounded pointers. 48514 48515 * Andrew MacLeod for his ongoing work in building a real EH system, 48516 various code generation improvements, work on the global 48517 optimizer, etc. 48518 48519 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 48520 hacking improvements to compile-time performance, overall 48521 knowledge and direction in the area of instruction scheduling, and 48522 design and implementation of the automaton based instruction 48523 scheduler. 48524 48525 * Bob Manson for his behind the scenes work on dejagnu. 48526 48527 * Philip Martin for lots of libstdc++ string and vector iterator 48528 fixes and improvements, and string clean up and testsuites. 48529 48530 * All of the Mauve project contributors, for Java test code. 48531 48532 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 48533 48534 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 48535 48536 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 48537 powerpc, haifa, ECOFF debug support, and other assorted hacking. 48538 48539 * Jason Merrill for his direction via the steering committee and 48540 leading the G++ effort. 48541 48542 * Martin Michlmayr for testing GCC on several architectures using the 48543 entire Debian archive. 48544 48545 * David Miller for his direction via the steering committee, lots of 48546 SPARC work, improvements in jump.c and interfacing with the Linux 48547 kernel developers. 48548 48549 * Gary Miller ported GCC to Charles River Data Systems machines. 48550 48551 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 48552 the entire libstdc++ testsuite namespace-compatible. 48553 48554 * Mark Mitchell for his direction via the steering committee, 48555 mountains of C++ work, load/store hoisting out of loops, alias 48556 analysis improvements, ISO C `restrict' support, and serving as 48557 release manager from 2000 to 2011. 48558 48559 * Alan Modra for various GNU/Linux bits and testing. 48560 48561 * Toon Moene for his direction via the steering committee, Fortran 48562 maintenance, and his ongoing work to make us make Fortran run fast. 48563 48564 * Jason Molenda for major help in the care and feeding of all the 48565 services on the gcc.gnu.org (formerly egcs.cygnus.com) 48566 machine--mail, web services, ftp services, etc etc. Doing all 48567 this work on scrap paper and the backs of envelopes would have 48568 been... difficult. 48569 48570 * Catherine Moore for fixing various ugly problems we have sent her 48571 way, including the haifa bug which was killing the Alpha & PowerPC 48572 Linux kernels. 48573 48574 * Mike Moreton for his various Java patches. 48575 48576 * David Mosberger-Tang for various Alpha improvements, and for the 48577 initial IA-64 port. 48578 48579 * Stephen Moshier contributed the floating point emulator that 48580 assists in cross-compilation and permits support for floating 48581 point numbers wider than 64 bits and for ISO C99 support. 48582 48583 * Bill Moyer for his behind the scenes work on various issues. 48584 48585 * Philippe De Muyter for his work on the m68k port. 48586 48587 * Joseph S. Myers for his work on the PDP-11 port, format checking 48588 and ISO C99 support, and continuous emphasis on (and contributions 48589 to) documentation. 48590 48591 * Nathan Myers for his work on libstdc++-v3: architecture and 48592 authorship through the first three snapshots, including 48593 implementation of locale infrastructure, string, shadow C headers, 48594 and the initial project documentation (DESIGN, CHECKLIST, and so 48595 forth). Later, more work on MT-safe string and shadow headers. 48596 48597 * Felix Natter for documentation on porting libstdc++. 48598 48599 * Nathanael Nerode for cleaning up the configuration/build process. 48600 48601 * NeXT, Inc. donated the front end that supports the Objective-C 48602 language. 48603 48604 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 48605 the search engine setup, various documentation fixes and other 48606 small fixes. 48607 48608 * Geoff Noer for his work on getting cygwin native builds working. 48609 48610 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 48611 tracking web pages, GIMPLE tuples, and assorted fixes. 48612 48613 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 48614 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 48615 related infrastructure improvements. 48616 48617 * Alexandre Oliva for various build infrastructure improvements, 48618 scripts and amazing testing work, including keeping libtool issues 48619 sane and happy. 48620 48621 * Stefan Olsson for work on mt_alloc. 48622 48623 * Melissa O'Neill for various NeXT fixes. 48624 48625 * Rainer Orth for random MIPS work, including improvements to GCC's 48626 o32 ABI support, improvements to dejagnu's MIPS support, Java 48627 configuration clean-ups and porting work, and maintaining the 48628 IRIX, Solaris 2, and Tru64 UNIX ports. 48629 48630 * Hartmut Penner for work on the s390 port. 48631 48632 * Paul Petersen wrote the machine description for the Alliant FX/8. 48633 48634 * Alexandre Petit-Bianco for implementing much of the Java compiler 48635 and continued Java maintainership. 48636 48637 * Matthias Pfaller for major improvements to the NS32k port. 48638 48639 * Gerald Pfeifer for his direction via the steering committee, 48640 pointing out lots of problems we need to solve, maintenance of the 48641 web pages, and taking care of documentation maintenance in general. 48642 48643 * Andrew Pinski for processing bug reports by the dozen. 48644 48645 * Ovidiu Predescu for his work on the Objective-C front end and 48646 runtime libraries. 48647 48648 * Jerry Quinn for major performance improvements in C++ formatted 48649 I/O. 48650 48651 * Ken Raeburn for various improvements to checker, MIPS ports and 48652 various cleanups in the compiler. 48653 48654 * Rolf W. Rasmussen for hacking on AWT. 48655 48656 * David Reese of Sun Microsystems contributed to the Solaris on 48657 PowerPC port. 48658 48659 * Volker Reichelt for keeping up with the problem reports. 48660 48661 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 48662 hacking and developing and maintaining the Epiphany port. 48663 48664 * Loren J. Rittle for improvements to libstdc++-v3 including the 48665 FreeBSD port, threading fixes, thread-related configury changes, 48666 critical threading documentation, and solutions to really tricky 48667 I/O problems, as well as keeping GCC properly working on FreeBSD 48668 and continuous testing. 48669 48670 * Craig Rodrigues for processing tons of bug reports. 48671 48672 * Ola Ro"nnerup for work on mt_alloc. 48673 48674 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 48675 48676 * David Ronis inspired and encouraged Craig to rewrite the G77 48677 documentation in texinfo format by contributing a first pass at a 48678 translation of the old `g77-0.5.16/f/DOC' file. 48679 48680 * Ken Rose for fixes to GCC's delay slot filling code. 48681 48682 * Paul Rubin wrote most of the preprocessor. 48683 48684 * Pe'tur Runo'lfsson for major performance improvements in C++ 48685 formatted I/O and large file support in C++ filebuf. 48686 48687 * Chip Salzenberg for libstdc++ patches and improvements to locales, 48688 traits, Makefiles, libio, libtool hackery, and "long long" support. 48689 48690 * Juha Sarlin for improvements to the H8 code generator. 48691 48692 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 48693 300. 48694 48695 * Roger Sayle for improvements to constant folding and GCC's RTL 48696 optimizers as well as for fixing numerous bugs. 48697 48698 * Bradley Schatz for his work on the GCJ FAQ. 48699 48700 * Peter Schauer wrote the code to allow debugging to work on the 48701 Alpha. 48702 48703 * William Schelter did most of the work on the Intel 80386 support. 48704 48705 * Tobias Schlu"ter for work on GNU Fortran. 48706 48707 * Bernd Schmidt for various code generation improvements and major 48708 work in the reload pass, serving as release manager for GCC 48709 2.95.3, and work on the Blackfin and C6X ports. 48710 48711 * Peter Schmid for constant testing of libstdc++--especially 48712 application testing, going above and beyond what was requested for 48713 the release criteria--and libstdc++ header file tweaks. 48714 48715 * Jason Schroeder for jcf-dump patches. 48716 48717 * Andreas Schwab for his work on the m68k port. 48718 48719 * Lars Segerlund for work on GNU Fortran. 48720 48721 * Dodji Seketeli for numerous C++ bug fixes and debug info 48722 improvements. 48723 48724 * Joel Sherrill for his direction via the steering committee, RTEMS 48725 contributions and RTEMS testing. 48726 48727 * Nathan Sidwell for many C++ fixes/improvements. 48728 48729 * Jeffrey Siegal for helping RMS with the original design of GCC, 48730 some code which handles the parse tree and RTL data structures, 48731 constant folding and help with the original VAX & m68k ports. 48732 48733 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 48734 from the LWG (thereby keeping GCC in line with updates from the 48735 ISO). 48736 48737 * Franz Sirl for his ongoing work with making the PPC port stable 48738 for GNU/Linux. 48739 48740 * Andrey Slepuhin for assorted AIX hacking. 48741 48742 * Trevor Smigiel for contributing the SPU port. 48743 48744 * Christopher Smith did the port for Convex machines. 48745 48746 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 48747 48748 * Randy Smith finished the Sun FPA support. 48749 48750 * Scott Snyder for queue, iterator, istream, and string fixes and 48751 libstdc++ testsuite entries. Also for providing the patch to G77 48752 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 48753 `LOGICAL*1'. 48754 48755 * Zdenek Sojka for running automated regression testing of GCC and 48756 reporting numerous bugs. 48757 48758 * Jayant Sonar for contributing the CR16 port. 48759 48760 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 48761 48762 * Richard Stallman, for writing the original GCC and launching the 48763 GNU project. 48764 48765 * Jan Stein of the Chalmers Computer Society provided support for 48766 Genix, as well as part of the 32000 machine description. 48767 48768 * Nigel Stephens for various mips16 related fixes/improvements. 48769 48770 * Jonathan Stone wrote the machine description for the Pyramid 48771 computer. 48772 48773 * Graham Stott for various infrastructure improvements. 48774 48775 * John Stracke for his Java HTTP protocol fixes. 48776 48777 * Mike Stump for his Elxsi port, G++ contributions over the years 48778 and more recently his vxworks contributions 48779 48780 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 48781 48782 * Shigeya Suzuki for this fixes for the bsdi platforms. 48783 48784 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 48785 support, general configury hacking, fixincludes, etc. 48786 48787 * Holger Teutsch provided the support for the Clipper CPU. 48788 48789 * Gary Thomas for his ongoing work to make the PPC work for 48790 GNU/Linux. 48791 48792 * Philipp Thomas for random bug fixes throughout the compiler 48793 48794 * Jason Thorpe for thread support in libstdc++ on NetBSD. 48795 48796 * Kresten Krab Thorup wrote the run time support for the Objective-C 48797 language and the fantastic Java bytecode interpreter. 48798 48799 * Michael Tiemann for random bug fixes, the first instruction 48800 scheduler, initial C++ support, function integration, NS32k, SPARC 48801 and M88k machine description work, delay slot scheduling. 48802 48803 * Andreas Tobler for his work porting libgcj to Darwin. 48804 48805 * Teemu Torma for thread safe exception handling support. 48806 48807 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 48808 definitions, and of the VAX machine description. 48809 48810 * Daniel Towner and Hariharan Sandanagobalane contributed and 48811 maintain the picoChip port. 48812 48813 * Tom Tromey for internationalization support and for his many Java 48814 contributions and libgcj maintainership. 48815 48816 * Lassi Tuura for improvements to config.guess to determine HP 48817 processor types. 48818 48819 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 48820 48821 * Andy Vaught for the design and initial implementation of the GNU 48822 Fortran front end. 48823 48824 * Brent Verner for work with the libstdc++ cshadow files and their 48825 associated configure steps. 48826 48827 * Todd Vierling for contributions for NetBSD ports. 48828 48829 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 48830 guidance. 48831 48832 * Dean Wakerley for converting the install documentation from HTML 48833 to texinfo in time for GCC 3.0. 48834 48835 * Krister Walfridsson for random bug fixes. 48836 48837 * Feng Wang for contributions to GNU Fortran. 48838 48839 * Stephen M. Webb for time and effort on making libstdc++ shadow 48840 files work with the tricky Solaris 8+ headers, and for pushing the 48841 build-time header tree. 48842 48843 * John Wehle for various improvements for the x86 code generator, 48844 related infrastructure improvements to help x86 code generation, 48845 value range propagation and other work, WE32k port. 48846 48847 * Ulrich Weigand for work on the s390 port. 48848 48849 * Zack Weinberg for major work on cpplib and various other bug fixes. 48850 48851 * Matt Welsh for help with Linux Threads support in GCJ. 48852 48853 * Urban Widmark for help fixing java.io. 48854 48855 * Mark Wielaard for new Java library code and his work integrating 48856 with Classpath. 48857 48858 * Dale Wiles helped port GCC to the Tahoe. 48859 48860 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 48861 48862 * Jim Wilson for his direction via the steering committee, tackling 48863 hard problems in various places that nobody else wanted to work 48864 on, strength reduction and other loop optimizations. 48865 48866 * Paul Woegerer and Tal Agmon for the CRX port. 48867 48868 * Carlo Wood for various fixes. 48869 48870 * Tom Wood for work on the m88k port. 48871 48872 * Canqun Yang for work on GNU Fortran. 48873 48874 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 48875 description for the Tron architecture (specifically, the Gmicro). 48876 48877 * Kevin Zachmann helped port GCC to the Tahoe. 48878 48879 * Ayal Zaks for Swing Modulo Scheduling (SMS). 48880 48881 * Xiaoqiang Zhang for work on GNU Fortran. 48882 48883 * Gilles Zunino for help porting Java to Irix. 48884 48885 48886 The following people are recognized for their contributions to GNAT, 48887 the Ada front end of GCC: 48888 * Bernard Banner 48889 48890 * Romain Berrendonner 48891 48892 * Geert Bosch 48893 48894 * Emmanuel Briot 48895 48896 * Joel Brobecker 48897 48898 * Ben Brosgol 48899 48900 * Vincent Celier 48901 48902 * Arnaud Charlet 48903 48904 * Chien Chieng 48905 48906 * Cyrille Comar 48907 48908 * Cyrille Crozes 48909 48910 * Robert Dewar 48911 48912 * Gary Dismukes 48913 48914 * Robert Duff 48915 48916 * Ed Falis 48917 48918 * Ramon Fernandez 48919 48920 * Sam Figueroa 48921 48922 * Vasiliy Fofanov 48923 48924 * Michael Friess 48925 48926 * Franco Gasperoni 48927 48928 * Ted Giering 48929 48930 * Matthew Gingell 48931 48932 * Laurent Guerby 48933 48934 * Jerome Guitton 48935 48936 * Olivier Hainque 48937 48938 * Jerome Hugues 48939 48940 * Hristian Kirtchev 48941 48942 * Jerome Lambourg 48943 48944 * Bruno Leclerc 48945 48946 * Albert Lee 48947 48948 * Sean McNeil 48949 48950 * Javier Miranda 48951 48952 * Laurent Nana 48953 48954 * Pascal Obry 48955 48956 * Dong-Ik Oh 48957 48958 * Laurent Pautet 48959 48960 * Brett Porter 48961 48962 * Thomas Quinot 48963 48964 * Nicolas Roche 48965 48966 * Pat Rogers 48967 48968 * Jose Ruiz 48969 48970 * Douglas Rupp 48971 48972 * Sergey Rybin 48973 48974 * Gail Schenker 48975 48976 * Ed Schonberg 48977 48978 * Nicolas Setton 48979 48980 * Samuel Tardieu 48981 48982 48983 The following people are recognized for their contributions of new 48984 features, bug reports, testing and integration of classpath/libgcj for 48985 GCC version 4.1: 48986 * Lillian Angel for `JTree' implementation and lots Free Swing 48987 additions and bug fixes. 48988 48989 * Wolfgang Baer for `GapContent' bug fixes. 48990 48991 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 48992 event fixes, lots of Free Swing work including `JTable' editing. 48993 48994 * Stuart Ballard for RMI constant fixes. 48995 48996 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 48997 48998 * Gary Benson for `MessageFormat' fixes. 48999 49000 * Daniel Bonniot for `Serialization' fixes. 49001 49002 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 49003 and `DOM xml:id' support. 49004 49005 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 49006 49007 * Archie Cobbs for build fixes, VM interface updates, 49008 `URLClassLoader' updates. 49009 49010 * Kelley Cook for build fixes. 49011 49012 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 49013 49014 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 49015 and improvements. 49016 49017 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 49018 2D support. Lots of imageio framework additions, lots of AWT and 49019 Free Swing bug fixes. 49020 49021 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 49022 fixes, better `Proxy' support, bug fixes and IKVM integration. 49023 49024 * Santiago Gala for `AccessControlContext' fixes. 49025 49026 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 49027 improvements. 49028 49029 * David Gilbert for `basic' and `metal' icon and plaf support and 49030 lots of documenting, Lots of Free Swing and metal theme additions. 49031 `MetalIconFactory' implementation. 49032 49033 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 49034 49035 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 49036 build speedups. 49037 49038 * Kim Ho for `JFileChooser' implementation. 49039 49040 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 49041 updates, `Serialization' fixes, `Properties' XML support and 49042 generic branch work, VMIntegration guide update. 49043 49044 * Bastiaan Huisman for `TimeZone' bug fixing. 49045 49046 * Andreas Jaeger for mprec updates. 49047 49048 * Paul Jenner for better `-Werror' support. 49049 49050 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 49051 49052 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 49053 bug fixes all over. Lots of Free Swing work including styled text. 49054 49055 * Simon Kitching for `String' cleanups and optimization suggestions. 49056 49057 * Michael Koch for configuration fixes, `Locale' updates, bug and 49058 build fixes. 49059 49060 * Guilhem Lavaux for configuration, thread and channel fixes and 49061 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 49062 49063 * David Lichteblau for JCL support library global/local reference 49064 cleanups. 49065 49066 * Aaron Luchko for JDWP updates and documentation fixes. 49067 49068 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 49069 features. 49070 49071 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 49072 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 49073 and implementing the Qt4 peers. 49074 49075 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 49076 `SystemLogger' and `FileHandler' rotate implementations, NIO 49077 `FileChannel.map' support, security and policy updates. 49078 49079 * Bryce McKinlay for RMI work. 49080 49081 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 49082 testing and documenting. 49083 49084 * Kalle Olavi Niemitalo for build fixes. 49085 49086 * Rainer Orth for build fixes. 49087 49088 * Andrew Overholt for `File' locking fixes. 49089 49090 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 49091 49092 * Olga Rodimina for `MenuSelectionManager' implementation. 49093 49094 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 49095 49096 * Julian Scheid for documentation updates and gjdoc support. 49097 49098 * Christian Schlichtherle for zip fixes and cleanups. 49099 49100 * Robert Schuster for documentation updates and beans fixes, 49101 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 49102 and URL, AWT and Free Swing bug fixes. 49103 49104 * Keith Seitz for lots of JDWP work. 49105 49106 * Christian Thalinger for 64-bit cleanups, Configuration and VM 49107 interface fixes and `CACAO' integration, `fdlibm' updates. 49108 49109 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 49110 49111 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 49112 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 49113 49114 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 49115 integration. `Qt4' build infrastructure, `SHA1PRNG' and 49116 `GdkPixbugDecoder' updates. 49117 49118 * Tom Tromey for Eclipse integration, generics work, lots of bug 49119 fixes and gcj integration including coordinating The Big Merge. 49120 49121 * Mark Wielaard for bug fixes, packaging and release management, 49122 `Clipboard' implementation, system call interrupts and network 49123 timeouts and `GdkPixpufDecoder' fixes. 49124 49125 49126 In addition to the above, all of which also contributed time and 49127 energy in testing GCC, we would like to thank the following for their 49128 contributions to testing: 49129 49130 * Michael Abd-El-Malek 49131 49132 * Thomas Arend 49133 49134 * Bonzo Armstrong 49135 49136 * Steven Ashe 49137 49138 * Chris Baldwin 49139 49140 * David Billinghurst 49141 49142 * Jim Blandy 49143 49144 * Stephane Bortzmeyer 49145 49146 * Horst von Brand 49147 49148 * Frank Braun 49149 49150 * Rodney Brown 49151 49152 * Sidney Cadot 49153 49154 * Bradford Castalia 49155 49156 * Robert Clark 49157 49158 * Jonathan Corbet 49159 49160 * Ralph Doncaster 49161 49162 * Richard Emberson 49163 49164 * Levente Farkas 49165 49166 * Graham Fawcett 49167 49168 * Mark Fernyhough 49169 49170 * Robert A. French 49171 49172 * Jo"rgen Freyh 49173 49174 * Mark K. Gardner 49175 49176 * Charles-Antoine Gauthier 49177 49178 * Yung Shing Gene 49179 49180 * David Gilbert 49181 49182 * Simon Gornall 49183 49184 * Fred Gray 49185 49186 * John Griffin 49187 49188 * Patrik Hagglund 49189 49190 * Phil Hargett 49191 49192 * Amancio Hasty 49193 49194 * Takafumi Hayashi 49195 49196 * Bryan W. Headley 49197 49198 * Kevin B. Hendricks 49199 49200 * Joep Jansen 49201 49202 * Christian Joensson 49203 49204 * Michel Kern 49205 49206 * David Kidd 49207 49208 * Tobias Kuipers 49209 49210 * Anand Krishnaswamy 49211 49212 * A. O. V. Le Blanc 49213 49214 * llewelly 49215 49216 * Damon Love 49217 49218 * Brad Lucier 49219 49220 * Matthias Klose 49221 49222 * Martin Knoblauch 49223 49224 * Rick Lutowski 49225 49226 * Jesse Macnish 49227 49228 * Stefan Morrell 49229 49230 * Anon A. Mous 49231 49232 * Matthias Mueller 49233 49234 * Pekka Nikander 49235 49236 * Rick Niles 49237 49238 * Jon Olson 49239 49240 * Magnus Persson 49241 49242 * Chris Pollard 49243 49244 * Richard Polton 49245 49246 * Derk Reefman 49247 49248 * David Rees 49249 49250 * Paul Reilly 49251 49252 * Tom Reilly 49253 49254 * Torsten Rueger 49255 49256 * Danny Sadinoff 49257 49258 * Marc Schifer 49259 49260 * Erik Schnetter 49261 49262 * Wayne K. Schroll 49263 49264 * David Schuler 49265 49266 * Vin Shelton 49267 49268 * Tim Souder 49269 49270 * Adam Sulmicki 49271 49272 * Bill Thorson 49273 49274 * George Talbot 49275 49276 * Pedro A. M. Vazquez 49277 49278 * Gregory Warnes 49279 49280 * Ian Watson 49281 49282 * David E. Young 49283 49284 * And many others 49285 49286 And finally we'd like to thank everyone who uses the compiler, provides 49287 feedback and generally reminds us why we're doing this work in the first 49288 place. 49289 49290 49291 File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 49292 49293 Option Index 49294 ************ 49295 49296 GCC's command line options are indexed here without any initial `-' or 49297 `--'. Where an option has both positive and negative forms (such as 49298 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 49299 indexed under the most appropriate form; it may sometimes be useful to 49300 look up both forms. 49301 49302 [index] 49303 * Menu: 49304 49305 * ###: Overall Options. (line 209) 49306 * -fno-keep-inline-dllexport: Optimize Options. (line 319) 49307 * -mcpu: RX Options. (line 30) 49308 * -mpointer-size=SIZE: VMS Options. (line 20) 49309 * 8bit-idiv: i386 and x86-64 Options. 49310 (line 824) 49311 * A: Preprocessor Options. 49312 (line 597) 49313 * all_load: Darwin Options. (line 110) 49314 * allowable_client: Darwin Options. (line 196) 49315 * ansi <1>: Non-bugs. (line 107) 49316 * ansi <2>: Other Builtins. (line 22) 49317 * ansi <3>: Preprocessor Options. 49318 (line 338) 49319 * ansi <4>: C Dialect Options. (line 11) 49320 * ansi: Standards. (line 16) 49321 * arch_errors_fatal: Darwin Options. (line 114) 49322 * aux-info: C Dialect Options. (line 168) 49323 * avx256-split-unaligned-load: i386 and x86-64 Options. 49324 (line 832) 49325 * avx256-split-unaligned-store: i386 and x86-64 Options. 49326 (line 832) 49327 * B: Directory Options. (line 46) 49328 * Bdynamic: VxWorks Options. (line 22) 49329 * bind_at_load: Darwin Options. (line 118) 49330 * Bstatic: VxWorks Options. (line 22) 49331 * bundle: Darwin Options. (line 123) 49332 * bundle_loader: Darwin Options. (line 127) 49333 * c: Link Options. (line 20) 49334 * C: Preprocessor Options. 49335 (line 655) 49336 * c: Overall Options. (line 164) 49337 * client_name: Darwin Options. (line 196) 49338 * compatibility_version: Darwin Options. (line 196) 49339 * coverage: Debugging Options. (line 412) 49340 * current_version: Darwin Options. (line 196) 49341 * D: Preprocessor Options. 49342 (line 46) 49343 * d: Debugging Options. (line 544) 49344 * dA: Debugging Options. (line 754) 49345 * da: Debugging Options. (line 751) 49346 * dD <1>: Preprocessor Options. 49347 (line 629) 49348 * dD: Debugging Options. (line 758) 49349 * dead_strip: Darwin Options. (line 196) 49350 * dependency-file: Darwin Options. (line 196) 49351 * dH: Debugging Options. (line 762) 49352 * dI: Preprocessor Options. 49353 (line 638) 49354 * dM: Preprocessor Options. 49355 (line 613) 49356 * dN: Preprocessor Options. 49357 (line 635) 49358 * dP: Debugging Options. (line 770) 49359 * dp: Debugging Options. (line 765) 49360 * dU: Preprocessor Options. 49361 (line 642) 49362 * dumpmachine: Debugging Options. (line 1380) 49363 * dumpspecs: Debugging Options. (line 1388) 49364 * dumpversion: Debugging Options. (line 1384) 49365 * dx: Debugging Options. (line 774) 49366 * dylib_file: Darwin Options. (line 196) 49367 * dylinker_install_name: Darwin Options. (line 196) 49368 * dynamic: Darwin Options. (line 196) 49369 * dynamiclib: Darwin Options. (line 131) 49370 * E <1>: Link Options. (line 20) 49371 * E: Overall Options. (line 185) 49372 * EB: MIPS Options. (line 7) 49373 * EL: MIPS Options. (line 10) 49374 * exported_symbols_list: Darwin Options. (line 196) 49375 * F: Darwin Options. (line 31) 49376 * fabi-version: C++ Dialect Options. 49377 (line 20) 49378 * fada-spec-parent: Overall Options. (line 369) 49379 * faggressive-loop-optimizations: Optimize Options. (line 509) 49380 * falign-functions: Optimize Options. (line 1462) 49381 * falign-jumps: Optimize Options. (line 1511) 49382 * falign-labels: Optimize Options. (line 1480) 49383 * falign-loops: Optimize Options. (line 1498) 49384 * fassociative-math: Optimize Options. (line 1955) 49385 * fasynchronous-unwind-tables: Code Gen Options. (line 146) 49386 * fauto-inc-dec: Optimize Options. (line 533) 49387 * fbounds-check: Code Gen Options. (line 15) 49388 * fbranch-probabilities: Optimize Options. (line 2082) 49389 * fbranch-target-load-optimize: Optimize Options. (line 2190) 49390 * fbranch-target-load-optimize2: Optimize Options. (line 2196) 49391 * fbtr-bb-exclusive: Optimize Options. (line 2200) 49392 * fcall-saved: Code Gen Options. (line 345) 49393 * fcall-used: Code Gen Options. (line 331) 49394 * fcaller-saves: Optimize Options. (line 829) 49395 * fcheck-data-deps: Optimize Options. (line 1094) 49396 * fcheck-new: C++ Dialect Options. 49397 (line 55) 49398 * fcombine-stack-adjustments: Optimize Options. (line 841) 49399 * fcommon: Variable Attributes. 49400 (line 105) 49401 * fcompare-debug: Debugging Options. (line 200) 49402 * fcompare-debug-second: Debugging Options. (line 226) 49403 * fcompare-elim: Optimize Options. (line 1794) 49404 * fcond-mismatch: C Dialect Options. (line 315) 49405 * fconserve-stack: Optimize Options. (line 847) 49406 * fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 49407 (line 30) 49408 * fconstexpr-depth: C++ Dialect Options. 49409 (line 65) 49410 * fcprop-registers: Optimize Options. (line 1812) 49411 * fcrossjumping: Optimize Options. (line 526) 49412 * fcse-follow-jumps: Optimize Options. (line 445) 49413 * fcse-skip-blocks: Optimize Options. (line 454) 49414 * fcx-fortran-rules: Optimize Options. (line 2068) 49415 * fcx-limited-range: Optimize Options. (line 2056) 49416 * fdata-sections: Optimize Options. (line 2171) 49417 * fdbg-cnt: Debugging Options. (line 465) 49418 * fdbg-cnt-list: Debugging Options. (line 462) 49419 * fdce: Optimize Options. (line 539) 49420 * fdebug-cpp: Preprocessor Options. 49421 (line 526) 49422 * fdebug-prefix-map: Debugging Options. (line 320) 49423 * fdebug-types-section: Debugging Options. (line 74) 49424 * fdeduce-init-list: C++ Dialect Options. 49425 (line 71) 49426 * fdelayed-branch: Optimize Options. (line 676) 49427 * fdelete-dead-exceptions: Code Gen Options. (line 131) 49428 * fdelete-null-pointer-checks: Optimize Options. (line 562) 49429 * fdevirtualize: Optimize Options. (line 580) 49430 * fdiagnostics-show-caret: Language Independent Options. 49431 (line 40) 49432 * fdiagnostics-show-location: Language Independent Options. 49433 (line 20) 49434 * fdiagnostics-show-option: Language Independent Options. 49435 (line 34) 49436 * fdirectives-only: Preprocessor Options. 49437 (line 473) 49438 * fdisable-: Debugging Options. (line 475) 49439 * fdollars-in-identifiers <1>: Interoperation. (line 141) 49440 * fdollars-in-identifiers: Preprocessor Options. 49441 (line 495) 49442 * fdse: Optimize Options. (line 543) 49443 * fdump-ada-spec: Overall Options. (line 363) 49444 * fdump-class-hierarchy: Debugging Options. (line 805) 49445 * fdump-final-insns: Debugging Options. (line 194) 49446 * fdump-go-spec: Overall Options. (line 373) 49447 * fdump-ipa: Debugging Options. (line 813) 49448 * fdump-noaddr: Debugging Options. (line 778) 49449 * fdump-passes: Debugging Options. (line 831) 49450 * fdump-rtl-alignments: Debugging Options. (line 565) 49451 * fdump-rtl-all: Debugging Options. (line 751) 49452 * fdump-rtl-asmcons: Debugging Options. (line 568) 49453 * fdump-rtl-auto_inc_dec: Debugging Options. (line 572) 49454 * fdump-rtl-barriers: Debugging Options. (line 576) 49455 * fdump-rtl-bbpart: Debugging Options. (line 579) 49456 * fdump-rtl-bbro: Debugging Options. (line 582) 49457 * fdump-rtl-btl2: Debugging Options. (line 586) 49458 * fdump-rtl-bypass: Debugging Options. (line 590) 49459 * fdump-rtl-ce1: Debugging Options. (line 601) 49460 * fdump-rtl-ce2: Debugging Options. (line 601) 49461 * fdump-rtl-ce3: Debugging Options. (line 601) 49462 * fdump-rtl-combine: Debugging Options. (line 593) 49463 * fdump-rtl-compgotos: Debugging Options. (line 596) 49464 * fdump-rtl-cprop_hardreg: Debugging Options. (line 605) 49465 * fdump-rtl-csa: Debugging Options. (line 608) 49466 * fdump-rtl-cse1: Debugging Options. (line 612) 49467 * fdump-rtl-cse2: Debugging Options. (line 612) 49468 * fdump-rtl-dbr: Debugging Options. (line 619) 49469 * fdump-rtl-dce: Debugging Options. (line 616) 49470 * fdump-rtl-dce1: Debugging Options. (line 623) 49471 * fdump-rtl-dce2: Debugging Options. (line 623) 49472 * fdump-rtl-dfinish: Debugging Options. (line 747) 49473 * fdump-rtl-dfinit: Debugging Options. (line 747) 49474 * fdump-rtl-eh: Debugging Options. (line 627) 49475 * fdump-rtl-eh_ranges: Debugging Options. (line 630) 49476 * fdump-rtl-expand: Debugging Options. (line 633) 49477 * fdump-rtl-fwprop1: Debugging Options. (line 637) 49478 * fdump-rtl-fwprop2: Debugging Options. (line 637) 49479 * fdump-rtl-gcse1: Debugging Options. (line 642) 49480 * fdump-rtl-gcse2: Debugging Options. (line 642) 49481 * fdump-rtl-init-regs: Debugging Options. (line 646) 49482 * fdump-rtl-initvals: Debugging Options. (line 649) 49483 * fdump-rtl-into_cfglayout: Debugging Options. (line 652) 49484 * fdump-rtl-ira: Debugging Options. (line 655) 49485 * fdump-rtl-jump: Debugging Options. (line 658) 49486 * fdump-rtl-loop2: Debugging Options. (line 661) 49487 * fdump-rtl-mach: Debugging Options. (line 665) 49488 * fdump-rtl-mode_sw: Debugging Options. (line 669) 49489 * fdump-rtl-outof_cfglayout: Debugging Options. (line 675) 49490 * fdump-rtl-peephole2: Debugging Options. (line 678) 49491 * fdump-rtl-postreload: Debugging Options. (line 681) 49492 * fdump-rtl-pro_and_epilogue: Debugging Options. (line 684) 49493 * fdump-rtl-regclass: Debugging Options. (line 747) 49494 * fdump-rtl-regmove: Debugging Options. (line 687) 49495 * fdump-rtl-rnreg: Debugging Options. (line 672) 49496 * fdump-rtl-sched1: Debugging Options. (line 691) 49497 * fdump-rtl-sched2: Debugging Options. (line 691) 49498 * fdump-rtl-see: Debugging Options. (line 695) 49499 * fdump-rtl-seqabstr: Debugging Options. (line 698) 49500 * fdump-rtl-shorten: Debugging Options. (line 701) 49501 * fdump-rtl-sibling: Debugging Options. (line 704) 49502 * fdump-rtl-sms: Debugging Options. (line 717) 49503 * fdump-rtl-split1: Debugging Options. (line 711) 49504 * fdump-rtl-split2: Debugging Options. (line 711) 49505 * fdump-rtl-split3: Debugging Options. (line 711) 49506 * fdump-rtl-split4: Debugging Options. (line 711) 49507 * fdump-rtl-split5: Debugging Options. (line 711) 49508 * fdump-rtl-stack: Debugging Options. (line 721) 49509 * fdump-rtl-subreg1: Debugging Options. (line 727) 49510 * fdump-rtl-subreg2: Debugging Options. (line 727) 49511 * fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 747) 49512 * fdump-rtl-subregs_of_mode_init: Debugging Options. (line 747) 49513 * fdump-rtl-unshare: Debugging Options. (line 731) 49514 * fdump-rtl-vartrack: Debugging Options. (line 734) 49515 * fdump-rtl-vregs: Debugging Options. (line 737) 49516 * fdump-rtl-web: Debugging Options. (line 740) 49517 * fdump-statistics: Debugging Options. (line 835) 49518 * fdump-translation-unit: Debugging Options. (line 796) 49519 * fdump-tree: Debugging Options. (line 847) 49520 * fdump-tree-alias: Debugging Options. (line 986) 49521 * fdump-tree-all: Debugging Options. (line 1076) 49522 * fdump-tree-ccp: Debugging Options. (line 990) 49523 * fdump-tree-cfg: Debugging Options. (line 974) 49524 * fdump-tree-ch: Debugging Options. (line 978) 49525 * fdump-tree-copyprop: Debugging Options. (line 1006) 49526 * fdump-tree-copyrename: Debugging Options. (line 1052) 49527 * fdump-tree-dce: Debugging Options. (line 1014) 49528 * fdump-tree-dom: Debugging Options. (line 1032) 49529 * fdump-tree-dse: Debugging Options. (line 1037) 49530 * fdump-tree-forwprop: Debugging Options. (line 1047) 49531 * fdump-tree-fre: Debugging Options. (line 1002) 49532 * fdump-tree-gimple: Debugging Options. (line 969) 49533 * fdump-tree-mudflap: Debugging Options. (line 1018) 49534 * fdump-tree-nrv: Debugging Options. (line 1057) 49535 * fdump-tree-optimized: Debugging Options. (line 966) 49536 * fdump-tree-original: Debugging Options. (line 963) 49537 * fdump-tree-phiopt: Debugging Options. (line 1042) 49538 * fdump-tree-pre: Debugging Options. (line 998) 49539 * fdump-tree-sink: Debugging Options. (line 1028) 49540 * fdump-tree-slp: Debugging Options. (line 1067) 49541 * fdump-tree-sra: Debugging Options. (line 1023) 49542 * fdump-tree-ssa: Debugging Options. (line 982) 49543 * fdump-tree-store_copyprop: Debugging Options. (line 1010) 49544 * fdump-tree-storeccp: Debugging Options. (line 994) 49545 * fdump-tree-vect: Debugging Options. (line 1062) 49546 * fdump-tree-vrp: Debugging Options. (line 1072) 49547 * fdump-unnumbered: Debugging Options. (line 784) 49548 * fdump-unnumbered-links: Debugging Options. (line 790) 49549 * fdwarf2-cfi-asm: Debugging Options. (line 324) 49550 * fearly-inlining: Optimize Options. (line 276) 49551 * feliminate-dwarf2-dups: Debugging Options. (line 239) 49552 * feliminate-unused-debug-symbols: Debugging Options. (line 62) 49553 * feliminate-unused-debug-types: Debugging Options. (line 1392) 49554 * fenable-: Debugging Options. (line 475) 49555 * fexceptions: Code Gen Options. (line 108) 49556 * fexcess-precision: Optimize Options. (line 1883) 49557 * fexec-charset: Preprocessor Options. 49558 (line 554) 49559 * fexpensive-optimizations: Optimize Options. (line 587) 49560 * fext-numeric-literals: C++ Dialect Options. 49561 (line 547) 49562 * fextended-identifiers: Preprocessor Options. 49563 (line 498) 49564 * fextern-tls-init: C++ Dialect Options. 49565 (line 122) 49566 * ffast-math: Optimize Options. (line 1906) 49567 * ffat-lto-objects: Optimize Options. (line 1774) 49568 * ffinite-math-only: Optimize Options. (line 1980) 49569 * ffix-and-continue: Darwin Options. (line 104) 49570 * ffixed: Code Gen Options. (line 319) 49571 * ffloat-store <1>: Disappointments. (line 77) 49572 * ffloat-store: Optimize Options. (line 1869) 49573 * ffor-scope: C++ Dialect Options. 49574 (line 143) 49575 * fforward-propagate: Optimize Options. (line 185) 49576 * ffp-contract: Optimize Options. (line 194) 49577 * ffreestanding <1>: Function Attributes. 49578 (line 459) 49579 * ffreestanding <2>: Warning Options. (line 255) 49580 * ffreestanding <3>: C Dialect Options. (line 246) 49581 * ffreestanding: Standards. (line 93) 49582 * ffriend-injection: C++ Dialect Options. 49583 (line 92) 49584 * ffunction-sections: Optimize Options. (line 2171) 49585 * fgcse: Optimize Options. (line 468) 49586 * fgcse-after-reload: Optimize Options. (line 504) 49587 * fgcse-las: Optimize Options. (line 497) 49588 * fgcse-lm: Optimize Options. (line 479) 49589 * fgcse-sm: Optimize Options. (line 488) 49590 * fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 49591 (line 39) 49592 * fgnu-tm: C Dialect Options. (line 264) 49593 * fgnu89-inline: C Dialect Options. (line 147) 49594 * fgraphite-identity: Optimize Options. (line 1074) 49595 * fhosted: C Dialect Options. (line 239) 49596 * fif-conversion: Optimize Options. (line 547) 49597 * fif-conversion2: Optimize Options. (line 556) 49598 * filelist: Darwin Options. (line 196) 49599 * findirect-data: Darwin Options. (line 104) 49600 * findirect-inlining: Optimize Options. (line 249) 49601 * finhibit-size-directive: Code Gen Options. (line 239) 49602 * finline-functions: Optimize Options. (line 257) 49603 * finline-functions-called-once: Optimize Options. (line 268) 49604 * finline-limit: Optimize Options. (line 293) 49605 * finline-small-functions: Optimize Options. (line 240) 49606 * finput-charset: Preprocessor Options. 49607 (line 567) 49608 * finstrument-functions <1>: Function Attributes. 49609 (line 954) 49610 * finstrument-functions: Code Gen Options. (line 375) 49611 * finstrument-functions-exclude-file-list: Code Gen Options. (line 411) 49612 * finstrument-functions-exclude-function-list: Code Gen Options. 49613 (line 431) 49614 * fipa-cp: Optimize Options. (line 913) 49615 * fipa-cp-clone: Optimize Options. (line 921) 49616 * fipa-profile: Optimize Options. (line 905) 49617 * fipa-pta: Optimize Options. (line 899) 49618 * fipa-pure-const: Optimize Options. (line 891) 49619 * fipa-reference: Optimize Options. (line 895) 49620 * fipa-sra: Optimize Options. (line 286) 49621 * fira-hoist-pressure: Optimize Options. (line 643) 49622 * fira-loop-pressure: Optimize Options. (line 650) 49623 * fira-verbose: Optimize Options. (line 670) 49624 * fivopts: Optimize Options. (line 1170) 49625 * fkeep-inline-functions <1>: Inline. (line 51) 49626 * fkeep-inline-functions: Optimize Options. (line 325) 49627 * fkeep-static-consts: Optimize Options. (line 332) 49628 * flat_namespace: Darwin Options. (line 196) 49629 * flax-vector-conversions: C Dialect Options. (line 320) 49630 * fleading-underscore: Code Gen Options. (line 514) 49631 * floop-block: Optimize Options. (line 1045) 49632 * floop-interchange: Optimize Options. (line 1000) 49633 * floop-nest-optimize: Optimize Options. (line 1082) 49634 * floop-parallelize-all: Optimize Options. (line 1088) 49635 * floop-strip-mine: Optimize Options. (line 1024) 49636 * flto: Optimize Options. (line 1565) 49637 * flto-partition: Optimize Options. (line 1729) 49638 * fmax-errors: Warning Options. (line 18) 49639 * fmem-report: Debugging Options. (line 348) 49640 * fmem-report-wpa: Debugging Options. (line 352) 49641 * fmerge-all-constants: Optimize Options. (line 351) 49642 * fmerge-constants: Optimize Options. (line 341) 49643 * fmerge-debug-strings: Debugging Options. (line 313) 49644 * fmessage-length: Language Independent Options. 49645 (line 14) 49646 * fmodulo-sched: Optimize Options. (line 362) 49647 * fmodulo-sched-allow-regmoves: Optimize Options. (line 367) 49648 * fmove-loop-invariants: Optimize Options. (line 2161) 49649 * fms-extensions <1>: Unnamed Fields. (line 36) 49650 * fms-extensions <2>: C++ Dialect Options. 49651 (line 177) 49652 * fms-extensions: C Dialect Options. (line 279) 49653 * fmudflap: Optimize Options. (line 407) 49654 * fmudflapir: Optimize Options. (line 407) 49655 * fmudflapth: Optimize Options. (line 407) 49656 * fnext-runtime: Objective-C and Objective-C++ Dialect Options. 49657 (line 43) 49658 * fno-access-control: C++ Dialect Options. 49659 (line 51) 49660 * fno-asm: C Dialect Options. (line 191) 49661 * fno-branch-count-reg: Optimize Options. (line 374) 49662 * fno-builtin <1>: Other Builtins. (line 14) 49663 * fno-builtin <2>: Function Attributes. 49664 (line 459) 49665 * fno-builtin <3>: Warning Options. (line 255) 49666 * fno-builtin: C Dialect Options. (line 205) 49667 * fno-canonical-system-headers: Preprocessor Options. 49668 (line 503) 49669 * fno-common <1>: Variable Attributes. 49670 (line 105) 49671 * fno-common: Code Gen Options. (line 216) 49672 * fno-compare-debug: Debugging Options. (line 200) 49673 * fno-debug-types-section: Debugging Options. (line 74) 49674 * fno-default-inline <1>: Inline. (line 71) 49675 * fno-default-inline <2>: Optimize Options. (line 170) 49676 * fno-default-inline: C++ Dialect Options. 49677 (line 356) 49678 * fno-defer-pop: Optimize Options. (line 177) 49679 * fno-diagnostics-show-caret: Language Independent Options. 49680 (line 40) 49681 * fno-diagnostics-show-option: Language Independent Options. 49682 (line 34) 49683 * fno-dwarf2-cfi-asm: Debugging Options. (line 324) 49684 * fno-elide-constructors: C++ Dialect Options. 49685 (line 105) 49686 * fno-eliminate-unused-debug-types: Debugging Options. (line 1392) 49687 * fno-enforce-eh-specs: C++ Dialect Options. 49688 (line 111) 49689 * fno-ext-numeric-literals: C++ Dialect Options. 49690 (line 547) 49691 * fno-extern-tls-init: C++ Dialect Options. 49692 (line 122) 49693 * fno-for-scope: C++ Dialect Options. 49694 (line 143) 49695 * fno-function-cse: Optimize Options. (line 384) 49696 * fno-gnu-keywords: C++ Dialect Options. 49697 (line 155) 49698 * fno-guess-branch-probability: Optimize Options. (line 1334) 49699 * fno-ident: Code Gen Options. (line 236) 49700 * fno-implement-inlines <1>: C++ Interface. (line 75) 49701 * fno-implement-inlines: C++ Dialect Options. 49702 (line 172) 49703 * fno-implicit-inline-templates: C++ Dialect Options. 49704 (line 166) 49705 * fno-implicit-templates <1>: Template Instantiation. 49706 (line 78) 49707 * fno-implicit-templates: C++ Dialect Options. 49708 (line 160) 49709 * fno-inline: Optimize Options. (line 232) 49710 * fno-ira-share-save-slots: Optimize Options. (line 658) 49711 * fno-ira-share-spill-slots: Optimize Options. (line 664) 49712 * fno-jump-tables: Code Gen Options. (line 311) 49713 * fno-math-errno: Optimize Options. (line 1920) 49714 * fno-merge-debug-strings: Debugging Options. (line 313) 49715 * fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 49716 (line 49) 49717 * fno-nonansi-builtins: C++ Dialect Options. 49718 (line 182) 49719 * fno-operator-names: C++ Dialect Options. 49720 (line 198) 49721 * fno-optional-diags: C++ Dialect Options. 49722 (line 202) 49723 * fno-peephole: Optimize Options. (line 1325) 49724 * fno-peephole2: Optimize Options. (line 1325) 49725 * fno-pretty-templates: C++ Dialect Options. 49726 (line 212) 49727 * fno-rtti: C++ Dialect Options. 49728 (line 229) 49729 * fno-sched-interblock: Optimize Options. (line 702) 49730 * fno-sched-spec: Optimize Options. (line 707) 49731 * fno-set-stack-executable: i386 and x86-64 Windows Options. 49732 (line 46) 49733 * fno-show-column: Preprocessor Options. 49734 (line 592) 49735 * fno-signed-bitfields: C Dialect Options. (line 353) 49736 * fno-signed-zeros: Optimize Options. (line 1992) 49737 * fno-stack-limit: Code Gen Options. (line 482) 49738 * fno-threadsafe-statics: C++ Dialect Options. 49739 (line 266) 49740 * fno-toplevel-reorder: Optimize Options. (line 1531) 49741 * fno-trapping-math: Optimize Options. (line 2002) 49742 * fno-unsigned-bitfields: C Dialect Options. (line 353) 49743 * fno-use-cxa-get-exception-ptr: C++ Dialect Options. 49744 (line 279) 49745 * fno-var-tracking-assignments: Debugging Options. (line 1300) 49746 * fno-var-tracking-assignments-toggle: Debugging Options. (line 1309) 49747 * fno-weak: C++ Dialect Options. 49748 (line 341) 49749 * fno-working-directory: Preprocessor Options. 49750 (line 577) 49751 * fno-writable-relocated-rdata: i386 and x86-64 Windows Options. 49752 (line 53) 49753 * fno-zero-initialized-in-bss: Optimize Options. (line 395) 49754 * fnon-call-exceptions: Code Gen Options. (line 122) 49755 * fnothrow-opt: C++ Dialect Options. 49756 (line 187) 49757 * fobjc-abi-version: Objective-C and Objective-C++ Dialect Options. 49758 (line 56) 49759 * fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 49760 (line 67) 49761 * fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 49762 (line 92) 49763 * fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 49764 (line 96) 49765 * fobjc-gc: Objective-C and Objective-C++ Dialect Options. 49766 (line 105) 49767 * fobjc-nilcheck: Objective-C and Objective-C++ Dialect Options. 49768 (line 111) 49769 * fobjc-std: Objective-C and Objective-C++ Dialect Options. 49770 (line 120) 49771 * fomit-frame-pointer: Optimize Options. (line 205) 49772 * fopenmp: C Dialect Options. (line 256) 49773 * fopt-info: Debugging Options. (line 1082) 49774 * foptimize-register-move: Optimize Options. (line 602) 49775 * foptimize-sibling-calls: Optimize Options. (line 227) 49776 * force_cpusubtype_ALL: Darwin Options. (line 135) 49777 * force_flat_namespace: Darwin Options. (line 196) 49778 * fpack-struct: Code Gen Options. (line 362) 49779 * fpartial-inlining: Optimize Options. (line 1300) 49780 * fpcc-struct-return <1>: Incompatibilities. (line 170) 49781 * fpcc-struct-return: Code Gen Options. (line 152) 49782 * fpch-deps: Preprocessor Options. 49783 (line 294) 49784 * fpch-preprocess: Preprocessor Options. 49785 (line 302) 49786 * fpeel-loops: Optimize Options. (line 2153) 49787 * fpermissive: C++ Dialect Options. 49788 (line 207) 49789 * fPIC: Code Gen Options. (line 288) 49790 * fpic: Code Gen Options. (line 267) 49791 * fPIE: Code Gen Options. (line 301) 49792 * fpie: Code Gen Options. (line 301) 49793 * fplan9-extensions: Unnamed Fields. (line 44) 49794 * fpost-ipa-mem-report: Debugging Options. (line 358) 49795 * fpre-ipa-mem-report: Debugging Options. (line 356) 49796 * fpredictive-commoning: Optimize Options. (line 1307) 49797 * fprefetch-loop-arrays: Optimize Options. (line 1314) 49798 * fpreprocessed: Preprocessor Options. 49799 (line 507) 49800 * fprofile-arcs <1>: Other Builtins. (line 257) 49801 * fprofile-arcs: Debugging Options. (line 397) 49802 * fprofile-correction: Optimize Options. (line 1819) 49803 * fprofile-dir: Optimize Options. (line 1826) 49804 * fprofile-generate: Optimize Options. (line 1836) 49805 * fprofile-report: Debugging Options. (line 362) 49806 * fprofile-use: Optimize Options. (line 1849) 49807 * fprofile-values: Optimize Options. (line 2101) 49808 * fpu: RX Options. (line 17) 49809 * frandom-seed: Debugging Options. (line 1194) 49810 * freciprocal-math: Optimize Options. (line 1971) 49811 * frecord-gcc-switches: Code Gen Options. (line 255) 49812 * free: Optimize Options. (line 593) 49813 * freg-struct-return: Code Gen Options. (line 170) 49814 * fregmove: Optimize Options. (line 602) 49815 * frename-registers: Optimize Options. (line 2120) 49816 * freorder-blocks: Optimize Options. (line 1351) 49817 * freorder-blocks-and-partition: Optimize Options. (line 1357) 49818 * freorder-functions: Optimize Options. (line 1368) 49819 * freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 49820 (line 131) 49821 * frepo <1>: Template Instantiation. 49822 (line 54) 49823 * frepo: C++ Dialect Options. 49824 (line 224) 49825 * frerun-cse-after-loop: Optimize Options. (line 462) 49826 * freschedule-modulo-scheduled-loops: Optimize Options. (line 801) 49827 * frounding-math: Optimize Options. (line 2017) 49828 * fsched-critical-path-heuristic: Optimize Options. (line 767) 49829 * fsched-dep-count-heuristic: Optimize Options. (line 794) 49830 * fsched-group-heuristic: Optimize Options. (line 761) 49831 * fsched-last-insn-heuristic: Optimize Options. (line 787) 49832 * fsched-pressure: Optimize Options. (line 712) 49833 * fsched-rank-heuristic: Optimize Options. (line 780) 49834 * fsched-spec-insn-heuristic: Optimize Options. (line 773) 49835 * fsched-spec-load: Optimize Options. (line 721) 49836 * fsched-spec-load-dangerous: Optimize Options. (line 726) 49837 * fsched-stalled-insns: Optimize Options. (line 732) 49838 * fsched-stalled-insns-dep: Optimize Options. (line 742) 49839 * fsched-verbose: Debugging Options. (line 1204) 49840 * fsched2-use-superblocks: Optimize Options. (line 751) 49841 * fschedule-insns: Optimize Options. (line 683) 49842 * fschedule-insns2: Optimize Options. (line 693) 49843 * fsection-anchors: Optimize Options. (line 2216) 49844 * fsel-sched-pipelining: Optimize Options. (line 814) 49845 * fsel-sched-pipelining-outer-loops: Optimize Options. (line 819) 49846 * fselective-scheduling: Optimize Options. (line 806) 49847 * fselective-scheduling2: Optimize Options. (line 810) 49848 * fshort-double: Code Gen Options. (line 198) 49849 * fshort-enums <1>: Non-bugs. (line 42) 49850 * fshort-enums <2>: Type Attributes. (line 113) 49851 * fshort-enums <3>: Structures unions enumerations and bit-fields implementation. 49852 (line 43) 49853 * fshort-enums: Code Gen Options. (line 188) 49854 * fshort-wchar: Code Gen Options. (line 206) 49855 * fshrink-wrap: Optimize Options. (line 824) 49856 * fsignaling-nans: Optimize Options. (line 2037) 49857 * fsigned-bitfields <1>: Non-bugs. (line 57) 49858 * fsigned-bitfields: C Dialect Options. (line 353) 49859 * fsigned-char <1>: Characters implementation. 49860 (line 31) 49861 * fsigned-char: C Dialect Options. (line 343) 49862 * fsingle-precision-constant: Optimize Options. (line 2052) 49863 * fsplit-ivs-in-unroller: Optimize Options. (line 1281) 49864 * fsplit-stack <1>: Function Attributes. 49865 (line 959) 49866 * fsplit-stack: Code Gen Options. (line 496) 49867 * fsplit-wide-types: Optimize Options. (line 437) 49868 * fstack-check: Code Gen Options. (line 443) 49869 * fstack-limit-register: Code Gen Options. (line 482) 49870 * fstack-limit-symbol: Code Gen Options. (line 482) 49871 * fstack-protector: Optimize Options. (line 2204) 49872 * fstack-protector-all: Optimize Options. (line 2213) 49873 * fstack-usage: Debugging Options. (line 366) 49874 * fstack_reuse: Code Gen Options. (line 21) 49875 * fstats: C++ Dialect Options. 49876 (line 239) 49877 * fstrict-aliasing: Optimize Options. (line 1381) 49878 * fstrict-enums: C++ Dialect Options. 49879 (line 244) 49880 * fstrict-overflow: Optimize Options. (line 1427) 49881 * fstrict-volatile-bitfields: Code Gen Options. (line 599) 49882 * fsync-libcalls: Code Gen Options. (line 628) 49883 * fsyntax-only: Warning Options. (line 14) 49884 * ftabstop: Preprocessor Options. 49885 (line 520) 49886 * ftemplate-backtrace-limit: C++ Dialect Options. 49887 (line 253) 49888 * ftemplate-depth: C++ Dialect Options. 49889 (line 257) 49890 * ftest-coverage: Debugging Options. (line 453) 49891 * fthread-jumps: Optimize Options. (line 428) 49892 * ftime-report: Debugging Options. (line 344) 49893 * ftls-model: Code Gen Options. (line 525) 49894 * ftracer: Optimize Options. (line 1264) 49895 * ftrack-macro-expansion: Preprocessor Options. 49896 (line 536) 49897 * ftrapv: Code Gen Options. (line 96) 49898 * ftree-bit-ccp: Optimize Options. (line 935) 49899 * ftree-builtin-call-dce: Optimize Options. (line 963) 49900 * ftree-ccp: Optimize Options. (line 941) 49901 * ftree-ch: Optimize Options. (line 983) 49902 * ftree-copy-prop: Optimize Options. (line 886) 49903 * ftree-copyrename: Optimize Options. (line 1194) 49904 * ftree-dce: Optimize Options. (line 959) 49905 * ftree-dominator-opts: Optimize Options. (line 969) 49906 * ftree-dse: Optimize Options. (line 976) 49907 * ftree-forwprop: Optimize Options. (line 865) 49908 * ftree-fre: Optimize Options. (line 869) 49909 * ftree-loop-im: Optimize Options. (line 1155) 49910 * ftree-loop-ivcanon: Optimize Options. (line 1164) 49911 * ftree-loop-linear: Optimize Options. (line 994) 49912 * ftree-loop-optimize: Optimize Options. (line 990) 49913 * ftree-parallelize-loops: Optimize Options. (line 1175) 49914 * ftree-partial-pre: Optimize Options. (line 861) 49915 * ftree-phiprop: Optimize Options. (line 876) 49916 * ftree-pre: Optimize Options. (line 857) 49917 * ftree-pta: Optimize Options. (line 1184) 49918 * ftree-reassoc: Optimize Options. (line 853) 49919 * ftree-sink: Optimize Options. (line 931) 49920 * ftree-slp-vectorize: Optimize Options. (line 1238) 49921 * ftree-slsr: Optimize Options. (line 1228) 49922 * ftree-sra: Optimize Options. (line 1188) 49923 * ftree-ter: Optimize Options. (line 1220) 49924 * ftree-vect-loop-version: Optimize Options. (line 1242) 49925 * ftree-vectorize: Optimize Options. (line 1234) 49926 * ftree-vectorizer-verbose: Debugging Options. (line 1177) 49927 * ftree-vrp: Optimize Options. (line 1255) 49928 * funit-at-a-time: Optimize Options. (line 1524) 49929 * funroll-all-loops: Optimize Options. (line 1275) 49930 * funroll-loops: Optimize Options. (line 1269) 49931 * funsafe-loop-optimizations: Optimize Options. (line 518) 49932 * funsafe-math-optimizations: Optimize Options. (line 1938) 49933 * funsigned-bitfields <1>: Non-bugs. (line 57) 49934 * funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 49935 (line 17) 49936 * funsigned-bitfields: C Dialect Options. (line 353) 49937 * funsigned-char <1>: Characters implementation. 49938 (line 31) 49939 * funsigned-char: C Dialect Options. (line 325) 49940 * funswitch-loops: Optimize Options. (line 2165) 49941 * funwind-tables: Code Gen Options. (line 139) 49942 * fuse-cxa-atexit: C++ Dialect Options. 49943 (line 272) 49944 * fvar-tracking: Debugging Options. (line 1290) 49945 * fvar-tracking-assignments: Debugging Options. (line 1300) 49946 * fvar-tracking-assignments-toggle: Debugging Options. (line 1309) 49947 * fvariable-expansion-in-unroller: Optimize Options. (line 1295) 49948 * fvect-cost-model: Optimize Options. (line 1251) 49949 * fverbose-asm: Code Gen Options. (line 246) 49950 * fvisibility: Code Gen Options. (line 533) 49951 * fvisibility-inlines-hidden: C++ Dialect Options. 49952 (line 284) 49953 * fvisibility-ms-compat: C++ Dialect Options. 49954 (line 312) 49955 * fvpt: Optimize Options. (line 2110) 49956 * fweb: Optimize Options. (line 1543) 49957 * fwhole-program: Optimize Options. (line 1554) 49958 * fwide-exec-charset: Preprocessor Options. 49959 (line 559) 49960 * fworking-directory: Preprocessor Options. 49961 (line 577) 49962 * fwrapv: Code Gen Options. (line 100) 49963 * fzero-link: Objective-C and Objective-C++ Dialect Options. 49964 (line 141) 49965 * G <1>: System V Options. (line 10) 49966 * G <2>: RS/6000 and PowerPC Options. 49967 (line 743) 49968 * G <3>: MIPS Options. (line 330) 49969 * G: M32R/D Options. (line 57) 49970 * g: Debugging Options. (line 10) 49971 * gcoff: Debugging Options. (line 89) 49972 * gdwarf-VERSION: Debugging Options. (line 107) 49973 * gen-decls: Objective-C and Objective-C++ Dialect Options. 49974 (line 153) 49975 * gfull: Darwin Options. (line 69) 49976 * ggdb: Debugging Options. (line 45) 49977 * gno-record-gcc-switches: Debugging Options. (line 127) 49978 * gno-strict-dwarf: Debugging Options. (line 137) 49979 * gpubnames: Debugging Options. (line 51) 49980 * grecord-gcc-switches: Debugging Options. (line 118) 49981 * gsplit-dwarf: Debugging Options. (line 38) 49982 * gstabs: Debugging Options. (line 54) 49983 * gstabs+: Debugging Options. (line 83) 49984 * gstrict-dwarf: Debugging Options. (line 131) 49985 * gtoggle: Debugging Options. (line 174) 49986 * gused: Darwin Options. (line 64) 49987 * gvms: Debugging Options. (line 141) 49988 * gxcoff: Debugging Options. (line 94) 49989 * gxcoff+: Debugging Options. (line 99) 49990 * H: Preprocessor Options. 49991 (line 710) 49992 * headerpad_max_install_names: Darwin Options. (line 196) 49993 * help <1>: Preprocessor Options. 49994 (line 702) 49995 * help: Overall Options. (line 221) 49996 * hoist-adjacent-loads: Optimize Options. (line 880) 49997 * I <1>: Directory Options. (line 10) 49998 * I: Preprocessor Options. 49999 (line 77) 50000 * I- <1>: Directory Options. (line 119) 50001 * I-: Preprocessor Options. 50002 (line 387) 50003 * idirafter: Preprocessor Options. 50004 (line 429) 50005 * iframework: Darwin Options. (line 57) 50006 * imacros: Preprocessor Options. 50007 (line 420) 50008 * image_base: Darwin Options. (line 196) 50009 * imultilib: Preprocessor Options. 50010 (line 454) 50011 * include: Preprocessor Options. 50012 (line 409) 50013 * init: Darwin Options. (line 196) 50014 * install_name: Darwin Options. (line 196) 50015 * iprefix: Preprocessor Options. 50016 (line 436) 50017 * iquote <1>: Directory Options. (line 36) 50018 * iquote: Preprocessor Options. 50019 (line 466) 50020 * isysroot: Preprocessor Options. 50021 (line 448) 50022 * isystem: Preprocessor Options. 50023 (line 458) 50024 * iwithprefix: Preprocessor Options. 50025 (line 442) 50026 * iwithprefixbefore: Preprocessor Options. 50027 (line 442) 50028 * keep_private_externs: Darwin Options. (line 196) 50029 * L: Directory Options. (line 42) 50030 * l: Link Options. (line 26) 50031 * lobjc: Link Options. (line 53) 50032 * m: RS/6000 and PowerPC Options. 50033 (line 584) 50034 * M: Preprocessor Options. 50035 (line 185) 50036 * m1: SH Options. (line 9) 50037 * m10: PDP-11 Options. (line 29) 50038 * m128bit-long-double: i386 and x86-64 Options. 50039 (line 342) 50040 * m16-bit: CRIS Options. (line 64) 50041 * m1reg-: Adapteva Epiphany Options. 50042 (line 132) 50043 * m2: SH Options. (line 12) 50044 * m210: MCore Options. (line 43) 50045 * m2a: SH Options. (line 30) 50046 * m2a-nofpu: SH Options. (line 18) 50047 * m2a-single: SH Options. (line 26) 50048 * m2a-single-only: SH Options. (line 22) 50049 * m3: SH Options. (line 34) 50050 * m31: S/390 and zSeries Options. 50051 (line 87) 50052 * m32 <1>: TILEPro Options. (line 13) 50053 * m32 <2>: TILE-Gx Options. (line 23) 50054 * m32 <3>: SPARC Options. (line 257) 50055 * m32 <4>: RS/6000 and PowerPC Options. 50056 (line 276) 50057 * m32: i386 and x86-64 Options. 50058 (line 841) 50059 * m32-bit: CRIS Options. (line 64) 50060 * m32bit-doubles: RX Options. (line 10) 50061 * m32r: M32R/D Options. (line 15) 50062 * m32r2: M32R/D Options. (line 9) 50063 * m32rx: M32R/D Options. (line 12) 50064 * m340: MCore Options. (line 43) 50065 * m3dnow: i386 and x86-64 Options. 50066 (line 571) 50067 * m3e: SH Options. (line 37) 50068 * m4: SH Options. (line 51) 50069 * m4-nofpu: SH Options. (line 40) 50070 * m4-single: SH Options. (line 47) 50071 * m4-single-only: SH Options. (line 43) 50072 * m40: PDP-11 Options. (line 23) 50073 * m45: PDP-11 Options. (line 26) 50074 * m4a: SH Options. (line 66) 50075 * m4a-nofpu: SH Options. (line 54) 50076 * m4a-single: SH Options. (line 62) 50077 * m4a-single-only: SH Options. (line 58) 50078 * m4al: SH Options. (line 69) 50079 * m4byte-functions: MCore Options. (line 27) 50080 * m5200: M680x0 Options. (line 147) 50081 * m5206e: M680x0 Options. (line 156) 50082 * m528x: M680x0 Options. (line 160) 50083 * m5307: M680x0 Options. (line 164) 50084 * m5407: M680x0 Options. (line 168) 50085 * m64 <1>: TILE-Gx Options. (line 23) 50086 * m64 <2>: SPARC Options. (line 257) 50087 * m64 <3>: S/390 and zSeries Options. 50088 (line 87) 50089 * m64 <4>: RS/6000 and PowerPC Options. 50090 (line 276) 50091 * m64: i386 and x86-64 Options. 50092 (line 841) 50093 * m64bit-doubles: RX Options. (line 10) 50094 * m68000: M680x0 Options. (line 95) 50095 * m68010: M680x0 Options. (line 103) 50096 * m68020: M680x0 Options. (line 109) 50097 * m68020-40: M680x0 Options. (line 178) 50098 * m68020-60: M680x0 Options. (line 187) 50099 * m68030: M680x0 Options. (line 114) 50100 * m68040: M680x0 Options. (line 119) 50101 * m68060: M680x0 Options. (line 128) 50102 * m68881: M680x0 Options. (line 197) 50103 * m8-bit: CRIS Options. (line 64) 50104 * m8byte-align: V850 Options. (line 170) 50105 * m96bit-long-double: i386 and x86-64 Options. 50106 (line 342) 50107 * mabi <1>: RS/6000 and PowerPC Options. 50108 (line 611) 50109 * mabi <2>: i386 and x86-64 Options. 50110 (line 721) 50111 * mabi: ARM Options. (line 10) 50112 * mabi=32: MIPS Options. (line 131) 50113 * mabi=64: MIPS Options. (line 131) 50114 * mabi=eabi: MIPS Options. (line 131) 50115 * mabi=elfv1: RS/6000 and PowerPC Options. 50116 (line 632) 50117 * mabi=elfv2: RS/6000 and PowerPC Options. 50118 (line 638) 50119 * mabi=gnu: MMIX Options. (line 20) 50120 * mabi=ibmlongdouble: RS/6000 and PowerPC Options. 50121 (line 624) 50122 * mabi=ieeelongdouble: RS/6000 and PowerPC Options. 50123 (line 628) 50124 * mabi=mmixware: MMIX Options. (line 20) 50125 * mabi=n32: MIPS Options. (line 131) 50126 * mabi=no-spe: RS/6000 and PowerPC Options. 50127 (line 621) 50128 * mabi=o64: MIPS Options. (line 131) 50129 * mabi=spe: RS/6000 and PowerPC Options. 50130 (line 616) 50131 * mabicalls: MIPS Options. (line 155) 50132 * mabort-on-noreturn: ARM Options. (line 184) 50133 * mabsdiff: MeP Options. (line 7) 50134 * mabshi: PDP-11 Options. (line 55) 50135 * mac0: PDP-11 Options. (line 16) 50136 * macc-4: FRV Options. (line 113) 50137 * macc-8: FRV Options. (line 116) 50138 * maccumulate-args: AVR Options. (line 135) 50139 * maccumulate-outgoing-args <1>: SH Options. (line 330) 50140 * maccumulate-outgoing-args: i386 and x86-64 Options. 50141 (line 744) 50142 * maddress-mode=long: i386 and x86-64 Options. 50143 (line 884) 50144 * maddress-mode=short: i386 and x86-64 Options. 50145 (line 889) 50146 * maddress-space-conversion: SPU Options. (line 63) 50147 * mads: RS/6000 and PowerPC Options. 50148 (line 666) 50149 * maix-struct-return: RS/6000 and PowerPC Options. 50150 (line 604) 50151 * maix32: RS/6000 and PowerPC Options. 50152 (line 314) 50153 * maix64: RS/6000 and PowerPC Options. 50154 (line 314) 50155 * malign-300: H8/300 Options. (line 41) 50156 * malign-double: i386 and x86-64 Options. 50157 (line 326) 50158 * malign-int: M680x0 Options. (line 267) 50159 * malign-labels: FRV Options. (line 104) 50160 * malign-loops: M32R/D Options. (line 73) 50161 * malign-natural: RS/6000 and PowerPC Options. 50162 (line 353) 50163 * malign-power: RS/6000 and PowerPC Options. 50164 (line 353) 50165 * mall-opts: MeP Options. (line 11) 50166 * malloc-cc: FRV Options. (line 25) 50167 * maltivec: RS/6000 and PowerPC Options. 50168 (line 134) 50169 * maltivec=be: RS/6000 and PowerPC Options. 50170 (line 150) 50171 * maltivec=le: RS/6000 and PowerPC Options. 50172 (line 160) 50173 * mam33: MN10300 Options. (line 17) 50174 * mam33-2: MN10300 Options. (line 24) 50175 * mam34: MN10300 Options. (line 27) 50176 * mandroid: GNU/Linux Options. (line 21) 50177 * mapcs: ARM Options. (line 22) 50178 * mapcs-frame: ARM Options. (line 14) 50179 * mapp-regs <1>: V850 Options. (line 181) 50180 * mapp-regs: SPARC Options. (line 10) 50181 * march <1>: S/390 and zSeries Options. 50182 (line 116) 50183 * march <2>: MIPS Options. (line 14) 50184 * march <3>: M680x0 Options. (line 12) 50185 * march <4>: i386 and x86-64 Options. 50186 (line 10) 50187 * march <5>: HPPA Options. (line 9) 50188 * march <6>: CRIS Options. (line 10) 50189 * march <7>: C6X Options. (line 7) 50190 * march <8>: ARM Options. (line 75) 50191 * march: AArch64 Options. (line 55) 50192 * marm: ARM Options. (line 248) 50193 * mas100-syntax: RX Options. (line 76) 50194 * masm=DIALECT: i386 and x86-64 Options. 50195 (line 281) 50196 * matomic-model=MODEL: SH Options. (line 144) 50197 * matomic-updates: SPU Options. (line 78) 50198 * mauto-pic: IA-64 Options. (line 50) 50199 * maverage: MeP Options. (line 16) 50200 * mavoid-indexed-addresses: RS/6000 and PowerPC Options. 50201 (line 423) 50202 * max-vect-align: Adapteva Epiphany Options. 50203 (line 120) 50204 * mb: SH Options. (line 74) 50205 * mbackchain: S/390 and zSeries Options. 50206 (line 35) 50207 * mbarrel-shift-enabled: LM32 Options. (line 9) 50208 * mbase-addresses: MMIX Options. (line 54) 50209 * mbased=: MeP Options. (line 20) 50210 * mbcopy: PDP-11 Options. (line 36) 50211 * mbcopy-builtin: PDP-11 Options. (line 32) 50212 * mbig: RS/6000 and PowerPC Options. 50213 (line 503) 50214 * mbig-endian <1>: RS/6000 and PowerPC Options. 50215 (line 503) 50216 * mbig-endian <2>: MicroBlaze Options. (line 57) 50217 * mbig-endian <3>: MCore Options. (line 39) 50218 * mbig-endian <4>: IA-64 Options. (line 9) 50219 * mbig-endian <5>: C6X Options. (line 13) 50220 * mbig-endian <6>: ARM Options. (line 62) 50221 * mbig-endian: AArch64 Options. (line 9) 50222 * mbig-endian-data: RX Options. (line 42) 50223 * mbig-switch <1>: V850 Options. (line 176) 50224 * mbig-switch: HPPA Options. (line 23) 50225 * mbigtable: SH Options. (line 89) 50226 * mbionic: GNU/Linux Options. (line 17) 50227 * mbit-align: RS/6000 and PowerPC Options. 50228 (line 455) 50229 * mbit-ops: CR16 Options. (line 25) 50230 * mbitfield: M680x0 Options. (line 235) 50231 * mbitops <1>: SH Options. (line 93) 50232 * mbitops: MeP Options. (line 26) 50233 * mblock-move-inline-limit: RS/6000 and PowerPC Options. 50234 (line 737) 50235 * mbranch-cheap: PDP-11 Options. (line 65) 50236 * mbranch-cost <1>: MIPS Options. (line 635) 50237 * mbranch-cost <2>: AVR Options. (line 150) 50238 * mbranch-cost: Adapteva Epiphany Options. 50239 (line 18) 50240 * mbranch-cost=NUM: SH Options. (line 396) 50241 * mbranch-cost=NUMBER: M32R/D Options. (line 82) 50242 * mbranch-expensive: PDP-11 Options. (line 61) 50243 * mbranch-hints: SPU Options. (line 27) 50244 * mbranch-likely: MIPS Options. (line 642) 50245 * mbranch-predict: MMIX Options. (line 49) 50246 * mbss-plt: RS/6000 and PowerPC Options. 50247 (line 187) 50248 * mbuild-constants: DEC Alpha Options. (line 141) 50249 * mbwx: DEC Alpha Options. (line 163) 50250 * mc68000: M680x0 Options. (line 95) 50251 * mc68020: M680x0 Options. (line 109) 50252 * mc=: MeP Options. (line 31) 50253 * mcache-size: SPU Options. (line 70) 50254 * mcall-eabi: RS/6000 and PowerPC Options. 50255 (line 578) 50256 * mcall-freebsd: RS/6000 and PowerPC Options. 50257 (line 592) 50258 * mcall-linux: RS/6000 and PowerPC Options. 50259 (line 588) 50260 * mcall-netbsd: RS/6000 and PowerPC Options. 50261 (line 596) 50262 * mcall-prologues: AVR Options. (line 155) 50263 * mcall-sysv: RS/6000 and PowerPC Options. 50264 (line 570) 50265 * mcall-sysv-eabi: RS/6000 and PowerPC Options. 50266 (line 578) 50267 * mcall-sysv-noeabi: RS/6000 and PowerPC Options. 50268 (line 581) 50269 * mcallee-super-interworking: ARM Options. (line 266) 50270 * mcaller-super-interworking: ARM Options. (line 273) 50271 * mcallgraph-data: MCore Options. (line 31) 50272 * mcbcond: SPARC Options. (line 224) 50273 * mcbranchdi: SH Options. (line 411) 50274 * mcc-init: CRIS Options. (line 41) 50275 * mcfv4e: M680x0 Options. (line 172) 50276 * mcheck-zero-division: MIPS Options. (line 441) 50277 * mcix: DEC Alpha Options. (line 163) 50278 * mcld: i386 and x86-64 Options. 50279 (line 594) 50280 * mclip: MeP Options. (line 35) 50281 * mcmodel: SPARC Options. (line 262) 50282 * mcmodel=kernel: i386 and x86-64 Options. 50283 (line 868) 50284 * mcmodel=large <1>: TILE-Gx Options. (line 14) 50285 * mcmodel=large <2>: RS/6000 and PowerPC Options. 50286 (line 128) 50287 * mcmodel=large <3>: i386 and x86-64 Options. 50288 (line 880) 50289 * mcmodel=large: AArch64 Options. (line 33) 50290 * mcmodel=medium <1>: RS/6000 and PowerPC Options. 50291 (line 124) 50292 * mcmodel=medium: i386 and x86-64 Options. 50293 (line 873) 50294 * mcmodel=small <1>: TILE-Gx Options. (line 9) 50295 * mcmodel=small <2>: RS/6000 and PowerPC Options. 50296 (line 120) 50297 * mcmodel=small <3>: i386 and x86-64 Options. 50298 (line 862) 50299 * mcmodel=small: AArch64 Options. (line 27) 50300 * mcmodel=tiny: AArch64 Options. (line 20) 50301 * mcmove: Adapteva Epiphany Options. 50302 (line 23) 50303 * mcmpb: RS/6000 and PowerPC Options. 50304 (line 27) 50305 * mcmpeqdi: SH Options. (line 414) 50306 * mcode-readable: MIPS Options. (line 401) 50307 * mcompat-align-parm: RS/6000 and PowerPC Options. 50308 (line 895) 50309 * mcond-exec: FRV Options. (line 152) 50310 * mcond-move: FRV Options. (line 128) 50311 * mconfig=: MeP Options. (line 39) 50312 * mconsole: i386 and x86-64 Windows Options. 50313 (line 9) 50314 * mconst-align: CRIS Options. (line 55) 50315 * mconst16: Xtensa Options. (line 10) 50316 * mconstant-gp: IA-64 Options. (line 46) 50317 * mcop: MeP Options. (line 48) 50318 * mcop32: MeP Options. (line 53) 50319 * mcop64: MeP Options. (line 56) 50320 * mcorea: Blackfin Options. (line 157) 50321 * mcoreb: Blackfin Options. (line 164) 50322 * mcpu <1>: TILEPro Options. (line 9) 50323 * mcpu <2>: TILE-Gx Options. (line 18) 50324 * mcpu <3>: SPARC Options. (line 102) 50325 * mcpu <4>: RS/6000 and PowerPC Options. 50326 (line 69) 50327 * mcpu <5>: picoChip Options. (line 9) 50328 * mcpu <6>: M680x0 Options. (line 28) 50329 * mcpu <7>: i386 and x86-64 Options. 50330 (line 229) 50331 * mcpu <8>: FRV Options. (line 212) 50332 * mcpu <9>: DEC Alpha Options. (line 215) 50333 * mcpu <10>: CRIS Options. (line 10) 50334 * mcpu <11>: ARM Options. (line 124) 50335 * mcpu: AArch64 Options. (line 69) 50336 * mcpu32: M680x0 Options. (line 138) 50337 * mcpu= <1>: MicroBlaze Options. (line 20) 50338 * mcpu= <2>: M32C Options. (line 7) 50339 * mcpu=: Blackfin Options. (line 7) 50340 * mcr16c: CR16 Options. (line 14) 50341 * mcr16cplus: CR16 Options. (line 14) 50342 * mcrc32: i386 and x86-64 Options. 50343 (line 641) 50344 * mcrypto: RS/6000 and PowerPC Options. 50345 (line 222) 50346 * mcsync-anomaly: Blackfin Options. (line 60) 50347 * mcx16: i386 and x86-64 Options. 50348 (line 618) 50349 * MD: Preprocessor Options. 50350 (line 274) 50351 * mdalign: SH Options. (line 80) 50352 * mdata-align: CRIS Options. (line 55) 50353 * mdata-model: CR16 Options. (line 28) 50354 * mdc: MeP Options. (line 62) 50355 * mdebug <1>: S/390 and zSeries Options. 50356 (line 112) 50357 * mdebug: M32R/D Options. (line 69) 50358 * mdebug-main=PREFIX: VMS Options. (line 13) 50359 * mdec-asm: PDP-11 Options. (line 72) 50360 * mdirect-move: RS/6000 and PowerPC Options. 50361 (line 228) 50362 * mdisable-callt: V850 Options. (line 92) 50363 * mdisable-fpregs: HPPA Options. (line 33) 50364 * mdisable-indexing: HPPA Options. (line 39) 50365 * mdiv <1>: MeP Options. (line 65) 50366 * mdiv <2>: MCore Options. (line 15) 50367 * mdiv: M680x0 Options. (line 209) 50368 * mdiv=STRATEGY: SH Options. (line 238) 50369 * mdivide-breaks: MIPS Options. (line 447) 50370 * mdivide-enabled: LM32 Options. (line 12) 50371 * mdivide-traps: MIPS Options. (line 447) 50372 * mdivsi3_libfunc=NAME: SH Options. (line 336) 50373 * mdll: i386 and x86-64 Windows Options. 50374 (line 16) 50375 * mdlmzb: RS/6000 and PowerPC Options. 50376 (line 448) 50377 * mdmx: MIPS Options. (line 290) 50378 * mdouble: FRV Options. (line 38) 50379 * mdouble-float <1>: RS/6000 and PowerPC Options. 50380 (line 371) 50381 * mdouble-float: MIPS Options. (line 248) 50382 * mdsp: MIPS Options. (line 267) 50383 * mdspr2: MIPS Options. (line 273) 50384 * mdual-nops: SPU Options. (line 90) 50385 * mdwarf2-asm: IA-64 Options. (line 94) 50386 * mdword: FRV Options. (line 32) 50387 * mdynamic-no-pic: RS/6000 and PowerPC Options. 50388 (line 508) 50389 * mea32: SPU Options. (line 55) 50390 * mea64: SPU Options. (line 55) 50391 * meabi: RS/6000 and PowerPC Options. 50392 (line 685) 50393 * mearly-stop-bits: IA-64 Options. (line 100) 50394 * meb <1>: Score Options. (line 9) 50395 * meb <2>: Moxie Options. (line 7) 50396 * meb: MeP Options. (line 68) 50397 * mel <1>: Score Options. (line 12) 50398 * mel <2>: Moxie Options. (line 11) 50399 * mel: MeP Options. (line 71) 50400 * melf <1>: MMIX Options. (line 44) 50401 * melf: CRIS Options. (line 87) 50402 * memb: RS/6000 and PowerPC Options. 50403 (line 680) 50404 * membedded-data: MIPS Options. (line 388) 50405 * memregs=: M32C Options. (line 21) 50406 * mep: V850 Options. (line 16) 50407 * mepsilon: MMIX Options. (line 15) 50408 * merror-reloc: SPU Options. (line 10) 50409 * mesa: S/390 and zSeries Options. 50410 (line 95) 50411 * metrax100: CRIS Options. (line 26) 50412 * metrax4: CRIS Options. (line 26) 50413 * mexplicit-relocs <1>: MIPS Options. (line 432) 50414 * mexplicit-relocs: DEC Alpha Options. (line 176) 50415 * mexr: H8/300 Options. (line 28) 50416 * mextern-sdata: MIPS Options. (line 350) 50417 * MF: Preprocessor Options. 50418 (line 220) 50419 * mfast-fp: Blackfin Options. (line 133) 50420 * mfast-indirect-calls: HPPA Options. (line 51) 50421 * mfaster-structs: SPARC Options. (line 92) 50422 * mfdpic: FRV Options. (line 56) 50423 * mfentry: i386 and x86-64 Options. 50424 (line 817) 50425 * mfix: DEC Alpha Options. (line 163) 50426 * mfix-24k: MIPS Options. (line 500) 50427 * mfix-and-continue: Darwin Options. (line 104) 50428 * mfix-at697f: SPARC Options. (line 244) 50429 * mfix-cortex-m3-ldrd: ARM Options. (line 306) 50430 * mfix-r10000: MIPS Options. (line 527) 50431 * mfix-r4000: MIPS Options. (line 506) 50432 * mfix-r4400: MIPS Options. (line 520) 50433 * mfix-sb1: MIPS Options. (line 559) 50434 * mfix-ut699: SPARC Options. (line 249) 50435 * mfix-vr4120: MIPS Options. (line 538) 50436 * mfix-vr4130: MIPS Options. (line 552) 50437 * mfixed-cc: FRV Options. (line 28) 50438 * mfixed-range <1>: SPU Options. (line 47) 50439 * mfixed-range <2>: SH Options. (line 343) 50440 * mfixed-range <3>: IA-64 Options. (line 105) 50441 * mfixed-range: HPPA Options. (line 58) 50442 * mflat: SPARC Options. (line 22) 50443 * mflip-mips16: MIPS Options. (line 111) 50444 * mfloat-abi: ARM Options. (line 42) 50445 * mfloat-gprs: RS/6000 and PowerPC Options. 50446 (line 259) 50447 * mfloat-ieee: DEC Alpha Options. (line 171) 50448 * mfloat-vax: DEC Alpha Options. (line 171) 50449 * mfloat32: PDP-11 Options. (line 52) 50450 * mfloat64: PDP-11 Options. (line 48) 50451 * mflush-func: MIPS Options. (line 626) 50452 * mflush-func=NAME: M32R/D Options. (line 93) 50453 * mflush-trap=NUMBER: M32R/D Options. (line 86) 50454 * mfmaf: SPARC Options. (line 238) 50455 * mfmovd: SH Options. (line 96) 50456 * mforce-no-pic: Xtensa Options. (line 41) 50457 * mfp-exceptions: MIPS Options. (line 653) 50458 * mfp-mode: Adapteva Epiphany Options. 50459 (line 72) 50460 * mfp-reg: DEC Alpha Options. (line 25) 50461 * mfp-rounding-mode: DEC Alpha Options. (line 85) 50462 * mfp-trap-mode: DEC Alpha Options. (line 63) 50463 * mfp16-format: ARM Options. (line 164) 50464 * mfp32: MIPS Options. (line 221) 50465 * mfp64: MIPS Options. (line 224) 50466 * mfpmath <1>: i386 and x86-64 Options. 50467 (line 232) 50468 * mfpmath: Optimize Options. (line 1898) 50469 * mfpr-32: FRV Options. (line 13) 50470 * mfpr-64: FRV Options. (line 16) 50471 * mfprnd: RS/6000 and PowerPC Options. 50472 (line 27) 50473 * mfpu <1>: SPARC Options. (line 35) 50474 * mfpu <2>: RS/6000 and PowerPC Options. 50475 (line 379) 50476 * mfpu <3>: PDP-11 Options. (line 9) 50477 * mfpu: ARM Options. (line 144) 50478 * mfriz: RS/6000 and PowerPC Options. 50479 (line 866) 50480 * mfsca: SH Options. (line 428) 50481 * mfsrra: SH Options. (line 437) 50482 * mfull-toc: RS/6000 and PowerPC Options. 50483 (line 287) 50484 * mfused-madd <1>: Xtensa Options. (line 19) 50485 * mfused-madd <2>: SH Options. (line 419) 50486 * mfused-madd <3>: S/390 and zSeries Options. 50487 (line 137) 50488 * mfused-madd <4>: RS/6000 and PowerPC Options. 50489 (line 432) 50490 * mfused-madd <5>: MIPS Options. (line 482) 50491 * mfused-madd: IA-64 Options. (line 88) 50492 * mg: VAX Options. (line 17) 50493 * MG: Preprocessor Options. 50494 (line 229) 50495 * mgas: HPPA Options. (line 74) 50496 * mgcc-abi: V850 Options. (line 148) 50497 * mgen-cell-microcode: RS/6000 and PowerPC Options. 50498 (line 175) 50499 * mgeneral-regs-only: AArch64 Options. (line 13) 50500 * mgettrcost=NUMBER: SH Options. (line 360) 50501 * mghs: V850 Options. (line 127) 50502 * mglibc: GNU/Linux Options. (line 9) 50503 * mgnu: VAX Options. (line 13) 50504 * mgnu-as: IA-64 Options. (line 18) 50505 * mgnu-ld <1>: IA-64 Options. (line 23) 50506 * mgnu-ld: HPPA Options. (line 110) 50507 * mgotplt: CRIS Options. (line 81) 50508 * mgp32: MIPS Options. (line 215) 50509 * mgp64: MIPS Options. (line 218) 50510 * mgpopt: MIPS Options. (line 373) 50511 * mgpr-32: FRV Options. (line 7) 50512 * mgpr-64: FRV Options. (line 10) 50513 * mgprel-ro: FRV Options. (line 79) 50514 * mh: H8/300 Options. (line 14) 50515 * mhalf-reg-file: Adapteva Epiphany Options. 50516 (line 9) 50517 * mhard-dfp <1>: S/390 and zSeries Options. 50518 (line 20) 50519 * mhard-dfp: RS/6000 and PowerPC Options. 50520 (line 27) 50521 * mhard-float <1>: V850 Options. (line 113) 50522 * mhard-float <2>: SPARC Options. (line 35) 50523 * mhard-float <3>: S/390 and zSeries Options. 50524 (line 11) 50525 * mhard-float <4>: RS/6000 and PowerPC Options. 50526 (line 365) 50527 * mhard-float <5>: MIPS Options. (line 227) 50528 * mhard-float <6>: MicroBlaze Options. (line 10) 50529 * mhard-float <7>: M680x0 Options. (line 197) 50530 * mhard-float: FRV Options. (line 19) 50531 * mhard-quad-float: SPARC Options. (line 56) 50532 * mhardlit: MCore Options. (line 10) 50533 * mhint-max-distance: SPU Options. (line 102) 50534 * mhint-max-nops: SPU Options. (line 96) 50535 * mhitachi: SH Options. (line 100) 50536 * mhotpatch: S/390 and zSeries Options. 50537 (line 174) 50538 * mhp-ld: HPPA Options. (line 122) 50539 * micplb: Blackfin Options. (line 178) 50540 * mid-shared-library: Blackfin Options. (line 81) 50541 * mieee <1>: SH Options. (line 116) 50542 * mieee: DEC Alpha Options. (line 39) 50543 * mieee-conformant: DEC Alpha Options. (line 134) 50544 * mieee-fp: i386 and x86-64 Options. 50545 (line 287) 50546 * mieee-with-inexact: DEC Alpha Options. (line 52) 50547 * milp32: IA-64 Options. (line 121) 50548 * mimpure-text: Solaris 2 Options. (line 9) 50549 * mincoming-stack-boundary: i386 and x86-64 Options. 50550 (line 492) 50551 * mindexed-addressing: SH Options. (line 350) 50552 * minline-all-stringops: i386 and x86-64 Options. 50553 (line 765) 50554 * minline-float-divide-max-throughput: IA-64 Options. (line 58) 50555 * minline-float-divide-min-latency: IA-64 Options. (line 54) 50556 * minline-ic_invalidate: SH Options. (line 125) 50557 * minline-int-divide-max-throughput: IA-64 Options. (line 69) 50558 * minline-int-divide-min-latency: IA-64 Options. (line 65) 50559 * minline-plt <1>: FRV Options. (line 64) 50560 * minline-plt: Blackfin Options. (line 138) 50561 * minline-sqrt-max-throughput: IA-64 Options. (line 80) 50562 * minline-sqrt-min-latency: IA-64 Options. (line 76) 50563 * minline-stringops-dynamically: i386 and x86-64 Options. 50564 (line 772) 50565 * minsert-sched-nops: RS/6000 and PowerPC Options. 50566 (line 548) 50567 * mint-register: RX Options. (line 100) 50568 * mint16: PDP-11 Options. (line 40) 50569 * mint32 <1>: PDP-11 Options. (line 44) 50570 * mint32 <2>: H8/300 Options. (line 38) 50571 * mint32: CR16 Options. (line 22) 50572 * mint8: AVR Options. (line 159) 50573 * minterlink-mips16: MIPS Options. (line 118) 50574 * minvalid-symbols: SH Options. (line 386) 50575 * mio-volatile: MeP Options. (line 74) 50576 * mips1: MIPS Options. (line 78) 50577 * mips16: MIPS Options. (line 103) 50578 * mips2: MIPS Options. (line 81) 50579 * mips3: MIPS Options. (line 84) 50580 * mips32: MIPS Options. (line 90) 50581 * mips32r2: MIPS Options. (line 93) 50582 * mips3d: MIPS Options. (line 296) 50583 * mips4: MIPS Options. (line 87) 50584 * mips64: MIPS Options. (line 96) 50585 * mips64r2: MIPS Options. (line 99) 50586 * misel: RS/6000 and PowerPC Options. 50587 (line 193) 50588 * misize: SH Options. (line 137) 50589 * missue-rate=NUMBER: M32R/D Options. (line 79) 50590 * mivc2: MeP Options. (line 59) 50591 * mjump-in-delay: HPPA Options. (line 28) 50592 * mkernel: Darwin Options. (line 82) 50593 * mknuthdiv: MMIX Options. (line 33) 50594 * ml <1>: SH Options. (line 77) 50595 * ml: MeP Options. (line 78) 50596 * mlarge-data: DEC Alpha Options. (line 187) 50597 * mlarge-data-threshold: i386 and x86-64 Options. 50598 (line 378) 50599 * mlarge-mem: SPU Options. (line 35) 50600 * mlarge-text: DEC Alpha Options. (line 205) 50601 * mleadz: MeP Options. (line 81) 50602 * mleaf-id-shared-library: Blackfin Options. (line 92) 50603 * mlibfuncs: MMIX Options. (line 10) 50604 * mlibrary-pic: FRV Options. (line 110) 50605 * mlinked-fp: FRV Options. (line 94) 50606 * mlinker-opt: HPPA Options. (line 84) 50607 * mlinux: CRIS Options. (line 91) 50608 * mlittle: RS/6000 and PowerPC Options. 50609 (line 497) 50610 * mlittle-endian <1>: RS/6000 and PowerPC Options. 50611 (line 497) 50612 * mlittle-endian <2>: MicroBlaze Options. (line 60) 50613 * mlittle-endian <3>: MCore Options. (line 39) 50614 * mlittle-endian <4>: IA-64 Options. (line 13) 50615 * mlittle-endian <5>: C6X Options. (line 16) 50616 * mlittle-endian <6>: ARM Options. (line 58) 50617 * mlittle-endian: AArch64 Options. (line 16) 50618 * mlittle-endian-data: RX Options. (line 42) 50619 * mliw: MN10300 Options. (line 54) 50620 * mllsc: MIPS Options. (line 253) 50621 * mlocal-sdata: MIPS Options. (line 338) 50622 * mlong-calls <1>: V850 Options. (line 10) 50623 * mlong-calls <2>: MIPS Options. (line 468) 50624 * mlong-calls <3>: FRV Options. (line 99) 50625 * mlong-calls <4>: Blackfin Options. (line 121) 50626 * mlong-calls <5>: ARM Options. (line 189) 50627 * mlong-calls: Adapteva Epiphany Options. 50628 (line 55) 50629 * mlong-double-128: S/390 and zSeries Options. 50630 (line 29) 50631 * mlong-double-64 <1>: S/390 and zSeries Options. 50632 (line 29) 50633 * mlong-double-64: i386 and x86-64 Options. 50634 (line 367) 50635 * mlong-double-80: i386 and x86-64 Options. 50636 (line 367) 50637 * mlong-jumps: V850 Options. (line 108) 50638 * mlong-load-store: HPPA Options. (line 65) 50639 * mlong32: MIPS Options. (line 313) 50640 * mlong64: MIPS Options. (line 308) 50641 * mlongcall: RS/6000 and PowerPC Options. 50642 (line 757) 50643 * mlongcalls: Xtensa Options. (line 72) 50644 * mloop: V850 Options. (line 121) 50645 * mlow-64k: Blackfin Options. (line 70) 50646 * mlp64: IA-64 Options. (line 121) 50647 * mm: MeP Options. (line 84) 50648 * MM: Preprocessor Options. 50649 (line 210) 50650 * mmac <1>: Score Options. (line 21) 50651 * mmac: CR16 Options. (line 9) 50652 * mmad: MIPS Options. (line 477) 50653 * mmalloc64: VMS Options. (line 17) 50654 * mmax: DEC Alpha Options. (line 163) 50655 * mmax-constant-size: RX Options. (line 82) 50656 * mmax-stack-frame: CRIS Options. (line 22) 50657 * mmcount-ra-address: MIPS Options. (line 702) 50658 * mmcu <1>: MIPS Options. (line 305) 50659 * mmcu: AVR Options. (line 9) 50660 * MMD: Preprocessor Options. 50661 (line 290) 50662 * mmedia: FRV Options. (line 44) 50663 * mmemcpy <1>: MIPS Options. (line 462) 50664 * mmemcpy: MicroBlaze Options. (line 13) 50665 * mmemory-latency: DEC Alpha Options. (line 268) 50666 * mmemory-model: SPARC Options. (line 290) 50667 * mmfcrf: RS/6000 and PowerPC Options. 50668 (line 27) 50669 * mmfpgpr: RS/6000 and PowerPC Options. 50670 (line 27) 50671 * mminimal-toc: RS/6000 and PowerPC Options. 50672 (line 287) 50673 * mminmax: MeP Options. (line 87) 50674 * mmmx: i386 and x86-64 Options. 50675 (line 571) 50676 * mmodel=large: M32R/D Options. (line 33) 50677 * mmodel=medium: M32R/D Options. (line 27) 50678 * mmodel=small: M32R/D Options. (line 18) 50679 * mmovbe: i386 and x86-64 Options. 50680 (line 637) 50681 * mmt: MIPS Options. (line 301) 50682 * mmul: RL78 Options. (line 13) 50683 * mmul-bug-workaround: CRIS Options. (line 31) 50684 * mmuladd: FRV Options. (line 50) 50685 * mmulhw: RS/6000 and PowerPC Options. 50686 (line 441) 50687 * mmult: MeP Options. (line 90) 50688 * mmult-bug: MN10300 Options. (line 9) 50689 * mmulti-cond-exec: FRV Options. (line 176) 50690 * mmulticore: Blackfin Options. (line 142) 50691 * mmultiple: RS/6000 and PowerPC Options. 50692 (line 391) 50693 * mmvcle: S/390 and zSeries Options. 50694 (line 105) 50695 * mmvme: RS/6000 and PowerPC Options. 50696 (line 661) 50697 * mn: H8/300 Options. (line 20) 50698 * mnested-cond-exec: FRV Options. (line 189) 50699 * mnhwloop: Score Options. (line 15) 50700 * mno-3dnow: i386 and x86-64 Options. 50701 (line 571) 50702 * mno-4byte-functions: MCore Options. (line 27) 50703 * mno-8byte-align: V850 Options. (line 170) 50704 * mno-abicalls: MIPS Options. (line 155) 50705 * mno-abshi: PDP-11 Options. (line 58) 50706 * mno-ac0: PDP-11 Options. (line 20) 50707 * mno-address-space-conversion: SPU Options. (line 63) 50708 * mno-align-double: i386 and x86-64 Options. 50709 (line 326) 50710 * mno-align-int: M680x0 Options. (line 267) 50711 * mno-align-loops: M32R/D Options. (line 76) 50712 * mno-align-stringops: i386 and x86-64 Options. 50713 (line 760) 50714 * mno-altivec: RS/6000 and PowerPC Options. 50715 (line 134) 50716 * mno-am33: MN10300 Options. (line 20) 50717 * mno-app-regs <1>: V850 Options. (line 185) 50718 * mno-app-regs: SPARC Options. (line 10) 50719 * mno-as100-syntax: RX Options. (line 76) 50720 * mno-atomic-updates: SPU Options. (line 78) 50721 * mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 50722 (line 423) 50723 * mno-backchain: S/390 and zSeries Options. 50724 (line 35) 50725 * mno-base-addresses: MMIX Options. (line 54) 50726 * mno-bit-align: RS/6000 and PowerPC Options. 50727 (line 455) 50728 * mno-bitfield: M680x0 Options. (line 231) 50729 * mno-branch-likely: MIPS Options. (line 642) 50730 * mno-branch-predict: MMIX Options. (line 49) 50731 * mno-bwx: DEC Alpha Options. (line 163) 50732 * mno-callgraph-data: MCore Options. (line 31) 50733 * mno-cbcond: SPARC Options. (line 224) 50734 * mno-check-zero-division: MIPS Options. (line 441) 50735 * mno-cix: DEC Alpha Options. (line 163) 50736 * mno-clearbss: MicroBlaze Options. (line 16) 50737 * mno-cmpb: RS/6000 and PowerPC Options. 50738 (line 27) 50739 * mno-cond-exec: FRV Options. (line 158) 50740 * mno-cond-move: FRV Options. (line 134) 50741 * mno-const-align: CRIS Options. (line 55) 50742 * mno-const16: Xtensa Options. (line 10) 50743 * mno-crt0 <1>: Moxie Options. (line 14) 50744 * mno-crt0: MN10300 Options. (line 43) 50745 * mno-crypto: RS/6000 and PowerPC Options. 50746 (line 222) 50747 * mno-csync-anomaly: Blackfin Options. (line 66) 50748 * mno-data-align: CRIS Options. (line 55) 50749 * mno-debug: S/390 and zSeries Options. 50750 (line 112) 50751 * mno-direct-move: RS/6000 and PowerPC Options. 50752 (line 228) 50753 * mno-disable-callt: V850 Options. (line 92) 50754 * mno-div <1>: MCore Options. (line 15) 50755 * mno-div: M680x0 Options. (line 209) 50756 * mno-dlmzb: RS/6000 and PowerPC Options. 50757 (line 448) 50758 * mno-double: FRV Options. (line 41) 50759 * mno-dsp: MIPS Options. (line 267) 50760 * mno-dspr2: MIPS Options. (line 273) 50761 * mno-dwarf2-asm: IA-64 Options. (line 94) 50762 * mno-dword: FRV Options. (line 35) 50763 * mno-eabi: RS/6000 and PowerPC Options. 50764 (line 685) 50765 * mno-early-stop-bits: IA-64 Options. (line 100) 50766 * mno-eflags: FRV Options. (line 125) 50767 * mno-embedded-data: MIPS Options. (line 388) 50768 * mno-ep: V850 Options. (line 16) 50769 * mno-epsilon: MMIX Options. (line 15) 50770 * mno-explicit-relocs <1>: MIPS Options. (line 432) 50771 * mno-explicit-relocs: DEC Alpha Options. (line 176) 50772 * mno-exr: H8/300 Options. (line 33) 50773 * mno-extern-sdata: MIPS Options. (line 350) 50774 * mno-fancy-math-387: i386 and x86-64 Options. 50775 (line 315) 50776 * mno-faster-structs: SPARC Options. (line 92) 50777 * mno-fix: DEC Alpha Options. (line 163) 50778 * mno-fix-24k: MIPS Options. (line 500) 50779 * mno-fix-r10000: MIPS Options. (line 527) 50780 * mno-fix-r4000: MIPS Options. (line 506) 50781 * mno-fix-r4400: MIPS Options. (line 520) 50782 * mno-flat: SPARC Options. (line 22) 50783 * mno-float: MIPS Options. (line 234) 50784 * mno-float32: PDP-11 Options. (line 48) 50785 * mno-float64: PDP-11 Options. (line 52) 50786 * mno-flush-func: M32R/D Options. (line 98) 50787 * mno-flush-trap: M32R/D Options. (line 90) 50788 * mno-fmaf: SPARC Options. (line 238) 50789 * mno-fp-in-toc: RS/6000 and PowerPC Options. 50790 (line 287) 50791 * mno-fp-regs: DEC Alpha Options. (line 25) 50792 * mno-fp-ret-in-387: i386 and x86-64 Options. 50793 (line 305) 50794 * mno-fprnd: RS/6000 and PowerPC Options. 50795 (line 27) 50796 * mno-fpu: SPARC Options. (line 40) 50797 * mno-fsca: SH Options. (line 428) 50798 * mno-fsrra: SH Options. (line 437) 50799 * mno-fused-madd <1>: Xtensa Options. (line 19) 50800 * mno-fused-madd <2>: SH Options. (line 419) 50801 * mno-fused-madd <3>: S/390 and zSeries Options. 50802 (line 137) 50803 * mno-fused-madd <4>: RS/6000 and PowerPC Options. 50804 (line 432) 50805 * mno-fused-madd <5>: MIPS Options. (line 482) 50806 * mno-fused-madd: IA-64 Options. (line 88) 50807 * mno-gnu-as: IA-64 Options. (line 18) 50808 * mno-gnu-ld: IA-64 Options. (line 23) 50809 * mno-gotplt: CRIS Options. (line 81) 50810 * mno-gpopt: MIPS Options. (line 373) 50811 * mno-hard-dfp <1>: S/390 and zSeries Options. 50812 (line 20) 50813 * mno-hard-dfp: RS/6000 and PowerPC Options. 50814 (line 27) 50815 * mno-hardlit: MCore Options. (line 10) 50816 * mno-id-shared-library: Blackfin Options. (line 88) 50817 * mno-ieee-fp: i386 and x86-64 Options. 50818 (line 287) 50819 * mno-inline-float-divide: IA-64 Options. (line 62) 50820 * mno-inline-int-divide: IA-64 Options. (line 73) 50821 * mno-inline-sqrt: IA-64 Options. (line 84) 50822 * mno-int16: PDP-11 Options. (line 44) 50823 * mno-int32: PDP-11 Options. (line 40) 50824 * mno-interlink-mips16: MIPS Options. (line 118) 50825 * mno-interrupts: AVR Options. (line 165) 50826 * mno-isel: RS/6000 and PowerPC Options. 50827 (line 193) 50828 * mno-knuthdiv: MMIX Options. (line 33) 50829 * mno-leaf-id-shared-library: Blackfin Options. (line 98) 50830 * mno-libfuncs: MMIX Options. (line 10) 50831 * mno-llsc: MIPS Options. (line 253) 50832 * mno-local-sdata: MIPS Options. (line 338) 50833 * mno-long-calls <1>: V850 Options. (line 10) 50834 * mno-long-calls <2>: MIPS Options. (line 468) 50835 * mno-long-calls <3>: HPPA Options. (line 135) 50836 * mno-long-calls <4>: Blackfin Options. (line 121) 50837 * mno-long-calls: ARM Options. (line 189) 50838 * mno-long-jumps: V850 Options. (line 108) 50839 * mno-longcall: RS/6000 and PowerPC Options. 50840 (line 757) 50841 * mno-longcalls: Xtensa Options. (line 72) 50842 * mno-low-64k: Blackfin Options. (line 74) 50843 * mno-lsim <1>: MCore Options. (line 46) 50844 * mno-lsim: FR30 Options. (line 14) 50845 * mno-mad: MIPS Options. (line 477) 50846 * mno-max: DEC Alpha Options. (line 163) 50847 * mno-mcount-ra-address: MIPS Options. (line 702) 50848 * mno-mcu: MIPS Options. (line 305) 50849 * mno-mdmx: MIPS Options. (line 290) 50850 * mno-media: FRV Options. (line 47) 50851 * mno-memcpy: MIPS Options. (line 462) 50852 * mno-mfcrf: RS/6000 and PowerPC Options. 50853 (line 27) 50854 * mno-mfpgpr: RS/6000 and PowerPC Options. 50855 (line 27) 50856 * mno-mips16: MIPS Options. (line 103) 50857 * mno-mips3d: MIPS Options. (line 296) 50858 * mno-mmx: i386 and x86-64 Options. 50859 (line 571) 50860 * mno-mt: MIPS Options. (line 301) 50861 * mno-mul-bug-workaround: CRIS Options. (line 31) 50862 * mno-muladd: FRV Options. (line 53) 50863 * mno-mulhw: RS/6000 and PowerPC Options. 50864 (line 441) 50865 * mno-mult-bug: MN10300 Options. (line 13) 50866 * mno-multi-cond-exec: FRV Options. (line 183) 50867 * mno-multiple: RS/6000 and PowerPC Options. 50868 (line 391) 50869 * mno-mvcle: S/390 and zSeries Options. 50870 (line 105) 50871 * mno-nested-cond-exec: FRV Options. (line 195) 50872 * mno-omit-leaf-frame-pointer: AArch64 Options. (line 43) 50873 * mno-optimize-membar: FRV Options. (line 205) 50874 * mno-opts: MeP Options. (line 93) 50875 * mno-pack: FRV Options. (line 122) 50876 * mno-packed-stack: S/390 and zSeries Options. 50877 (line 54) 50878 * mno-paired: RS/6000 and PowerPC Options. 50879 (line 207) 50880 * mno-paired-single: MIPS Options. (line 284) 50881 * mno-pic: IA-64 Options. (line 26) 50882 * mno-pid: RX Options. (line 117) 50883 * mno-plt: MIPS Options. (line 182) 50884 * mno-popc: SPARC Options. (line 231) 50885 * mno-popcntb: RS/6000 and PowerPC Options. 50886 (line 27) 50887 * mno-popcntd: RS/6000 and PowerPC Options. 50888 (line 27) 50889 * mno-postinc: Adapteva Epiphany Options. 50890 (line 110) 50891 * mno-postmodify: Adapteva Epiphany Options. 50892 (line 110) 50893 * mno-power8-fusion: RS/6000 and PowerPC Options. 50894 (line 234) 50895 * mno-power8-vector: RS/6000 and PowerPC Options. 50896 (line 240) 50897 * mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 50898 (line 27) 50899 * mno-powerpc-gpopt: RS/6000 and PowerPC Options. 50900 (line 27) 50901 * mno-powerpc64: RS/6000 and PowerPC Options. 50902 (line 27) 50903 * mno-prolog-function: V850 Options. (line 23) 50904 * mno-prologue-epilogue: CRIS Options. (line 71) 50905 * mno-prototype: RS/6000 and PowerPC Options. 50906 (line 645) 50907 * mno-push-args: i386 and x86-64 Options. 50908 (line 737) 50909 * mno-quad-memory: RS/6000 and PowerPC Options. 50910 (line 247) 50911 * mno-quad-memory-atomic: RS/6000 and PowerPC Options. 50912 (line 253) 50913 * mno-red-zone: i386 and x86-64 Options. 50914 (line 854) 50915 * mno-register-names: IA-64 Options. (line 37) 50916 * mno-regnames: RS/6000 and PowerPC Options. 50917 (line 751) 50918 * mno-relax: V850 Options. (line 103) 50919 * mno-relax-immediate: MCore Options. (line 19) 50920 * mno-relocatable: RS/6000 and PowerPC Options. 50921 (line 471) 50922 * mno-relocatable-lib: RS/6000 and PowerPC Options. 50923 (line 482) 50924 * mno-round-nearest: Adapteva Epiphany Options. 50925 (line 51) 50926 * mno-rtd: M680x0 Options. (line 262) 50927 * mno-scc: FRV Options. (line 146) 50928 * mno-sched-ar-data-spec: IA-64 Options. (line 134) 50929 * mno-sched-ar-in-data-spec: IA-64 Options. (line 155) 50930 * mno-sched-br-data-spec: IA-64 Options. (line 128) 50931 * mno-sched-br-in-data-spec: IA-64 Options. (line 148) 50932 * mno-sched-control-spec: IA-64 Options. (line 140) 50933 * mno-sched-count-spec-in-critical-path: IA-64 Options. (line 182) 50934 * mno-sched-in-control-spec: IA-64 Options. (line 162) 50935 * mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 50936 * mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 50937 * mno-sched-prolog: ARM Options. (line 33) 50938 * mno-sdata <1>: RS/6000 and PowerPC Options. 50939 (line 732) 50940 * mno-sdata: IA-64 Options. (line 42) 50941 * mno-sep-data: Blackfin Options. (line 116) 50942 * mno-serialize-volatile: Xtensa Options. (line 35) 50943 * mno-short: M680x0 Options. (line 226) 50944 * mno-side-effects: CRIS Options. (line 46) 50945 * mno-sim: RX Options. (line 71) 50946 * mno-single-exit: MMIX Options. (line 66) 50947 * mno-slow-bytes: MCore Options. (line 35) 50948 * mno-small-exec: S/390 and zSeries Options. 50949 (line 80) 50950 * mno-smartmips: MIPS Options. (line 280) 50951 * mno-soft-cmpsf: Adapteva Epiphany Options. 50952 (line 29) 50953 * mno-soft-float: DEC Alpha Options. (line 10) 50954 * mno-space-regs: HPPA Options. (line 44) 50955 * mno-spe: RS/6000 and PowerPC Options. 50956 (line 202) 50957 * mno-specld-anomaly: Blackfin Options. (line 56) 50958 * mno-split-addresses: MIPS Options. (line 426) 50959 * mno-sse: i386 and x86-64 Options. 50960 (line 571) 50961 * mno-stack-align: CRIS Options. (line 55) 50962 * mno-stack-bias: SPARC Options. (line 314) 50963 * mno-strict-align <1>: RS/6000 and PowerPC Options. 50964 (line 466) 50965 * mno-strict-align: M680x0 Options. (line 287) 50966 * mno-string: RS/6000 and PowerPC Options. 50967 (line 402) 50968 * mno-sum-in-toc: RS/6000 and PowerPC Options. 50969 (line 287) 50970 * mno-sym32: MIPS Options. (line 323) 50971 * mno-target-align: Xtensa Options. (line 59) 50972 * mno-text-section-literals: Xtensa Options. (line 47) 50973 * mno-tls-markers: RS/6000 and PowerPC Options. 50974 (line 790) 50975 * mno-toc: RS/6000 and PowerPC Options. 50976 (line 491) 50977 * mno-toplevel-symbols: MMIX Options. (line 40) 50978 * mno-tpf-trace: S/390 and zSeries Options. 50979 (line 131) 50980 * mno-unaligned-access: ARM Options. (line 313) 50981 * mno-unaligned-doubles: SPARC Options. (line 74) 50982 * mno-uninit-const-in-rodata: MIPS Options. (line 396) 50983 * mno-update: RS/6000 and PowerPC Options. 50984 (line 413) 50985 * mno-user-mode: SPARC Options. (line 86) 50986 * mno-v8plus: SPARC Options. (line 195) 50987 * mno-vect-double: Adapteva Epiphany Options. 50988 (line 116) 50989 * mno-vis: SPARC Options. (line 202) 50990 * mno-vis2: SPARC Options. (line 208) 50991 * mno-vis3: SPARC Options. (line 216) 50992 * mno-vliw-branch: FRV Options. (line 170) 50993 * mno-volatile-asm-stop: IA-64 Options. (line 32) 50994 * mno-vrsave: RS/6000 and PowerPC Options. 50995 (line 172) 50996 * mno-vsx: RS/6000 and PowerPC Options. 50997 (line 216) 50998 * mno-warn-multiple-fast-interrupts: RX Options. (line 143) 50999 * mno-wide-bitfields: MCore Options. (line 23) 51000 * mno-xgot <1>: MIPS Options. (line 192) 51001 * mno-xgot: M680x0 Options. (line 319) 51002 * mno-xl-compat: RS/6000 and PowerPC Options. 51003 (line 322) 51004 * mno-zdcbranch: SH Options. (line 403) 51005 * mno-zero-extend: MMIX Options. (line 27) 51006 * mnobitfield: M680x0 Options. (line 231) 51007 * mnoieee: SH Options. (line 116) 51008 * mnoliw: MN10300 Options. (line 59) 51009 * mnomacsave: SH Options. (line 111) 51010 * mnop-fun-dllimport: i386 and x86-64 Windows Options. 51011 (line 22) 51012 * mnops: Adapteva Epiphany Options. 51013 (line 26) 51014 * mnosetlb: MN10300 Options. (line 69) 51015 * mnosplit-lohi: Adapteva Epiphany Options. 51016 (line 110) 51017 * momit-leaf-frame-pointer <1>: i386 and x86-64 Options. 51018 (line 794) 51019 * momit-leaf-frame-pointer <2>: Blackfin Options. (line 44) 51020 * momit-leaf-frame-pointer: AArch64 Options. (line 43) 51021 * mone-byte-bool: Darwin Options. (line 90) 51022 * moptimize-membar: FRV Options. (line 201) 51023 * MP: Preprocessor Options. 51024 (line 239) 51025 * mpa-risc-1-0: HPPA Options. (line 19) 51026 * mpa-risc-1-1: HPPA Options. (line 19) 51027 * mpa-risc-2-0: HPPA Options. (line 19) 51028 * mpack: FRV Options. (line 119) 51029 * mpacked-stack: S/390 and zSeries Options. 51030 (line 54) 51031 * mpadstruct: SH Options. (line 140) 51032 * mpaired: RS/6000 and PowerPC Options. 51033 (line 207) 51034 * mpaired-single: MIPS Options. (line 284) 51035 * mpc32: i386 and x86-64 Options. 51036 (line 441) 51037 * mpc64: i386 and x86-64 Options. 51038 (line 441) 51039 * mpc80: i386 and x86-64 Options. 51040 (line 441) 51041 * mpcrel: M680x0 Options. (line 279) 51042 * mpdebug: CRIS Options. (line 35) 51043 * mpe: RS/6000 and PowerPC Options. 51044 (line 342) 51045 * mpe-aligned-commons: i386 and x86-64 Windows Options. 51046 (line 59) 51047 * mpic-register: ARM Options. (line 219) 51048 * mpid: RX Options. (line 117) 51049 * mplt: MIPS Options. (line 182) 51050 * mpointers-to-nested-functions: RS/6000 and PowerPC Options. 51051 (line 874) 51052 * mpoke-function-name: ARM Options. (line 226) 51053 * mpopc: SPARC Options. (line 231) 51054 * mpopcntb: RS/6000 and PowerPC Options. 51055 (line 27) 51056 * mpopcntd: RS/6000 and PowerPC Options. 51057 (line 27) 51058 * mportable-runtime: HPPA Options. (line 70) 51059 * mpower8-fusion: RS/6000 and PowerPC Options. 51060 (line 234) 51061 * mpower8-vector: RS/6000 and PowerPC Options. 51062 (line 240) 51063 * mpowerpc-gfxopt: RS/6000 and PowerPC Options. 51064 (line 27) 51065 * mpowerpc-gpopt: RS/6000 and PowerPC Options. 51066 (line 27) 51067 * mpowerpc64: RS/6000 and PowerPC Options. 51068 (line 27) 51069 * mprefer-avx128: i386 and x86-64 Options. 51070 (line 614) 51071 * mprefer-short-insn-regs: Adapteva Epiphany Options. 51072 (line 13) 51073 * mprefergot: SH Options. (line 225) 51074 * mpreferred-stack-boundary: i386 and x86-64 Options. 51075 (line 471) 51076 * mpretend-cmove: SH Options. (line 446) 51077 * mprioritize-restricted-insns: RS/6000 and PowerPC Options. 51078 (line 520) 51079 * mprolog-function: V850 Options. (line 23) 51080 * mprologue-epilogue: CRIS Options. (line 71) 51081 * mprototype: RS/6000 and PowerPC Options. 51082 (line 645) 51083 * mpt-fixed: SH Options. (line 364) 51084 * mpush-args: i386 and x86-64 Options. 51085 (line 737) 51086 * MQ: Preprocessor Options. 51087 (line 265) 51088 * mquad-memory: RS/6000 and PowerPC Options. 51089 (line 247) 51090 * mquad-memory-atomic: RS/6000 and PowerPC Options. 51091 (line 253) 51092 * mr10k-cache-barrier: MIPS Options. (line 564) 51093 * mrecip <1>: RS/6000 and PowerPC Options. 51094 (line 802) 51095 * mrecip: i386 and x86-64 Options. 51096 (line 647) 51097 * mrecip-precision: RS/6000 and PowerPC Options. 51098 (line 838) 51099 * mrecip=opt <1>: RS/6000 and PowerPC Options. 51100 (line 815) 51101 * mrecip=opt: i386 and x86-64 Options. 51102 (line 669) 51103 * mregister-names: IA-64 Options. (line 37) 51104 * mregnames: RS/6000 and PowerPC Options. 51105 (line 751) 51106 * mregparm: i386 and x86-64 Options. 51107 (line 408) 51108 * mrelax <1>: V850 Options. (line 103) 51109 * mrelax <2>: SH Options. (line 85) 51110 * mrelax <3>: RX Options. (line 95) 51111 * mrelax <4>: MN10300 Options. (line 46) 51112 * mrelax <5>: H8/300 Options. (line 9) 51113 * mrelax: AVR Options. (line 169) 51114 * mrelax-immediate: MCore Options. (line 19) 51115 * mrelax-pic-calls: MIPS Options. (line 689) 51116 * mrelocatable: RS/6000 and PowerPC Options. 51117 (line 471) 51118 * mrelocatable-lib: RS/6000 and PowerPC Options. 51119 (line 482) 51120 * mrepeat: MeP Options. (line 96) 51121 * mreturn-pointer-on-d0: MN10300 Options. (line 36) 51122 * mrh850-abi: V850 Options. (line 127) 51123 * mrtd <1>: Function Attributes. 51124 (line 177) 51125 * mrtd <2>: M680x0 Options. (line 240) 51126 * mrtd: i386 and x86-64 Options. 51127 (line 384) 51128 * mrtp: VxWorks Options. (line 11) 51129 * ms <1>: MeP Options. (line 100) 51130 * ms: H8/300 Options. (line 17) 51131 * ms2600: H8/300 Options. (line 24) 51132 * msafe-dma: SPU Options. (line 17) 51133 * msafe-hints: SPU Options. (line 107) 51134 * msahf: i386 and x86-64 Options. 51135 (line 627) 51136 * msatur: MeP Options. (line 105) 51137 * msave-acc-in-interrupts: RX Options. (line 109) 51138 * msave-toc-indirect: RS/6000 and PowerPC Options. 51139 (line 886) 51140 * mscc: FRV Options. (line 140) 51141 * msched-ar-data-spec: IA-64 Options. (line 134) 51142 * msched-ar-in-data-spec: IA-64 Options. (line 155) 51143 * msched-br-data-spec: IA-64 Options. (line 128) 51144 * msched-br-in-data-spec: IA-64 Options. (line 148) 51145 * msched-control-spec: IA-64 Options. (line 140) 51146 * msched-costly-dep: RS/6000 and PowerPC Options. 51147 (line 527) 51148 * msched-count-spec-in-critical-path: IA-64 Options. (line 182) 51149 * msched-fp-mem-deps-zero-cost: IA-64 Options. (line 198) 51150 * msched-in-control-spec: IA-64 Options. (line 162) 51151 * msched-max-memory-insns: IA-64 Options. (line 207) 51152 * msched-max-memory-insns-hard-limit: IA-64 Options. (line 213) 51153 * msched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 51154 * msched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 51155 * msched-spec-ldc: IA-64 Options. (line 187) 51156 * msched-stop-bits-after-every-cycle: IA-64 Options. (line 194) 51157 * mschedule: HPPA Options. (line 77) 51158 * mscore5: Score Options. (line 25) 51159 * mscore5u: Score Options. (line 28) 51160 * mscore7: Score Options. (line 31) 51161 * mscore7d: Score Options. (line 34) 51162 * msda: V850 Options. (line 40) 51163 * msdata <1>: RS/6000 and PowerPC Options. 51164 (line 719) 51165 * msdata: IA-64 Options. (line 42) 51166 * msdata=all: C6X Options. (line 30) 51167 * msdata=data: RS/6000 and PowerPC Options. 51168 (line 724) 51169 * msdata=default <1>: RS/6000 and PowerPC Options. 51170 (line 719) 51171 * msdata=default: C6X Options. (line 22) 51172 * msdata=eabi: RS/6000 and PowerPC Options. 51173 (line 699) 51174 * msdata=none <1>: RS/6000 and PowerPC Options. 51175 (line 732) 51176 * msdata=none <2>: M32R/D Options. (line 40) 51177 * msdata=none: C6X Options. (line 35) 51178 * msdata=sdata: M32R/D Options. (line 49) 51179 * msdata=sysv: RS/6000 and PowerPC Options. 51180 (line 710) 51181 * msdata=use: M32R/D Options. (line 53) 51182 * msdram <1>: MeP Options. (line 110) 51183 * msdram: Blackfin Options. (line 172) 51184 * msecure-plt: RS/6000 and PowerPC Options. 51185 (line 182) 51186 * msel-sched-dont-check-control-spec: IA-64 Options. (line 203) 51187 * msep-data: Blackfin Options. (line 110) 51188 * mserialize-volatile: Xtensa Options. (line 35) 51189 * msetlb: MN10300 Options. (line 64) 51190 * mshared-library-id: Blackfin Options. (line 103) 51191 * mshort: M680x0 Options. (line 220) 51192 * msign-extend-enabled: LM32 Options. (line 18) 51193 * msim <1>: Xstormy16 Options. (line 9) 51194 * msim <2>: RX Options. (line 71) 51195 * msim <3>: RS/6000 and PowerPC Options. 51196 (line 655) 51197 * msim <4>: RL78 Options. (line 7) 51198 * msim <5>: MeP Options. (line 114) 51199 * msim <6>: M32C Options. (line 13) 51200 * msim <7>: CR16 Options. (line 18) 51201 * msim <8>: C6X Options. (line 19) 51202 * msim: Blackfin Options. (line 37) 51203 * msimnovec: MeP Options. (line 117) 51204 * msimple-fpu: RS/6000 and PowerPC Options. 51205 (line 375) 51206 * msingle-exit: MMIX Options. (line 66) 51207 * msingle-float <1>: RS/6000 and PowerPC Options. 51208 (line 371) 51209 * msingle-float: MIPS Options. (line 244) 51210 * msingle-pic-base <1>: RS/6000 and PowerPC Options. 51211 (line 514) 51212 * msingle-pic-base: ARM Options. (line 213) 51213 * msio: HPPA Options. (line 104) 51214 * mslow-bytes: MCore Options. (line 35) 51215 * msmall-data: DEC Alpha Options. (line 187) 51216 * msmall-data-limit: RX Options. (line 47) 51217 * msmall-divides: MicroBlaze Options. (line 39) 51218 * msmall-exec: S/390 and zSeries Options. 51219 (line 80) 51220 * msmall-mem: SPU Options. (line 35) 51221 * msmall-model: FR30 Options. (line 9) 51222 * msmall-text: DEC Alpha Options. (line 205) 51223 * msmall16: Adapteva Epiphany Options. 51224 (line 67) 51225 * msmartmips: MIPS Options. (line 280) 51226 * msoft-float <1>: V850 Options. (line 113) 51227 * msoft-float <2>: SPARC Options. (line 40) 51228 * msoft-float <3>: S/390 and zSeries Options. 51229 (line 11) 51230 * msoft-float <4>: RS/6000 and PowerPC Options. 51231 (line 365) 51232 * msoft-float <5>: PDP-11 Options. (line 13) 51233 * msoft-float <6>: MIPS Options. (line 230) 51234 * msoft-float <7>: MicroBlaze Options. (line 7) 51235 * msoft-float <8>: M680x0 Options. (line 203) 51236 * msoft-float <9>: i386 and x86-64 Options. 51237 (line 292) 51238 * msoft-float <10>: HPPA Options. (line 90) 51239 * msoft-float <11>: FRV Options. (line 22) 51240 * msoft-float: DEC Alpha Options. (line 10) 51241 * msoft-quad-float: SPARC Options. (line 60) 51242 * msp8: AVR Options. (line 183) 51243 * mspace <1>: V850 Options. (line 30) 51244 * mspace: SH Options. (line 222) 51245 * mspe: RS/6000 and PowerPC Options. 51246 (line 202) 51247 * mspecld-anomaly: Blackfin Options. (line 51) 51248 * msplit-addresses: MIPS Options. (line 426) 51249 * msplit-vecmove-early: Adapteva Epiphany Options. 51250 (line 127) 51251 * msse: i386 and x86-64 Options. 51252 (line 571) 51253 * msse2avx: i386 and x86-64 Options. 51254 (line 812) 51255 * msseregparm: i386 and x86-64 Options. 51256 (line 419) 51257 * mstack-align: CRIS Options. (line 55) 51258 * mstack-bias: SPARC Options. (line 314) 51259 * mstack-check-l1: Blackfin Options. (line 77) 51260 * mstack-guard: S/390 and zSeries Options. 51261 (line 156) 51262 * mstack-increment: MCore Options. (line 50) 51263 * mstack-offset: Adapteva Epiphany Options. 51264 (line 37) 51265 * mstack-size: S/390 and zSeries Options. 51266 (line 156) 51267 * mstackrealign: i386 and x86-64 Options. 51268 (line 462) 51269 * mstdmain: SPU Options. (line 40) 51270 * mstrict-align <1>: RS/6000 and PowerPC Options. 51271 (line 466) 51272 * mstrict-align <2>: M680x0 Options. (line 287) 51273 * mstrict-align: AArch64 Options. (line 38) 51274 * mstrict-X: AVR Options. (line 196) 51275 * mstring: RS/6000 and PowerPC Options. 51276 (line 402) 51277 * mstringop-strategy=ALG: i386 and x86-64 Options. 51278 (line 776) 51279 * mstructure-size-boundary: ARM Options. (line 170) 51280 * msvr4-struct-return: RS/6000 and PowerPC Options. 51281 (line 607) 51282 * msym32: MIPS Options. (line 323) 51283 * msynci: MIPS Options. (line 674) 51284 * MT: Preprocessor Options. 51285 (line 251) 51286 * mtarget-align: Xtensa Options. (line 59) 51287 * mtas: SH Options. (line 213) 51288 * mtda: V850 Options. (line 34) 51289 * mtext-section-literals: Xtensa Options. (line 47) 51290 * mtf: MeP Options. (line 121) 51291 * mthread: i386 and x86-64 Windows Options. 51292 (line 26) 51293 * mthreads: i386 and x86-64 Options. 51294 (line 752) 51295 * mthumb: ARM Options. (line 248) 51296 * mthumb-interwork: ARM Options. (line 25) 51297 * mtiny-stack: AVR Options. (line 210) 51298 * mtiny=: MeP Options. (line 125) 51299 * mtls: FRV Options. (line 75) 51300 * mTLS: FRV Options. (line 72) 51301 * mtls-dialect <1>: i386 and x86-64 Options. 51302 (line 730) 51303 * mtls-dialect: ARM Options. (line 289) 51304 * mtls-dialect=desc: AArch64 Options. (line 47) 51305 * mtls-dialect=traditional: AArch64 Options. (line 51) 51306 * mtls-direct-seg-refs: i386 and x86-64 Options. 51307 (line 802) 51308 * mtls-markers: RS/6000 and PowerPC Options. 51309 (line 790) 51310 * mtls-size: IA-64 Options. (line 112) 51311 * mtoc: RS/6000 and PowerPC Options. 51312 (line 491) 51313 * mtomcat-stats: FRV Options. (line 209) 51314 * mtoplevel-symbols: MMIX Options. (line 40) 51315 * mtp: ARM Options. (line 281) 51316 * mtpcs-frame: ARM Options. (line 254) 51317 * mtpcs-leaf-frame: ARM Options. (line 260) 51318 * mtpf-trace: S/390 and zSeries Options. 51319 (line 131) 51320 * mtrap-precision: DEC Alpha Options. (line 109) 51321 * mtune <1>: SPARC Options. (line 181) 51322 * mtune <2>: S/390 and zSeries Options. 51323 (line 124) 51324 * mtune <3>: RS/6000 and PowerPC Options. 51325 (line 112) 51326 * mtune <4>: MN10300 Options. (line 30) 51327 * mtune <5>: MIPS Options. (line 63) 51328 * mtune <6>: M680x0 Options. (line 70) 51329 * mtune <7>: IA-64 Options. (line 116) 51330 * mtune <8>: i386 and x86-64 Options. 51331 (line 195) 51332 * mtune <9>: DEC Alpha Options. (line 259) 51333 * mtune <10>: CRIS Options. (line 16) 51334 * mtune <11>: ARM Options. (line 90) 51335 * mtune: AArch64 Options. (line 82) 51336 * muclibc: GNU/Linux Options. (line 13) 51337 * muls: Score Options. (line 18) 51338 * multcost=NUMBER: SH Options. (line 235) 51339 * multi_module: Darwin Options. (line 196) 51340 * multilib-library-pic: FRV Options. (line 89) 51341 * multiply-enabled: LM32 Options. (line 15) 51342 * multiply_defined: Darwin Options. (line 196) 51343 * multiply_defined_unused: Darwin Options. (line 196) 51344 * munaligned-access: ARM Options. (line 313) 51345 * munaligned-doubles: SPARC Options. (line 74) 51346 * municode: i386 and x86-64 Windows Options. 51347 (line 30) 51348 * muninit-const-in-rodata: MIPS Options. (line 396) 51349 * munix: VAX Options. (line 9) 51350 * munix-asm: PDP-11 Options. (line 68) 51351 * munsafe-dma: SPU Options. (line 17) 51352 * mupdate: RS/6000 and PowerPC Options. 51353 (line 413) 51354 * muser-enabled: LM32 Options. (line 21) 51355 * muser-mode: SPARC Options. (line 86) 51356 * musermode: SH Options. (line 230) 51357 * mv850: V850 Options. (line 49) 51358 * mv850e: V850 Options. (line 79) 51359 * mv850e1: V850 Options. (line 70) 51360 * mv850e2: V850 Options. (line 66) 51361 * mv850e2v3: V850 Options. (line 61) 51362 * mv850e2v4: V850 Options. (line 57) 51363 * mv850e3v5: V850 Options. (line 52) 51364 * mv850es: V850 Options. (line 75) 51365 * mv8plus: SPARC Options. (line 195) 51366 * mveclibabi <1>: RS/6000 and PowerPC Options. 51367 (line 847) 51368 * mveclibabi: i386 and x86-64 Options. 51369 (line 698) 51370 * mvect8-ret-in-mem: i386 and x86-64 Options. 51371 (line 429) 51372 * mvis: SPARC Options. (line 202) 51373 * mvis2: SPARC Options. (line 208) 51374 * mvis3: SPARC Options. (line 216) 51375 * mvliw-branch: FRV Options. (line 164) 51376 * mvms-return-codes: VMS Options. (line 9) 51377 * mvolatile-asm-stop: IA-64 Options. (line 32) 51378 * mvr4130-align: MIPS Options. (line 663) 51379 * mvrsave: RS/6000 and PowerPC Options. 51380 (line 172) 51381 * mvsx: RS/6000 and PowerPC Options. 51382 (line 216) 51383 * mvxworks: RS/6000 and PowerPC Options. 51384 (line 676) 51385 * mvzeroupper: i386 and x86-64 Options. 51386 (line 608) 51387 * mwarn-cell-microcode: RS/6000 and PowerPC Options. 51388 (line 178) 51389 * mwarn-dynamicstack: S/390 and zSeries Options. 51390 (line 150) 51391 * mwarn-framesize: S/390 and zSeries Options. 51392 (line 142) 51393 * mwarn-multiple-fast-interrupts: RX Options. (line 143) 51394 * mwarn-reloc: SPU Options. (line 10) 51395 * mwide-bitfields: MCore Options. (line 23) 51396 * mwin32: i386 and x86-64 Windows Options. 51397 (line 35) 51398 * mwindows: i386 and x86-64 Windows Options. 51399 (line 41) 51400 * mword-relocations: ARM Options. (line 300) 51401 * mwords-little-endian: ARM Options. (line 66) 51402 * mx32: i386 and x86-64 Options. 51403 (line 841) 51404 * mxgot <1>: MIPS Options. (line 192) 51405 * mxgot: M680x0 Options. (line 319) 51406 * mxilinx-fpu: RS/6000 and PowerPC Options. 51407 (line 386) 51408 * mxl-barrel-shift: MicroBlaze Options. (line 33) 51409 * mxl-compat: RS/6000 and PowerPC Options. 51410 (line 322) 51411 * mxl-float-convert: MicroBlaze Options. (line 51) 51412 * mxl-float-sqrt: MicroBlaze Options. (line 54) 51413 * mxl-gp-opt: MicroBlaze Options. (line 45) 51414 * mxl-multiply-high: MicroBlaze Options. (line 48) 51415 * mxl-pattern-compare: MicroBlaze Options. (line 36) 51416 * mxl-reorder: MicroBlaze Options. (line 63) 51417 * mxl-soft-div: MicroBlaze Options. (line 30) 51418 * mxl-soft-mul: MicroBlaze Options. (line 27) 51419 * mxl-stack-check: MicroBlaze Options. (line 42) 51420 * myellowknife: RS/6000 and PowerPC Options. 51421 (line 671) 51422 * mzarch: S/390 and zSeries Options. 51423 (line 95) 51424 * mzda: V850 Options. (line 45) 51425 * mzdcbranch: SH Options. (line 403) 51426 * mzero-extend: MMIX Options. (line 27) 51427 * no-canonical-prefixes: Overall Options. (line 334) 51428 * no-integrated-cpp: Preprocessor Options. 51429 (line 34) 51430 * no-sysroot-suffix: Directory Options. (line 112) 51431 * no_dead_strip_inits_and_terms: Darwin Options. (line 196) 51432 * noall_load: Darwin Options. (line 196) 51433 * nocpp: MIPS Options. (line 494) 51434 * nodefaultlibs: Link Options. (line 62) 51435 * nofixprebinding: Darwin Options. (line 196) 51436 * nofpu: RX Options. (line 17) 51437 * nolibdld: HPPA Options. (line 187) 51438 * nomultidefs: Darwin Options. (line 196) 51439 * non-static: VxWorks Options. (line 16) 51440 * noprebind: Darwin Options. (line 196) 51441 * noseglinkedit: Darwin Options. (line 196) 51442 * nostartfiles: Link Options. (line 57) 51443 * nostdinc: Preprocessor Options. 51444 (line 399) 51445 * nostdinc++ <1>: Preprocessor Options. 51446 (line 404) 51447 * nostdinc++: C++ Dialect Options. 51448 (line 348) 51449 * nostdlib: Link Options. (line 74) 51450 * o: Preprocessor Options. 51451 (line 87) 51452 * O: Optimize Options. (line 39) 51453 * o: Overall Options. (line 192) 51454 * O0: Optimize Options. (line 128) 51455 * O1: Optimize Options. (line 39) 51456 * O2: Optimize Options. (line 83) 51457 * O3: Optimize Options. (line 121) 51458 * Ofast: Optimize Options. (line 142) 51459 * Og: Optimize Options. (line 149) 51460 * Os: Optimize Options. (line 132) 51461 * P: Preprocessor Options. 51462 (line 649) 51463 * p: Debugging Options. (line 328) 51464 * pagezero_size: Darwin Options. (line 196) 51465 * param: Optimize Options. (line 2240) 51466 * pass-exit-codes: Overall Options. (line 150) 51467 * pedantic <1>: Warnings and Errors. 51468 (line 25) 51469 * pedantic <2>: Alternate Keywords. (line 30) 51470 * pedantic <3>: C Extensions. (line 6) 51471 * pedantic <4>: Preprocessor Options. 51472 (line 175) 51473 * pedantic <5>: Warning Options. (line 73) 51474 * pedantic: Standards. (line 16) 51475 * pedantic-errors <1>: Warnings and Errors. 51476 (line 25) 51477 * pedantic-errors <2>: Non-bugs. (line 216) 51478 * pedantic-errors <3>: Preprocessor Options. 51479 (line 180) 51480 * pedantic-errors <4>: Warning Options. (line 115) 51481 * pedantic-errors: Standards. (line 16) 51482 * pg: Debugging Options. (line 334) 51483 * pie: Link Options. (line 99) 51484 * pipe: Overall Options. (line 215) 51485 * prebind: Darwin Options. (line 196) 51486 * prebind_all_twolevel_modules: Darwin Options. (line 196) 51487 * print-file-name: Debugging Options. (line 1313) 51488 * print-libgcc-file-name: Debugging Options. (line 1347) 51489 * print-multi-directory: Debugging Options. (line 1319) 51490 * print-multi-lib: Debugging Options. (line 1324) 51491 * print-multi-os-directory: Debugging Options. (line 1331) 51492 * print-multiarch: Debugging Options. (line 1340) 51493 * print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 51494 (line 203) 51495 * print-prog-name: Debugging Options. (line 1344) 51496 * print-search-dirs: Debugging Options. (line 1355) 51497 * print-sysroot: Debugging Options. (line 1368) 51498 * print-sysroot-headers-suffix: Debugging Options. (line 1375) 51499 * private_bundle: Darwin Options. (line 196) 51500 * pthread <1>: Solaris 2 Options. (line 31) 51501 * pthread: RS/6000 and PowerPC Options. 51502 (line 797) 51503 * pthreads: Solaris 2 Options. (line 25) 51504 * Q: Debugging Options. (line 340) 51505 * Qn: System V Options. (line 18) 51506 * Qy: System V Options. (line 14) 51507 * rdynamic: Link Options. (line 105) 51508 * read_only_relocs: Darwin Options. (line 196) 51509 * remap: Preprocessor Options. 51510 (line 697) 51511 * s: Link Options. (line 112) 51512 * S <1>: Link Options. (line 20) 51513 * S: Overall Options. (line 175) 51514 * save-temps: Debugging Options. (line 1222) 51515 * save-temps=obj: Debugging Options. (line 1248) 51516 * sectalign: Darwin Options. (line 196) 51517 * sectcreate: Darwin Options. (line 196) 51518 * sectobjectsymbols: Darwin Options. (line 196) 51519 * sectorder: Darwin Options. (line 196) 51520 * seg1addr: Darwin Options. (line 196) 51521 * seg_addr_table: Darwin Options. (line 196) 51522 * seg_addr_table_filename: Darwin Options. (line 196) 51523 * segaddr: Darwin Options. (line 196) 51524 * seglinkedit: Darwin Options. (line 196) 51525 * segprot: Darwin Options. (line 196) 51526 * segs_read_only_addr: Darwin Options. (line 196) 51527 * segs_read_write_addr: Darwin Options. (line 196) 51528 * shared: Link Options. (line 121) 51529 * shared-libgcc: Link Options. (line 129) 51530 * short-calls: Adapteva Epiphany Options. 51531 (line 61) 51532 * sim: CRIS Options. (line 95) 51533 * sim2: CRIS Options. (line 101) 51534 * single_module: Darwin Options. (line 196) 51535 * specs: Directory Options. (line 89) 51536 * static <1>: HPPA Options. (line 191) 51537 * static <2>: Darwin Options. (line 196) 51538 * static: Link Options. (line 116) 51539 * static-libgcc: Link Options. (line 129) 51540 * std <1>: Non-bugs. (line 107) 51541 * std <2>: Other Builtins. (line 22) 51542 * std <3>: C Dialect Options. (line 47) 51543 * std: Standards. (line 16) 51544 * std=: Preprocessor Options. 51545 (line 338) 51546 * sub_library: Darwin Options. (line 196) 51547 * sub_umbrella: Darwin Options. (line 196) 51548 * symbolic: Link Options. (line 193) 51549 * sysroot: Directory Options. (line 97) 51550 * T: Link Options. (line 199) 51551 * target-help <1>: Preprocessor Options. 51552 (line 702) 51553 * target-help: Overall Options. (line 230) 51554 * threads: HPPA Options. (line 204) 51555 * time: Debugging Options. (line 1263) 51556 * tno-android-cc: GNU/Linux Options. (line 31) 51557 * tno-android-ld: GNU/Linux Options. (line 35) 51558 * traditional <1>: Incompatibilities. (line 6) 51559 * traditional: C Dialect Options. (line 309) 51560 * traditional-cpp <1>: Preprocessor Options. 51561 (line 680) 51562 * traditional-cpp: C Dialect Options. (line 309) 51563 * trigraphs <1>: Preprocessor Options. 51564 (line 684) 51565 * trigraphs: C Dialect Options. (line 304) 51566 * twolevel_namespace: Darwin Options. (line 196) 51567 * u: Link Options. (line 231) 51568 * U: Preprocessor Options. 51569 (line 69) 51570 * umbrella: Darwin Options. (line 196) 51571 * undef: Preprocessor Options. 51572 (line 73) 51573 * undefined: Darwin Options. (line 196) 51574 * unexported_symbols_list: Darwin Options. (line 196) 51575 * v <1>: Preprocessor Options. 51576 (line 706) 51577 * v: Overall Options. (line 203) 51578 * version <1>: Preprocessor Options. 51579 (line 719) 51580 * version: Overall Options. (line 338) 51581 * W: Incompatibilities. (line 64) 51582 * w: Preprocessor Options. 51583 (line 171) 51584 * W: Warning Options. (line 168) 51585 * w: Warning Options. (line 25) 51586 * Wa: Assembler Options. (line 9) 51587 * Wabi: C++ Dialect Options. 51588 (line 362) 51589 * Waddr-space-convert: AVR Options. (line 213) 51590 * Waddress: Warning Options. (line 1177) 51591 * Waggregate-return: Warning Options. (line 1195) 51592 * Waggressive-loop-optimizations: Warning Options. (line 1200) 51593 * Wall <1>: Standard Libraries. (line 6) 51594 * Wall <2>: Preprocessor Options. 51595 (line 93) 51596 * Wall: Warning Options. (line 119) 51597 * Warray-bounds: Warning Options. (line 833) 51598 * Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 51599 (line 157) 51600 * Wattributes: Warning Options. (line 1205) 51601 * Wbad-function-cast: Warning Options. (line 1051) 51602 * Wbuiltin-macro-redefined: Warning Options. (line 1211) 51603 * Wcast-align: Warning Options. (line 1082) 51604 * Wcast-qual: Warning Options. (line 1066) 51605 * Wchar-subscripts: Warning Options. (line 207) 51606 * Wclobbered: Warning Options. (line 1102) 51607 * Wcomment <1>: Preprocessor Options. 51608 (line 101) 51609 * Wcomment: Warning Options. (line 212) 51610 * Wcomments: Preprocessor Options. 51611 (line 101) 51612 * Wconversion: Warning Options. (line 1106) 51613 * Wconversion-null: Warning Options. (line 1124) 51614 * Wctor-dtor-privacy: C++ Dialect Options. 51615 (line 472) 51616 * Wdeclaration-after-statement: Warning Options. (line 966) 51617 * Wdelete-non-virtual-dtor: C++ Dialect Options. 51618 (line 479) 51619 * Wdeprecated: Warning Options. (line 1326) 51620 * Wdeprecated-declarations: Warning Options. (line 1330) 51621 * Wdisabled-optimization: Warning Options. (line 1486) 51622 * Wdiv-by-zero: Warning Options. (line 838) 51623 * Wdouble-promotion: Warning Options. (line 236) 51624 * weak_reference_mismatches: Darwin Options. (line 196) 51625 * Weffc++: C++ Dialect Options. 51626 (line 558) 51627 * Wempty-body: Warning Options. (line 1135) 51628 * Wendif-labels <1>: Preprocessor Options. 51629 (line 148) 51630 * Wendif-labels: Warning Options. (line 976) 51631 * Wenum-compare: Warning Options. (line 1139) 51632 * Werror <1>: Preprocessor Options. 51633 (line 161) 51634 * Werror: Warning Options. (line 28) 51635 * Werror=: Warning Options. (line 31) 51636 * Wextra: Warning Options. (line 168) 51637 * Wfatal-errors: Warning Options. (line 48) 51638 * Wfloat-equal: Warning Options. (line 865) 51639 * Wformat <1>: Function Attributes. 51640 (line 419) 51641 * Wformat: Warning Options. (line 255) 51642 * Wformat-contains-nul: Warning Options. (line 292) 51643 * Wformat-extra-args: Warning Options. (line 296) 51644 * Wformat-nonliteral <1>: Function Attributes. 51645 (line 485) 51646 * Wformat-nonliteral: Warning Options. (line 320) 51647 * Wformat-security: Warning Options. (line 325) 51648 * Wformat-y2k: Warning Options. (line 337) 51649 * Wformat-zero-length: Warning Options. (line 310) 51650 * Wformat=: Warning Options. (line 255) 51651 * Wframe-larger-than: Warning Options. (line 990) 51652 * Wfree-nonheap-object: Warning Options. (line 999) 51653 * whatsloaded: Darwin Options. (line 196) 51654 * whyload: Darwin Options. (line 196) 51655 * Wignored-qualifiers: Warning Options. (line 377) 51656 * Wimplicit: Warning Options. (line 373) 51657 * Wimplicit-function-declaration: Warning Options. (line 367) 51658 * Wimplicit-int: Warning Options. (line 363) 51659 * Winherited-variadic-ctor: Warning Options. (line 1396) 51660 * Winit-self: Warning Options. (line 348) 51661 * Winline <1>: Inline. (line 63) 51662 * Winline: Warning Options. (line 1401) 51663 * Wint-to-pointer-cast: Warning Options. (line 1428) 51664 * Winvalid-offsetof: Warning Options. (line 1414) 51665 * Winvalid-pch: Warning Options. (line 1437) 51666 * Wjump-misses-init: Warning Options. (line 1145) 51667 * Wl: Link Options. (line 223) 51668 * Wlarger-than-LEN: Warning Options. (line 987) 51669 * Wlarger-than=LEN: Warning Options. (line 987) 51670 * Wliteral-suffix: C++ Dialect Options. 51671 (line 486) 51672 * Wlogical-op: Warning Options. (line 1190) 51673 * Wlong-long: Warning Options. (line 1441) 51674 * Wmain: Warning Options. (line 388) 51675 * Wmaybe-uninitialized: Warning Options. (line 648) 51676 * Wmissing-braces: Warning Options. (line 395) 51677 * Wmissing-declarations: Warning Options. (line 1250) 51678 * Wmissing-field-initializers: Warning Options. (line 1260) 51679 * Wmissing-format-attribute: Warning Options. (line 812) 51680 * Wmissing-include-dirs: Warning Options. (line 406) 51681 * Wmissing-parameter-type: Warning Options. (line 1232) 51682 * Wmissing-prototypes: Warning Options. (line 1240) 51683 * Wmultichar: Warning Options. (line 1278) 51684 * Wnarrowing: C++ Dialect Options. 51685 (line 507) 51686 * Wnested-externs: Warning Options. (line 1393) 51687 * Wno-abi: C++ Dialect Options. 51688 (line 362) 51689 * Wno-address: Warning Options. (line 1177) 51690 * Wno-aggregate-return: Warning Options. (line 1195) 51691 * Wno-aggressive-loop-optimizations: Warning Options. (line 1200) 51692 * Wno-all: Warning Options. (line 119) 51693 * Wno-array-bounds: Warning Options. (line 833) 51694 * Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 51695 (line 157) 51696 * Wno-attributes: Warning Options. (line 1205) 51697 * Wno-bad-function-cast: Warning Options. (line 1051) 51698 * Wno-builtin-macro-redefined: Warning Options. (line 1211) 51699 * Wno-cast-align: Warning Options. (line 1082) 51700 * Wno-cast-qual: Warning Options. (line 1066) 51701 * Wno-char-subscripts: Warning Options. (line 207) 51702 * Wno-clobbered: Warning Options. (line 1102) 51703 * Wno-comment: Warning Options. (line 212) 51704 * Wno-conversion: Warning Options. (line 1106) 51705 * Wno-conversion-null: Warning Options. (line 1124) 51706 * Wno-coverage-mismatch: Warning Options. (line 217) 51707 * Wno-ctor-dtor-privacy: C++ Dialect Options. 51708 (line 472) 51709 * Wno-declaration-after-statement: Warning Options. (line 966) 51710 * Wno-delete-non-virtual-dtor: C++ Dialect Options. 51711 (line 479) 51712 * Wno-deprecated: Warning Options. (line 1326) 51713 * Wno-deprecated-declarations: Warning Options. (line 1330) 51714 * Wno-disabled-optimization: Warning Options. (line 1486) 51715 * Wno-div-by-zero: Warning Options. (line 838) 51716 * Wno-double-promotion: Warning Options. (line 236) 51717 * Wno-effc++: C++ Dialect Options. 51718 (line 558) 51719 * Wno-empty-body: Warning Options. (line 1135) 51720 * Wno-endif-labels: Warning Options. (line 976) 51721 * Wno-enum-compare: Warning Options. (line 1139) 51722 * Wno-error: Warning Options. (line 28) 51723 * Wno-error=: Warning Options. (line 31) 51724 * Wno-extra: Warning Options. (line 168) 51725 * Wno-fatal-errors: Warning Options. (line 48) 51726 * Wno-float-equal: Warning Options. (line 865) 51727 * Wno-format: Warning Options. (line 255) 51728 * Wno-format-contains-nul: Warning Options. (line 292) 51729 * Wno-format-extra-args: Warning Options. (line 296) 51730 * Wno-format-nonliteral: Warning Options. (line 320) 51731 * Wno-format-security: Warning Options. (line 325) 51732 * Wno-format-y2k: Warning Options. (line 337) 51733 * Wno-format-zero-length: Warning Options. (line 310) 51734 * Wno-free-nonheap-object: Warning Options. (line 999) 51735 * Wno-ignored-qualifiers: Warning Options. (line 377) 51736 * Wno-implicit: Warning Options. (line 373) 51737 * Wno-implicit-function-declaration: Warning Options. (line 367) 51738 * Wno-implicit-int: Warning Options. (line 363) 51739 * Wno-inherited-variadic-ctor: Warning Options. (line 1396) 51740 * Wno-init-self: Warning Options. (line 348) 51741 * Wno-inline: Warning Options. (line 1401) 51742 * Wno-int-to-pointer-cast: Warning Options. (line 1428) 51743 * Wno-invalid-offsetof: Warning Options. (line 1414) 51744 * Wno-invalid-pch: Warning Options. (line 1437) 51745 * Wno-jump-misses-init: Warning Options. (line 1145) 51746 * Wno-literal-suffix: C++ Dialect Options. 51747 (line 486) 51748 * Wno-logical-op: Warning Options. (line 1190) 51749 * Wno-long-long: Warning Options. (line 1441) 51750 * Wno-main: Warning Options. (line 388) 51751 * Wno-maybe-uninitialized: Warning Options. (line 648) 51752 * Wno-missing-braces: Warning Options. (line 395) 51753 * Wno-missing-declarations: Warning Options. (line 1250) 51754 * Wno-missing-field-initializers: Warning Options. (line 1260) 51755 * Wno-missing-format-attribute: Warning Options. (line 812) 51756 * Wno-missing-include-dirs: Warning Options. (line 406) 51757 * Wno-missing-parameter-type: Warning Options. (line 1232) 51758 * Wno-missing-prototypes: Warning Options. (line 1240) 51759 * Wno-mudflap: Warning Options. (line 1506) 51760 * Wno-multichar: Warning Options. (line 1278) 51761 * Wno-narrowing: C++ Dialect Options. 51762 (line 507) 51763 * Wno-nested-externs: Warning Options. (line 1393) 51764 * Wno-noexcept: C++ Dialect Options. 51765 (line 520) 51766 * Wno-non-template-friend: C++ Dialect Options. 51767 (line 596) 51768 * Wno-non-virtual-dtor: C++ Dialect Options. 51769 (line 526) 51770 * Wno-nonnull: Warning Options. (line 341) 51771 * Wno-old-style-cast: C++ Dialect Options. 51772 (line 612) 51773 * Wno-old-style-declaration: Warning Options. (line 1222) 51774 * Wno-old-style-definition: Warning Options. (line 1228) 51775 * Wno-overflow: Warning Options. (line 1336) 51776 * Wno-overlength-strings: Warning Options. (line 1510) 51777 * Wno-overloaded-virtual: C++ Dialect Options. 51778 (line 618) 51779 * Wno-override-init: Warning Options. (line 1339) 51780 * Wno-packed: Warning Options. (line 1347) 51781 * Wno-packed-bitfield-compat: Warning Options. (line 1364) 51782 * Wno-padded: Warning Options. (line 1381) 51783 * Wno-parentheses: Warning Options. (line 409) 51784 * Wno-pedantic-ms-format: Warning Options. (line 1031) 51785 * Wno-pmf-conversions <1>: Bound member functions. 51786 (line 35) 51787 * Wno-pmf-conversions: C++ Dialect Options. 51788 (line 637) 51789 * Wno-pointer-arith: Warning Options. (line 1037) 51790 * Wno-pointer-sign: Warning Options. (line 1495) 51791 * Wno-pointer-to-int-cast: Warning Options. (line 1433) 51792 * Wno-pragmas: Warning Options. (line 698) 51793 * Wno-protocol: Objective-C and Objective-C++ Dialect Options. 51794 (line 161) 51795 * Wno-redundant-decls: Warning Options. (line 1388) 51796 * Wno-reorder: C++ Dialect Options. 51797 (line 533) 51798 * Wno-return-local-addr: Warning Options. (line 504) 51799 * Wno-return-type: Warning Options. (line 508) 51800 * Wno-selector: Objective-C and Objective-C++ Dialect Options. 51801 (line 171) 51802 * Wno-sequence-point: Warning Options. (line 458) 51803 * Wno-shadow: Warning Options. (line 980) 51804 * Wno-sign-compare: Warning Options. (line 1156) 51805 * Wno-sign-conversion: Warning Options. (line 1163) 51806 * Wno-sign-promo: C++ Dialect Options. 51807 (line 641) 51808 * Wno-sizeof-pointer-memaccess: Warning Options. (line 1169) 51809 * Wno-stack-protector: Warning Options. (line 1501) 51810 * Wno-strict-aliasing: Warning Options. (line 703) 51811 * Wno-strict-null-sentinel: C++ Dialect Options. 51812 (line 588) 51813 * Wno-strict-overflow: Warning Options. (line 743) 51814 * Wno-strict-prototypes: Warning Options. (line 1216) 51815 * Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 51816 (line 183) 51817 * Wno-suggest-attribute=: Warning Options. (line 793) 51818 * Wno-suggest-attribute=const: Warning Options. (line 799) 51819 * Wno-suggest-attribute=format: Warning Options. (line 812) 51820 * Wno-suggest-attribute=noreturn: Warning Options. (line 799) 51821 * Wno-suggest-attribute=pure: Warning Options. (line 799) 51822 * Wno-switch: Warning Options. (line 523) 51823 * Wno-switch-default: Warning Options. (line 531) 51824 * Wno-switch-enum: Warning Options. (line 534) 51825 * Wno-sync-nand: Warning Options. (line 543) 51826 * Wno-system-headers: Warning Options. (line 843) 51827 * Wno-traditional: Warning Options. (line 880) 51828 * Wno-traditional-conversion: Warning Options. (line 958) 51829 * Wno-trampolines: Warning Options. (line 854) 51830 * Wno-trigraphs: Warning Options. (line 548) 51831 * Wno-type-limits: Warning Options. (line 1044) 51832 * Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 51833 (line 191) 51834 * Wno-undef: Warning Options. (line 973) 51835 * Wno-uninitialized: Warning Options. (line 625) 51836 * Wno-unknown-pragmas: Warning Options. (line 691) 51837 * Wno-unsafe-loop-optimizations: Warning Options. (line 1025) 51838 * Wno-unused: Warning Options. (line 618) 51839 * Wno-unused-but-set-parameter: Warning Options. (line 553) 51840 * Wno-unused-but-set-variable: Warning Options. (line 562) 51841 * Wno-unused-function: Warning Options. (line 572) 51842 * Wno-unused-label: Warning Options. (line 577) 51843 * Wno-unused-parameter: Warning Options. (line 588) 51844 * Wno-unused-result: Warning Options. (line 595) 51845 * Wno-unused-value: Warning Options. (line 608) 51846 * Wno-unused-variable: Warning Options. (line 600) 51847 * Wno-useless-cast: Warning Options. (line 1132) 51848 * Wno-varargs: Warning Options. (line 1452) 51849 * Wno-variadic-macros: Warning Options. (line 1446) 51850 * Wno-vector-operation-performance: Warning Options. (line 1457) 51851 * Wno-virtual-move-assign: Warning Options. (line 1467) 51852 * Wno-vla: Warning Options. (line 1476) 51853 * Wno-volatile-register-var: Warning Options. (line 1480) 51854 * Wno-write-strings: Warning Options. (line 1088) 51855 * Wno-zero-as-null-pointer-constant: Warning Options. (line 1128) 51856 * Wnoexcept: C++ Dialect Options. 51857 (line 520) 51858 * Wnon-template-friend: C++ Dialect Options. 51859 (line 596) 51860 * Wnon-virtual-dtor: C++ Dialect Options. 51861 (line 526) 51862 * Wnonnull: Warning Options. (line 341) 51863 * Wnormalized=: Warning Options. (line 1284) 51864 * Wold-style-cast: C++ Dialect Options. 51865 (line 612) 51866 * Wold-style-declaration: Warning Options. (line 1222) 51867 * Wold-style-definition: Warning Options. (line 1228) 51868 * Woverflow: Warning Options. (line 1336) 51869 * Woverlength-strings: Warning Options. (line 1510) 51870 * Woverloaded-virtual: C++ Dialect Options. 51871 (line 618) 51872 * Woverride-init: Warning Options. (line 1339) 51873 * Wp: Preprocessor Options. 51874 (line 14) 51875 * Wpacked: Warning Options. (line 1347) 51876 * Wpacked-bitfield-compat: Warning Options. (line 1364) 51877 * Wpadded: Warning Options. (line 1381) 51878 * Wparentheses: Warning Options. (line 409) 51879 * Wpedantic: Warning Options. (line 73) 51880 * Wpedantic-ms-format: Warning Options. (line 1031) 51881 * Wpmf-conversions: C++ Dialect Options. 51882 (line 637) 51883 * Wpointer-arith <1>: Pointer Arith. (line 13) 51884 * Wpointer-arith: Warning Options. (line 1037) 51885 * Wpointer-sign: Warning Options. (line 1495) 51886 * Wpointer-to-int-cast: Warning Options. (line 1433) 51887 * Wpragmas: Warning Options. (line 698) 51888 * Wprotocol: Objective-C and Objective-C++ Dialect Options. 51889 (line 161) 51890 * wrapper: Overall Options. (line 341) 51891 * Wredundant-decls: Warning Options. (line 1388) 51892 * Wreorder: C++ Dialect Options. 51893 (line 533) 51894 * Wreturn-local-addr: Warning Options. (line 504) 51895 * Wreturn-type: Warning Options. (line 508) 51896 * Wselector: Objective-C and Objective-C++ Dialect Options. 51897 (line 171) 51898 * Wsequence-point: Warning Options. (line 458) 51899 * Wshadow: Warning Options. (line 980) 51900 * Wsign-compare: Warning Options. (line 1156) 51901 * Wsign-conversion: Warning Options. (line 1163) 51902 * Wsign-promo: C++ Dialect Options. 51903 (line 641) 51904 * Wsizeof-pointer-memaccess: Warning Options. (line 1169) 51905 * Wstack-protector: Warning Options. (line 1501) 51906 * Wstack-usage: Warning Options. (line 1003) 51907 * Wstrict-aliasing: Warning Options. (line 703) 51908 * Wstrict-aliasing=n: Warning Options. (line 711) 51909 * Wstrict-null-sentinel: C++ Dialect Options. 51910 (line 588) 51911 * Wstrict-overflow: Warning Options. (line 743) 51912 * Wstrict-prototypes: Warning Options. (line 1216) 51913 * Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 51914 (line 183) 51915 * Wsuggest-attribute=: Warning Options. (line 793) 51916 * Wsuggest-attribute=const: Warning Options. (line 799) 51917 * Wsuggest-attribute=format: Warning Options. (line 812) 51918 * Wsuggest-attribute=noreturn: Warning Options. (line 799) 51919 * Wsuggest-attribute=pure: Warning Options. (line 799) 51920 * Wswitch: Warning Options. (line 523) 51921 * Wswitch-default: Warning Options. (line 531) 51922 * Wswitch-enum: Warning Options. (line 534) 51923 * Wsync-nand: Warning Options. (line 543) 51924 * Wsystem-headers <1>: Preprocessor Options. 51925 (line 165) 51926 * Wsystem-headers: Warning Options. (line 843) 51927 * Wtraditional <1>: Preprocessor Options. 51928 (line 118) 51929 * Wtraditional: Warning Options. (line 880) 51930 * Wtraditional-conversion: Warning Options. (line 958) 51931 * Wtrampolines: Warning Options. (line 854) 51932 * Wtrigraphs <1>: Preprocessor Options. 51933 (line 106) 51934 * Wtrigraphs: Warning Options. (line 548) 51935 * Wtype-limits: Warning Options. (line 1044) 51936 * Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 51937 (line 191) 51938 * Wundef <1>: Preprocessor Options. 51939 (line 124) 51940 * Wundef: Warning Options. (line 973) 51941 * Wuninitialized: Warning Options. (line 625) 51942 * Wunknown-pragmas: Warning Options. (line 691) 51943 * Wunsafe-loop-optimizations: Warning Options. (line 1025) 51944 * Wunsuffixed-float-constants: Warning Options. (line 1525) 51945 * Wunused: Warning Options. (line 618) 51946 * Wunused-but-set-parameter: Warning Options. (line 553) 51947 * Wunused-but-set-variable: Warning Options. (line 562) 51948 * Wunused-function: Warning Options. (line 572) 51949 * Wunused-label: Warning Options. (line 577) 51950 * Wunused-local-typedefs: Warning Options. (line 584) 51951 * Wunused-macros: Preprocessor Options. 51952 (line 129) 51953 * Wunused-parameter: Warning Options. (line 588) 51954 * Wunused-result: Warning Options. (line 595) 51955 * Wunused-value: Warning Options. (line 608) 51956 * Wunused-variable: Warning Options. (line 600) 51957 * Wuseless-cast: Warning Options. (line 1132) 51958 * Wvarargs: Warning Options. (line 1452) 51959 * Wvariadic-macros: Warning Options. (line 1446) 51960 * Wvector-operation-performance: Warning Options. (line 1457) 51961 * Wvirtual-move-assign: Warning Options. (line 1467) 51962 * Wvla: Warning Options. (line 1476) 51963 * Wvolatile-register-var: Warning Options. (line 1480) 51964 * Wwrite-strings: Warning Options. (line 1088) 51965 * Wzero-as-null-pointer-constant: Warning Options. (line 1128) 51966 * x <1>: Preprocessor Options. 51967 (line 322) 51968 * x: Overall Options. (line 126) 51969 * Xassembler: Assembler Options. (line 13) 51970 * Xbind-lazy: VxWorks Options. (line 26) 51971 * Xbind-now: VxWorks Options. (line 30) 51972 * Xlinker: Link Options. (line 205) 51973 * Xpreprocessor: Preprocessor Options. 51974 (line 25) 51975 * Ym: System V Options. (line 26) 51976 * YP: System V Options. (line 22) 51977 51978 51979 File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 51980 51981 Keyword Index 51982 ************* 51983 51984 [index] 51985 * Menu: 51986 51987 * ! in constraint: Multi-Alternative. (line 33) 51988 * # in constraint: Modifiers. (line 57) 51989 * #pragma: Pragmas. (line 6) 51990 * #pragma implementation: C++ Interface. (line 39) 51991 * #pragma implementation, implied: C++ Interface. (line 46) 51992 * #pragma interface: C++ Interface. (line 20) 51993 * #pragma, reason for not using: Function Attributes. 51994 (line 1878) 51995 * $: Dollar Signs. (line 6) 51996 * % in constraint: Modifiers. (line 45) 51997 * %include: Spec Files. (line 27) 51998 * %include_noerr: Spec Files. (line 31) 51999 * %rename: Spec Files. (line 35) 52000 * & in constraint: Modifiers. (line 25) 52001 * ': Incompatibilities. (line 116) 52002 * * in constraint: Modifiers. (line 62) 52003 * *__builtin_assume_aligned: Other Builtins. (line 339) 52004 * + in constraint: Modifiers. (line 12) 52005 * -lgcc, use with -nodefaultlibs: Link Options. (line 85) 52006 * -lgcc, use with -nostdlib: Link Options. (line 85) 52007 * -march feature modifiers: AArch64 Options. (line 92) 52008 * -mcpu feature modifiers: AArch64 Options. (line 92) 52009 * -nodefaultlibs and unresolved references: Link Options. (line 85) 52010 * -nostdlib and unresolved references: Link Options. (line 85) 52011 * .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 52012 (line 743) 52013 * //: C++ Comments. (line 6) 52014 * 0 in constraint: Simple Constraints. (line 127) 52015 * < in constraint: Simple Constraints. (line 48) 52016 * = in constraint: Modifiers. (line 8) 52017 * > in constraint: Simple Constraints. (line 61) 52018 * ? in constraint: Multi-Alternative. (line 27) 52019 * ?: extensions: Conditionals. (line 6) 52020 * ?: side effect: Conditionals. (line 20) 52021 * _ in variables in macros: Typeof. (line 46) 52022 * __atomic_add_fetch: __atomic Builtins. (line 169) 52023 * __atomic_always_lock_free: __atomic Builtins. (line 247) 52024 * __atomic_and_fetch: __atomic Builtins. (line 173) 52025 * __atomic_clear: __atomic Builtins. (line 221) 52026 * __atomic_compare_exchange: __atomic Builtins. (line 161) 52027 * __atomic_compare_exchange_n: __atomic Builtins. (line 138) 52028 * __atomic_exchange: __atomic Builtins. (line 130) 52029 * __atomic_exchange_n: __atomic Builtins. (line 119) 52030 * __atomic_fetch_add: __atomic Builtins. (line 189) 52031 * __atomic_fetch_and: __atomic Builtins. (line 193) 52032 * __atomic_fetch_nand: __atomic Builtins. (line 199) 52033 * __atomic_fetch_or: __atomic Builtins. (line 197) 52034 * __atomic_fetch_sub: __atomic Builtins. (line 191) 52035 * __atomic_fetch_xor: __atomic Builtins. (line 195) 52036 * __atomic_is_lock_free: __atomic Builtins. (line 261) 52037 * __atomic_load: __atomic Builtins. (line 98) 52038 * __atomic_load_n: __atomic Builtins. (line 89) 52039 * __atomic_nand_fetch: __atomic Builtins. (line 179) 52040 * __atomic_or_fetch: __atomic Builtins. (line 177) 52041 * __atomic_signal_fence: __atomic Builtins. (line 239) 52042 * __atomic_store: __atomic Builtins. (line 113) 52043 * __atomic_store_n: __atomic Builtins. (line 104) 52044 * __atomic_sub_fetch: __atomic Builtins. (line 171) 52045 * __atomic_test_and_set: __atomic Builtins. (line 210) 52046 * __atomic_thread_fence: __atomic Builtins. (line 232) 52047 * __atomic_xor_fetch: __atomic Builtins. (line 175) 52048 * __builtin___clear_cache: Other Builtins. (line 372) 52049 * __builtin___fprintf_chk: Object Size Checking. 52050 (line 6) 52051 * __builtin___memcpy_chk: Object Size Checking. 52052 (line 6) 52053 * __builtin___memmove_chk: Object Size Checking. 52054 (line 6) 52055 * __builtin___mempcpy_chk: Object Size Checking. 52056 (line 6) 52057 * __builtin___memset_chk: Object Size Checking. 52058 (line 6) 52059 * __builtin___printf_chk: Object Size Checking. 52060 (line 6) 52061 * __builtin___snprintf_chk: Object Size Checking. 52062 (line 6) 52063 * __builtin___sprintf_chk: Object Size Checking. 52064 (line 6) 52065 * __builtin___stpcpy_chk: Object Size Checking. 52066 (line 6) 52067 * __builtin___strcat_chk: Object Size Checking. 52068 (line 6) 52069 * __builtin___strcpy_chk: Object Size Checking. 52070 (line 6) 52071 * __builtin___strncat_chk: Object Size Checking. 52072 (line 6) 52073 * __builtin___strncpy_chk: Object Size Checking. 52074 (line 6) 52075 * __builtin___vfprintf_chk: Object Size Checking. 52076 (line 6) 52077 * __builtin___vprintf_chk: Object Size Checking. 52078 (line 6) 52079 * __builtin___vsnprintf_chk: Object Size Checking. 52080 (line 6) 52081 * __builtin___vsprintf_chk: Object Size Checking. 52082 (line 6) 52083 * __builtin_apply: Constructing Calls. (line 31) 52084 * __builtin_apply_args: Constructing Calls. (line 20) 52085 * __builtin_bswap16: Other Builtins. (line 603) 52086 * __builtin_bswap32: Other Builtins. (line 607) 52087 * __builtin_bswap64: Other Builtins. (line 611) 52088 * __builtin_choose_expr: Other Builtins. (line 157) 52089 * __builtin_clrsb: Other Builtins. (line 532) 52090 * __builtin_clrsbl: Other Builtins. (line 555) 52091 * __builtin_clrsbll: Other Builtins. (line 578) 52092 * __builtin_clz: Other Builtins. (line 524) 52093 * __builtin_clzl: Other Builtins. (line 547) 52094 * __builtin_clzll: Other Builtins. (line 570) 52095 * __builtin_complex: Other Builtins. (line 197) 52096 * __builtin_constant_p: Other Builtins. (line 207) 52097 * __builtin_cpu_init: X86 Built-in Functions. 52098 (line 63) 52099 * __builtin_cpu_is: X86 Built-in Functions. 52100 (line 92) 52101 * __builtin_cpu_supports: X86 Built-in Functions. 52102 (line 161) 52103 * __builtin_ctz: Other Builtins. (line 528) 52104 * __builtin_ctzl: Other Builtins. (line 551) 52105 * __builtin_ctzll: Other Builtins. (line 574) 52106 * __builtin_expect: Other Builtins. (line 257) 52107 * __builtin_extract_return_addr: Return Address. (line 36) 52108 * __builtin_ffs: Other Builtins. (line 520) 52109 * __builtin_ffsl: Other Builtins. (line 543) 52110 * __builtin_ffsll: Other Builtins. (line 566) 52111 * __builtin_FILE: Other Builtins. (line 366) 52112 * __builtin_fpclassify: Other Builtins. (line 6) 52113 * __builtin_frame_address: Return Address. (line 49) 52114 * __builtin_frob_return_address: Return Address. (line 45) 52115 * __builtin_FUNCTION: Other Builtins. (line 361) 52116 * __builtin_huge_val: Other Builtins. (line 423) 52117 * __builtin_huge_valf: Other Builtins. (line 428) 52118 * __builtin_huge_vall: Other Builtins. (line 431) 52119 * __builtin_huge_valq: X86 Built-in Functions. 52120 (line 57) 52121 * __builtin_inf: Other Builtins. (line 446) 52122 * __builtin_infd128: Other Builtins. (line 456) 52123 * __builtin_infd32: Other Builtins. (line 450) 52124 * __builtin_infd64: Other Builtins. (line 453) 52125 * __builtin_inff: Other Builtins. (line 460) 52126 * __builtin_infl: Other Builtins. (line 465) 52127 * __builtin_infq: X86 Built-in Functions. 52128 (line 53) 52129 * __builtin_isfinite: Other Builtins. (line 6) 52130 * __builtin_isgreater: Other Builtins. (line 6) 52131 * __builtin_isgreaterequal: Other Builtins. (line 6) 52132 * __builtin_isinf_sign: Other Builtins. (line 6) 52133 * __builtin_isless: Other Builtins. (line 6) 52134 * __builtin_islessequal: Other Builtins. (line 6) 52135 * __builtin_islessgreater: Other Builtins. (line 6) 52136 * __builtin_isnormal: Other Builtins. (line 6) 52137 * __builtin_isunordered: Other Builtins. (line 6) 52138 * __builtin_LINE: Other Builtins. (line 356) 52139 * __builtin_nan: Other Builtins. (line 476) 52140 * __builtin_nand128: Other Builtins. (line 498) 52141 * __builtin_nand32: Other Builtins. (line 492) 52142 * __builtin_nand64: Other Builtins. (line 495) 52143 * __builtin_nanf: Other Builtins. (line 502) 52144 * __builtin_nanl: Other Builtins. (line 505) 52145 * __builtin_nans: Other Builtins. (line 509) 52146 * __builtin_nansf: Other Builtins. (line 513) 52147 * __builtin_nansl: Other Builtins. (line 516) 52148 * __builtin_non_tx_store: S/390 System z Built-in Functions. 52149 (line 104) 52150 * __builtin_object_size: Object Size Checking. 52151 (line 6) 52152 * __builtin_offsetof: Offsetof. (line 6) 52153 * __builtin_parity: Other Builtins. (line 540) 52154 * __builtin_parityl: Other Builtins. (line 562) 52155 * __builtin_parityll: Other Builtins. (line 586) 52156 * __builtin_popcount: Other Builtins. (line 537) 52157 * __builtin_popcountl: Other Builtins. (line 558) 52158 * __builtin_popcountll: Other Builtins. (line 582) 52159 * __builtin_powi: Other Builtins. (line 6) 52160 * __builtin_powif: Other Builtins. (line 6) 52161 * __builtin_powil: Other Builtins. (line 6) 52162 * __builtin_prefetch: Other Builtins. (line 384) 52163 * __builtin_return: Constructing Calls. (line 48) 52164 * __builtin_return_address: Return Address. (line 11) 52165 * __builtin_rx_brk: RX Built-in Functions. 52166 (line 11) 52167 * __builtin_rx_clrpsw: RX Built-in Functions. 52168 (line 14) 52169 * __builtin_rx_int: RX Built-in Functions. 52170 (line 18) 52171 * __builtin_rx_machi: RX Built-in Functions. 52172 (line 22) 52173 * __builtin_rx_maclo: RX Built-in Functions. 52174 (line 27) 52175 * __builtin_rx_mulhi: RX Built-in Functions. 52176 (line 32) 52177 * __builtin_rx_mullo: RX Built-in Functions. 52178 (line 37) 52179 * __builtin_rx_mvfachi: RX Built-in Functions. 52180 (line 42) 52181 * __builtin_rx_mvfacmi: RX Built-in Functions. 52182 (line 46) 52183 * __builtin_rx_mvfc: RX Built-in Functions. 52184 (line 50) 52185 * __builtin_rx_mvtachi: RX Built-in Functions. 52186 (line 54) 52187 * __builtin_rx_mvtaclo: RX Built-in Functions. 52188 (line 58) 52189 * __builtin_rx_mvtc: RX Built-in Functions. 52190 (line 62) 52191 * __builtin_rx_mvtipl: RX Built-in Functions. 52192 (line 66) 52193 * __builtin_rx_racw: RX Built-in Functions. 52194 (line 70) 52195 * __builtin_rx_revw: RX Built-in Functions. 52196 (line 74) 52197 * __builtin_rx_rmpa: RX Built-in Functions. 52198 (line 79) 52199 * __builtin_rx_round: RX Built-in Functions. 52200 (line 83) 52201 * __builtin_rx_sat: RX Built-in Functions. 52202 (line 88) 52203 * __builtin_rx_setpsw: RX Built-in Functions. 52204 (line 92) 52205 * __builtin_rx_wait: RX Built-in Functions. 52206 (line 96) 52207 * __builtin_set_thread_pointer: SH Built-in Functions. 52208 (line 10) 52209 * __builtin_tabort: S/390 System z Built-in Functions. 52210 (line 87) 52211 * __builtin_tbegin: S/390 System z Built-in Functions. 52212 (line 7) 52213 * __builtin_tbegin_nofloat: S/390 System z Built-in Functions. 52214 (line 59) 52215 * __builtin_tbegin_retry: S/390 System z Built-in Functions. 52216 (line 65) 52217 * __builtin_tbegin_retry_nofloat: S/390 System z Built-in Functions. 52218 (line 72) 52219 * __builtin_tbeginc: S/390 System z Built-in Functions. 52220 (line 78) 52221 * __builtin_tend: S/390 System z Built-in Functions. 52222 (line 82) 52223 * __builtin_thread_pointer: SH Built-in Functions. 52224 (line 20) 52225 * __builtin_trap: Other Builtins. (line 281) 52226 * __builtin_tx_assist: S/390 System z Built-in Functions. 52227 (line 92) 52228 * __builtin_tx_nesting_depth: S/390 System z Built-in Functions. 52229 (line 98) 52230 * __builtin_types_compatible_p: Other Builtins. (line 111) 52231 * __builtin_unreachable: Other Builtins. (line 288) 52232 * __builtin_va_arg_pack: Constructing Calls. (line 53) 52233 * __builtin_va_arg_pack_len: Constructing Calls. (line 76) 52234 * __complex__ keyword: Complex. (line 6) 52235 * __declspec(dllexport): Function Attributes. 52236 (line 258) 52237 * __declspec(dllimport): Function Attributes. 52238 (line 293) 52239 * __ea SPU Named Address Spaces: Named Address Spaces. 52240 (line 155) 52241 * __extension__: Alternate Keywords. (line 30) 52242 * __far M32C Named Address Spaces: Named Address Spaces. 52243 (line 139) 52244 * __far RL78 Named Address Spaces: Named Address Spaces. 52245 (line 147) 52246 * __flash AVR Named Address Spaces: Named Address Spaces. 52247 (line 31) 52248 * __flash1 AVR Named Address Spaces: Named Address Spaces. 52249 (line 40) 52250 * __flash2 AVR Named Address Spaces: Named Address Spaces. 52251 (line 40) 52252 * __flash3 AVR Named Address Spaces: Named Address Spaces. 52253 (line 40) 52254 * __flash4 AVR Named Address Spaces: Named Address Spaces. 52255 (line 40) 52256 * __flash5 AVR Named Address Spaces: Named Address Spaces. 52257 (line 40) 52258 * __float128 data type: Floating Types. (line 6) 52259 * __float80 data type: Floating Types. (line 6) 52260 * __fp16 data type: Half-Precision. (line 6) 52261 * __func__ identifier: Function Names. (line 6) 52262 * __FUNCTION__ identifier: Function Names. (line 6) 52263 * __imag__ keyword: Complex. (line 27) 52264 * __int128 data types: __int128. (line 6) 52265 * __memx AVR Named Address Spaces: Named Address Spaces. 52266 (line 46) 52267 * __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 52268 * __real__ keyword: Complex. (line 27) 52269 * __STDC_HOSTED__: Standards. (line 13) 52270 * __sync_add_and_fetch: __sync Builtins. (line 60) 52271 * __sync_and_and_fetch: __sync Builtins. (line 60) 52272 * __sync_bool_compare_and_swap: __sync Builtins. (line 71) 52273 * __sync_fetch_and_add: __sync Builtins. (line 44) 52274 * __sync_fetch_and_and: __sync Builtins. (line 44) 52275 * __sync_fetch_and_nand: __sync Builtins. (line 44) 52276 * __sync_fetch_and_or: __sync Builtins. (line 44) 52277 * __sync_fetch_and_sub: __sync Builtins. (line 44) 52278 * __sync_fetch_and_xor: __sync Builtins. (line 44) 52279 * __sync_lock_release: __sync Builtins. (line 101) 52280 * __sync_lock_test_and_set: __sync Builtins. (line 83) 52281 * __sync_nand_and_fetch: __sync Builtins. (line 60) 52282 * __sync_or_and_fetch: __sync Builtins. (line 60) 52283 * __sync_sub_and_fetch: __sync Builtins. (line 60) 52284 * __sync_synchronize: __sync Builtins. (line 80) 52285 * __sync_val_compare_and_swap: __sync Builtins. (line 71) 52286 * __sync_xor_and_fetch: __sync Builtins. (line 60) 52287 * __thread: Thread-Local. (line 6) 52288 * _Accum data type: Fixed-Point. (line 6) 52289 * _Complex keyword: Complex. (line 6) 52290 * _Decimal128 data type: Decimal Float. (line 6) 52291 * _Decimal32 data type: Decimal Float. (line 6) 52292 * _Decimal64 data type: Decimal Float. (line 6) 52293 * _exit: Other Builtins. (line 6) 52294 * _Exit: Other Builtins. (line 6) 52295 * _Fract data type: Fixed-Point. (line 6) 52296 * _HTM_FIRST_USER_ABORT_CODE: S/390 System z Built-in Functions. 52297 (line 48) 52298 * _Sat data type: Fixed-Point. (line 6) 52299 * _xabort: X86 transactional memory intrinsics. 52300 (line 68) 52301 * _xbegin: X86 transactional memory intrinsics. 52302 (line 20) 52303 * _xend: X86 transactional memory intrinsics. 52304 (line 59) 52305 * _xtest: X86 transactional memory intrinsics. 52306 (line 64) 52307 * AArch64 Options: AArch64 Options. (line 6) 52308 * ABI: Compatibility. (line 6) 52309 * abi_tag attribute: C++ Attributes. (line 9) 52310 * abort: Other Builtins. (line 6) 52311 * abs: Other Builtins. (line 6) 52312 * accessing volatiles <1>: C++ Volatiles. (line 6) 52313 * accessing volatiles: Volatiles. (line 6) 52314 * acos: Other Builtins. (line 6) 52315 * acosf: Other Builtins. (line 6) 52316 * acosh: Other Builtins. (line 6) 52317 * acoshf: Other Builtins. (line 6) 52318 * acoshl: Other Builtins. (line 6) 52319 * acosl: Other Builtins. (line 6) 52320 * Ada: G++ and GCC. (line 6) 52321 * additional floating types: Floating Types. (line 6) 52322 * address constraints: Simple Constraints. (line 154) 52323 * address of a label: Labels as Values. (line 6) 52324 * address_operand: Simple Constraints. (line 158) 52325 * alias attribute: Function Attributes. 52326 (line 37) 52327 * aligned attribute <1>: Type Attributes. (line 31) 52328 * aligned attribute <2>: Variable Attributes. 52329 (line 23) 52330 * aligned attribute: Function Attributes. 52331 (line 50) 52332 * alignment: Alignment. (line 6) 52333 * alloc_size attribute: Function Attributes. 52334 (line 70) 52335 * alloca: Other Builtins. (line 6) 52336 * alloca vs variable-length arrays: Variable Length. (line 26) 52337 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 52338 (line 943) 52339 * alternate keywords: Alternate Keywords. (line 6) 52340 * always_inline function attribute: Function Attributes. 52341 (line 91) 52342 * AMD x86-64 Options: i386 and x86-64 Options. 52343 (line 6) 52344 * AMD1: Standards. (line 13) 52345 * ANSI C: Standards. (line 13) 52346 * ANSI C standard: Standards. (line 13) 52347 * ANSI C89: Standards. (line 13) 52348 * ANSI support: C Dialect Options. (line 10) 52349 * ANSI X3.159-1989: Standards. (line 13) 52350 * apostrophes: Incompatibilities. (line 116) 52351 * application binary interface: Compatibility. (line 6) 52352 * ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 52353 (line 6) 52354 * ARM options: ARM Options. (line 6) 52355 * arrays of length zero: Zero Length. (line 6) 52356 * arrays of variable length: Variable Length. (line 6) 52357 * arrays, non-lvalue: Subscripting. (line 6) 52358 * artificial function attribute: Function Attributes. 52359 (line 134) 52360 * asin: Other Builtins. (line 6) 52361 * asinf: Other Builtins. (line 6) 52362 * asinh: Other Builtins. (line 6) 52363 * asinhf: Other Builtins. (line 6) 52364 * asinhl: Other Builtins. (line 6) 52365 * asinl: Other Builtins. (line 6) 52366 * asm constraints: Constraints. (line 6) 52367 * asm expressions: Extended Asm. (line 6) 52368 * assembler instructions: Extended Asm. (line 6) 52369 * assembler names for identifiers: Asm Labels. (line 6) 52370 * assembly code, invalid: Bug Criteria. (line 12) 52371 * atan: Other Builtins. (line 6) 52372 * atan2: Other Builtins. (line 6) 52373 * atan2f: Other Builtins. (line 6) 52374 * atan2l: Other Builtins. (line 6) 52375 * atanf: Other Builtins. (line 6) 52376 * atanh: Other Builtins. (line 6) 52377 * atanhf: Other Builtins. (line 6) 52378 * atanhl: Other Builtins. (line 6) 52379 * atanl: Other Builtins. (line 6) 52380 * attribute of types: Type Attributes. (line 6) 52381 * attribute of variables: Variable Attributes. 52382 (line 6) 52383 * attribute syntax: Attribute Syntax. (line 6) 52384 * autoincrement/decrement addressing: Simple Constraints. (line 30) 52385 * automatic inline for C++ member fns: Inline. (line 71) 52386 * AVR Options: AVR Options. (line 6) 52387 * Backwards Compatibility: Backwards Compatibility. 52388 (line 6) 52389 * base class members: Name lookup. (line 6) 52390 * bcmp: Other Builtins. (line 6) 52391 * below100 attribute: Variable Attributes. 52392 (line 584) 52393 * binary compatibility: Compatibility. (line 6) 52394 * Binary constants using the 0b prefix: Binary constants. (line 6) 52395 * Blackfin Options: Blackfin Options. (line 6) 52396 * bound pointer to member function: Bound member functions. 52397 (line 6) 52398 * bounds checking: Optimize Options. (line 407) 52399 * bug criteria: Bug Criteria. (line 6) 52400 * bugs: Bugs. (line 6) 52401 * bugs, known: Trouble. (line 6) 52402 * built-in functions <1>: Other Builtins. (line 6) 52403 * built-in functions: C Dialect Options. (line 205) 52404 * bzero: Other Builtins. (line 6) 52405 * C compilation options: Invoking GCC. (line 17) 52406 * C intermediate output, nonexistent: G++ and GCC. (line 35) 52407 * C language extensions: C Extensions. (line 6) 52408 * C language, traditional: C Dialect Options. (line 307) 52409 * C standard: Standards. (line 13) 52410 * C standards: Standards. (line 13) 52411 * c++: Invoking G++. (line 14) 52412 * C++: G++ and GCC. (line 30) 52413 * C++ comments: C++ Comments. (line 6) 52414 * C++ compilation options: Invoking GCC. (line 23) 52415 * C++ interface and implementation headers: C++ Interface. (line 6) 52416 * C++ language extensions: C++ Extensions. (line 6) 52417 * C++ member fns, automatically inline: Inline. (line 71) 52418 * C++ misunderstandings: C++ Misunderstandings. 52419 (line 6) 52420 * C++ options, command-line: C++ Dialect Options. 52421 (line 6) 52422 * C++ pragmas, effect on inlining: C++ Interface. (line 66) 52423 * C++ source file suffixes: Invoking G++. (line 6) 52424 * C++ static data, declaring and defining: Static Definitions. 52425 (line 6) 52426 * C11: Standards. (line 13) 52427 * C1X: Standards. (line 13) 52428 * C6X Options: C6X Options. (line 6) 52429 * C89: Standards. (line 13) 52430 * C90: Standards. (line 13) 52431 * C94: Standards. (line 13) 52432 * C95: Standards. (line 13) 52433 * C99: Standards. (line 13) 52434 * C9X: Standards. (line 13) 52435 * C_INCLUDE_PATH: Environment Variables. 52436 (line 130) 52437 * cabs: Other Builtins. (line 6) 52438 * cabsf: Other Builtins. (line 6) 52439 * cabsl: Other Builtins. (line 6) 52440 * cacos: Other Builtins. (line 6) 52441 * cacosf: Other Builtins. (line 6) 52442 * cacosh: Other Builtins. (line 6) 52443 * cacoshf: Other Builtins. (line 6) 52444 * cacoshl: Other Builtins. (line 6) 52445 * cacosl: Other Builtins. (line 6) 52446 * callee_pop_aggregate_return attribute: Function Attributes. 52447 (line 893) 52448 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 52449 (line 532) 52450 * calloc: Other Builtins. (line 6) 52451 * carg: Other Builtins. (line 6) 52452 * cargf: Other Builtins. (line 6) 52453 * cargl: Other Builtins. (line 6) 52454 * case labels in initializers: Designated Inits. (line 6) 52455 * case ranges: Case Ranges. (line 6) 52456 * casin: Other Builtins. (line 6) 52457 * casinf: Other Builtins. (line 6) 52458 * casinh: Other Builtins. (line 6) 52459 * casinhf: Other Builtins. (line 6) 52460 * casinhl: Other Builtins. (line 6) 52461 * casinl: Other Builtins. (line 6) 52462 * cast to a union: Cast to Union. (line 6) 52463 * catan: Other Builtins. (line 6) 52464 * catanf: Other Builtins. (line 6) 52465 * catanh: Other Builtins. (line 6) 52466 * catanhf: Other Builtins. (line 6) 52467 * catanhl: Other Builtins. (line 6) 52468 * catanl: Other Builtins. (line 6) 52469 * cbrt: Other Builtins. (line 6) 52470 * cbrtf: Other Builtins. (line 6) 52471 * cbrtl: Other Builtins. (line 6) 52472 * ccos: Other Builtins. (line 6) 52473 * ccosf: Other Builtins. (line 6) 52474 * ccosh: Other Builtins. (line 6) 52475 * ccoshf: Other Builtins. (line 6) 52476 * ccoshl: Other Builtins. (line 6) 52477 * ccosl: Other Builtins. (line 6) 52478 * ceil: Other Builtins. (line 6) 52479 * ceilf: Other Builtins. (line 6) 52480 * ceill: Other Builtins. (line 6) 52481 * cexp: Other Builtins. (line 6) 52482 * cexpf: Other Builtins. (line 6) 52483 * cexpl: Other Builtins. (line 6) 52484 * character set, execution: Preprocessor Options. 52485 (line 554) 52486 * character set, input: Preprocessor Options. 52487 (line 567) 52488 * character set, input normalization: Warning Options. (line 1284) 52489 * character set, wide execution: Preprocessor Options. 52490 (line 559) 52491 * cimag: Other Builtins. (line 6) 52492 * cimagf: Other Builtins. (line 6) 52493 * cimagl: Other Builtins. (line 6) 52494 * cleanup attribute: Variable Attributes. 52495 (line 89) 52496 * clog: Other Builtins. (line 6) 52497 * clogf: Other Builtins. (line 6) 52498 * clogl: Other Builtins. (line 6) 52499 * COBOL: G++ and GCC. (line 23) 52500 * code generation conventions: Code Gen Options. (line 6) 52501 * code, mixed with declarations: Mixed Declarations. (line 6) 52502 * cold function attribute: Function Attributes. 52503 (line 1166) 52504 * cold label attribute: Function Attributes. 52505 (line 1184) 52506 * command options: Invoking GCC. (line 6) 52507 * comments, C++ style: C++ Comments. (line 6) 52508 * common attribute: Variable Attributes. 52509 (line 105) 52510 * comparison of signed and unsigned values, warning: Warning Options. 52511 (line 1156) 52512 * compiler bugs, reporting: Bug Reporting. (line 6) 52513 * compiler compared to C++ preprocessor: G++ and GCC. (line 35) 52514 * compiler options, C++: C++ Dialect Options. 52515 (line 6) 52516 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 52517 (line 6) 52518 * compiler version, specifying: Target Options. (line 6) 52519 * COMPILER_PATH: Environment Variables. 52520 (line 91) 52521 * complex conjugation: Complex. (line 34) 52522 * complex numbers: Complex. (line 6) 52523 * compound literals: Compound Literals. (line 6) 52524 * computed gotos: Labels as Values. (line 6) 52525 * conditional expressions, extensions: Conditionals. (line 6) 52526 * conflicting types: Disappointments. (line 21) 52527 * conj: Other Builtins. (line 6) 52528 * conjf: Other Builtins. (line 6) 52529 * conjl: Other Builtins. (line 6) 52530 * const applied to function: Function Attributes. 52531 (line 6) 52532 * const function attribute: Function Attributes. 52533 (line 183) 52534 * constants in constraints: Simple Constraints. (line 70) 52535 * constraint modifier characters: Modifiers. (line 6) 52536 * constraint, matching: Simple Constraints. (line 139) 52537 * constraints, asm: Constraints. (line 6) 52538 * constraints, machine specific: Machine Constraints. 52539 (line 6) 52540 * constructing calls: Constructing Calls. (line 6) 52541 * constructor expressions: Compound Literals. (line 6) 52542 * constructor function attribute: Function Attributes. 52543 (line 211) 52544 * contributors: Contributors. (line 6) 52545 * copysign: Other Builtins. (line 6) 52546 * copysignf: Other Builtins. (line 6) 52547 * copysignl: Other Builtins. (line 6) 52548 * core dump: Bug Criteria. (line 9) 52549 * cos: Other Builtins. (line 6) 52550 * cosf: Other Builtins. (line 6) 52551 * cosh: Other Builtins. (line 6) 52552 * coshf: Other Builtins. (line 6) 52553 * coshl: Other Builtins. (line 6) 52554 * cosl: Other Builtins. (line 6) 52555 * CPATH: Environment Variables. 52556 (line 129) 52557 * CPLUS_INCLUDE_PATH: Environment Variables. 52558 (line 131) 52559 * cpow: Other Builtins. (line 6) 52560 * cpowf: Other Builtins. (line 6) 52561 * cpowl: Other Builtins. (line 6) 52562 * cproj: Other Builtins. (line 6) 52563 * cprojf: Other Builtins. (line 6) 52564 * cprojl: Other Builtins. (line 6) 52565 * CR16 Options: CR16 Options. (line 6) 52566 * creal: Other Builtins. (line 6) 52567 * crealf: Other Builtins. (line 6) 52568 * creall: Other Builtins. (line 6) 52569 * CRIS Options: CRIS Options. (line 6) 52570 * cross compiling: Target Options. (line 6) 52571 * csin: Other Builtins. (line 6) 52572 * csinf: Other Builtins. (line 6) 52573 * csinh: Other Builtins. (line 6) 52574 * csinhf: Other Builtins. (line 6) 52575 * csinhl: Other Builtins. (line 6) 52576 * csinl: Other Builtins. (line 6) 52577 * csqrt: Other Builtins. (line 6) 52578 * csqrtf: Other Builtins. (line 6) 52579 * csqrtl: Other Builtins. (line 6) 52580 * ctan: Other Builtins. (line 6) 52581 * ctanf: Other Builtins. (line 6) 52582 * ctanh: Other Builtins. (line 6) 52583 * ctanhf: Other Builtins. (line 6) 52584 * ctanhl: Other Builtins. (line 6) 52585 * ctanl: Other Builtins. (line 6) 52586 * Darwin options: Darwin Options. (line 6) 52587 * dcgettext: Other Builtins. (line 6) 52588 * DD integer suffix: Decimal Float. (line 6) 52589 * dd integer suffix: Decimal Float. (line 6) 52590 * deallocating variable length arrays: Variable Length. (line 22) 52591 * debugging information options: Debugging Options. (line 6) 52592 * decimal floating types: Decimal Float. (line 6) 52593 * declaration scope: Incompatibilities. (line 80) 52594 * declarations inside expressions: Statement Exprs. (line 6) 52595 * declarations, mixed with code: Mixed Declarations. (line 6) 52596 * declaring attributes of functions: Function Attributes. 52597 (line 6) 52598 * declaring static data in C++: Static Definitions. (line 6) 52599 * defining static data in C++: Static Definitions. (line 6) 52600 * dependencies for make as output: Environment Variables. 52601 (line 157) 52602 * dependencies, make: Preprocessor Options. 52603 (line 185) 52604 * DEPENDENCIES_OUTPUT: Environment Variables. 52605 (line 156) 52606 * dependent name lookup: Name lookup. (line 6) 52607 * deprecated attribute: Variable Attributes. 52608 (line 114) 52609 * deprecated attribute.: Function Attributes. 52610 (line 233) 52611 * designated initializers: Designated Inits. (line 6) 52612 * designator lists: Designated Inits. (line 94) 52613 * designators: Designated Inits. (line 61) 52614 * destructor function attribute: Function Attributes. 52615 (line 211) 52616 * DF integer suffix: Decimal Float. (line 6) 52617 * df integer suffix: Decimal Float. (line 6) 52618 * dgettext: Other Builtins. (line 6) 52619 * diagnostic messages: Language Independent Options. 52620 (line 6) 52621 * dialect options: C Dialect Options. (line 6) 52622 * digits in constraint: Simple Constraints. (line 127) 52623 * directory options: Directory Options. (line 6) 52624 * disinterrupt attribute: Function Attributes. 52625 (line 253) 52626 * DL integer suffix: Decimal Float. (line 6) 52627 * dl integer suffix: Decimal Float. (line 6) 52628 * dollar signs in identifier names: Dollar Signs. (line 6) 52629 * double-word arithmetic: Long Long. (line 6) 52630 * downward funargs: Nested Functions. (line 6) 52631 * drem: Other Builtins. (line 6) 52632 * dremf: Other Builtins. (line 6) 52633 * dreml: Other Builtins. (line 6) 52634 * E in constraint: Simple Constraints. (line 89) 52635 * earlyclobber operand: Modifiers. (line 25) 52636 * eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes. 52637 (line 346) 52638 * EIND: AVR Options. (line 220) 52639 * empty structures: Empty Structures. (line 6) 52640 * environment variables: Environment Variables. 52641 (line 6) 52642 * erf: Other Builtins. (line 6) 52643 * erfc: Other Builtins. (line 6) 52644 * erfcf: Other Builtins. (line 6) 52645 * erfcl: Other Builtins. (line 6) 52646 * erff: Other Builtins. (line 6) 52647 * erfl: Other Builtins. (line 6) 52648 * error function attribute: Function Attributes. 52649 (line 153) 52650 * error messages: Warnings and Errors. 52651 (line 6) 52652 * escaped newlines: Escaped Newlines. (line 6) 52653 * exception handler functions on the Blackfin processor: Function Attributes. 52654 (line 356) 52655 * exclamation point: Multi-Alternative. (line 33) 52656 * exit: Other Builtins. (line 6) 52657 * exp: Other Builtins. (line 6) 52658 * exp10: Other Builtins. (line 6) 52659 * exp10f: Other Builtins. (line 6) 52660 * exp10l: Other Builtins. (line 6) 52661 * exp2: Other Builtins. (line 6) 52662 * exp2f: Other Builtins. (line 6) 52663 * exp2l: Other Builtins. (line 6) 52664 * expf: Other Builtins. (line 6) 52665 * expl: Other Builtins. (line 6) 52666 * explicit register variables: Explicit Reg Vars. (line 6) 52667 * expm1: Other Builtins. (line 6) 52668 * expm1f: Other Builtins. (line 6) 52669 * expm1l: Other Builtins. (line 6) 52670 * expressions containing statements: Statement Exprs. (line 6) 52671 * expressions, constructor: Compound Literals. (line 6) 52672 * extended asm: Extended Asm. (line 6) 52673 * extensible constraints: Simple Constraints. (line 163) 52674 * extensions, ?:: Conditionals. (line 6) 52675 * extensions, C language: C Extensions. (line 6) 52676 * extensions, C++ language: C++ Extensions. (line 6) 52677 * external declaration scope: Incompatibilities. (line 80) 52678 * externally_visible attribute.: Function Attributes. 52679 (line 362) 52680 * F in constraint: Simple Constraints. (line 94) 52681 * fabs: Other Builtins. (line 6) 52682 * fabsf: Other Builtins. (line 6) 52683 * fabsl: Other Builtins. (line 6) 52684 * fatal signal: Bug Criteria. (line 9) 52685 * fdim: Other Builtins. (line 6) 52686 * fdimf: Other Builtins. (line 6) 52687 * fdiml: Other Builtins. (line 6) 52688 * FDL, GNU Free Documentation License: GNU Free Documentation License. 52689 (line 6) 52690 * ffs: Other Builtins. (line 6) 52691 * file name suffix: Overall Options. (line 14) 52692 * file names: Link Options. (line 10) 52693 * fixed-point types: Fixed-Point. (line 6) 52694 * flatten function attribute: Function Attributes. 52695 (line 146) 52696 * flexible array members: Zero Length. (line 6) 52697 * float as function value type: Incompatibilities. (line 141) 52698 * floating point precision: Disappointments. (line 68) 52699 * floating-point precision: Optimize Options. (line 1873) 52700 * floor: Other Builtins. (line 6) 52701 * floorf: Other Builtins. (line 6) 52702 * floorl: Other Builtins. (line 6) 52703 * fma: Other Builtins. (line 6) 52704 * fmaf: Other Builtins. (line 6) 52705 * fmal: Other Builtins. (line 6) 52706 * fmax: Other Builtins. (line 6) 52707 * fmaxf: Other Builtins. (line 6) 52708 * fmaxl: Other Builtins. (line 6) 52709 * fmin: Other Builtins. (line 6) 52710 * fminf: Other Builtins. (line 6) 52711 * fminl: Other Builtins. (line 6) 52712 * fmod: Other Builtins. (line 6) 52713 * fmodf: Other Builtins. (line 6) 52714 * fmodl: Other Builtins. (line 6) 52715 * force_align_arg_pointer attribute: Function Attributes. 52716 (line 1226) 52717 * format function attribute: Function Attributes. 52718 (line 419) 52719 * format_arg function attribute: Function Attributes. 52720 (line 485) 52721 * Fortran: G++ and GCC. (line 6) 52722 * forwarder_section attribute: Function Attributes. 52723 (line 685) 52724 * forwarding calls: Constructing Calls. (line 6) 52725 * fprintf: Other Builtins. (line 6) 52726 * fprintf_unlocked: Other Builtins. (line 6) 52727 * fputs: Other Builtins. (line 6) 52728 * fputs_unlocked: Other Builtins. (line 6) 52729 * FR30 Options: FR30 Options. (line 6) 52730 * freestanding environment: Standards. (line 13) 52731 * freestanding implementation: Standards. (line 13) 52732 * frexp: Other Builtins. (line 6) 52733 * frexpf: Other Builtins. (line 6) 52734 * frexpl: Other Builtins. (line 6) 52735 * FRV Options: FRV Options. (line 6) 52736 * fscanf: Other Builtins. (line 6) 52737 * fscanf, and constant strings: Incompatibilities. (line 17) 52738 * function addressability on the M32R/D: Function Attributes. 52739 (line 853) 52740 * function attributes: Function Attributes. 52741 (line 6) 52742 * function pointers, arithmetic: Pointer Arith. (line 6) 52743 * function prototype declarations: Function Prototypes. 52744 (line 6) 52745 * function versions: Function Multiversioning. 52746 (line 6) 52747 * function without a prologue/epilogue code: Function Attributes. 52748 (line 920) 52749 * function, size of pointer to: Pointer Arith. (line 6) 52750 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 52751 (line 808) 52752 * functions in arbitrary sections: Function Attributes. 52753 (line 6) 52754 * functions that are dynamically resolved: Function Attributes. 52755 (line 6) 52756 * functions that are passed arguments in registers on the 386: Function Attributes. 52757 (line 6) 52758 * functions that behave like malloc: Function Attributes. 52759 (line 6) 52760 * functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 52761 (line 933) 52762 * functions that do not pop the argument stack on the 386: Function Attributes. 52763 (line 6) 52764 * functions that do pop the argument stack on the 386: Function Attributes. 52765 (line 177) 52766 * functions that handle memory bank switching: Function Attributes. 52767 (line 375) 52768 * functions that have different compilation options on the 386: Function Attributes. 52769 (line 6) 52770 * functions that have different optimization options: Function Attributes. 52771 (line 6) 52772 * functions that have no side effects: Function Attributes. 52773 (line 6) 52774 * functions that never return: Function Attributes. 52775 (line 6) 52776 * functions that pop the argument stack on the 386: Function Attributes. 52777 (line 6) 52778 * functions that return more than once: Function Attributes. 52779 (line 6) 52780 * functions with non-null pointer arguments: Function Attributes. 52781 (line 6) 52782 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 52783 (line 6) 52784 * g in constraint: Simple Constraints. (line 120) 52785 * G in constraint: Simple Constraints. (line 98) 52786 * g++: Invoking G++. (line 14) 52787 * G++: G++ and GCC. (line 30) 52788 * gamma: Other Builtins. (line 6) 52789 * gamma_r: Other Builtins. (line 6) 52790 * gammaf: Other Builtins. (line 6) 52791 * gammaf_r: Other Builtins. (line 6) 52792 * gammal: Other Builtins. (line 6) 52793 * gammal_r: Other Builtins. (line 6) 52794 * GCC: G++ and GCC. (line 6) 52795 * GCC command options: Invoking GCC. (line 6) 52796 * GCC_COMPARE_DEBUG: Environment Variables. 52797 (line 52) 52798 * GCC_EXEC_PREFIX: Environment Variables. 52799 (line 57) 52800 * gcc_struct: Type Attributes. (line 324) 52801 * gcc_struct attribute: Variable Attributes. 52802 (line 445) 52803 * gcov: Debugging Options. (line 411) 52804 * gettext: Other Builtins. (line 6) 52805 * global offset table: Code Gen Options. (line 267) 52806 * global register after longjmp: Global Reg Vars. (line 65) 52807 * global register variables: Global Reg Vars. (line 6) 52808 * GNAT: G++ and GCC. (line 30) 52809 * GNU C Compiler: G++ and GCC. (line 6) 52810 * GNU Compiler Collection: G++ and GCC. (line 6) 52811 * gnu_inline function attribute: Function Attributes. 52812 (line 96) 52813 * Go: G++ and GCC. (line 6) 52814 * goto with computed label: Labels as Values. (line 6) 52815 * gprof: Debugging Options. (line 333) 52816 * grouping options: Invoking GCC. (line 26) 52817 * H in constraint: Simple Constraints. (line 98) 52818 * half-precision floating point: Half-Precision. (line 6) 52819 * hardware models and configurations, specifying: Submodel Options. 52820 (line 6) 52821 * hex floats: Hex Floats. (line 6) 52822 * HK fixed-suffix: Fixed-Point. (line 6) 52823 * hk fixed-suffix: Fixed-Point. (line 6) 52824 * hosted environment <1>: C Dialect Options. (line 239) 52825 * hosted environment: Standards. (line 13) 52826 * hosted implementation: Standards. (line 13) 52827 * hot function attribute: Function Attributes. 52828 (line 1144) 52829 * hot label attribute: Function Attributes. 52830 (line 1156) 52831 * hotpatch attribute: Function Attributes. 52832 (line 912) 52833 * HPPA Options: HPPA Options. (line 6) 52834 * HR fixed-suffix: Fixed-Point. (line 6) 52835 * hr fixed-suffix: Fixed-Point. (line 6) 52836 * hypot: Other Builtins. (line 6) 52837 * hypotf: Other Builtins. (line 6) 52838 * hypotl: Other Builtins. (line 6) 52839 * I in constraint: Simple Constraints. (line 81) 52840 * i in constraint: Simple Constraints. (line 70) 52841 * i386 and x86-64 Windows Options: i386 and x86-64 Windows Options. 52842 (line 6) 52843 * i386 Options: i386 and x86-64 Options. 52844 (line 6) 52845 * IA-64 Options: IA-64 Options. (line 6) 52846 * IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 52847 (line 6) 52848 * identifier names, dollar signs in: Dollar Signs. (line 6) 52849 * identifiers, names in assembler code: Asm Labels. (line 6) 52850 * ifunc attribute: Function Attributes. 52851 (line 593) 52852 * ilogb: Other Builtins. (line 6) 52853 * ilogbf: Other Builtins. (line 6) 52854 * ilogbl: Other Builtins. (line 6) 52855 * imaxabs: Other Builtins. (line 6) 52856 * implementation-defined behavior, C language: C Implementation. 52857 (line 6) 52858 * implementation-defined behavior, C++ language: C++ Implementation. 52859 (line 6) 52860 * implied #pragma implementation: C++ Interface. (line 46) 52861 * incompatibilities of GCC: Incompatibilities. (line 6) 52862 * increment operators: Bug Criteria. (line 17) 52863 * index: Other Builtins. (line 6) 52864 * indirect calls on ARM: Function Attributes. 52865 (line 798) 52866 * indirect calls on MIPS: Function Attributes. 52867 (line 820) 52868 * init_priority attribute: C++ Attributes. (line 30) 52869 * initializations in expressions: Compound Literals. (line 6) 52870 * initializers with labeled elements: Designated Inits. (line 6) 52871 * initializers, non-constant: Initializers. (line 6) 52872 * inline automatic for C++ member fns: Inline. (line 71) 52873 * inline functions: Inline. (line 6) 52874 * inline functions, omission of: Inline. (line 51) 52875 * inlining and C++ pragmas: C++ Interface. (line 66) 52876 * installation trouble: Trouble. (line 6) 52877 * integrating function code: Inline. (line 6) 52878 * Intel 386 Options: i386 and x86-64 Options. 52879 (line 6) 52880 * interface and implementation headers, C++: C++ Interface. (line 6) 52881 * intermediate C version, nonexistent: G++ and GCC. (line 35) 52882 * interrupt handler functions: Function Attributes. 52883 (line 141) 52884 * interrupt handler functions on the AVR processors: Function Attributes. 52885 (line 1321) 52886 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 52887 (line 735) 52888 * interrupt service routines on ARM: Function Attributes. 52889 (line 750) 52890 * interrupt thread functions on fido: Function Attributes. 52891 (line 742) 52892 * introduction: Top. (line 6) 52893 * invalid assembly code: Bug Criteria. (line 12) 52894 * invalid input: Bug Criteria. (line 42) 52895 * invoking g++: Invoking G++. (line 22) 52896 * isalnum: Other Builtins. (line 6) 52897 * isalpha: Other Builtins. (line 6) 52898 * isascii: Other Builtins. (line 6) 52899 * isblank: Other Builtins. (line 6) 52900 * iscntrl: Other Builtins. (line 6) 52901 * isdigit: Other Builtins. (line 6) 52902 * isgraph: Other Builtins. (line 6) 52903 * islower: Other Builtins. (line 6) 52904 * ISO 9899: Standards. (line 13) 52905 * ISO C: Standards. (line 13) 52906 * ISO C standard: Standards. (line 13) 52907 * ISO C11: Standards. (line 13) 52908 * ISO C1X: Standards. (line 13) 52909 * ISO C90: Standards. (line 13) 52910 * ISO C94: Standards. (line 13) 52911 * ISO C95: Standards. (line 13) 52912 * ISO C99: Standards. (line 13) 52913 * ISO C9X: Standards. (line 13) 52914 * ISO support: C Dialect Options. (line 10) 52915 * ISO/IEC 9899: Standards. (line 13) 52916 * isprint: Other Builtins. (line 6) 52917 * ispunct: Other Builtins. (line 6) 52918 * isspace: Other Builtins. (line 6) 52919 * isupper: Other Builtins. (line 6) 52920 * iswalnum: Other Builtins. (line 6) 52921 * iswalpha: Other Builtins. (line 6) 52922 * iswblank: Other Builtins. (line 6) 52923 * iswcntrl: Other Builtins. (line 6) 52924 * iswdigit: Other Builtins. (line 6) 52925 * iswgraph: Other Builtins. (line 6) 52926 * iswlower: Other Builtins. (line 6) 52927 * iswprint: Other Builtins. (line 6) 52928 * iswpunct: Other Builtins. (line 6) 52929 * iswspace: Other Builtins. (line 6) 52930 * iswupper: Other Builtins. (line 6) 52931 * iswxdigit: Other Builtins. (line 6) 52932 * isxdigit: Other Builtins. (line 6) 52933 * j0: Other Builtins. (line 6) 52934 * j0f: Other Builtins. (line 6) 52935 * j0l: Other Builtins. (line 6) 52936 * j1: Other Builtins. (line 6) 52937 * j1f: Other Builtins. (line 6) 52938 * j1l: Other Builtins. (line 6) 52939 * Java: G++ and GCC. (line 6) 52940 * java_interface attribute: C++ Attributes. (line 50) 52941 * jn: Other Builtins. (line 6) 52942 * jnf: Other Builtins. (line 6) 52943 * jnl: Other Builtins. (line 6) 52944 * K fixed-suffix: Fixed-Point. (line 6) 52945 * k fixed-suffix: Fixed-Point. (line 6) 52946 * keep_interrupts_masked attribute: Function Attributes. 52947 (line 707) 52948 * keywords, alternate: Alternate Keywords. (line 6) 52949 * known causes of trouble: Trouble. (line 6) 52950 * l1_data variable attribute: Variable Attributes. 52951 (line 356) 52952 * l1_data_A variable attribute: Variable Attributes. 52953 (line 356) 52954 * l1_data_B variable attribute: Variable Attributes. 52955 (line 356) 52956 * l1_text function attribute: Function Attributes. 52957 (line 759) 52958 * l2 function attribute: Function Attributes. 52959 (line 765) 52960 * l2 variable attribute: Variable Attributes. 52961 (line 364) 52962 * labeled elements in initializers: Designated Inits. (line 6) 52963 * labels as values: Labels as Values. (line 6) 52964 * labs: Other Builtins. (line 6) 52965 * LANG: Environment Variables. 52966 (line 21) 52967 * language dialect options: C Dialect Options. (line 6) 52968 * LC_ALL: Environment Variables. 52969 (line 21) 52970 * LC_CTYPE: Environment Variables. 52971 (line 21) 52972 * LC_MESSAGES: Environment Variables. 52973 (line 21) 52974 * ldexp: Other Builtins. (line 6) 52975 * ldexpf: Other Builtins. (line 6) 52976 * ldexpl: Other Builtins. (line 6) 52977 * leaf function attribute: Function Attributes. 52978 (line 771) 52979 * length-zero arrays: Zero Length. (line 6) 52980 * lgamma: Other Builtins. (line 6) 52981 * lgamma_r: Other Builtins. (line 6) 52982 * lgammaf: Other Builtins. (line 6) 52983 * lgammaf_r: Other Builtins. (line 6) 52984 * lgammal: Other Builtins. (line 6) 52985 * lgammal_r: Other Builtins. (line 6) 52986 * Libraries: Link Options. (line 24) 52987 * LIBRARY_PATH: Environment Variables. 52988 (line 97) 52989 * link options: Link Options. (line 6) 52990 * linker script: Link Options. (line 199) 52991 * LK fixed-suffix: Fixed-Point. (line 6) 52992 * lk fixed-suffix: Fixed-Point. (line 6) 52993 * LL integer suffix: Long Long. (line 6) 52994 * llabs: Other Builtins. (line 6) 52995 * LLK fixed-suffix: Fixed-Point. (line 6) 52996 * llk fixed-suffix: Fixed-Point. (line 6) 52997 * LLR fixed-suffix: Fixed-Point. (line 6) 52998 * llr fixed-suffix: Fixed-Point. (line 6) 52999 * llrint: Other Builtins. (line 6) 53000 * llrintf: Other Builtins. (line 6) 53001 * llrintl: Other Builtins. (line 6) 53002 * llround: Other Builtins. (line 6) 53003 * llroundf: Other Builtins. (line 6) 53004 * llroundl: Other Builtins. (line 6) 53005 * LM32 options: LM32 Options. (line 6) 53006 * load address instruction: Simple Constraints. (line 154) 53007 * local labels: Local Labels. (line 6) 53008 * local variables in macros: Typeof. (line 46) 53009 * local variables, specifying registers: Local Reg Vars. (line 6) 53010 * locale: Environment Variables. 53011 (line 21) 53012 * locale definition: Environment Variables. 53013 (line 106) 53014 * log: Other Builtins. (line 6) 53015 * log10: Other Builtins. (line 6) 53016 * log10f: Other Builtins. (line 6) 53017 * log10l: Other Builtins. (line 6) 53018 * log1p: Other Builtins. (line 6) 53019 * log1pf: Other Builtins. (line 6) 53020 * log1pl: Other Builtins. (line 6) 53021 * log2: Other Builtins. (line 6) 53022 * log2f: Other Builtins. (line 6) 53023 * log2l: Other Builtins. (line 6) 53024 * logb: Other Builtins. (line 6) 53025 * logbf: Other Builtins. (line 6) 53026 * logbl: Other Builtins. (line 6) 53027 * logf: Other Builtins. (line 6) 53028 * logl: Other Builtins. (line 6) 53029 * long long data types: Long Long. (line 6) 53030 * longjmp: Global Reg Vars. (line 65) 53031 * longjmp incompatibilities: Incompatibilities. (line 39) 53032 * longjmp warnings: Warning Options. (line 674) 53033 * LR fixed-suffix: Fixed-Point. (line 6) 53034 * lr fixed-suffix: Fixed-Point. (line 6) 53035 * lrint: Other Builtins. (line 6) 53036 * lrintf: Other Builtins. (line 6) 53037 * lrintl: Other Builtins. (line 6) 53038 * lround: Other Builtins. (line 6) 53039 * lroundf: Other Builtins. (line 6) 53040 * lroundl: Other Builtins. (line 6) 53041 * m in constraint: Simple Constraints. (line 17) 53042 * M32C options: M32C Options. (line 6) 53043 * M32R/D options: M32R/D Options. (line 6) 53044 * M680x0 options: M680x0 Options. (line 6) 53045 * machine dependent options: Submodel Options. (line 6) 53046 * machine specific constraints: Machine Constraints. 53047 (line 6) 53048 * macro with variable arguments: Variadic Macros. (line 6) 53049 * macros containing asm: Extended Asm. (line 238) 53050 * macros, inline alternative: Inline. (line 6) 53051 * macros, local labels: Local Labels. (line 6) 53052 * macros, local variables in: Typeof. (line 46) 53053 * macros, statements in expressions: Statement Exprs. (line 6) 53054 * macros, types of arguments: Typeof. (line 6) 53055 * make: Preprocessor Options. 53056 (line 185) 53057 * malloc: Other Builtins. (line 6) 53058 * malloc attribute: Function Attributes. 53059 (line 830) 53060 * matching constraint: Simple Constraints. (line 139) 53061 * MCore options: MCore Options. (line 6) 53062 * member fns, automatically inline: Inline. (line 71) 53063 * memchr: Other Builtins. (line 6) 53064 * memcmp: Other Builtins. (line 6) 53065 * memcpy: Other Builtins. (line 6) 53066 * memory references in constraints: Simple Constraints. (line 17) 53067 * mempcpy: Other Builtins. (line 6) 53068 * memset: Other Builtins. (line 6) 53069 * MeP options: MeP Options. (line 6) 53070 * Mercury: G++ and GCC. (line 23) 53071 * message formatting: Language Independent Options. 53072 (line 6) 53073 * messages, warning: Warning Options. (line 6) 53074 * messages, warning and error: Warnings and Errors. 53075 (line 6) 53076 * MicroBlaze Options: MicroBlaze Options. (line 6) 53077 * middle-operands, omitted: Conditionals. (line 6) 53078 * MIPS options: MIPS Options. (line 6) 53079 * mips16 attribute: Function Attributes. 53080 (line 839) 53081 * misunderstandings in C++: C++ Misunderstandings. 53082 (line 6) 53083 * mixed declarations and code: Mixed Declarations. (line 6) 53084 * mktemp, and constant strings: Incompatibilities. (line 13) 53085 * MMIX Options: MMIX Options. (line 6) 53086 * MN10300 options: MN10300 Options. (line 6) 53087 * mode attribute: Variable Attributes. 53088 (line 134) 53089 * modf: Other Builtins. (line 6) 53090 * modff: Other Builtins. (line 6) 53091 * modfl: Other Builtins. (line 6) 53092 * modifiers in constraints: Modifiers. (line 6) 53093 * Moxie Options: Moxie Options. (line 6) 53094 * ms_abi attribute: Function Attributes. 53095 (line 881) 53096 * ms_hook_prologue attribute: Function Attributes. 53097 (line 906) 53098 * ms_struct: Type Attributes. (line 324) 53099 * ms_struct attribute: Variable Attributes. 53100 (line 445) 53101 * mudflap: Optimize Options. (line 407) 53102 * multiple alternative constraints: Multi-Alternative. (line 6) 53103 * multiprecision arithmetic: Long Long. (line 6) 53104 * n in constraint: Simple Constraints. (line 75) 53105 * Named Address Spaces: Named Address Spaces. 53106 (line 6) 53107 * names used in assembler code: Asm Labels. (line 6) 53108 * naming convention, implementation headers: C++ Interface. (line 46) 53109 * nearbyint: Other Builtins. (line 6) 53110 * nearbyintf: Other Builtins. (line 6) 53111 * nearbyintl: Other Builtins. (line 6) 53112 * nested functions: Nested Functions. (line 6) 53113 * newlines (escaped): Escaped Newlines. (line 6) 53114 * nextafter: Other Builtins. (line 6) 53115 * nextafterf: Other Builtins. (line 6) 53116 * nextafterl: Other Builtins. (line 6) 53117 * nexttoward: Other Builtins. (line 6) 53118 * nexttowardf: Other Builtins. (line 6) 53119 * nexttowardl: Other Builtins. (line 6) 53120 * NFC: Warning Options. (line 1284) 53121 * NFKC: Warning Options. (line 1284) 53122 * NMI handler functions on the Blackfin processor: Function Attributes. 53123 (line 948) 53124 * no_instrument_function function attribute: Function Attributes. 53125 (line 954) 53126 * no_sanitize_address function attribute: Function Attributes. 53127 (line 1194) 53128 * no_split_stack function attribute: Function Attributes. 53129 (line 959) 53130 * noclone function attribute: Function Attributes. 53131 (line 976) 53132 * nocommon attribute: Variable Attributes. 53133 (line 105) 53134 * noinline function attribute: Function Attributes. 53135 (line 965) 53136 * nomips16 attribute: Function Attributes. 53137 (line 839) 53138 * non-constant initializers: Initializers. (line 6) 53139 * non-static inline function: Inline. (line 85) 53140 * nonnull function attribute: Function Attributes. 53141 (line 982) 53142 * noreturn function attribute: Function Attributes. 53143 (line 1006) 53144 * nosave_low_regs attribute: Function Attributes. 53145 (line 1056) 53146 * nothrow function attribute: Function Attributes. 53147 (line 1048) 53148 * o in constraint: Simple Constraints. (line 23) 53149 * OBJC_INCLUDE_PATH: Environment Variables. 53150 (line 132) 53151 * Objective-C <1>: Standards. (line 163) 53152 * Objective-C: G++ and GCC. (line 6) 53153 * Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options. 53154 (line 6) 53155 * Objective-C++ <1>: Standards. (line 163) 53156 * Objective-C++: G++ and GCC. (line 6) 53157 * offsettable address: Simple Constraints. (line 23) 53158 * old-style function definitions: Function Prototypes. 53159 (line 6) 53160 * omitted middle-operands: Conditionals. (line 6) 53161 * open coding: Inline. (line 6) 53162 * OpenMP parallel: C Dialect Options. (line 256) 53163 * operand constraints, asm: Constraints. (line 6) 53164 * optimize function attribute: Function Attributes. 53165 (line 1062) 53166 * optimize options: Optimize Options. (line 6) 53167 * options to control diagnostics formatting: Language Independent Options. 53168 (line 6) 53169 * options to control warnings: Warning Options. (line 6) 53170 * options, C++: C++ Dialect Options. 53171 (line 6) 53172 * options, code generation: Code Gen Options. (line 6) 53173 * options, debugging: Debugging Options. (line 6) 53174 * options, dialect: C Dialect Options. (line 6) 53175 * options, directory search: Directory Options. (line 6) 53176 * options, GCC command: Invoking GCC. (line 6) 53177 * options, grouping: Invoking GCC. (line 26) 53178 * options, linking: Link Options. (line 6) 53179 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 53180 (line 6) 53181 * options, optimization: Optimize Options. (line 6) 53182 * options, order: Invoking GCC. (line 30) 53183 * options, preprocessor: Preprocessor Options. 53184 (line 6) 53185 * order of evaluation, side effects: Non-bugs. (line 196) 53186 * order of options: Invoking GCC. (line 30) 53187 * OS_main AVR function attribute: Function Attributes. 53188 (line 1079) 53189 * OS_task AVR function attribute: Function Attributes. 53190 (line 1079) 53191 * other register constraints: Simple Constraints. (line 163) 53192 * output file option: Overall Options. (line 191) 53193 * overloaded virtual function, warning: C++ Dialect Options. 53194 (line 618) 53195 * p in constraint: Simple Constraints. (line 154) 53196 * packed attribute: Variable Attributes. 53197 (line 145) 53198 * parameter forward declaration: Variable Length. (line 59) 53199 * Pascal: G++ and GCC. (line 23) 53200 * pcs function attribute: Function Attributes. 53201 (line 1104) 53202 * PDP-11 Options: PDP-11 Options. (line 6) 53203 * PIC: Code Gen Options. (line 267) 53204 * picoChip options: picoChip Options. (line 6) 53205 * pmf: Bound member functions. 53206 (line 6) 53207 * pointer arguments: Function Attributes. 53208 (line 188) 53209 * pointer to member function: Bound member functions. 53210 (line 6) 53211 * portions of temporary objects, pointers to: Temporaries. (line 6) 53212 * pow: Other Builtins. (line 6) 53213 * pow10: Other Builtins. (line 6) 53214 * pow10f: Other Builtins. (line 6) 53215 * pow10l: Other Builtins. (line 6) 53216 * PowerPC options: PowerPC Options. (line 6) 53217 * powf: Other Builtins. (line 6) 53218 * powl: Other Builtins. (line 6) 53219 * pragma GCC optimize: Function Specific Option Pragmas. 53220 (line 21) 53221 * pragma GCC pop_options: Function Specific Option Pragmas. 53222 (line 34) 53223 * pragma GCC push_options: Function Specific Option Pragmas. 53224 (line 34) 53225 * pragma GCC reset_options: Function Specific Option Pragmas. 53226 (line 44) 53227 * pragma GCC target: Function Specific Option Pragmas. 53228 (line 7) 53229 * pragma, address: M32C Pragmas. (line 15) 53230 * pragma, align: Solaris Pragmas. (line 11) 53231 * pragma, call: MeP Pragmas. (line 48) 53232 * pragma, coprocessor available: MeP Pragmas. (line 13) 53233 * pragma, coprocessor call_saved: MeP Pragmas. (line 20) 53234 * pragma, coprocessor subclass: MeP Pragmas. (line 28) 53235 * pragma, custom io_volatile: MeP Pragmas. (line 7) 53236 * pragma, diagnostic: Diagnostic Pragmas. (line 14) 53237 * pragma, disinterrupt: MeP Pragmas. (line 38) 53238 * pragma, fini: Solaris Pragmas. (line 19) 53239 * pragma, init: Solaris Pragmas. (line 24) 53240 * pragma, long_calls: ARM Pragmas. (line 11) 53241 * pragma, long_calls_off: ARM Pragmas. (line 17) 53242 * pragma, longcall: RS/6000 and PowerPC Pragmas. 53243 (line 14) 53244 * pragma, mark: Darwin Pragmas. (line 11) 53245 * pragma, memregs: M32C Pragmas. (line 7) 53246 * pragma, no_long_calls: ARM Pragmas. (line 14) 53247 * pragma, options align: Darwin Pragmas. (line 14) 53248 * pragma, pop_macro: Push/Pop Macro Pragmas. 53249 (line 15) 53250 * pragma, push_macro: Push/Pop Macro Pragmas. 53251 (line 11) 53252 * pragma, reason for not using: Function Attributes. 53253 (line 1878) 53254 * pragma, redefine_extname: Symbol-Renaming Pragmas. 53255 (line 12) 53256 * pragma, segment: Darwin Pragmas. (line 21) 53257 * pragma, unused: Darwin Pragmas. (line 24) 53258 * pragma, visibility: Visibility Pragmas. (line 8) 53259 * pragma, weak: Weak Pragmas. (line 10) 53260 * pragmas: Pragmas. (line 6) 53261 * pragmas in C++, effect on inlining: C++ Interface. (line 66) 53262 * pragmas, interface and implementation: C++ Interface. (line 6) 53263 * pragmas, warning of unknown: Warning Options. (line 691) 53264 * precompiled headers: Precompiled Headers. 53265 (line 6) 53266 * preprocessing numbers: Incompatibilities. (line 173) 53267 * preprocessing tokens: Incompatibilities. (line 173) 53268 * preprocessor options: Preprocessor Options. 53269 (line 6) 53270 * printf: Other Builtins. (line 6) 53271 * printf_unlocked: Other Builtins. (line 6) 53272 * prof: Debugging Options. (line 327) 53273 * progmem AVR variable attribute: Variable Attributes. 53274 (line 318) 53275 * promotion of formal parameters: Function Prototypes. 53276 (line 6) 53277 * pure function attribute: Function Attributes. 53278 (line 1122) 53279 * push address instruction: Simple Constraints. (line 154) 53280 * putchar: Other Builtins. (line 6) 53281 * puts: Other Builtins. (line 6) 53282 * Q floating point suffix: Floating Types. (line 6) 53283 * q floating point suffix: Floating Types. (line 6) 53284 * qsort, and global register variables: Global Reg Vars. (line 41) 53285 * question mark: Multi-Alternative. (line 27) 53286 * R fixed-suffix: Fixed-Point. (line 6) 53287 * r fixed-suffix: Fixed-Point. (line 6) 53288 * r in constraint: Simple Constraints. (line 66) 53289 * RAMPD: AVR Options. (line 336) 53290 * RAMPX: AVR Options. (line 336) 53291 * RAMPY: AVR Options. (line 336) 53292 * RAMPZ: AVR Options. (line 336) 53293 * ranges in case statements: Case Ranges. (line 6) 53294 * read-only strings: Incompatibilities. (line 9) 53295 * register variable after longjmp: Global Reg Vars. (line 65) 53296 * registers: Extended Asm. (line 6) 53297 * registers for local variables: Local Reg Vars. (line 6) 53298 * registers in constraints: Simple Constraints. (line 66) 53299 * registers, global allocation: Explicit Reg Vars. (line 6) 53300 * registers, global variables in: Global Reg Vars. (line 6) 53301 * regparm attribute: Function Attributes. 53302 (line 1202) 53303 * relocation truncated to fit (ColdFire): M680x0 Options. (line 329) 53304 * relocation truncated to fit (MIPS): MIPS Options. (line 200) 53305 * remainder: Other Builtins. (line 6) 53306 * remainderf: Other Builtins. (line 6) 53307 * remainderl: Other Builtins. (line 6) 53308 * remquo: Other Builtins. (line 6) 53309 * remquof: Other Builtins. (line 6) 53310 * remquol: Other Builtins. (line 6) 53311 * renesas attribute: Function Attributes. 53312 (line 1234) 53313 * reordering, warning: C++ Dialect Options. 53314 (line 533) 53315 * reporting bugs: Bugs. (line 6) 53316 * resbank attribute: Function Attributes. 53317 (line 1238) 53318 * rest argument (in macro): Variadic Macros. (line 6) 53319 * restricted pointers: Restricted Pointers. 53320 (line 6) 53321 * restricted references: Restricted Pointers. 53322 (line 6) 53323 * restricted this pointer: Restricted Pointers. 53324 (line 6) 53325 * returns_twice attribute: Function Attributes. 53326 (line 1252) 53327 * rindex: Other Builtins. (line 6) 53328 * rint: Other Builtins. (line 6) 53329 * rintf: Other Builtins. (line 6) 53330 * rintl: Other Builtins. (line 6) 53331 * RL78 Options: RL78 Options. (line 6) 53332 * round: Other Builtins. (line 6) 53333 * roundf: Other Builtins. (line 6) 53334 * roundl: Other Builtins. (line 6) 53335 * RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 53336 (line 6) 53337 * RTTI: Vague Linkage. (line 42) 53338 * run-time options: Code Gen Options. (line 6) 53339 * RX Options: RX Options. (line 6) 53340 * s in constraint: Simple Constraints. (line 102) 53341 * S/390 and zSeries Options: S/390 and zSeries Options. 53342 (line 6) 53343 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 53344 (line 1261) 53345 * save volatile registers on the MicroBlaze: Function Attributes. 53346 (line 1266) 53347 * scalb: Other Builtins. (line 6) 53348 * scalbf: Other Builtins. (line 6) 53349 * scalbl: Other Builtins. (line 6) 53350 * scalbln: Other Builtins. (line 6) 53351 * scalblnf: Other Builtins. (line 6) 53352 * scalbn: Other Builtins. (line 6) 53353 * scalbnf: Other Builtins. (line 6) 53354 * scanf, and constant strings: Incompatibilities. (line 17) 53355 * scanfnl: Other Builtins. (line 6) 53356 * scope of a variable length array: Variable Length. (line 22) 53357 * scope of declaration: Disappointments. (line 21) 53358 * scope of external declarations: Incompatibilities. (line 80) 53359 * Score Options: Score Options. (line 6) 53360 * search path: Directory Options. (line 6) 53361 * section function attribute: Function Attributes. 53362 (line 1274) 53363 * section variable attribute: Variable Attributes. 53364 (line 166) 53365 * sentinel function attribute: Function Attributes. 53366 (line 1290) 53367 * setjmp: Global Reg Vars. (line 65) 53368 * setjmp incompatibilities: Incompatibilities. (line 39) 53369 * shared strings: Incompatibilities. (line 9) 53370 * shared variable attribute: Variable Attributes. 53371 (line 211) 53372 * side effect in ?:: Conditionals. (line 20) 53373 * side effects, macro argument: Statement Exprs. (line 35) 53374 * side effects, order of evaluation: Non-bugs. (line 196) 53375 * signbit: Other Builtins. (line 6) 53376 * signbitd128: Other Builtins. (line 6) 53377 * signbitd32: Other Builtins. (line 6) 53378 * signbitd64: Other Builtins. (line 6) 53379 * signbitf: Other Builtins. (line 6) 53380 * signbitl: Other Builtins. (line 6) 53381 * signed and unsigned values, comparison warning: Warning Options. 53382 (line 1156) 53383 * significand: Other Builtins. (line 6) 53384 * significandf: Other Builtins. (line 6) 53385 * significandl: Other Builtins. (line 6) 53386 * simple constraints: Simple Constraints. (line 6) 53387 * sin: Other Builtins. (line 6) 53388 * sincos: Other Builtins. (line 6) 53389 * sincosf: Other Builtins. (line 6) 53390 * sincosl: Other Builtins. (line 6) 53391 * sinf: Other Builtins. (line 6) 53392 * sinh: Other Builtins. (line 6) 53393 * sinhf: Other Builtins. (line 6) 53394 * sinhl: Other Builtins. (line 6) 53395 * sinl: Other Builtins. (line 6) 53396 * sizeof: Typeof. (line 6) 53397 * smaller data references: M32R/D Options. (line 57) 53398 * smaller data references (PowerPC): RS/6000 and PowerPC Options. 53399 (line 743) 53400 * snprintf: Other Builtins. (line 6) 53401 * Solaris 2 options: Solaris 2 Options. (line 6) 53402 * sp_switch attribute: Function Attributes. 53403 (line 1339) 53404 * SPARC options: SPARC Options. (line 6) 53405 * Spec Files: Spec Files. (line 6) 53406 * specified registers: Explicit Reg Vars. (line 6) 53407 * specifying compiler version and target machine: Target Options. 53408 (line 6) 53409 * specifying hardware config: Submodel Options. (line 6) 53410 * specifying machine version: Target Options. (line 6) 53411 * specifying registers for local variables: Local Reg Vars. (line 6) 53412 * speed of compilation: Precompiled Headers. 53413 (line 6) 53414 * sprintf: Other Builtins. (line 6) 53415 * SPU options: SPU Options. (line 6) 53416 * sqrt: Other Builtins. (line 6) 53417 * sqrtf: Other Builtins. (line 6) 53418 * sqrtl: Other Builtins. (line 6) 53419 * sscanf: Other Builtins. (line 6) 53420 * sscanf, and constant strings: Incompatibilities. (line 17) 53421 * sseregparm attribute: Function Attributes. 53422 (line 1219) 53423 * statements inside expressions: Statement Exprs. (line 6) 53424 * static data in C++, declaring and defining: Static Definitions. 53425 (line 6) 53426 * stpcpy: Other Builtins. (line 6) 53427 * stpncpy: Other Builtins. (line 6) 53428 * strcasecmp: Other Builtins. (line 6) 53429 * strcat: Other Builtins. (line 6) 53430 * strchr: Other Builtins. (line 6) 53431 * strcmp: Other Builtins. (line 6) 53432 * strcpy: Other Builtins. (line 6) 53433 * strcspn: Other Builtins. (line 6) 53434 * strdup: Other Builtins. (line 6) 53435 * strfmon: Other Builtins. (line 6) 53436 * strftime: Other Builtins. (line 6) 53437 * string constants: Incompatibilities. (line 9) 53438 * strlen: Other Builtins. (line 6) 53439 * strncasecmp: Other Builtins. (line 6) 53440 * strncat: Other Builtins. (line 6) 53441 * strncmp: Other Builtins. (line 6) 53442 * strncpy: Other Builtins. (line 6) 53443 * strndup: Other Builtins. (line 6) 53444 * strpbrk: Other Builtins. (line 6) 53445 * strrchr: Other Builtins. (line 6) 53446 * strspn: Other Builtins. (line 6) 53447 * strstr: Other Builtins. (line 6) 53448 * struct: Unnamed Fields. (line 6) 53449 * struct __htm_tdb: S/390 System z Built-in Functions. 53450 (line 54) 53451 * structures: Incompatibilities. (line 146) 53452 * structures, constructor expression: Compound Literals. (line 6) 53453 * submodel options: Submodel Options. (line 6) 53454 * subscripting: Subscripting. (line 6) 53455 * subscripting and function values: Subscripting. (line 6) 53456 * suffixes for C++ source: Invoking G++. (line 6) 53457 * SUNPRO_DEPENDENCIES: Environment Variables. 53458 (line 172) 53459 * suppressing warnings: Warning Options. (line 6) 53460 * surprises in C++: C++ Misunderstandings. 53461 (line 6) 53462 * syntax checking: Warning Options. (line 13) 53463 * syscall_linkage attribute: Function Attributes. 53464 (line 1354) 53465 * system headers, warnings from: Warning Options. (line 843) 53466 * sysv_abi attribute: Function Attributes. 53467 (line 881) 53468 * tan: Other Builtins. (line 6) 53469 * tanf: Other Builtins. (line 6) 53470 * tanh: Other Builtins. (line 6) 53471 * tanhf: Other Builtins. (line 6) 53472 * tanhl: Other Builtins. (line 6) 53473 * tanl: Other Builtins. (line 6) 53474 * target function attribute: Function Attributes. 53475 (line 1361) 53476 * target machine, specifying: Target Options. (line 6) 53477 * target options: Target Options. (line 6) 53478 * target("abm") attribute: Function Attributes. 53479 (line 1387) 53480 * target("aes") attribute: Function Attributes. 53481 (line 1392) 53482 * target("align-stringops") attribute: Function Attributes. 53483 (line 1486) 53484 * target("altivec") attribute: Function Attributes. 53485 (line 1512) 53486 * target("arch=ARCH") attribute: Function Attributes. 53487 (line 1495) 53488 * target("avoid-indexed-addresses") attribute: Function Attributes. 53489 (line 1633) 53490 * target("cld") attribute: Function Attributes. 53491 (line 1457) 53492 * target("cmpb") attribute: Function Attributes. 53493 (line 1518) 53494 * target("cpu=CPU") attribute: Function Attributes. 53495 (line 1648) 53496 * target("default") attribute: Function Attributes. 53497 (line 1395) 53498 * target("dlmzb") attribute: Function Attributes. 53499 (line 1524) 53500 * target("fancy-math-387") attribute: Function Attributes. 53501 (line 1461) 53502 * target("fma4") attribute: Function Attributes. 53503 (line 1441) 53504 * target("fpmath=FPMATH") attribute: Function Attributes. 53505 (line 1503) 53506 * target("fprnd") attribute: Function Attributes. 53507 (line 1531) 53508 * target("friz") attribute: Function Attributes. 53509 (line 1624) 53510 * target("fused-madd") attribute: Function Attributes. 53511 (line 1466) 53512 * target("hard-dfp") attribute: Function Attributes. 53513 (line 1537) 53514 * target("ieee-fp") attribute: Function Attributes. 53515 (line 1471) 53516 * target("inline-all-stringops") attribute: Function Attributes. 53517 (line 1476) 53518 * target("inline-stringops-dynamically") attribute: Function Attributes. 53519 (line 1480) 53520 * target("isel") attribute: Function Attributes. 53521 (line 1543) 53522 * target("longcall") attribute: Function Attributes. 53523 (line 1643) 53524 * target("lwp") attribute: Function Attributes. 53525 (line 1449) 53526 * target("mfcrf") attribute: Function Attributes. 53527 (line 1547) 53528 * target("mfpgpr") attribute: Function Attributes. 53529 (line 1554) 53530 * target("mmx") attribute: Function Attributes. 53531 (line 1400) 53532 * target("mulhw") attribute: Function Attributes. 53533 (line 1561) 53534 * target("multiple") attribute: Function Attributes. 53535 (line 1568) 53536 * target("paired") attribute: Function Attributes. 53537 (line 1638) 53538 * target("pclmul") attribute: Function Attributes. 53539 (line 1404) 53540 * target("popcnt") attribute: Function Attributes. 53541 (line 1408) 53542 * target("popcntb") attribute: Function Attributes. 53543 (line 1579) 53544 * target("popcntd") attribute: Function Attributes. 53545 (line 1586) 53546 * target("powerpc-gfxopt") attribute: Function Attributes. 53547 (line 1592) 53548 * target("powerpc-gpopt") attribute: Function Attributes. 53549 (line 1598) 53550 * target("recip") attribute: Function Attributes. 53551 (line 1490) 53552 * target("recip-precision") attribute: Function Attributes. 53553 (line 1604) 53554 * target("sse") attribute: Function Attributes. 53555 (line 1412) 53556 * target("sse2") attribute: Function Attributes. 53557 (line 1416) 53558 * target("sse3") attribute: Function Attributes. 53559 (line 1420) 53560 * target("sse4") attribute: Function Attributes. 53561 (line 1424) 53562 * target("sse4.1") attribute: Function Attributes. 53563 (line 1429) 53564 * target("sse4.2") attribute: Function Attributes. 53565 (line 1433) 53566 * target("sse4a") attribute: Function Attributes. 53567 (line 1437) 53568 * target("ssse3") attribute: Function Attributes. 53569 (line 1453) 53570 * target("string") attribute: Function Attributes. 53571 (line 1610) 53572 * target("tune=TUNE") attribute: Function Attributes. 53573 (line 1499) 53574 * target("update") attribute: Function Attributes. 53575 (line 1573) 53576 * target("vsx") attribute: Function Attributes. 53577 (line 1616) 53578 * target("xop") attribute: Function Attributes. 53579 (line 1445) 53580 * TC1: Standards. (line 13) 53581 * TC2: Standards. (line 13) 53582 * TC3: Standards. (line 13) 53583 * Technical Corrigenda: Standards. (line 13) 53584 * Technical Corrigendum 1: Standards. (line 13) 53585 * Technical Corrigendum 2: Standards. (line 13) 53586 * Technical Corrigendum 3: Standards. (line 13) 53587 * template instantiation: Template Instantiation. 53588 (line 6) 53589 * temporaries, lifetime of: Temporaries. (line 6) 53590 * tgamma: Other Builtins. (line 6) 53591 * tgammaf: Other Builtins. (line 6) 53592 * tgammal: Other Builtins. (line 6) 53593 * Thread-Local Storage: Thread-Local. (line 6) 53594 * thunks: Nested Functions. (line 6) 53595 * TILE-Gx options: TILE-Gx Options. (line 6) 53596 * TILEPro options: TILEPro Options. (line 6) 53597 * tiny data section on the H8/300H and H8S: Function Attributes. 53598 (line 1677) 53599 * TLS: Thread-Local. (line 6) 53600 * tls_model attribute: Variable Attributes. 53601 (line 235) 53602 * TMPDIR: Environment Variables. 53603 (line 45) 53604 * toascii: Other Builtins. (line 6) 53605 * tolower: Other Builtins. (line 6) 53606 * toupper: Other Builtins. (line 6) 53607 * towlower: Other Builtins. (line 6) 53608 * towupper: Other Builtins. (line 6) 53609 * traditional C language: C Dialect Options. (line 307) 53610 * trap_exit attribute: Function Attributes. 53611 (line 1684) 53612 * trapa_handler attribute: Function Attributes. 53613 (line 1689) 53614 * trunc: Other Builtins. (line 6) 53615 * truncf: Other Builtins. (line 6) 53616 * truncl: Other Builtins. (line 6) 53617 * two-stage name lookup: Name lookup. (line 6) 53618 * type alignment: Alignment. (line 6) 53619 * type attributes: Type Attributes. (line 6) 53620 * type_info: Vague Linkage. (line 42) 53621 * typedef names as function parameters: Incompatibilities. (line 97) 53622 * typeof: Typeof. (line 6) 53623 * UHK fixed-suffix: Fixed-Point. (line 6) 53624 * uhk fixed-suffix: Fixed-Point. (line 6) 53625 * UHR fixed-suffix: Fixed-Point. (line 6) 53626 * uhr fixed-suffix: Fixed-Point. (line 6) 53627 * UK fixed-suffix: Fixed-Point. (line 6) 53628 * uk fixed-suffix: Fixed-Point. (line 6) 53629 * ULK fixed-suffix: Fixed-Point. (line 6) 53630 * ulk fixed-suffix: Fixed-Point. (line 6) 53631 * ULL integer suffix: Long Long. (line 6) 53632 * ULLK fixed-suffix: Fixed-Point. (line 6) 53633 * ullk fixed-suffix: Fixed-Point. (line 6) 53634 * ULLR fixed-suffix: Fixed-Point. (line 6) 53635 * ullr fixed-suffix: Fixed-Point. (line 6) 53636 * ULR fixed-suffix: Fixed-Point. (line 6) 53637 * ulr fixed-suffix: Fixed-Point. (line 6) 53638 * undefined behavior: Bug Criteria. (line 17) 53639 * undefined function value: Bug Criteria. (line 17) 53640 * underscores in variables in macros: Typeof. (line 46) 53641 * union: Unnamed Fields. (line 6) 53642 * union, casting to a: Cast to Union. (line 6) 53643 * unions: Incompatibilities. (line 146) 53644 * unknown pragmas, warning: Warning Options. (line 691) 53645 * unresolved references and -nodefaultlibs: Link Options. (line 85) 53646 * unresolved references and -nostdlib: Link Options. (line 85) 53647 * unused attribute.: Function Attributes. 53648 (line 1693) 53649 * UR fixed-suffix: Fixed-Point. (line 6) 53650 * ur fixed-suffix: Fixed-Point. (line 6) 53651 * use_debug_exception_return attribute: Function Attributes. 53652 (line 712) 53653 * use_shadow_register_set attribute: Function Attributes. 53654 (line 703) 53655 * used attribute.: Function Attributes. 53656 (line 1698) 53657 * User stack pointer in interrupts on the Blackfin: Function Attributes. 53658 (line 754) 53659 * V in constraint: Simple Constraints. (line 43) 53660 * V850 Options: V850 Options. (line 6) 53661 * vague linkage: Vague Linkage. (line 6) 53662 * value after longjmp: Global Reg Vars. (line 65) 53663 * variable addressability on the IA-64: Function Attributes. 53664 (line 853) 53665 * variable addressability on the M32R/D: Variable Attributes. 53666 (line 374) 53667 * variable alignment: Alignment. (line 6) 53668 * variable attributes: Variable Attributes. 53669 (line 6) 53670 * variable number of arguments: Variadic Macros. (line 6) 53671 * variable-length array scope: Variable Length. (line 22) 53672 * variable-length arrays: Variable Length. (line 6) 53673 * variables in specified registers: Explicit Reg Vars. (line 6) 53674 * variables, local, in macros: Typeof. (line 46) 53675 * variadic macros: Variadic Macros. (line 6) 53676 * VAX options: VAX Options. (line 6) 53677 * version_id attribute: Function Attributes. 53678 (line 1708) 53679 * vfprintf: Other Builtins. (line 6) 53680 * vfscanf: Other Builtins. (line 6) 53681 * visibility attribute: Function Attributes. 53682 (line 1718) 53683 * VLAs: Variable Length. (line 6) 53684 * vliw attribute: Function Attributes. 53685 (line 1811) 53686 * void pointers, arithmetic: Pointer Arith. (line 6) 53687 * void, size of pointer to: Pointer Arith. (line 6) 53688 * volatile access <1>: C++ Volatiles. (line 6) 53689 * volatile access: Volatiles. (line 6) 53690 * volatile applied to function: Function Attributes. 53691 (line 6) 53692 * volatile read <1>: C++ Volatiles. (line 6) 53693 * volatile read: Volatiles. (line 6) 53694 * volatile write <1>: C++ Volatiles. (line 6) 53695 * volatile write: Volatiles. (line 6) 53696 * vprintf: Other Builtins. (line 6) 53697 * vscanf: Other Builtins. (line 6) 53698 * vsnprintf: Other Builtins. (line 6) 53699 * vsprintf: Other Builtins. (line 6) 53700 * vsscanf: Other Builtins. (line 6) 53701 * vtable: Vague Linkage. (line 27) 53702 * VxWorks Options: VxWorks Options. (line 6) 53703 * W floating point suffix: Floating Types. (line 6) 53704 * w floating point suffix: Floating Types. (line 6) 53705 * warn_unused_result attribute: Function Attributes. 53706 (line 1817) 53707 * warning for comparison of signed and unsigned values: Warning Options. 53708 (line 1156) 53709 * warning for overloaded virtual function: C++ Dialect Options. 53710 (line 618) 53711 * warning for reordering of member initializers: C++ Dialect Options. 53712 (line 533) 53713 * warning for unknown pragmas: Warning Options. (line 691) 53714 * warning function attribute: Function Attributes. 53715 (line 166) 53716 * warning messages: Warning Options. (line 6) 53717 * warnings from system headers: Warning Options. (line 843) 53718 * warnings vs errors: Warnings and Errors. 53719 (line 6) 53720 * weak attribute: Function Attributes. 53721 (line 1834) 53722 * weakref attribute: Function Attributes. 53723 (line 1843) 53724 * whitespace: Incompatibilities. (line 112) 53725 * X in constraint: Simple Constraints. (line 124) 53726 * X3.159-1989: Standards. (line 13) 53727 * x86-64 options: x86-64 Options. (line 6) 53728 * x86-64 Options: i386 and x86-64 Options. 53729 (line 6) 53730 * Xstormy16 Options: Xstormy16 Options. (line 6) 53731 * Xtensa Options: Xtensa Options. (line 6) 53732 * y0: Other Builtins. (line 6) 53733 * y0f: Other Builtins. (line 6) 53734 * y0l: Other Builtins. (line 6) 53735 * y1: Other Builtins. (line 6) 53736 * y1f: Other Builtins. (line 6) 53737 * y1l: Other Builtins. (line 6) 53738 * yn: Other Builtins. (line 6) 53739 * ynf: Other Builtins. (line 6) 53740 * ynl: Other Builtins. (line 6) 53741 * zero-length arrays: Zero Length. (line 6) 53742 * zero-size structures: Empty Structures. (line 6) 53743 * zSeries options: zSeries Options. (line 6) 53744 53745 53746 53747 Tag Table: 53748 Node: Top1946 53749 Node: G++ and GCC3712 53750 Node: Standards5781 53751 Node: Invoking GCC17959 53752 Node: Option Summary21704 53753 Node: Overall Options61833 53754 Node: Invoking G++76071 53755 Node: C Dialect Options77594 53756 Node: C++ Dialect Options93433 53757 Node: Objective-C and Objective-C++ Dialect Options121535 53758 Node: Language Independent Options132043 53759 Node: Warning Options134242 53760 Node: Debugging Options203443 53761 Node: Optimize Options260834 53762 Ref: Type-punning319503 53763 Node: Preprocessor Options397712 53764 Ref: Wtrigraphs402494 53765 Ref: dashMF407242 53766 Ref: fdollars-in-identifiers418106 53767 Node: Assembler Options428373 53768 Node: Link Options429065 53769 Ref: Link Options-Footnote-1440309 53770 Node: Directory Options440643 53771 Node: Spec Files447202 53772 Node: Target Options468600 53773 Node: Submodel Options468999 53774 Node: AArch64 Options470692 53775 Node: Adapteva Epiphany Options474566 53776 Node: ARM Options480517 53777 Node: AVR Options496367 53778 Node: Blackfin Options516485 53779 Node: C6X Options524500 53780 Node: CRIS Options526043 53781 Node: CR16 Options529787 53782 Node: Darwin Options530694 53783 Node: DEC Alpha Options538127 53784 Node: FR30 Options549715 53785 Node: FRV Options550280 53786 Node: GNU/Linux Options556999 53787 Node: H8/300 Options558260 53788 Node: HPPA Options559710 53789 Node: i386 and x86-64 Options569194 53790 Node: i386 and x86-64 Windows Options606280 53791 Node: IA-64 Options609136 53792 Node: LM32 Options617200 53793 Node: M32C Options617724 53794 Node: M32R/D Options618998 53795 Node: M680x0 Options622544 53796 Node: MCore Options636590 53797 Node: MeP Options638093 53798 Node: MicroBlaze Options642052 53799 Node: MIPS Options644848 53800 Node: MMIX Options673748 53801 Node: MN10300 Options676230 53802 Node: Moxie Options678773 53803 Node: PDP-11 Options679144 53804 Node: picoChip Options680836 53805 Node: PowerPC Options682977 53806 Node: RL78 Options683198 53807 Node: RS/6000 and PowerPC Options683860 53808 Node: RX Options722881 53809 Node: S/390 and zSeries Options730215 53810 Node: Score Options738775 53811 Node: SH Options739617 53812 Node: Solaris 2 Options758472 53813 Node: SPARC Options759703 53814 Node: SPU Options772953 53815 Node: System V Options777890 53816 Node: TILE-Gx Options778716 53817 Node: TILEPro Options779640 53818 Node: V850 Options780144 53819 Node: VAX Options786857 53820 Node: VMS Options787392 53821 Node: VxWorks Options788203 53822 Node: x86-64 Options789358 53823 Node: Xstormy16 Options789576 53824 Node: Xtensa Options789865 53825 Node: zSeries Options794176 53826 Node: Code Gen Options794372 53827 Node: Environment Variables824206 53828 Node: Precompiled Headers832207 53829 Node: C Implementation838215 53830 Node: Translation implementation839884 53831 Node: Environment implementation840458 53832 Node: Identifiers implementation841008 53833 Node: Characters implementation842062 53834 Node: Integers implementation844868 53835 Node: Floating point implementation846693 53836 Node: Arrays and pointers implementation849622 53837 Ref: Arrays and pointers implementation-Footnote-1851057 53838 Node: Hints implementation851181 53839 Node: Structures unions enumerations and bit-fields implementation852647 53840 Node: Qualifiers implementation854633 53841 Node: Declarators implementation856405 53842 Node: Statements implementation856747 53843 Node: Preprocessing directives implementation857074 53844 Node: Library functions implementation859179 53845 Node: Architecture implementation859819 53846 Node: Locale-specific behavior implementation860522 53847 Node: C++ Implementation860827 53848 Node: Conditionally-supported behavior862109 53849 Node: Exception handling862619 53850 Node: C Extensions863028 53851 Node: Statement Exprs868022 53852 Node: Local Labels872481 53853 Node: Labels as Values875454 53854 Ref: Labels as Values-Footnote-1877853 53855 Node: Nested Functions878036 53856 Node: Constructing Calls881994 53857 Node: Typeof886712 53858 Node: Conditionals890020 53859 Node: __int128890910 53860 Node: Long Long891434 53861 Node: Complex892910 53862 Node: Floating Types895499 53863 Node: Half-Precision896627 53864 Node: Decimal Float898809 53865 Node: Hex Floats900664 53866 Node: Fixed-Point901700 53867 Node: Named Address Spaces904982 53868 Ref: AVR Named Address Spaces905663 53869 Node: Zero Length910869 53870 Node: Empty Structures914156 53871 Node: Variable Length914562 53872 Node: Variadic Macros917238 53873 Node: Escaped Newlines919616 53874 Node: Subscripting920455 53875 Node: Pointer Arith921181 53876 Node: Initializers921749 53877 Node: Compound Literals922245 53878 Node: Designated Inits925606 53879 Node: Case Ranges929238 53880 Node: Cast to Union929919 53881 Node: Mixed Declarations931010 53882 Node: Function Attributes931520 53883 Node: Attribute Syntax1017848 53884 Node: Function Prototypes1028239 53885 Node: C++ Comments1030020 53886 Node: Dollar Signs1030539 53887 Node: Character Escapes1031004 53888 Node: Variable Attributes1031298 53889 Ref: AVR Variable Attributes1044965 53890 Ref: MeP Variable Attributes1047626 53891 Ref: i386 Variable Attributes1049572 53892 Node: Type Attributes1055236 53893 Ref: MeP Type Attributes1069124 53894 Ref: i386 Type Attributes1069398 53895 Ref: PowerPC Type Attributes1070089 53896 Ref: SPU Type Attributes1070951 53897 Node: Alignment1071242 53898 Node: Inline1072612 53899 Node: Volatiles1077587 53900 Node: Extended Asm1080469 53901 Ref: Example of asm with clobbered asm reg1086373 53902 Ref: Extended asm with goto1096080 53903 Node: Constraints1103931 53904 Node: Simple Constraints1105015 53905 Node: Multi-Alternative1112336 53906 Node: Modifiers1114053 53907 Node: Machine Constraints1117067 53908 Node: Asm Labels1167290 53909 Node: Explicit Reg Vars1168966 53910 Node: Global Reg Vars1170569 53911 Node: Local Reg Vars1175065 53912 Node: Alternate Keywords1177482 53913 Node: Incomplete Enums1178968 53914 Node: Function Names1179724 53915 Node: Return Address1181885 53916 Node: Vector Extensions1185392 53917 Node: Offsetof1191567 53918 Node: __sync Builtins1192380 53919 Node: __atomic Builtins1197850 53920 Node: x86 specific memory model extensions for transactional memory1209489 53921 Node: Object Size Checking1210751 53922 Node: Other Builtins1216240 53923 Node: Target Builtins1245384 53924 Node: Alpha Built-in Functions1246623 53925 Node: ARM iWMMXt Built-in Functions1249632 53926 Node: ARM NEON Intrinsics1256612 53927 Node: AVR Built-in Functions1465031 53928 Node: Blackfin Built-in Functions1468101 53929 Node: FR-V Built-in Functions1468718 53930 Node: Argument Types1469577 53931 Node: Directly-mapped Integer Functions1471329 53932 Node: Directly-mapped Media Functions1472411 53933 Node: Raw read/write Functions1479443 53934 Node: Other Built-in Functions1480355 53935 Node: X86 Built-in Functions1481539 53936 Node: X86 transactional memory intrinsics1540507 53937 Node: MIPS DSP Built-in Functions1543181 53938 Node: MIPS Paired-Single Support1555689 53939 Node: MIPS Loongson Built-in Functions1557188 53940 Node: Paired-Single Arithmetic1563708 53941 Node: Paired-Single Built-in Functions1564656 53942 Node: MIPS-3D Built-in Functions1567323 53943 Node: Other MIPS Built-in Functions1572700 53944 Node: picoChip Built-in Functions1573224 53945 Node: PowerPC Built-in Functions1574573 53946 Node: PowerPC AltiVec/VSX Built-in Functions1578385 53947 Node: PowerPC Hardware Transactional Memory Built-in Functions1711283 53948 Node: RX Built-in Functions1717824 53949 Node: S/390 System z Built-in Functions1721857 53950 Node: SH Built-in Functions1727094 53951 Node: SPARC VIS Built-in Functions1728487 53952 Node: SPU Built-in Functions1734091 53953 Node: TI C6X Built-in Functions1735907 53954 Node: TILE-Gx Built-in Functions1736931 53955 Node: TILEPro Built-in Functions1738048 53956 Node: Target Format Checks1739115 53957 Node: Solaris Format Checks1739547 53958 Node: Darwin Format Checks1739973 53959 Node: Pragmas1740791 53960 Node: ARM Pragmas1741501 53961 Node: M32C Pragmas1742104 53962 Node: MeP Pragmas1743178 53963 Node: RS/6000 and PowerPC Pragmas1745247 53964 Node: Darwin Pragmas1745988 53965 Node: Solaris Pragmas1747055 53966 Node: Symbol-Renaming Pragmas1748216 53967 Node: Structure-Packing Pragmas1749770 53968 Node: Weak Pragmas1751420 53969 Node: Diagnostic Pragmas1752154 53970 Node: Visibility Pragmas1755261 53971 Node: Push/Pop Macro Pragmas1756013 53972 Node: Function Specific Option Pragmas1756985 53973 Node: Unnamed Fields1759242 53974 Node: Thread-Local1761470 53975 Node: C99 Thread-Local Edits1763575 53976 Node: C++98 Thread-Local Edits1765587 53977 Node: Binary constants1769031 53978 Node: C++ Extensions1769702 53979 Node: C++ Volatiles1771413 53980 Node: Restricted Pointers1773761 53981 Node: Vague Linkage1775352 53982 Node: C++ Interface1778976 53983 Ref: C++ Interface-Footnote-11783262 53984 Node: Template Instantiation1783398 53985 Node: Bound member functions1789985 53986 Node: C++ Attributes1791517 53987 Node: Function Multiversioning1794173 53988 Node: Namespace Association1795988 53989 Node: Type Traits1797368 53990 Node: Java Exceptions1803856 53991 Node: Deprecated Features1805246 53992 Node: Backwards Compatibility1808211 53993 Node: Objective-C1809563 53994 Node: GNU Objective-C runtime API1810172 53995 Node: Modern GNU Objective-C runtime API1811179 53996 Node: Traditional GNU Objective-C runtime API1813616 53997 Node: Executing code before main1814344 53998 Node: What you can and what you cannot do in +load1817082 53999 Node: Type encoding1819472 54000 Node: Legacy type encoding1824548 54001 Node: @encode1825639 54002 Node: Method signatures1826180 54003 Node: Garbage Collection1828175 54004 Node: Constant string objects1830864 54005 Node: compatibility_alias1833372 54006 Node: Exceptions1834094 54007 Node: Synchronization1836805 54008 Node: Fast enumeration1837989 54009 Node: Using fast enumeration1838301 54010 Node: c99-like fast enumeration syntax1839512 54011 Node: Fast enumeration details1840215 54012 Node: Fast enumeration protocol1842556 54013 Node: Messaging with the GNU Objective-C runtime1845708 54014 Node: Dynamically registering methods1847079 54015 Node: Forwarding hook1848770 54016 Node: Compatibility1851810 54017 Node: Gcov1858377 54018 Node: Gcov Intro1858910 54019 Node: Invoking Gcov1861628 54020 Node: Gcov and Optimization1874539 54021 Node: Gcov Data Files1877539 54022 Node: Cross-profiling1878934 54023 Node: Trouble1880785 54024 Node: Actual Bugs1882197 54025 Node: Interoperation1882644 54026 Node: Incompatibilities1889536 54027 Node: Fixed Headers1897687 54028 Node: Standard Libraries1899350 54029 Node: Disappointments1900722 54030 Node: C++ Misunderstandings1905080 54031 Node: Static Definitions1905891 54032 Node: Name lookup1906944 54033 Ref: Name lookup-Footnote-11911722 54034 Node: Temporaries1911909 54035 Node: Copy Assignment1913885 54036 Node: Non-bugs1915692 54037 Node: Warnings and Errors1926199 54038 Node: Bugs1927961 54039 Node: Bug Criteria1928525 54040 Node: Bug Reporting1930735 54041 Node: Service1930956 54042 Node: Contributing1931775 54043 Node: Funding1932515 54044 Node: GNU Project1935004 54045 Node: Copying1935650 54046 Node: GNU Free Documentation License1973178 54047 Node: Contributors1998315 54048 Node: Option Index2035717 54049 Node: Keyword Index2228723 54050 54051 End Tag Table 54052