1 This is doc/gcc.info, produced by makeinfo version 4.8 from 2 /home/jingyu/projects/gcc/android-toolchain/gcc-4.4.0/gcc/doc/gcc.texi. 3 4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 5 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free 6 Software Foundation, Inc. 7 8 Permission is granted to copy, distribute and/or modify this document 9 under the terms of the GNU Free Documentation License, Version 1.2 or 10 any later version published by the Free Software Foundation; with the 11 Invariant Sections being "Funding Free Software", the Front-Cover Texts 12 being (a) (see below), and with the Back-Cover Texts being (b) (see 13 below). A copy of the license is included in the section entitled "GNU 14 Free Documentation License". 15 16 (a) The FSF's Front-Cover Text is: 17 18 A GNU Manual 19 20 (b) The FSF's Back-Cover Text is: 21 22 You have freedom to copy and modify this GNU Manual, like GNU 23 software. Copies published by the Free Software Foundation raise 24 funds for GNU development. 25 26 INFO-DIR-SECTION Software development 27 START-INFO-DIR-ENTRY 28 * gcc: (gcc). The GNU Compiler Collection. 29 * g++: (gcc). The GNU C++ compiler. 30 END-INFO-DIR-ENTRY 31 This file documents the use of the GNU compilers. 32 33 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 34 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free 35 Software Foundation, Inc. 36 37 Permission is granted to copy, distribute and/or modify this document 38 under the terms of the GNU Free Documentation License, Version 1.2 or 39 any later version published by the Free Software Foundation; with the 40 Invariant Sections being "Funding Free Software", the Front-Cover Texts 41 being (a) (see below), and with the Back-Cover Texts being (b) (see 42 below). A copy of the license is included in the section entitled "GNU 43 Free Documentation License". 44 45 (a) The FSF's Front-Cover Text is: 46 47 A GNU Manual 48 49 (b) The FSF's Back-Cover Text is: 50 51 You have freedom to copy and modify this GNU Manual, like GNU 52 software. Copies published by the Free Software Foundation raise 53 funds for GNU development. 54 55 56 57 File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 58 59 Introduction 60 ************ 61 62 This manual documents how to use the GNU compilers, as well as their 63 features and incompatibilities, and how to report bugs. It corresponds 64 to the compilers (GCC) version 4.4.0. The internals of the GNU 65 compilers, including how to port them to new targets and some 66 information about how to write front ends for new languages, are 67 documented in a separate manual. *Note Introduction: (gccint)Top. 68 69 * Menu: 70 71 * G++ and GCC:: You can compile C or C++ programs. 72 * Standards:: Language standards supported by GCC. 73 * Invoking GCC:: Command options supported by `gcc'. 74 * C Implementation:: How GCC implements the ISO C specification. 75 * C Extensions:: GNU extensions to the C language family. 76 * C++ Extensions:: GNU extensions to the C++ language. 77 * Objective-C:: GNU Objective-C runtime features. 78 * Compatibility:: Binary Compatibility 79 * Gcov:: `gcov'---a test coverage program. 80 * Trouble:: If you have trouble using GCC. 81 * Bugs:: How, why and where to report bugs. 82 * Service:: How to find suppliers of support for GCC. 83 * Contributing:: How to contribute to testing and developing GCC. 84 85 * Funding:: How to help assure funding for free software. 86 * GNU Project:: The GNU Project and GNU/Linux. 87 88 * Copying:: GNU General Public License says 89 how you can copy and share GCC. 90 * GNU Free Documentation License:: How you can copy and share this manual. 91 * Contributors:: People who have contributed to GCC. 92 93 * Option Index:: Index to command line options. 94 * Keyword Index:: Index of concepts and symbol names. 95 96 97 File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top 98 99 1 Programming Languages Supported by GCC 100 **************************************** 101 102 GCC stands for "GNU Compiler Collection". GCC is an integrated 103 distribution of compilers for several major programming languages. 104 These languages currently include C, C++, Objective-C, Objective-C++, 105 Java, Fortran, and Ada. 106 107 The abbreviation "GCC" has multiple meanings in common use. The 108 current official meaning is "GNU Compiler Collection", which refers 109 generically to the complete suite of tools. The name historically stood 110 for "GNU C Compiler", and this usage is still common when the emphasis 111 is on compiling C programs. Finally, the name is also used when 112 speaking of the "language-independent" component of GCC: code shared 113 among the compilers for all supported languages. 114 115 The language-independent component of GCC includes the majority of the 116 optimizers, as well as the "back ends" that generate machine code for 117 various processors. 118 119 The part of a compiler that is specific to a particular language is 120 called the "front end". In addition to the front ends that are 121 integrated components of GCC, there are several other front ends that 122 are maintained separately. These support languages such as Pascal, 123 Mercury, and COBOL. To use these, they must be built together with GCC 124 proper. 125 126 Most of the compilers for languages other than C have their own names. 127 The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 128 talk about compiling one of those languages, we might refer to that 129 compiler by its own name, or as GCC. Either is correct. 130 131 Historically, compilers for many languages, including C++ and Fortran, 132 have been implemented as "preprocessors" which emit another high level 133 language such as C. None of the compilers included in GCC are 134 implemented this way; they all generate machine code directly. This 135 sort of preprocessor should not be confused with the "C preprocessor", 136 which is an integral feature of the C, C++, Objective-C and 137 Objective-C++ languages. 138 139 140 File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 141 142 2 Language Standards Supported by GCC 143 ************************************* 144 145 For each language compiled by GCC for which there is a standard, GCC 146 attempts to follow one or more versions of that standard, possibly with 147 some exceptions, and possibly with some extensions. 148 149 2.1 C language 150 ============== 151 152 GCC supports three versions of the C standard, although support for the 153 most recent version is not yet complete. 154 155 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 156 published in 1990. This standard was ratified as an ISO standard 157 (ISO/IEC 9899:1990) later in 1990. There were no technical differences 158 between these publications, although the sections of the ANSI standard 159 were renumbered and became clauses in the ISO standard. This standard, 160 in both its forms, is commonly known as "C89", or occasionally as 161 "C90", from the dates of ratification. The ANSI standard, but not the 162 ISO standard, also came with a Rationale document. To select this 163 standard in GCC, use one of the options `-ansi', `-std=c89' or 164 `-std=iso9899:1990'; to obtain all the diagnostics required by the 165 standard, you should also specify `-pedantic' (or `-pedantic-errors' if 166 you want them to be errors rather than warnings). *Note Options 167 Controlling C Dialect: C Dialect Options. 168 169 Errors in the 1990 ISO C standard were corrected in two Technical 170 Corrigenda published in 1994 and 1996. GCC does not support the 171 uncorrected version. 172 173 An amendment to the 1990 standard was published in 1995. This 174 amendment added digraphs and `__STDC_VERSION__' to the language, but 175 otherwise concerned the library. This amendment is commonly known as 176 "AMD1"; the amended standard is sometimes known as "C94" or "C95". To 177 select this standard in GCC, use the option `-std=iso9899:199409' 178 (with, as for other standard versions, `-pedantic' to receive all 179 required diagnostics). 180 181 A new edition of the ISO C standard was published in 1999 as ISO/IEC 182 9899:1999, and is commonly known as "C99". GCC has incomplete support 183 for this standard version; see 184 `http://gcc.gnu.org/gcc-4.4/c99status.html' for details. To select this 185 standard, use `-std=c99' or `-std=iso9899:1999'. (While in 186 development, drafts of this standard version were referred to as "C9X".) 187 188 Errors in the 1999 ISO C standard were corrected in three Technical 189 Corrigenda published in 2001, 2004 and 2007. GCC does not support the 190 uncorrected version. 191 192 By default, GCC provides some extensions to the C language that on 193 rare occasions conflict with the C standard. *Note Extensions to the C 194 Language Family: C Extensions. Use of the `-std' options listed above 195 will disable these extensions where they conflict with the C standard 196 version selected. You may also select an extended version of the C 197 language explicitly with `-std=gnu89' (for C89 with GNU extensions) or 198 `-std=gnu99' (for C99 with GNU extensions). The default, if no C 199 language dialect options are given, is `-std=gnu89'; this will change to 200 `-std=gnu99' in some future release when the C99 support is complete. 201 Some features that are part of the C99 standard are accepted as 202 extensions in C89 mode. 203 204 The ISO C standard defines (in clause 4) two classes of conforming 205 implementation. A "conforming hosted implementation" supports the 206 whole standard including all the library facilities; a "conforming 207 freestanding implementation" is only required to provide certain 208 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>', 209 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99, 210 also those in `<stdbool.h>' and `<stdint.h>'. In addition, complex 211 types, added in C99, are not required for freestanding implementations. 212 The standard also defines two environments for programs, a 213 "freestanding environment", required of all implementations and which 214 may not have library facilities beyond those required of freestanding 215 implementations, where the handling of program startup and termination 216 are implementation-defined, and a "hosted environment", which is not 217 required, in which all the library facilities are provided and startup 218 is through a function `int main (void)' or `int main (int, char *[])'. 219 An OS kernel would be a freestanding environment; a program using the 220 facilities of an operating system would normally be in a hosted 221 implementation. 222 223 GCC aims towards being usable as a conforming freestanding 224 implementation, or as the compiler for a conforming hosted 225 implementation. By default, it will act as the compiler for a hosted 226 implementation, defining `__STDC_HOSTED__' as `1' and presuming that 227 when the names of ISO C functions are used, they have the semantics 228 defined in the standard. To make it act as a conforming freestanding 229 implementation for a freestanding environment, use the option 230 `-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 231 make assumptions about the meanings of function names from the standard 232 library, with exceptions noted below. To build an OS kernel, you may 233 well still need to make your own arrangements for linking and startup. 234 *Note Options Controlling C Dialect: C Dialect Options. 235 236 GCC does not provide the library facilities required only of hosted 237 implementations, nor yet all the facilities required by C99 of 238 freestanding implementations; to use the facilities of a hosted 239 environment, you will need to find them elsewhere (for example, in the 240 GNU C library). *Note Standard Libraries: Standard Libraries. 241 242 Most of the compiler support routines used by GCC are present in 243 `libgcc', but there are a few exceptions. GCC requires the 244 freestanding environment provide `memcpy', `memmove', `memset' and 245 `memcmp'. Finally, if `__builtin_trap' is used, and the target does 246 not implement the `trap' pattern, then GCC will emit a call to `abort'. 247 248 For references to Technical Corrigenda, Rationale documents and 249 information concerning the history of C that is available online, see 250 `http://gcc.gnu.org/readings.html' 251 252 2.2 C++ language 253 ================ 254 255 GCC supports the ISO C++ standard (1998) and contains experimental 256 support for the upcoming ISO C++ standard (200x). 257 258 The original ISO C++ standard was published as the ISO standard 259 (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 260 2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and 261 C++03, respectively. GCC implements the majority of C++98 (`export' is 262 a notable exception) and most of the changes in C++03. To select this 263 standard in GCC, use one of the options `-ansi' or `-std=c++98'; to 264 obtain all the diagnostics required by the standard, you should also 265 specify `-pedantic' (or `-pedantic-errors' if you want them to be 266 errors rather than warnings). 267 268 The ISO C++ committee is working on a new ISO C++ standard, dubbed 269 C++0x, that is intended to be published by 2009. C++0x contains several 270 changes to the C++ language, some of which have been implemented in an 271 experimental C++0x mode in GCC. The C++0x mode in GCC tracks the draft 272 working paper for the C++0x standard; the latest working paper is 273 available on the ISO C++ committee's web site at 274 `http://www.open-std.org/jtc1/sc22/wg21/'. For information regarding 275 the C++0x features available in the experimental C++0x mode, see 276 `http://gcc.gnu.org/gcc-4.3/cxx0x_status.html'. To select this standard 277 in GCC, use the option `-std=c++0x'; to obtain all the diagnostics 278 required by the standard, you should also specify `-pedantic' (or 279 `-pedantic-errors' if you want them to be errors rather than warnings). 280 281 By default, GCC provides some extensions to the C++ language; *Note 282 Options Controlling C++ Dialect: C++ Dialect Options. Use of the 283 `-std' option listed above will disable these extensions. You may also 284 select an extended version of the C++ language explicitly with 285 `-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++0x' (for 286 C++0x with GNU extensions). The default, if no C++ language dialect 287 options are given, is `-std=gnu++98'. 288 289 2.3 Objective-C and Objective-C++ languages 290 =========================================== 291 292 There is no formal written standard for Objective-C or Objective-C++. 293 The most authoritative manual is "Object-Oriented Programming and the 294 Objective-C Language", available at a number of web sites: 295 296 * 297 `http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/' 298 is a recent (and periodically updated) version; 299 300 * `http://www.toodarkpark.org/computers/objc/' is an older example; 301 302 * `http://www.gnustep.org' and `http://gcc.gnu.org/readings.html' 303 have additional useful information. 304 305 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 306 conformance and compatibility of the Ada compiler. 307 308 *Note Standards: (gfortran)Standards, for details of standards 309 supported by GNU Fortran. 310 311 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 312 details of compatibility between `gcj' and the Java Platform. 313 314 315 File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 316 317 3 GCC Command Options 318 ********************* 319 320 When you invoke GCC, it normally does preprocessing, compilation, 321 assembly and linking. The "overall options" allow you to stop this 322 process at an intermediate stage. For example, the `-c' option says 323 not to run the linker. Then the output consists of object files output 324 by the assembler. 325 326 Other options are passed on to one stage of processing. Some options 327 control the preprocessor and others the compiler itself. Yet other 328 options control the assembler and linker; most of these are not 329 documented here, since you rarely need to use any of them. 330 331 Most of the command line options that you can use with GCC are useful 332 for C programs; when an option is only useful with another language 333 (usually C++), the explanation says so explicitly. If the description 334 for a particular option does not mention a source language, you can use 335 that option with all supported languages. 336 337 *Note Compiling C++ Programs: Invoking G++, for a summary of special 338 options for compiling C++ programs. 339 340 The `gcc' program accepts options and file names as operands. Many 341 options have multi-letter names; therefore multiple single-letter 342 options may _not_ be grouped: `-dv' is very different from `-d -v'. 343 344 You can mix options and other arguments. For the most part, the order 345 you use doesn't matter. Order does matter when you use several options 346 of the same kind; for example, if you specify `-L' more than once, the 347 directories are searched in the order specified. Also, the placement 348 of the `-l' option is significant. 349 350 Many options have long names starting with `-f' or with `-W'--for 351 example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 352 have both positive and negative forms; the negative form of `-ffoo' 353 would be `-fno-foo'. This manual documents only one of these two 354 forms, whichever one is not the default. 355 356 *Note Option Index::, for an index to GCC's options. 357 358 * Menu: 359 360 * Option Summary:: Brief list of all options, without explanations. 361 * Overall Options:: Controlling the kind of output: 362 an executable, object files, assembler files, 363 or preprocessed source. 364 * Invoking G++:: Compiling C++ programs. 365 * C Dialect Options:: Controlling the variant of C language compiled. 366 * C++ Dialect Options:: Variations on C++. 367 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 368 and Objective-C++. 369 * Language Independent Options:: Controlling how diagnostics should be 370 formatted. 371 * Warning Options:: How picky should the compiler be? 372 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 373 * Optimize Options:: How much optimization? 374 * Preprocessor Options:: Controlling header files and macro definitions. 375 Also, getting dependency information for Make. 376 * Assembler Options:: Passing options to the assembler. 377 * Link Options:: Specifying libraries and so on. 378 * Directory Options:: Where to find header files and libraries. 379 Where to find the compiler executable files. 380 * Spec Files:: How to pass switches to sub-processes. 381 * Target Options:: Running a cross-compiler, or an old version of GCC. 382 * Submodel Options:: Specifying minor hardware or convention variations, 383 such as 68010 vs 68020. 384 * Code Gen Options:: Specifying conventions for function calls, data layout 385 and register usage. 386 * Environment Variables:: Env vars that affect GCC. 387 * Precompiled Headers:: Compiling a header once, and using it many times. 388 * Running Protoize:: Automatically adding or removing function prototypes. 389 390 391 File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 392 393 3.1 Option Summary 394 ================== 395 396 Here is a summary of all the options, grouped by type. Explanations are 397 in the following sections. 398 399 _Overall Options_ 400 *Note Options Controlling the Kind of Output: Overall Options. 401 -c -S -E -o FILE -combine -no-canonical-prefixes 402 -pipe -pass-exit-codes 403 -x LANGUAGE -v -### --help[=CLASS[,...]] --target-help 404 --version -wrapper@FILE -fplugin=FILE -fplugin-arg-NAME=ARG 405 406 _C Language Options_ 407 *Note Options Controlling C Dialect: C Dialect Options. 408 -ansi -std=STANDARD -fgnu89-inline 409 -aux-info FILENAME 410 -fno-asm -fno-builtin -fno-builtin-FUNCTION 411 -fhosted -ffreestanding -fopenmp -fms-extensions 412 -trigraphs -no-integrated-cpp -traditional -traditional-cpp 413 -fallow-single-precision -fcond-mismatch -flax-vector-conversions 414 -fsigned-bitfields -fsigned-char 415 -funsigned-bitfields -funsigned-char 416 417 _C++ Language Options_ 418 *Note Options Controlling C++ Dialect: C++ Dialect Options. 419 -fabi-version=N -fno-access-control -fcheck-new 420 -fconserve-space -ffriend-injection 421 -fno-elide-constructors 422 -fno-enforce-eh-specs 423 -ffor-scope -fno-for-scope -fno-gnu-keywords 424 -fno-implicit-templates 425 -fno-implicit-inline-templates 426 -fno-implement-inlines -fms-extensions 427 -fno-nonansi-builtins -fno-operator-names 428 -fno-optional-diags -fpermissive 429 -frepo -fno-rtti -fstats -ftemplate-depth-N 430 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 431 -fno-default-inline -fvisibility-inlines-hidden 432 -fvisibility-ms-compat 433 -Wabi -Wctor-dtor-privacy 434 -Wnon-virtual-dtor -Wreorder 435 -Weffc++ -Wstrict-null-sentinel 436 -Wno-non-template-friend -Wold-style-cast 437 -Woverloaded-virtual -Wno-pmf-conversions 438 -Wsign-promo 439 440 _Objective-C and Objective-C++ Language Options_ 441 *Note Options Controlling Objective-C and Objective-C++ Dialects: 442 Objective-C and Objective-C++ Dialect Options. 443 -fconstant-string-class=CLASS-NAME 444 -fgnu-runtime -fnext-runtime 445 -fno-nil-receivers 446 -fobjc-call-cxx-cdtors 447 -fobjc-direct-dispatch 448 -fobjc-exceptions 449 -fobjc-gc 450 -freplace-objc-classes 451 -fzero-link 452 -gen-decls 453 -Wassign-intercept 454 -Wno-protocol -Wselector 455 -Wstrict-selector-match 456 -Wundeclared-selector 457 458 _Language Independent Options_ 459 *Note Options to Control Diagnostic Messages Formatting: Language 460 Independent Options. 461 -fmessage-length=N 462 -fdiagnostics-show-location=[once|every-line] 463 -fdiagnostics-show-option 464 465 _Warning Options_ 466 *Note Options to Request or Suppress Warnings: Warning Options. 467 -fsyntax-only -pedantic -pedantic-errors 468 -w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds 469 -Wno-attributes -Wno-builtin-macro-redefined 470 -Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual 471 -Wchar-subscripts -Wclobbered -Wcomment 472 -Wconversion -Wcoverage-mismatch -Wno-deprecated 473 -Wno-deprecated-declarations -Wdisabled-optimization 474 -Wno-div-by-zero -Wempty-body -Wenum-compare -Wno-endif-labels 475 -Werror -Werror=* 476 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 477 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral 478 -Wformat-security -Wformat-y2k 479 -Wframe-larger-than=LEN -Wignored-qualifiers 480 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 481 -Winit-self -Winline 482 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 483 -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations 484 -Wlogical-op -Wlong-long 485 -Wmain -Wmissing-braces -Wmissing-field-initializers 486 -Wmissing-format-attribute -Wmissing-include-dirs 487 -Wmissing-noreturn -Wno-mudflap 488 -Wno-multichar -Wnonnull -Wno-overflow 489 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded 490 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format 491 -Wpointer-arith -Wno-pointer-to-int-cast 492 -Wredundant-decls 493 -Wreturn-type -Wripa-opt-mismatch -Wsequence-point -Wshadow 494 -Wsign-compare -Wsign-conversion -Wstack-protector 495 -Wstrict-aliasing -Wstrict-aliasing=n 496 -Wstrict-overflow -Wstrict-overflow=N 497 -Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand 498 -Wsystem-headers -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized 499 -Wunknown-pragmas -Wno-pragmas -Wunreachable-code 500 -Wunused -Wunused-function -Wunused-label -Wunused-parameter 501 -Wunused-value -Wunused-variable 502 -Wvariadic-macros -Wvla 503 -Wvolatile-register-var -Wwrite-strings 504 505 _C and Objective-C-only Warning Options_ 506 -Wbad-function-cast -Wmissing-declarations 507 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs 508 -Wold-style-declaration -Wold-style-definition 509 -Wstrict-prototypes -Wtraditional -Wtraditional-conversion 510 -Wdeclaration-after-statement -Wpointer-sign 511 512 _Debugging Options_ 513 *Note Options for Debugging Your Program or GCC: Debugging Options. 514 -dLETTERS -dumpspecs -dumpmachine -dumpversion 515 -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST 516 -fdump-noaddr -fdump-unnumbered 517 -fdump-translation-unit[-N] 518 -fdump-class-hierarchy[-N] 519 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline 520 -fdump-statistics 521 -fdump-tree-all 522 -fdump-tree-original[-N] 523 -fdump-tree-optimized[-N] 524 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias 525 -fdump-tree-ch 526 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 527 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 528 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N] 529 -fdump-tree-dom[-N] 530 -fdump-tree-dse[-N] 531 -fdump-tree-phiopt[-N] 532 -fdump-tree-forwprop[-N] 533 -fdump-tree-copyrename[-N] 534 -fdump-tree-nrv -fdump-tree-vect 535 -fdump-tree-sink 536 -fdump-tree-sra[-N] 537 -fdump-tree-fre[-N] 538 -fdump-tree-vrp[-N] 539 -ftree-vectorizer-verbose=N 540 -fdump-tree-storeccp[-N] 541 -feliminate-dwarf2-dups -feliminate-unused-debug-types 542 -feliminate-unused-debug-symbols -femit-class-debug-always 543 -fenable-icf-debug 544 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 545 -frandom-seed=STRING -fsched-verbose=N 546 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose 547 -ftest-coverage -ftime-report -fvar-tracking 548 -g -gLEVEL -gcoff -gdwarf-2 549 -ggdb -gmlt -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ 550 -fno-merge-debug-strings -fno-dwarf2-cfi-asm 551 -fdebug-prefix-map=OLD=NEW 552 -femit-struct-debug-baseonly -femit-struct-debug-reduced 553 -femit-struct-debug-detailed[=SPEC-LIST] 554 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 555 -print-multi-directory -print-multi-lib 556 -print-prog-name=PROGRAM -print-search-dirs -Q 557 -print-sysroot -print-sysroot-headers-suffix 558 -save-temps -time 559 560 _Optimization Options_ 561 *Note Options that Control Optimization: Optimize Options. 562 -falign-functions[=N] -falign-jumps[=N] 563 -falign-labels[=N] -falign-loops[=N] -fassociative-math 564 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize 565 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves 566 -fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping 567 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range 568 -fdata-sections -fdce -fdce 569 -fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse 570 -fearly-inlining -fexpensive-optimizations -ffast-math 571 -ffinite-math-only -ffloat-store -fforward-propagate 572 -ffunction-sections -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm 573 -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining 574 -finline-functions -finline-functions-called-once -finline-limit=N 575 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg -fipa-pta 576 -fipa-pure-const -fipa-reference -fipa-struct-reorg 577 -fipa-type-escape -fira-algorithm=ALGORITHM 578 -fira-region=REGION -fira-coalesce -fno-ira-share-save-slots 579 -fno-ira-share-spill-slots -fira-verbose=N 580 -fivopts -fkeep-inline-functions -fkeep-static-consts 581 -floop-block -floop-interchange -floop-strip-mine 582 -fmerge-all-constants -fmerge-constants -fmodulo-sched 583 -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap 584 -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline 585 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 586 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 587 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 588 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 589 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls 590 -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays 591 -fprofile-correction -fprofile-dir=PATH -fprofile-generate 592 -fprofile-generate=PATH 593 -fprofile-use -fprofile-use=PATH -fprofile-values 594 -freciprocal-math -fregmove -frename-registers -freorder-blocks 595 -freorder-blocks-and-partition -freorder-functions 596 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 597 -fripa -fripa-disallow-opt-mismatch -fripa-verbose -frounding-math 598 -fsample-profile -fsample-profile-aggregate-using -fsched2-use-superblocks 599 -fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous 600 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 601 -fschedule-insns -fschedule-insns2 -fsection-anchors -fsee 602 -fselective-scheduling -fselective-scheduling2 603 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops 604 -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller 605 -fsplit-wide-types -fstack-protector -fstack-protector-all 606 -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer 607 -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop 608 -ftree-copyrename -ftree-dce 609 -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im 610 -ftree-loop-distribution 611 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize 612 -ftree-lr-shrinking 613 -ftree-parallelize-loops=N -ftree-pre -ftree-reassoc 614 -ftree-sink -ftree-sra -ftree-switch-conversion 615 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp 616 -funit-at-a-time -funroll-all-loops -funroll-loops 617 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops 618 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb 619 -fwhole-program 620 --param NAME=VALUE 621 -O -O0 -O1 -O2 -O3 -Os 622 623 _Preprocessor Options_ 624 *Note Options Controlling the Preprocessor: Preprocessor Options. 625 -AQUESTION=ANSWER 626 -A-QUESTION[=ANSWER] 627 -C -dD -dI -dM -dN 628 -DMACRO[=DEFN] -E -H 629 -idirafter DIR 630 -include FILE -imacros FILE 631 -iprefix FILE -iwithprefix DIR 632 -iwithprefixbefore DIR -isystem DIR 633 -imultilib DIR -isysroot DIR 634 -M -MM -MF -MG -MP -MQ -MT -nostdinc 635 -P -fworking-directory -remap 636 -trigraphs -undef -UMACRO -Wp,OPTION 637 -Xpreprocessor OPTION 638 639 _Assembler Option_ 640 *Note Passing Options to the Assembler: Assembler Options. 641 -Wa,OPTION -Xassembler OPTION 642 643 _Linker Options_ 644 *Note Options for Linking: Link Options. 645 OBJECT-FILE-NAME -lLIBRARY 646 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 647 -s -static -static-libgcc -shared -shared-libgcc -symbolic 648 -T SCRIPT -Wl,OPTION -Xlinker OPTION 649 -u SYMBOL 650 651 _Directory Options_ 652 *Note Options for Directory Search: Directory Options. 653 -BPREFIX -IDIR -iquoteDIR -LDIR 654 -specs=FILE -I- --sysroot=DIR 655 656 _Target Options_ 657 *Note Target Options::. 658 -V VERSION -b MACHINE 659 660 _Machine Dependent Options_ 661 *Note Hardware Models and Configurations: Submodel Options. 662 663 _ARC Options_ 664 -EB -EL 665 -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION 666 -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION 667 668 _ARM Options_ 669 -mapcs-frame -mno-apcs-frame 670 -mabi=NAME 671 -mapcs-stack-check -mno-apcs-stack-check 672 -mapcs-float -mno-apcs-float 673 -mapcs-reentrant -mno-apcs-reentrant 674 -msched-prolog -mno-sched-prolog 675 -mlittle-endian -mbig-endian -mwords-little-endian 676 -mfloat-abi=NAME -msoft-float -mhard-float -mfpe 677 -mthumb-interwork -mno-thumb-interwork 678 -mcpu=NAME -march=NAME -mfpu=NAME 679 -mstructure-size-boundary=N 680 -mabort-on-noreturn 681 -mlong-calls -mno-long-calls 682 -msingle-pic-base -mno-single-pic-base 683 -mpic-register=REG 684 -mnop-fun-dllimport 685 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns 686 -mpoke-function-name 687 -mthumb -marm 688 -mtpcs-frame -mtpcs-leaf-frame 689 -mcaller-super-interworking -mcallee-super-interworking 690 -mtp=NAME 691 -mword-relocations 692 -mfix-cortex-m3-ldrd 693 -mandroid 694 695 _AVR Options_ 696 -mmcu=MCU -msize -minit-stack=N -mno-interrupts 697 -mcall-prologues -mno-tablejump -mtiny-stack -mint8 698 699 _Blackfin Options_ 700 -mcpu=CPU[-SIREVISION] 701 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 702 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 703 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 704 -mno-id-shared-library -mshared-library-id=N 705 -mleaf-id-shared-library -mno-leaf-id-shared-library 706 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 707 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 708 -micplb 709 710 _CRIS Options_ 711 -mcpu=CPU -march=CPU -mtune=CPU 712 -mmax-stack-frame=N -melinux-stacksize=N 713 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 714 -mstack-align -mdata-align -mconst-align 715 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 716 -melf -maout -melinux -mlinux -sim -sim2 717 -mmul-bug-workaround -mno-mul-bug-workaround 718 719 _CRX Options_ 720 -mmac -mpush-args 721 722 _Darwin Options_ 723 -all_load -allowable_client -arch -arch_errors_fatal 724 -arch_only -bind_at_load -bundle -bundle_loader 725 -client_name -compatibility_version -current_version 726 -dead_strip 727 -dependency-file -dylib_file -dylinker_install_name 728 -dynamic -dynamiclib -exported_symbols_list 729 -filelist -flat_namespace -force_cpusubtype_ALL 730 -force_flat_namespace -headerpad_max_install_names 731 -iframework 732 -image_base -init -install_name -keep_private_externs 733 -multi_module -multiply_defined -multiply_defined_unused 734 -noall_load -no_dead_strip_inits_and_terms 735 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 736 -pagezero_size -prebind -prebind_all_twolevel_modules 737 -private_bundle -read_only_relocs -sectalign 738 -sectobjectsymbols -whyload -seg1addr 739 -sectcreate -sectobjectsymbols -sectorder 740 -segaddr -segs_read_only_addr -segs_read_write_addr 741 -seg_addr_table -seg_addr_table_filename -seglinkedit 742 -segprot -segs_read_only_addr -segs_read_write_addr 743 -single_module -static -sub_library -sub_umbrella 744 -twolevel_namespace -umbrella -undefined 745 -unexported_symbols_list -weak_reference_mismatches 746 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 747 -mkernel -mone-byte-bool 748 749 _DEC Alpha Options_ 750 -mno-fp-regs -msoft-float -malpha-as -mgas 751 -mieee -mieee-with-inexact -mieee-conformant 752 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 753 -mtrap-precision=MODE -mbuild-constants 754 -mcpu=CPU-TYPE -mtune=CPU-TYPE 755 -mbwx -mmax -mfix -mcix 756 -mfloat-vax -mfloat-ieee 757 -mexplicit-relocs -msmall-data -mlarge-data 758 -msmall-text -mlarge-text 759 -mmemory-latency=TIME 760 761 _DEC Alpha/VMS Options_ 762 -mvms-return-codes 763 764 _FR30 Options_ 765 -msmall-model -mno-lsim 766 767 _FRV Options_ 768 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 769 -mhard-float -msoft-float 770 -malloc-cc -mfixed-cc -mdword -mno-dword 771 -mdouble -mno-double 772 -mmedia -mno-media -mmuladd -mno-muladd 773 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 774 -mlinked-fp -mlong-calls -malign-labels 775 -mlibrary-pic -macc-4 -macc-8 776 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 777 -moptimize-membar -mno-optimize-membar 778 -mscc -mno-scc -mcond-exec -mno-cond-exec 779 -mvliw-branch -mno-vliw-branch 780 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 781 -mno-nested-cond-exec -mtomcat-stats 782 -mTLS -mtls 783 -mcpu=CPU 784 785 _GNU/Linux Options_ 786 -muclibc 787 788 _H8/300 Options_ 789 -mrelax -mh -ms -mn -mint32 -malign-300 790 791 _HPPA Options_ 792 -march=ARCHITECTURE-TYPE 793 -mbig-switch -mdisable-fpregs -mdisable-indexing 794 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 795 -mfixed-range=REGISTER-RANGE 796 -mjump-in-delay -mlinker-opt -mlong-calls 797 -mlong-load-store -mno-big-switch -mno-disable-fpregs 798 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 799 -mno-jump-in-delay -mno-long-load-store 800 -mno-portable-runtime -mno-soft-float 801 -mno-space-regs -msoft-float -mpa-risc-1-0 802 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 803 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 804 -munix=UNIX-STD -nolibdld -static -threads 805 806 _i386 and x86-64 Options_ 807 -mtune=CPU-TYPE -march=CPU-TYPE 808 -mfpmath=UNIT 809 -masm=DIALECT -mno-fancy-math-387 810 -mno-fp-ret-in-387 -msoft-float 811 -mno-wide-multiply -mrtd -malign-double 812 -mpreferred-stack-boundary=NUM 813 -mincoming-stack-boundary=NUM 814 -mcld -mcx16 -msahf -mrecip 815 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 816 -maes -mpclmul 817 -msse4a -m3dnow -mpopcnt -mabm -msse5 818 -mthreads -mno-align-stringops -minline-all-stringops 819 -minline-stringops-dynamically -minline-compares 820 -mstringop-strategy=ALG -mpush-args -maccumulate-outgoing-args 821 -m128bit-long-double -m96bit-long-double -mregparm=NUM -msseregparm 822 -mveclibabi=TYPE -mpc32 -mpc64 -mpc80 -mstackrealign 823 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 824 -mcmodel=CODE-MODEL 825 -m32 -m64 -mlarge-data-threshold=NUM 826 -mfused-madd -mno-fused-madd -msse2avx 827 828 _IA-64 Options_ 829 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 830 -mvolatile-asm-stop -mregister-names -mno-sdata 831 -mconstant-gp -mauto-pic -minline-float-divide-min-latency 832 -minline-float-divide-max-throughput 833 -minline-int-divide-min-latency 834 -minline-int-divide-max-throughput 835 -minline-sqrt-min-latency -minline-sqrt-max-throughput 836 -mno-dwarf2-asm -mearly-stop-bits 837 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 838 -mtune=CPU-TYPE -mt -pthread -milp32 -mlp64 839 -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec 840 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 841 -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose 842 -mno-sched-prefer-non-data-spec-insns 843 -mno-sched-prefer-non-control-spec-insns 844 -mno-sched-count-spec-in-critical-path 845 846 _M32R/D Options_ 847 -m32r2 -m32rx -m32r 848 -mdebug 849 -malign-loops -mno-align-loops 850 -missue-rate=NUMBER 851 -mbranch-cost=NUMBER 852 -mmodel=CODE-SIZE-MODEL-TYPE 853 -msdata=SDATA-TYPE 854 -mno-flush-func -mflush-func=NAME 855 -mno-flush-trap -mflush-trap=NUMBER 856 -G NUM 857 858 _M32C Options_ 859 -mcpu=CPU -msim -memregs=NUMBER 860 861 _M680x0 Options_ 862 -march=ARCH -mcpu=CPU -mtune=TUNE 863 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 864 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 865 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 866 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 867 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 868 -malign-int -mstrict-align -msep-data -mno-sep-data 869 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 870 -mxgot -mno-xgot 871 872 _M68hc1x Options_ 873 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 874 -mauto-incdec -minmax -mlong-calls -mshort 875 -msoft-reg-count=COUNT 876 877 _MCore Options_ 878 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 879 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 880 -m4byte-functions -mno-4byte-functions -mcallgraph-data 881 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 882 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 883 884 _MIPS Options_ 885 -EL -EB -march=ARCH -mtune=ARCH 886 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 887 -mips64 -mips64r2 888 -mips16 -mno-mips16 -mflip-mips16 889 -minterlink-mips16 -mno-interlink-mips16 890 -mabi=ABI -mabicalls -mno-abicalls 891 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 892 -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float 893 -msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 894 -mfpu=FPU-TYPE 895 -msmartmips -mno-smartmips 896 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 897 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 898 -mlong64 -mlong32 -msym32 -mno-sym32 899 -GNUM -mlocal-sdata -mno-local-sdata 900 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 901 -membedded-data -mno-embedded-data 902 -muninit-const-in-rodata -mno-uninit-const-in-rodata 903 -mcode-readable=SETTING 904 -msplit-addresses -mno-split-addresses 905 -mexplicit-relocs -mno-explicit-relocs 906 -mcheck-zero-division -mno-check-zero-division 907 -mdivide-traps -mdivide-breaks 908 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 909 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 910 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 911 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 912 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 913 -mflush-func=FUNC -mno-flush-func 914 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 915 -mfp-exceptions -mno-fp-exceptions 916 -mvr4130-align -mno-vr4130-align 917 918 _MMIX Options_ 919 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 920 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 921 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 922 -mno-base-addresses -msingle-exit -mno-single-exit 923 924 _MN10300 Options_ 925 -mmult-bug -mno-mult-bug 926 -mam33 -mno-am33 927 -mam33-2 -mno-am33-2 928 -mreturn-pointer-on-d0 929 -mno-crt0 -mrelax 930 931 _PDP-11 Options_ 932 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 933 -mbcopy -mbcopy-builtin -mint32 -mno-int16 934 -mint16 -mno-int32 -mfloat32 -mno-float64 935 -mfloat64 -mno-float32 -mabshi -mno-abshi 936 -mbranch-expensive -mbranch-cheap 937 -msplit -mno-split -munix-asm -mdec-asm 938 939 _picoChip Options_ 940 -mae=AE_TYPE -mvliw-lookahead=N 941 -msymbol-as-address -mno-inefficient-warnings 942 943 _PowerPC Options_ See RS/6000 and PowerPC Options. 944 945 _RS/6000 and PowerPC Options_ 946 -mcpu=CPU-TYPE 947 -mtune=CPU-TYPE 948 -mpower -mno-power -mpower2 -mno-power2 949 -mpowerpc -mpowerpc64 -mno-powerpc 950 -maltivec -mno-altivec 951 -mpowerpc-gpopt -mno-powerpc-gpopt 952 -mpowerpc-gfxopt -mno-powerpc-gfxopt 953 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mfprnd -mno-fprnd 954 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 955 -mnew-mnemonics -mold-mnemonics 956 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 957 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 958 -malign-power -malign-natural 959 -msoft-float -mhard-float -mmultiple -mno-multiple 960 -msingle-float -mdouble-float -msimple-fpu 961 -mstring -mno-string -mupdate -mno-update 962 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 963 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 964 -mstrict-align -mno-strict-align -mrelocatable 965 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 966 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 967 -mdynamic-no-pic -maltivec -mswdiv 968 -mprioritize-restricted-insns=PRIORITY 969 -msched-costly-dep=DEPENDENCE_TYPE 970 -minsert-sched-nops=SCHEME 971 -mcall-sysv -mcall-netbsd 972 -maix-struct-return -msvr4-struct-return 973 -mabi=ABI-TYPE -msecure-plt -mbss-plt 974 -misel -mno-isel 975 -misel=yes -misel=no 976 -mspe -mno-spe 977 -mspe=yes -mspe=no 978 -mpaired 979 -mgen-cell-microcode -mwarn-cell-microcode 980 -mvrsave -mno-vrsave 981 -mmulhw -mno-mulhw 982 -mdlmzb -mno-dlmzb 983 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 984 -mprototype -mno-prototype 985 -msim -mmvme -mads -myellowknife -memb -msdata 986 -msdata=OPT -mvxworks -G NUM -pthread 987 988 _S/390 and zSeries Options_ 989 -mtune=CPU-TYPE -march=CPU-TYPE 990 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 991 -mlong-double-64 -mlong-double-128 992 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 993 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 994 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 995 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 996 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 997 998 _Score Options_ 999 -meb -mel 1000 -mnhwloop 1001 -muls 1002 -mmac 1003 -mscore5 -mscore5u -mscore7 -mscore7d 1004 1005 _SH Options_ 1006 -m1 -m2 -m2e -m3 -m3e 1007 -m4-nofpu -m4-single-only -m4-single -m4 1008 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1009 -m5-64media -m5-64media-nofpu 1010 -m5-32media -m5-32media-nofpu 1011 -m5-compact -m5-compact-nofpu 1012 -mb -ml -mdalign -mrelax 1013 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1014 -mieee -mbitops -misize -minline-ic_invalidate -mpadstruct -mspace 1015 -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1016 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1017 -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1018 -minvalid-symbols 1019 1020 _SPARC Options_ 1021 -mcpu=CPU-TYPE 1022 -mtune=CPU-TYPE 1023 -mcmodel=CODE-MODEL 1024 -m32 -m64 -mapp-regs -mno-app-regs 1025 -mfaster-structs -mno-faster-structs 1026 -mfpu -mno-fpu -mhard-float -msoft-float 1027 -mhard-quad-float -msoft-quad-float 1028 -mimpure-text -mno-impure-text -mlittle-endian 1029 -mstack-bias -mno-stack-bias 1030 -munaligned-doubles -mno-unaligned-doubles 1031 -mv8plus -mno-v8plus -mvis -mno-vis 1032 -threads -pthreads -pthread 1033 1034 _SPU Options_ 1035 -mwarn-reloc -merror-reloc 1036 -msafe-dma -munsafe-dma 1037 -mbranch-hints 1038 -msmall-mem -mlarge-mem -mstdmain 1039 -mfixed-range=REGISTER-RANGE 1040 1041 _System V Options_ 1042 -Qy -Qn -YP,PATHS -Ym,DIR 1043 1044 _V850 Options_ 1045 -mlong-calls -mno-long-calls -mep -mno-ep 1046 -mprolog-function -mno-prolog-function -mspace 1047 -mtda=N -msda=N -mzda=N 1048 -mapp-regs -mno-app-regs 1049 -mdisable-callt -mno-disable-callt 1050 -mv850e1 1051 -mv850e 1052 -mv850 -mbig-switch 1053 1054 _VAX Options_ 1055 -mg -mgnu -munix 1056 1057 _VxWorks Options_ 1058 -mrtp -non-static -Bstatic -Bdynamic 1059 -Xbind-lazy -Xbind-now 1060 1061 _x86-64 Options_ See i386 and x86-64 Options. 1062 1063 _i386 and x86-64 Windows Options_ 1064 -mconsole -mcygwin -mno-cygwin -mdll 1065 -mnop-fun-dllimport -mthread -mwin32 -mwindows 1066 1067 _Xstormy16 Options_ 1068 -msim 1069 1070 _Xtensa Options_ 1071 -mconst16 -mno-const16 1072 -mfused-madd -mno-fused-madd 1073 -mserialize-volatile -mno-serialize-volatile 1074 -mtext-section-literals -mno-text-section-literals 1075 -mtarget-align -mno-target-align 1076 -mlongcalls -mno-longcalls 1077 1078 _zSeries Options_ See S/390 and zSeries Options. 1079 1080 _Code Generation Options_ 1081 *Note Options for Code Generation Conventions: Code Gen Options. 1082 -fcall-saved-REG -fcall-used-REG 1083 -ffixed-REG -fexceptions 1084 -fnon-call-exceptions -funwind-tables 1085 -fasynchronous-unwind-tables 1086 -finhibit-size-directive -finstrument-functions 1087 -finstrument-functions-exclude-function-list=SYM,SYM,... 1088 -finstrument-functions-exclude-file-list=FILE,FILE,... 1089 -fno-common -fno-ident 1090 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1091 -fno-jump-tables 1092 -frecord-gcc-switches 1093 -freg-struct-return -fshort-enums 1094 -fshort-double -fshort-wchar 1095 -fverbose-asm -fpack-struct[=N] -fstack-check 1096 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1097 -fno-stack-limit -fargument-alias -fargument-noalias 1098 -fargument-noalias-global -fargument-noalias-anything 1099 -fleading-underscore -ftls-model=MODEL 1100 -ftrapv -fwrapv -fbounds-check 1101 -fvisibility 1102 1103 1104 * Menu: 1105 1106 * Overall Options:: Controlling the kind of output: 1107 an executable, object files, assembler files, 1108 or preprocessed source. 1109 * C Dialect Options:: Controlling the variant of C language compiled. 1110 * C++ Dialect Options:: Variations on C++. 1111 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 1112 and Objective-C++. 1113 * Language Independent Options:: Controlling how diagnostics should be 1114 formatted. 1115 * Warning Options:: How picky should the compiler be? 1116 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 1117 * Optimize Options:: How much optimization? 1118 * Preprocessor Options:: Controlling header files and macro definitions. 1119 Also, getting dependency information for Make. 1120 * Assembler Options:: Passing options to the assembler. 1121 * Link Options:: Specifying libraries and so on. 1122 * Directory Options:: Where to find header files and libraries. 1123 Where to find the compiler executable files. 1124 * Spec Files:: How to pass switches to sub-processes. 1125 * Target Options:: Running a cross-compiler, or an old version of GCC. 1126 1127 1128 File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1129 1130 3.2 Options Controlling the Kind of Output 1131 ========================================== 1132 1133 Compilation can involve up to four stages: preprocessing, compilation 1134 proper, assembly and linking, always in that order. GCC is capable of 1135 preprocessing and compiling several files either into several assembler 1136 input files, or into one assembler input file; then each assembler 1137 input file produces an object file, and linking combines all the object 1138 files (those newly compiled, and those specified as input) into an 1139 executable file. 1140 1141 For any given input file, the file name suffix determines what kind of 1142 compilation is done: 1143 1144 `FILE.c' 1145 C source code which must be preprocessed. 1146 1147 `FILE.i' 1148 C source code which should not be preprocessed. 1149 1150 `FILE.ii' 1151 C++ source code which should not be preprocessed. 1152 1153 `FILE.m' 1154 Objective-C source code. Note that you must link with the 1155 `libobjc' library to make an Objective-C program work. 1156 1157 `FILE.mi' 1158 Objective-C source code which should not be preprocessed. 1159 1160 `FILE.mm' 1161 `FILE.M' 1162 Objective-C++ source code. Note that you must link with the 1163 `libobjc' library to make an Objective-C++ program work. Note 1164 that `.M' refers to a literal capital M. 1165 1166 `FILE.mii' 1167 Objective-C++ source code which should not be preprocessed. 1168 1169 `FILE.h' 1170 C, C++, Objective-C or Objective-C++ header file to be turned into 1171 a precompiled header. 1172 1173 `FILE.cc' 1174 `FILE.cp' 1175 `FILE.cxx' 1176 `FILE.cpp' 1177 `FILE.CPP' 1178 `FILE.c++' 1179 `FILE.C' 1180 C++ source code which must be preprocessed. Note that in `.cxx', 1181 the last two letters must both be literally `x'. Likewise, `.C' 1182 refers to a literal capital C. 1183 1184 `FILE.mm' 1185 `FILE.M' 1186 Objective-C++ source code which must be preprocessed. 1187 1188 `FILE.mii' 1189 Objective-C++ source code which should not be preprocessed. 1190 1191 `FILE.hh' 1192 `FILE.H' 1193 `FILE.hp' 1194 `FILE.hxx' 1195 `FILE.hpp' 1196 `FILE.HPP' 1197 `FILE.h++' 1198 `FILE.tcc' 1199 C++ header file to be turned into a precompiled header. 1200 1201 `FILE.f' 1202 `FILE.for' 1203 `FILE.ftn' 1204 Fixed form Fortran source code which should not be preprocessed. 1205 1206 `FILE.F' 1207 `FILE.FOR' 1208 `FILE.fpp' 1209 `FILE.FPP' 1210 `FILE.FTN' 1211 Fixed form Fortran source code which must be preprocessed (with 1212 the traditional preprocessor). 1213 1214 `FILE.f90' 1215 `FILE.f95' 1216 `FILE.f03' 1217 `FILE.f08' 1218 Free form Fortran source code which should not be preprocessed. 1219 1220 `FILE.F90' 1221 `FILE.F95' 1222 `FILE.F03' 1223 `FILE.F08' 1224 Free form Fortran source code which must be preprocessed (with the 1225 traditional preprocessor). 1226 1227 `FILE.ads' 1228 Ada source code file which contains a library unit declaration (a 1229 declaration of a package, subprogram, or generic, or a generic 1230 instantiation), or a library unit renaming declaration (a package, 1231 generic, or subprogram renaming declaration). Such files are also 1232 called "specs". 1233 1234 `FILE.adb' 1235 Ada source code file containing a library unit body (a subprogram 1236 or package body). Such files are also called "bodies". 1237 1238 `FILE.s' 1239 Assembler code. 1240 1241 `FILE.S' 1242 `FILE.sx' 1243 Assembler code which must be preprocessed. 1244 1245 `OTHER' 1246 An object file to be fed straight into linking. Any file name 1247 with no recognized suffix is treated this way. 1248 1249 You can specify the input language explicitly with the `-x' option: 1250 1251 `-x LANGUAGE' 1252 Specify explicitly the LANGUAGE for the following input files 1253 (rather than letting the compiler choose a default based on the 1254 file name suffix). This option applies to all following input 1255 files until the next `-x' option. Possible values for LANGUAGE 1256 are: 1257 c c-header c-cpp-output 1258 c++ c++-header c++-cpp-output 1259 objective-c objective-c-header objective-c-cpp-output 1260 objective-c++ objective-c++-header objective-c++-cpp-output 1261 assembler assembler-with-cpp 1262 ada 1263 f77 f77-cpp-input f95 f95-cpp-input 1264 java 1265 1266 `-x none' 1267 Turn off any specification of a language, so that subsequent files 1268 are handled according to their file name suffixes (as they are if 1269 `-x' has not been used at all). 1270 1271 `-pass-exit-codes' 1272 Normally the `gcc' program will exit with the code of 1 if any 1273 phase of the compiler returns a non-success return code. If you 1274 specify `-pass-exit-codes', the `gcc' program will instead return 1275 with numerically highest error produced by any phase that returned 1276 an error indication. The C, C++, and Fortran frontends return 4, 1277 if an internal compiler error is encountered. 1278 1279 If you only want some of the stages of compilation, you can use `-x' 1280 (or filename suffixes) to tell `gcc' where to start, and one of the 1281 options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1282 some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1283 do nothing at all. 1284 1285 `-c' 1286 Compile or assemble the source files, but do not link. The linking 1287 stage simply is not done. The ultimate output is in the form of an 1288 object file for each source file. 1289 1290 By default, the object file name for a source file is made by 1291 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1292 1293 Unrecognized input files, not requiring compilation or assembly, 1294 are ignored. 1295 1296 `-S' 1297 Stop after the stage of compilation proper; do not assemble. The 1298 output is in the form of an assembler code file for each 1299 non-assembler input file specified. 1300 1301 By default, the assembler file name for a source file is made by 1302 replacing the suffix `.c', `.i', etc., with `.s'. 1303 1304 Input files that don't require compilation are ignored. 1305 1306 `-E' 1307 Stop after the preprocessing stage; do not run the compiler 1308 proper. The output is in the form of preprocessed source code, 1309 which is sent to the standard output. 1310 1311 Input files which don't require preprocessing are ignored. 1312 1313 `-o FILE' 1314 Place output in file FILE. This applies regardless to whatever 1315 sort of output is being produced, whether it be an executable file, 1316 an object file, an assembler file or preprocessed C code. 1317 1318 If `-o' is not specified, the default is to put an executable file 1319 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1320 assembler file in `SOURCE.s', a precompiled header file in 1321 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1322 output. 1323 1324 `-v' 1325 Print (on standard error output) the commands executed to run the 1326 stages of compilation. Also print the version number of the 1327 compiler driver program and of the preprocessor and the compiler 1328 proper. 1329 1330 `-###' 1331 Like `-v' except the commands are not executed and all command 1332 arguments are quoted. This is useful for shell scripts to capture 1333 the driver-generated command lines. 1334 1335 `-pipe' 1336 Use pipes rather than temporary files for communication between the 1337 various stages of compilation. This fails to work on some systems 1338 where the assembler is unable to read from a pipe; but the GNU 1339 assembler has no trouble. 1340 1341 `-combine' 1342 If you are compiling multiple source files, this option tells the 1343 driver to pass all the source files to the compiler at once (for 1344 those languages for which the compiler can handle this). This 1345 will allow intermodule analysis (IMA) to be performed by the 1346 compiler. Currently the only language for which this is supported 1347 is C. If you pass source files for multiple languages to the 1348 driver, using this option, the driver will invoke the compiler(s) 1349 that support IMA once each, passing each compiler all the source 1350 files appropriate for it. For those languages that do not support 1351 IMA this option will be ignored, and the compiler will be invoked 1352 once for each source file in that language. If you use this 1353 option in conjunction with `-save-temps', the compiler will 1354 generate multiple pre-processed files (one for each source file), 1355 but only one (combined) `.o' or `.s' file. 1356 1357 `--help' 1358 Print (on the standard output) a description of the command line 1359 options understood by `gcc'. If the `-v' option is also specified 1360 then `--help' will also be passed on to the various processes 1361 invoked by `gcc', so that they can display the command line options 1362 they accept. If the `-Wextra' option has also been specified 1363 (prior to the `--help' option), then command line options which 1364 have no documentation associated with them will also be displayed. 1365 1366 `--target-help' 1367 Print (on the standard output) a description of target-specific 1368 command line options for each tool. For some targets extra 1369 target-specific information may also be printed. 1370 1371 `--help={CLASS|[^]QUALIFIER}[,...]' 1372 Print (on the standard output) a description of the command line 1373 options understood by the compiler that fit into all specified 1374 classes and qualifiers. These are the supported classes: 1375 1376 `optimizers' 1377 This will display all of the optimization options supported 1378 by the compiler. 1379 1380 `warnings' 1381 This will display all of the options controlling warning 1382 messages produced by the compiler. 1383 1384 `target' 1385 This will display target-specific options. Unlike the 1386 `--target-help' option however, target-specific options of the 1387 linker and assembler will not be displayed. This is because 1388 those tools do not currently support the extended `--help=' 1389 syntax. 1390 1391 `params' 1392 This will display the values recognized by the `--param' 1393 option. 1394 1395 LANGUAGE 1396 This will display the options supported for LANGUAGE, where 1397 LANGUAGE is the name of one of the languages supported in this 1398 version of GCC. 1399 1400 `common' 1401 This will display the options that are common to all 1402 languages. 1403 1404 These are the supported qualifiers: 1405 1406 `undocumented' 1407 Display only those options which are undocumented. 1408 1409 `joined' 1410 Display options which take an argument that appears after an 1411 equal sign in the same continuous piece of text, such as: 1412 `--help=target'. 1413 1414 `separate' 1415 Display options which take an argument that appears as a 1416 separate word following the original option, such as: `-o 1417 output-file'. 1418 1419 Thus for example to display all the undocumented target-specific 1420 switches supported by the compiler the following can be used: 1421 1422 --help=target,undocumented 1423 1424 The sense of a qualifier can be inverted by prefixing it with the 1425 `^' character, so for example to display all binary warning 1426 options (i.e., ones that are either on or off and that do not take 1427 an argument), which have a description the following can be used: 1428 1429 --help=warnings,^joined,^undocumented 1430 1431 The argument to `--help=' should not consist solely of inverted 1432 qualifiers. 1433 1434 Combining several classes is possible, although this usually 1435 restricts the output by so much that there is nothing to display. 1436 One case where it does work however is when one of the classes is 1437 TARGET. So for example to display all the target-specific 1438 optimization options the following can be used: 1439 1440 --help=target,optimizers 1441 1442 The `--help=' option can be repeated on the command line. Each 1443 successive use will display its requested class of options, 1444 skipping those that have already been displayed. 1445 1446 If the `-Q' option appears on the command line before the 1447 `--help=' option, then the descriptive text displayed by `--help=' 1448 is changed. Instead of describing the displayed options, an 1449 indication is given as to whether the option is enabled, disabled 1450 or set to a specific value (assuming that the compiler knows this 1451 at the point where the `--help=' option is used). 1452 1453 Here is a truncated example from the ARM port of `gcc': 1454 1455 % gcc -Q -mabi=2 --help=target -c 1456 The following options are target specific: 1457 -mabi= 2 1458 -mabort-on-noreturn [disabled] 1459 -mapcs [disabled] 1460 1461 The output is sensitive to the effects of previous command line 1462 options, so for example it is possible to find out which 1463 optimizations are enabled at `-O2' by using: 1464 1465 -Q -O2 --help=optimizers 1466 1467 Alternatively you can discover which binary optimizations are 1468 enabled by `-O3' by using: 1469 1470 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1471 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1472 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1473 1474 `-no-canonical-prefixes' 1475 Do not expand any symbolic links, resolve references to `/../' or 1476 `/./', or make the path absolute when generating a relative prefix. 1477 1478 `--version' 1479 Display the version number and copyrights of the invoked GCC. 1480 1481 `-wrapper' 1482 Invoke all subcommands under a wrapper program. It takes a single 1483 comma separated list as an argument, which will be used to invoke 1484 the wrapper: 1485 1486 gcc -c t.c -wrapper gdb,--args 1487 1488 This will invoke all subprograms of gcc under "gdb -args", thus 1489 cc1 invocation will be "gdb -args cc1 ...". 1490 1491 `-fplugin=NAME.so' 1492 Load the plugin code in file NAME.so, assumed to be a shared 1493 object to be dlopen'd by the compiler. The base name of the 1494 shared object file is used to identify the plugin for the purposes 1495 of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below). 1496 Each plugin should define the callback functions specified in the 1497 Plugins API. 1498 1499 `-fplugin-arg-NAME-KEY=VALUE' 1500 Define an argument called KEY with a value of VALUE for the plugin 1501 called NAME. 1502 1503 `@FILE' 1504 Read command-line options from FILE. The options read are 1505 inserted in place of the original @FILE option. If FILE does not 1506 exist, or cannot be read, then the option will be treated 1507 literally, and not removed. 1508 1509 Options in FILE are separated by whitespace. A whitespace 1510 character may be included in an option by surrounding the entire 1511 option in either single or double quotes. Any character 1512 (including a backslash) may be included by prefixing the character 1513 to be included with a backslash. The FILE may itself contain 1514 additional @FILE options; any such options will be processed 1515 recursively. 1516 1517 1518 File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1519 1520 3.3 Compiling C++ Programs 1521 ========================== 1522 1523 C++ source files conventionally use one of the suffixes `.C', `.cc', 1524 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1525 `.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and 1526 preprocessed C++ files use the suffix `.ii'. GCC recognizes files with 1527 these names and compiles them as C++ programs even if you call the 1528 compiler the same way as for compiling C programs (usually with the 1529 name `gcc'). 1530 1531 However, the use of `gcc' does not add the C++ library. `g++' is a 1532 program that calls GCC and treats `.c', `.h' and `.i' files as C++ 1533 source files instead of C source files unless `-x' is used, and 1534 automatically specifies linking against the C++ library. This program 1535 is also useful when precompiling a C header file with a `.h' extension 1536 for use in C++ compilations. On many systems, `g++' is also installed 1537 with the name `c++'. 1538 1539 When you compile C++ programs, you may specify many of the same 1540 command-line options that you use for compiling programs in any 1541 language; or command-line options meaningful for C and related 1542 languages; or options that are meaningful only for C++ programs. *Note 1543 Options Controlling C Dialect: C Dialect Options, for explanations of 1544 options for languages related to C. *Note Options Controlling C++ 1545 Dialect: C++ Dialect Options, for explanations of options that are 1546 meaningful only for C++ programs. 1547 1548 1549 File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1550 1551 3.4 Options Controlling C Dialect 1552 ================================= 1553 1554 The following options control the dialect of C (or languages derived 1555 from C, such as C++, Objective-C and Objective-C++) that the compiler 1556 accepts: 1557 1558 `-ansi' 1559 In C mode, this is equivalent to `-std=c89'. In C++ mode, it is 1560 equivalent to `-std=c++98'. 1561 1562 This turns off certain features of GCC that are incompatible with 1563 ISO C90 (when compiling C code), or of standard C++ (when 1564 compiling C++ code), such as the `asm' and `typeof' keywords, and 1565 predefined macros such as `unix' and `vax' that identify the type 1566 of system you are using. It also enables the undesirable and 1567 rarely used ISO trigraph feature. For the C compiler, it disables 1568 recognition of C++ style `//' comments as well as the `inline' 1569 keyword. 1570 1571 The alternate keywords `__asm__', `__extension__', `__inline__' 1572 and `__typeof__' continue to work despite `-ansi'. You would not 1573 want to use them in an ISO C program, of course, but it is useful 1574 to put them in header files that might be included in compilations 1575 done with `-ansi'. Alternate predefined macros such as `__unix__' 1576 and `__vax__' are also available, with or without `-ansi'. 1577 1578 The `-ansi' option does not cause non-ISO programs to be rejected 1579 gratuitously. For that, `-pedantic' is required in addition to 1580 `-ansi'. *Note Warning Options::. 1581 1582 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1583 is used. Some header files may notice this macro and refrain from 1584 declaring certain functions or defining certain macros that the 1585 ISO standard doesn't call for; this is to avoid interfering with 1586 any programs that might use these names for other things. 1587 1588 Functions that would normally be built in but do not have semantics 1589 defined by ISO C (such as `alloca' and `ffs') are not built-in 1590 functions when `-ansi' is used. *Note Other built-in functions 1591 provided by GCC: Other Builtins, for details of the functions 1592 affected. 1593 1594 `-std=' 1595 Determine the language standard. *Note Language Standards 1596 Supported by GCC: Standards, for details of these standard 1597 versions. This option is currently only supported when compiling 1598 C or C++. 1599 1600 The compiler can accept several base standards, such as `c89' or 1601 `c++98', and GNU dialects of those standards, such as `gnu89' or 1602 `gnu++98'. By specifying a base standard, the compiler will 1603 accept all programs following that standard and those using GNU 1604 extensions that do not contradict it. For example, `-std=c89' 1605 turns off certain features of GCC that are incompatible with ISO 1606 C90, such as the `asm' and `typeof' keywords, but not other GNU 1607 extensions that do not have a meaning in ISO C90, such as omitting 1608 the middle term of a `?:' expression. On the other hand, by 1609 specifying a GNU dialect of a standard, all features the compiler 1610 support are enabled, even when those features change the meaning 1611 of the base standard and some strict-conforming programs may be 1612 rejected. The particular standard is used by `-pedantic' to 1613 identify which features are GNU extensions given that version of 1614 the standard. For example `-std=gnu89 -pedantic' would warn about 1615 C++ style `//' comments, while `-std=gnu99 -pedantic' would not. 1616 1617 A value for this option must be provided; possible values are 1618 1619 `c89' 1620 `iso9899:1990' 1621 Support all ISO C90 programs (certain GNU extensions that 1622 conflict with ISO C90 are disabled). Same as `-ansi' for C 1623 code. 1624 1625 `iso9899:199409' 1626 ISO C90 as modified in amendment 1. 1627 1628 `c99' 1629 `c9x' 1630 `iso9899:1999' 1631 `iso9899:199x' 1632 ISO C99. Note that this standard is not yet fully supported; 1633 see `http://gcc.gnu.org/gcc-4.4/c99status.html' for more 1634 information. The names `c9x' and `iso9899:199x' are 1635 deprecated. 1636 1637 `gnu89' 1638 GNU dialect of ISO C90 (including some C99 features). This is 1639 the default for C code. 1640 1641 `gnu99' 1642 `gnu9x' 1643 GNU dialect of ISO C99. When ISO C99 is fully implemented in 1644 GCC, this will become the default. The name `gnu9x' is 1645 deprecated. 1646 1647 `c++98' 1648 The 1998 ISO C++ standard plus amendments. Same as `-ansi' for 1649 C++ code. 1650 1651 `gnu++98' 1652 GNU dialect of `-std=c++98'. This is the default for C++ 1653 code. 1654 1655 `c++0x' 1656 The working draft of the upcoming ISO C++0x standard. This 1657 option enables experimental features that are likely to be 1658 included in C++0x. The working draft is constantly changing, 1659 and any feature that is enabled by this flag may be removed 1660 from future versions of GCC if it is not part of the C++0x 1661 standard. 1662 1663 `gnu++0x' 1664 GNU dialect of `-std=c++0x'. This option enables experimental 1665 features that may be removed in future versions of GCC. 1666 1667 `-fgnu89-inline' 1668 The option `-fgnu89-inline' tells GCC to use the traditional GNU 1669 semantics for `inline' functions when in C99 mode. *Note An 1670 Inline Function is As Fast As a Macro: Inline. This option is 1671 accepted and ignored by GCC versions 4.1.3 up to but not including 1672 4.3. In GCC versions 4.3 and later it changes the behavior of GCC 1673 in C99 mode. Using this option is roughly equivalent to adding the 1674 `gnu_inline' function attribute to all inline functions (*note 1675 Function Attributes::). 1676 1677 The option `-fno-gnu89-inline' explicitly tells GCC to use the C99 1678 semantics for `inline' when in C99 or gnu99 mode (i.e., it 1679 specifies the default behavior). This option was first supported 1680 in GCC 4.3. This option is not supported in C89 or gnu89 mode. 1681 1682 The preprocessor macros `__GNUC_GNU_INLINE__' and 1683 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 1684 effect for `inline' functions. *Note Common Predefined Macros: 1685 (cpp)Common Predefined Macros. 1686 1687 `-aux-info FILENAME' 1688 Output to the given filename prototyped declarations for all 1689 functions declared and/or defined in a translation unit, including 1690 those in header files. This option is silently ignored in any 1691 language other than C. 1692 1693 Besides declarations, the file indicates, in comments, the origin 1694 of each declaration (source file and line), whether the 1695 declaration was implicit, prototyped or unprototyped (`I', `N' for 1696 new or `O' for old, respectively, in the first character after the 1697 line number and the colon), and whether it came from a declaration 1698 or a definition (`C' or `F', respectively, in the following 1699 character). In the case of function definitions, a K&R-style list 1700 of arguments followed by their declarations is also provided, 1701 inside comments, after the declaration. 1702 1703 `-fno-asm' 1704 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1705 code can use these words as identifiers. You can use the keywords 1706 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1707 `-fno-asm'. 1708 1709 In C++, this switch only affects the `typeof' keyword, since `asm' 1710 and `inline' are standard keywords. You may want to use the 1711 `-fno-gnu-keywords' flag instead, which has the same effect. In 1712 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1713 the `asm' and `typeof' keywords, since `inline' is a standard 1714 keyword in ISO C99. 1715 1716 `-fno-builtin' 1717 `-fno-builtin-FUNCTION' 1718 Don't recognize built-in functions that do not begin with 1719 `__builtin_' as prefix. *Note Other built-in functions provided 1720 by GCC: Other Builtins, for details of the functions affected, 1721 including those which are not built-in functions when `-ansi' or 1722 `-std' options for strict ISO C conformance are used because they 1723 do not have an ISO standard meaning. 1724 1725 GCC normally generates special code to handle certain built-in 1726 functions more efficiently; for instance, calls to `alloca' may 1727 become single instructions that adjust the stack directly, and 1728 calls to `memcpy' may become inline copy loops. The resulting 1729 code is often both smaller and faster, but since the function 1730 calls no longer appear as such, you cannot set a breakpoint on 1731 those calls, nor can you change the behavior of the functions by 1732 linking with a different library. In addition, when a function is 1733 recognized as a built-in function, GCC may use information about 1734 that function to warn about problems with calls to that function, 1735 or to generate more efficient code, even if the resulting code 1736 still contains calls to that function. For example, warnings are 1737 given with `-Wformat' for bad calls to `printf', when `printf' is 1738 built in, and `strlen' is known not to modify global memory. 1739 1740 With the `-fno-builtin-FUNCTION' option only the built-in function 1741 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 1742 If a function is named that is not built-in in this version of 1743 GCC, this option is ignored. There is no corresponding 1744 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 1745 functions selectively when using `-fno-builtin' or 1746 `-ffreestanding', you may define macros such as: 1747 1748 #define abs(n) __builtin_abs ((n)) 1749 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 1750 1751 `-fhosted' 1752 Assert that compilation takes place in a hosted environment. This 1753 implies `-fbuiltin'. A hosted environment is one in which the 1754 entire standard library is available, and in which `main' has a 1755 return type of `int'. Examples are nearly everything except a 1756 kernel. This is equivalent to `-fno-freestanding'. 1757 1758 `-ffreestanding' 1759 Assert that compilation takes place in a freestanding environment. 1760 This implies `-fno-builtin'. A freestanding environment is one 1761 in which the standard library may not exist, and program startup 1762 may not necessarily be at `main'. The most obvious example is an 1763 OS kernel. This is equivalent to `-fno-hosted'. 1764 1765 *Note Language Standards Supported by GCC: Standards, for details 1766 of freestanding and hosted environments. 1767 1768 `-fopenmp' 1769 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 1770 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 1771 generates parallel code according to the OpenMP Application 1772 Program Interface v2.5 `http://www.openmp.org/'. This option 1773 implies `-pthread', and thus is only supported on targets that 1774 have support for `-pthread'. 1775 1776 `-fms-extensions' 1777 Accept some non-standard constructs used in Microsoft header files. 1778 1779 Some cases of unnamed fields in structures and unions are only 1780 accepted with this option. *Note Unnamed struct/union fields 1781 within structs/unions: Unnamed Fields, for details. 1782 1783 `-trigraphs' 1784 Support ISO C trigraphs. The `-ansi' option (and `-std' options 1785 for strict ISO C conformance) implies `-trigraphs'. 1786 1787 `-no-integrated-cpp' 1788 Performs a compilation in two passes: preprocessing and compiling. 1789 This option allows a user supplied "cc1", "cc1plus", or "cc1obj" 1790 via the `-B' option. The user supplied compilation step can then 1791 add in an additional preprocessing step after normal preprocessing 1792 but before compiling. The default is to use the integrated cpp 1793 (internal cpp) 1794 1795 The semantics of this option will change if "cc1", "cc1plus", and 1796 "cc1obj" are merged. 1797 1798 `-traditional' 1799 `-traditional-cpp' 1800 Formerly, these options caused GCC to attempt to emulate a 1801 pre-standard C compiler. They are now only supported with the 1802 `-E' switch. The preprocessor continues to support a pre-standard 1803 mode. See the GNU CPP manual for details. 1804 1805 `-fcond-mismatch' 1806 Allow conditional expressions with mismatched types in the second 1807 and third arguments. The value of such an expression is void. 1808 This option is not supported for C++. 1809 1810 `-flax-vector-conversions' 1811 Allow implicit conversions between vectors with differing numbers 1812 of elements and/or incompatible element types. This option should 1813 not be used for new code. 1814 1815 `-funsigned-char' 1816 Let the type `char' be unsigned, like `unsigned char'. 1817 1818 Each kind of machine has a default for what `char' should be. It 1819 is either like `unsigned char' by default or like `signed char' by 1820 default. 1821 1822 Ideally, a portable program should always use `signed char' or 1823 `unsigned char' when it depends on the signedness of an object. 1824 But many programs have been written to use plain `char' and expect 1825 it to be signed, or expect it to be unsigned, depending on the 1826 machines they were written for. This option, and its inverse, let 1827 you make such a program work with the opposite default. 1828 1829 The type `char' is always a distinct type from each of `signed 1830 char' or `unsigned char', even though its behavior is always just 1831 like one of those two. 1832 1833 `-fsigned-char' 1834 Let the type `char' be signed, like `signed char'. 1835 1836 Note that this is equivalent to `-fno-unsigned-char', which is the 1837 negative form of `-funsigned-char'. Likewise, the option 1838 `-fno-signed-char' is equivalent to `-funsigned-char'. 1839 1840 `-fsigned-bitfields' 1841 `-funsigned-bitfields' 1842 `-fno-signed-bitfields' 1843 `-fno-unsigned-bitfields' 1844 These options control whether a bit-field is signed or unsigned, 1845 when the declaration does not use either `signed' or `unsigned'. 1846 By default, such a bit-field is signed, because this is 1847 consistent: the basic integer types such as `int' are signed types. 1848 1849 1850 File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 1851 1852 3.5 Options Controlling C++ Dialect 1853 =================================== 1854 1855 This section describes the command-line options that are only meaningful 1856 for C++ programs; but you can also use most of the GNU compiler options 1857 regardless of what language your program is in. For example, you might 1858 compile a file `firstClass.C' like this: 1859 1860 g++ -g -frepo -O -c firstClass.C 1861 1862 In this example, only `-frepo' is an option meant only for C++ 1863 programs; you can use the other options with any language supported by 1864 GCC. 1865 1866 Here is a list of options that are _only_ for compiling C++ programs: 1867 1868 `-fabi-version=N' 1869 Use version N of the C++ ABI. Version 2 is the version of the C++ 1870 ABI that first appeared in G++ 3.4. Version 1 is the version of 1871 the C++ ABI that first appeared in G++ 3.2. Version 0 will always 1872 be the version that conforms most closely to the C++ ABI 1873 specification. Therefore, the ABI obtained using version 0 will 1874 change as ABI bugs are fixed. 1875 1876 The default is version 2. 1877 1878 `-fno-access-control' 1879 Turn off all access checking. This switch is mainly useful for 1880 working around bugs in the access control code. 1881 1882 `-fcheck-new' 1883 Check that the pointer returned by `operator new' is non-null 1884 before attempting to modify the storage allocated. This check is 1885 normally unnecessary because the C++ standard specifies that 1886 `operator new' will only return `0' if it is declared `throw()', 1887 in which case the compiler will always check the return value even 1888 without this option. In all other cases, when `operator new' has 1889 a non-empty exception specification, memory exhaustion is 1890 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 1891 1892 `-fconserve-space' 1893 Put uninitialized or runtime-initialized global variables into the 1894 common segment, as C does. This saves space in the executable at 1895 the cost of not diagnosing duplicate definitions. If you compile 1896 with this flag and your program mysteriously crashes after 1897 `main()' has completed, you may have an object that is being 1898 destroyed twice because two definitions were merged. 1899 1900 This option is no longer useful on most targets, now that support 1901 has been added for putting variables into BSS without making them 1902 common. 1903 1904 `-ffriend-injection' 1905 Inject friend functions into the enclosing namespace, so that they 1906 are visible outside the scope of the class in which they are 1907 declared. Friend functions were documented to work this way in 1908 the old Annotated C++ Reference Manual, and versions of G++ before 1909 4.1 always worked that way. However, in ISO C++ a friend function 1910 which is not declared in an enclosing scope can only be found 1911 using argument dependent lookup. This option causes friends to be 1912 injected as they were in earlier releases. 1913 1914 This option is for compatibility, and may be removed in a future 1915 release of G++. 1916 1917 `-fno-elide-constructors' 1918 The C++ standard allows an implementation to omit creating a 1919 temporary which is only used to initialize another object of the 1920 same type. Specifying this option disables that optimization, and 1921 forces G++ to call the copy constructor in all cases. 1922 1923 `-fno-enforce-eh-specs' 1924 Don't generate code to check for violation of exception 1925 specifications at runtime. This option violates the C++ standard, 1926 but may be useful for reducing code size in production builds, 1927 much like defining `NDEBUG'. This does not give user code 1928 permission to throw exceptions in violation of the exception 1929 specifications; the compiler will still optimize based on the 1930 specifications, so throwing an unexpected exception will result in 1931 undefined behavior. 1932 1933 `-ffor-scope' 1934 `-fno-for-scope' 1935 If `-ffor-scope' is specified, the scope of variables declared in 1936 a for-init-statement is limited to the `for' loop itself, as 1937 specified by the C++ standard. If `-fno-for-scope' is specified, 1938 the scope of variables declared in a for-init-statement extends to 1939 the end of the enclosing scope, as was the case in old versions of 1940 G++, and other (traditional) implementations of C++. 1941 1942 The default if neither flag is given to follow the standard, but 1943 to allow and give a warning for old-style code that would 1944 otherwise be invalid, or have different behavior. 1945 1946 `-fno-gnu-keywords' 1947 Do not recognize `typeof' as a keyword, so that code can use this 1948 word as an identifier. You can use the keyword `__typeof__' 1949 instead. `-ansi' implies `-fno-gnu-keywords'. 1950 1951 `-fno-implicit-templates' 1952 Never emit code for non-inline templates which are instantiated 1953 implicitly (i.e. by use); only emit code for explicit 1954 instantiations. *Note Template Instantiation::, for more 1955 information. 1956 1957 `-fno-implicit-inline-templates' 1958 Don't emit code for implicit instantiations of inline templates, 1959 either. The default is to handle inlines differently so that 1960 compiles with and without optimization will need the same set of 1961 explicit instantiations. 1962 1963 `-fno-implement-inlines' 1964 To save space, do not emit out-of-line copies of inline functions 1965 controlled by `#pragma implementation'. This will cause linker 1966 errors if these functions are not inlined everywhere they are 1967 called. 1968 1969 `-fms-extensions' 1970 Disable pedantic warnings about constructs used in MFC, such as 1971 implicit int and getting a pointer to member function via 1972 non-standard syntax. 1973 1974 `-fno-nonansi-builtins' 1975 Disable built-in declarations of functions that are not mandated by 1976 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 1977 `bzero', `conjf', and other related functions. 1978 1979 `-fno-operator-names' 1980 Do not treat the operator name keywords `and', `bitand', `bitor', 1981 `compl', `not', `or' and `xor' as synonyms as keywords. 1982 1983 `-fno-optional-diags' 1984 Disable diagnostics that the standard says a compiler does not 1985 need to issue. Currently, the only such diagnostic issued by G++ 1986 is the one for a name having multiple meanings within a class. 1987 1988 `-fpermissive' 1989 Downgrade some diagnostics about nonconformant code from errors to 1990 warnings. Thus, using `-fpermissive' will allow some 1991 nonconforming code to compile. 1992 1993 `-frepo' 1994 Enable automatic template instantiation at link time. This option 1995 also implies `-fno-implicit-templates'. *Note Template 1996 Instantiation::, for more information. 1997 1998 `-fno-rtti' 1999 Disable generation of information about every class with virtual 2000 functions for use by the C++ runtime type identification features 2001 (`dynamic_cast' and `typeid'). If you don't use those parts of 2002 the language, you can save some space by using this flag. Note 2003 that exception handling uses the same information, but it will 2004 generate it as needed. The `dynamic_cast' operator can still be 2005 used for casts that do not require runtime type information, i.e. 2006 casts to `void *' or to unambiguous base classes. 2007 2008 `-fstats' 2009 Emit statistics about front-end processing at the end of the 2010 compilation. This information is generally only useful to the G++ 2011 development team. 2012 2013 `-ftemplate-depth-N' 2014 Set the maximum instantiation depth for template classes to N. A 2015 limit on the template instantiation depth is needed to detect 2016 endless recursions during template class instantiation. ANSI/ISO 2017 C++ conforming programs must not rely on a maximum depth greater 2018 than 17. 2019 2020 `-fno-threadsafe-statics' 2021 Do not emit the extra code to use the routines specified in the C++ 2022 ABI for thread-safe initialization of local statics. You can use 2023 this option to reduce code size slightly in code that doesn't need 2024 to be thread-safe. 2025 2026 `-fuse-cxa-atexit' 2027 Register destructors for objects with static storage duration with 2028 the `__cxa_atexit' function rather than the `atexit' function. 2029 This option is required for fully standards-compliant handling of 2030 static destructors, but will only work if your C library supports 2031 `__cxa_atexit'. 2032 2033 `-fno-use-cxa-get-exception-ptr' 2034 Don't use the `__cxa_get_exception_ptr' runtime routine. This 2035 will cause `std::uncaught_exception' to be incorrect, but is 2036 necessary if the runtime routine is not available. 2037 2038 `-fvisibility-inlines-hidden' 2039 This switch declares that the user does not attempt to compare 2040 pointers to inline methods where the addresses of the two functions 2041 were taken in different shared objects. 2042 2043 The effect of this is that GCC may, effectively, mark inline 2044 methods with `__attribute__ ((visibility ("hidden")))' so that 2045 they do not appear in the export table of a DSO and do not require 2046 a PLT indirection when used within the DSO. Enabling this option 2047 can have a dramatic effect on load and link times of a DSO as it 2048 massively reduces the size of the dynamic export table when the 2049 library makes heavy use of templates. 2050 2051 The behavior of this switch is not quite the same as marking the 2052 methods as hidden directly, because it does not affect static 2053 variables local to the function or cause the compiler to deduce 2054 that the function is defined in only one shared object. 2055 2056 You may mark a method as having a visibility explicitly to negate 2057 the effect of the switch for that method. For example, if you do 2058 want to compare pointers to a particular inline method, you might 2059 mark it as having default visibility. Marking the enclosing class 2060 with explicit visibility will have no effect. 2061 2062 Explicitly instantiated inline methods are unaffected by this 2063 option as their linkage might otherwise cross a shared library 2064 boundary. *Note Template Instantiation::. 2065 2066 `-fvisibility-ms-compat' 2067 This flag attempts to use visibility settings to make GCC's C++ 2068 linkage model compatible with that of Microsoft Visual Studio. 2069 2070 The flag makes these changes to GCC's linkage model: 2071 2072 1. It sets the default visibility to `hidden', like 2073 `-fvisibility=hidden'. 2074 2075 2. Types, but not their members, are not hidden by default. 2076 2077 3. The One Definition Rule is relaxed for types without explicit 2078 visibility specifications which are defined in more than one 2079 different shared object: those declarations are permitted if 2080 they would have been permitted when this option was not used. 2081 2082 In new code it is better to use `-fvisibility=hidden' and export 2083 those classes which are intended to be externally visible. 2084 Unfortunately it is possible for code to rely, perhaps 2085 accidentally, on the Visual Studio behavior. 2086 2087 Among the consequences of these changes are that static data 2088 members of the same type with the same name but defined in 2089 different shared objects will be different, so changing one will 2090 not change the other; and that pointers to function members 2091 defined in different shared objects may not compare equal. When 2092 this flag is given, it is a violation of the ODR to define types 2093 with the same name differently. 2094 2095 `-fno-weak' 2096 Do not use weak symbol support, even if it is provided by the 2097 linker. By default, G++ will use weak symbols if they are 2098 available. This option exists only for testing, and should not be 2099 used by end-users; it will result in inferior code and has no 2100 benefits. This option may be removed in a future release of G++. 2101 2102 `-nostdinc++' 2103 Do not search for header files in the standard directories 2104 specific to C++, but do still search the other standard 2105 directories. (This option is used when building the C++ library.) 2106 2107 In addition, these optimization, warning, and code generation options 2108 have meanings only for C++ programs: 2109 2110 `-fno-default-inline' 2111 Do not assume `inline' for functions defined inside a class scope. 2112 *Note Options That Control Optimization: Optimize Options. Note 2113 that these functions will have linkage like inline functions; they 2114 just won't be inlined by default. 2115 2116 `-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2117 Warn when G++ generates code that is probably not compatible with 2118 the vendor-neutral C++ ABI. Although an effort has been made to 2119 warn about all such cases, there are probably some cases that are 2120 not warned about, even though G++ is generating incompatible code. 2121 There may also be cases where warnings are emitted even though 2122 the code that is generated will be compatible. 2123 2124 You should rewrite your code to avoid these warnings if you are 2125 concerned about the fact that code generated by G++ may not be 2126 binary compatible with code generated by other compilers. 2127 2128 The known incompatibilities at this point include: 2129 2130 * Incorrect handling of tail-padding for bit-fields. G++ may 2131 attempt to pack data into the same byte as a base class. For 2132 example: 2133 2134 struct A { virtual void f(); int f1 : 1; }; 2135 struct B : public A { int f2 : 1; }; 2136 2137 In this case, G++ will place `B::f2' into the same byte 2138 as`A::f1'; other compilers will not. You can avoid this 2139 problem by explicitly padding `A' so that its size is a 2140 multiple of the byte size on your platform; that will cause 2141 G++ and other compilers to layout `B' identically. 2142 2143 * Incorrect handling of tail-padding for virtual bases. G++ 2144 does not use tail padding when laying out virtual bases. For 2145 example: 2146 2147 struct A { virtual void f(); char c1; }; 2148 struct B { B(); char c2; }; 2149 struct C : public A, public virtual B {}; 2150 2151 In this case, G++ will not place `B' into the tail-padding for 2152 `A'; other compilers will. You can avoid this problem by 2153 explicitly padding `A' so that its size is a multiple of its 2154 alignment (ignoring virtual base classes); that will cause 2155 G++ and other compilers to layout `C' identically. 2156 2157 * Incorrect handling of bit-fields with declared widths greater 2158 than that of their underlying types, when the bit-fields 2159 appear in a union. For example: 2160 2161 union U { int i : 4096; }; 2162 2163 Assuming that an `int' does not have 4096 bits, G++ will make 2164 the union too small by the number of bits in an `int'. 2165 2166 * Empty classes can be placed at incorrect offsets. For 2167 example: 2168 2169 struct A {}; 2170 2171 struct B { 2172 A a; 2173 virtual void f (); 2174 }; 2175 2176 struct C : public B, public A {}; 2177 2178 G++ will place the `A' base class of `C' at a nonzero offset; 2179 it should be placed at offset zero. G++ mistakenly believes 2180 that the `A' data member of `B' is already at offset zero. 2181 2182 * Names of template functions whose types involve `typename' or 2183 template template parameters can be mangled incorrectly. 2184 2185 template <typename Q> 2186 void f(typename Q::X) {} 2187 2188 template <template <typename> class Q> 2189 void f(typename Q<int>::X) {} 2190 2191 Instantiations of these templates may be mangled incorrectly. 2192 2193 2194 It also warns psABI related changes. The known psABI changes at 2195 this point include: 2196 2197 * For SYSV/x86-64, when passing union with long double, it is 2198 changed to pass in memory as specified in psABI. For example: 2199 2200 union U { 2201 long double ld; 2202 int i; 2203 }; 2204 2205 `union U' will always be passed in memory. 2206 2207 2208 `-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2209 Warn when a class seems unusable because all the constructors or 2210 destructors in that class are private, and it has neither friends 2211 nor public static member functions. 2212 2213 `-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2214 Warn when a class has virtual functions and accessible non-virtual 2215 destructor, in which case it would be possible but unsafe to delete 2216 an instance of a derived class through a pointer to the base class. 2217 This warning is also enabled if -Weffc++ is specified. 2218 2219 `-Wreorder (C++ and Objective-C++ only)' 2220 Warn when the order of member initializers given in the code does 2221 not match the order in which they must be executed. For instance: 2222 2223 struct A { 2224 int i; 2225 int j; 2226 A(): j (0), i (1) { } 2227 }; 2228 2229 The compiler will rearrange the member initializers for `i' and 2230 `j' to match the declaration order of the members, emitting a 2231 warning to that effect. This warning is enabled by `-Wall'. 2232 2233 The following `-W...' options are not affected by `-Wall'. 2234 2235 `-Weffc++ (C++ and Objective-C++ only)' 2236 Warn about violations of the following style guidelines from Scott 2237 Meyers' `Effective C++' book: 2238 2239 * Item 11: Define a copy constructor and an assignment 2240 operator for classes with dynamically allocated memory. 2241 2242 * Item 12: Prefer initialization to assignment in constructors. 2243 2244 * Item 14: Make destructors virtual in base classes. 2245 2246 * Item 15: Have `operator=' return a reference to `*this'. 2247 2248 * Item 23: Don't try to return a reference when you must 2249 return an object. 2250 2251 2252 Also warn about violations of the following style guidelines from 2253 Scott Meyers' `More Effective C++' book: 2254 2255 * Item 6: Distinguish between prefix and postfix forms of 2256 increment and decrement operators. 2257 2258 * Item 7: Never overload `&&', `||', or `,'. 2259 2260 2261 When selecting this option, be aware that the standard library 2262 headers do not obey all of these guidelines; use `grep -v' to 2263 filter out those warnings. 2264 2265 `-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2266 Warn also about the use of an uncasted `NULL' as sentinel. When 2267 compiling only with GCC this is a valid sentinel, as `NULL' is 2268 defined to `__null'. Although it is a null pointer constant not a 2269 null pointer, it is guaranteed to be of the same size as a 2270 pointer. But this use is not portable across different compilers. 2271 2272 `-Wno-non-template-friend (C++ and Objective-C++ only)' 2273 Disable warnings when non-templatized friend functions are declared 2274 within a template. Since the advent of explicit template 2275 specification support in G++, if the name of the friend is an 2276 unqualified-id (i.e., `friend foo(int)'), the C++ language 2277 specification demands that the friend declare or define an 2278 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2279 implemented explicit specification, unqualified-ids could be 2280 interpreted as a particular specialization of a templatized 2281 function. Because this non-conforming behavior is no longer the 2282 default behavior for G++, `-Wnon-template-friend' allows the 2283 compiler to check existing code for potential trouble spots and is 2284 on by default. This new compiler behavior can be turned off with 2285 `-Wno-non-template-friend' which keeps the conformant compiler code 2286 but disables the helpful warning. 2287 2288 `-Wold-style-cast (C++ and Objective-C++ only)' 2289 Warn if an old-style (C-style) cast to a non-void type is used 2290 within a C++ program. The new-style casts (`dynamic_cast', 2291 `static_cast', `reinterpret_cast', and `const_cast') are less 2292 vulnerable to unintended effects and much easier to search for. 2293 2294 `-Woverloaded-virtual (C++ and Objective-C++ only)' 2295 Warn when a function declaration hides virtual functions from a 2296 base class. For example, in: 2297 2298 struct A { 2299 virtual void f(); 2300 }; 2301 2302 struct B: public A { 2303 void f(int); 2304 }; 2305 2306 the `A' class version of `f' is hidden in `B', and code like: 2307 2308 B* b; 2309 b->f(); 2310 2311 will fail to compile. 2312 2313 `-Wno-pmf-conversions (C++ and Objective-C++ only)' 2314 Disable the diagnostic for converting a bound pointer to member 2315 function to a plain pointer. 2316 2317 `-Wsign-promo (C++ and Objective-C++ only)' 2318 Warn when overload resolution chooses a promotion from unsigned or 2319 enumerated type to a signed type, over a conversion to an unsigned 2320 type of the same size. Previous versions of G++ would try to 2321 preserve unsignedness, but the standard mandates the current 2322 behavior. 2323 2324 struct A { 2325 operator int (); 2326 A& operator = (int); 2327 }; 2328 2329 main () 2330 { 2331 A a,b; 2332 a = b; 2333 } 2334 2335 In this example, G++ will synthesize a default `A& operator = 2336 (const A&);', while cfront will use the user-defined `operator ='. 2337 2338 2339 File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2340 2341 3.6 Options Controlling Objective-C and Objective-C++ Dialects 2342 ============================================================== 2343 2344 (NOTE: This manual does not describe the Objective-C and Objective-C++ 2345 languages themselves. See *Note Language Standards Supported by GCC: 2346 Standards, for references.) 2347 2348 This section describes the command-line options that are only 2349 meaningful for Objective-C and Objective-C++ programs, but you can also 2350 use most of the language-independent GNU compiler options. For 2351 example, you might compile a file `some_class.m' like this: 2352 2353 gcc -g -fgnu-runtime -O -c some_class.m 2354 2355 In this example, `-fgnu-runtime' is an option meant only for 2356 Objective-C and Objective-C++ programs; you can use the other options 2357 with any language supported by GCC. 2358 2359 Note that since Objective-C is an extension of the C language, 2360 Objective-C compilations may also use options specific to the C 2361 front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2362 compilations may use C++-specific options (e.g., `-Wabi'). 2363 2364 Here is a list of options that are _only_ for compiling Objective-C 2365 and Objective-C++ programs: 2366 2367 `-fconstant-string-class=CLASS-NAME' 2368 Use CLASS-NAME as the name of the class to instantiate for each 2369 literal string specified with the syntax `@"..."'. The default 2370 class name is `NXConstantString' if the GNU runtime is being used, 2371 and `NSConstantString' if the NeXT runtime is being used (see 2372 below). The `-fconstant-cfstrings' option, if also present, will 2373 override the `-fconstant-string-class' setting and cause `@"..."' 2374 literals to be laid out as constant CoreFoundation strings. 2375 2376 `-fgnu-runtime' 2377 Generate object code compatible with the standard GNU Objective-C 2378 runtime. This is the default for most types of systems. 2379 2380 `-fnext-runtime' 2381 Generate output compatible with the NeXT runtime. This is the 2382 default for NeXT-based systems, including Darwin and Mac OS X. 2383 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 2384 option is used. 2385 2386 `-fno-nil-receivers' 2387 Assume that all Objective-C message dispatches (e.g., `[receiver 2388 message:arg]') in this translation unit ensure that the receiver 2389 is not `nil'. This allows for more efficient entry points in the 2390 runtime to be used. Currently, this option is only available in 2391 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2392 2393 `-fobjc-call-cxx-cdtors' 2394 For each Objective-C class, check if any of its instance variables 2395 is a C++ object with a non-trivial default constructor. If so, 2396 synthesize a special `- (id) .cxx_construct' instance method that 2397 will run non-trivial default constructors on any such instance 2398 variables, in order, and then return `self'. Similarly, check if 2399 any instance variable is a C++ object with a non-trivial 2400 destructor, and if so, synthesize a special `- (void) 2401 .cxx_destruct' method that will run all such default destructors, 2402 in reverse order. 2403 2404 The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods 2405 thusly generated will only operate on instance variables declared 2406 in the current Objective-C class, and not those inherited from 2407 superclasses. It is the responsibility of the Objective-C runtime 2408 to invoke all such methods in an object's inheritance hierarchy. 2409 The `- (id) .cxx_construct' methods will be invoked by the runtime 2410 immediately after a new object instance is allocated; the `- 2411 (void) .cxx_destruct' methods will be invoked immediately before 2412 the runtime deallocates an object instance. 2413 2414 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2415 later has support for invoking the `- (id) .cxx_construct' and `- 2416 (void) .cxx_destruct' methods. 2417 2418 `-fobjc-direct-dispatch' 2419 Allow fast jumps to the message dispatcher. On Darwin this is 2420 accomplished via the comm page. 2421 2422 `-fobjc-exceptions' 2423 Enable syntactic support for structured exception handling in 2424 Objective-C, similar to what is offered by C++ and Java. This 2425 option is unavailable in conjunction with the NeXT runtime on Mac 2426 OS X 10.2 and earlier. 2427 2428 @try { 2429 ... 2430 @throw expr; 2431 ... 2432 } 2433 @catch (AnObjCClass *exc) { 2434 ... 2435 @throw expr; 2436 ... 2437 @throw; 2438 ... 2439 } 2440 @catch (AnotherClass *exc) { 2441 ... 2442 } 2443 @catch (id allOthers) { 2444 ... 2445 } 2446 @finally { 2447 ... 2448 @throw expr; 2449 ... 2450 } 2451 2452 The `@throw' statement may appear anywhere in an Objective-C or 2453 Objective-C++ program; when used inside of a `@catch' block, the 2454 `@throw' may appear without an argument (as shown above), in which 2455 case the object caught by the `@catch' will be rethrown. 2456 2457 Note that only (pointers to) Objective-C objects may be thrown and 2458 caught using this scheme. When an object is thrown, it will be 2459 caught by the nearest `@catch' clause capable of handling objects 2460 of that type, analogously to how `catch' blocks work in C++ and 2461 Java. A `@catch(id ...)' clause (as shown above) may also be 2462 provided to catch any and all Objective-C exceptions not caught by 2463 previous `@catch' clauses (if any). 2464 2465 The `@finally' clause, if present, will be executed upon exit from 2466 the immediately preceding `@try ... @catch' section. This will 2467 happen regardless of whether any exceptions are thrown, caught or 2468 rethrown inside the `@try ... @catch' section, analogously to the 2469 behavior of the `finally' clause in Java. 2470 2471 There are several caveats to using the new exception mechanism: 2472 2473 * Although currently designed to be binary compatible with 2474 `NS_HANDLER'-style idioms provided by the `NSException' 2475 class, the new exceptions can only be used on Mac OS X 10.3 2476 (Panther) and later systems, due to additional functionality 2477 needed in the (NeXT) Objective-C runtime. 2478 2479 * As mentioned above, the new exceptions do not support handling 2480 types other than Objective-C objects. Furthermore, when 2481 used from Objective-C++, the Objective-C exception model does 2482 not interoperate with C++ exceptions at this time. This 2483 means you cannot `@throw' an exception from Objective-C and 2484 `catch' it in C++, or vice versa (i.e., `throw ... @catch'). 2485 2486 The `-fobjc-exceptions' switch also enables the use of 2487 synchronization blocks for thread-safe execution: 2488 2489 @synchronized (ObjCClass *guard) { 2490 ... 2491 } 2492 2493 Upon entering the `@synchronized' block, a thread of execution 2494 shall first check whether a lock has been placed on the 2495 corresponding `guard' object by another thread. If it has, the 2496 current thread shall wait until the other thread relinquishes its 2497 lock. Once `guard' becomes available, the current thread will 2498 place its own lock on it, execute the code contained in the 2499 `@synchronized' block, and finally relinquish the lock (thereby 2500 making `guard' available to other threads). 2501 2502 Unlike Java, Objective-C does not allow for entire methods to be 2503 marked `@synchronized'. Note that throwing exceptions out of 2504 `@synchronized' blocks is allowed, and will cause the guarding 2505 object to be unlocked properly. 2506 2507 `-fobjc-gc' 2508 Enable garbage collection (GC) in Objective-C and Objective-C++ 2509 programs. 2510 2511 `-freplace-objc-classes' 2512 Emit a special marker instructing `ld(1)' not to statically link in 2513 the resulting object file, and allow `dyld(1)' to load it in at 2514 run time instead. This is used in conjunction with the 2515 Fix-and-Continue debugging mode, where the object file in question 2516 may be recompiled and dynamically reloaded in the course of 2517 program execution, without the need to restart the program itself. 2518 Currently, Fix-and-Continue functionality is only available in 2519 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2520 2521 `-fzero-link' 2522 When compiling for the NeXT runtime, the compiler ordinarily 2523 replaces calls to `objc_getClass("...")' (when the name of the 2524 class is known at compile time) with static class references that 2525 get initialized at load time, which improves run-time performance. 2526 Specifying the `-fzero-link' flag suppresses this behavior and 2527 causes calls to `objc_getClass("...")' to be retained. This is 2528 useful in Zero-Link debugging mode, since it allows for individual 2529 class implementations to be modified during program execution. 2530 2531 `-gen-decls' 2532 Dump interface declarations for all classes seen in the source 2533 file to a file named `SOURCENAME.decl'. 2534 2535 `-Wassign-intercept (Objective-C and Objective-C++ only)' 2536 Warn whenever an Objective-C assignment is being intercepted by the 2537 garbage collector. 2538 2539 `-Wno-protocol (Objective-C and Objective-C++ only)' 2540 If a class is declared to implement a protocol, a warning is 2541 issued for every method in the protocol that is not implemented by 2542 the class. The default behavior is to issue a warning for every 2543 method not explicitly implemented in the class, even if a method 2544 implementation is inherited from the superclass. If you use the 2545 `-Wno-protocol' option, then methods inherited from the superclass 2546 are considered to be implemented, and no warning is issued for 2547 them. 2548 2549 `-Wselector (Objective-C and Objective-C++ only)' 2550 Warn if multiple methods of different types for the same selector 2551 are found during compilation. The check is performed on the list 2552 of methods in the final stage of compilation. Additionally, a 2553 check is performed for each selector appearing in a 2554 `@selector(...)' expression, and a corresponding method for that 2555 selector has been found during compilation. Because these checks 2556 scan the method table only at the end of compilation, these 2557 warnings are not produced if the final stage of compilation is not 2558 reached, for example because an error is found during compilation, 2559 or because the `-fsyntax-only' option is being used. 2560 2561 `-Wstrict-selector-match (Objective-C and Objective-C++ only)' 2562 Warn if multiple methods with differing argument and/or return 2563 types are found for a given selector when attempting to send a 2564 message using this selector to a receiver of type `id' or `Class'. 2565 When this flag is off (which is the default behavior), the 2566 compiler will omit such warnings if any differences found are 2567 confined to types which share the same size and alignment. 2568 2569 `-Wundeclared-selector (Objective-C and Objective-C++ only)' 2570 Warn if a `@selector(...)' expression referring to an undeclared 2571 selector is found. A selector is considered undeclared if no 2572 method with that name has been declared before the 2573 `@selector(...)' expression, either explicitly in an `@interface' 2574 or `@protocol' declaration, or implicitly in an `@implementation' 2575 section. This option always performs its checks as soon as a 2576 `@selector(...)' expression is found, while `-Wselector' only 2577 performs its checks in the final stage of compilation. This also 2578 enforces the coding style convention that methods and selectors 2579 must be declared before being used. 2580 2581 `-print-objc-runtime-info' 2582 Generate C header describing the largest structure that is passed 2583 by value, if any. 2584 2585 2586 2587 File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2588 2589 3.7 Options to Control Diagnostic Messages Formatting 2590 ===================================================== 2591 2592 Traditionally, diagnostic messages have been formatted irrespective of 2593 the output device's aspect (e.g. its width, ...). The options described 2594 below can be used to control the diagnostic messages formatting 2595 algorithm, e.g. how many characters per line, how often source location 2596 information should be reported. Right now, only the C++ front end can 2597 honor these options. However it is expected, in the near future, that 2598 the remaining front ends would be able to digest them correctly. 2599 2600 `-fmessage-length=N' 2601 Try to format error messages so that they fit on lines of about N 2602 characters. The default is 72 characters for `g++' and 0 for the 2603 rest of the front ends supported by GCC. If N is zero, then no 2604 line-wrapping will be done; each error message will appear on a 2605 single line. 2606 2607 `-fdiagnostics-show-location=once' 2608 Only meaningful in line-wrapping mode. Instructs the diagnostic 2609 messages reporter to emit _once_ source location information; that 2610 is, in case the message is too long to fit on a single physical 2611 line and has to be wrapped, the source location won't be emitted 2612 (as prefix) again, over and over, in subsequent continuation 2613 lines. This is the default behavior. 2614 2615 `-fdiagnostics-show-location=every-line' 2616 Only meaningful in line-wrapping mode. Instructs the diagnostic 2617 messages reporter to emit the same source location information (as 2618 prefix) for physical lines that result from the process of breaking 2619 a message which is too long to fit on a single line. 2620 2621 `-fdiagnostics-show-option' 2622 This option instructs the diagnostic machinery to add text to each 2623 diagnostic emitted, which indicates which command line option 2624 directly controls that diagnostic, when such an option is known to 2625 the diagnostic machinery. 2626 2627 `-Wcoverage-mismatch' 2628 Warn if feedback profiles do not match when using the 2629 `-fprofile-use' option. If a source file was changed between 2630 `-fprofile-gen' and `-fprofile-use', the files with the profile 2631 feedback can fail to match the source file and GCC can not use the 2632 profile feedback information. By default, GCC emits an error 2633 message in this case. The option `-Wcoverage-mismatch' emits a 2634 warning instead of an error. GCC does not use appropriate 2635 feedback profiles, so using this option can result in poorly 2636 optimized code. This option is useful only in the case of very 2637 minor changes such as bug fixes to an existing code-base. 2638 2639 2640 2641 File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 2642 2643 3.8 Options to Request or Suppress Warnings 2644 =========================================== 2645 2646 Warnings are diagnostic messages that report constructions which are 2647 not inherently erroneous but which are risky or suggest there may have 2648 been an error. 2649 2650 The following language-independent options do not enable specific 2651 warnings but control the kinds of diagnostics produced by GCC. 2652 2653 `-fsyntax-only' 2654 Check the code for syntax errors, but don't do anything beyond 2655 that. 2656 2657 `-w' 2658 Inhibit all warning messages. 2659 2660 `-Werror' 2661 Make all warnings into errors. 2662 2663 `-Werror=' 2664 Make the specified warning into an error. The specifier for a 2665 warning is appended, for example `-Werror=switch' turns the 2666 warnings controlled by `-Wswitch' into errors. This switch takes a 2667 negative form, to be used to negate `-Werror' for specific 2668 warnings, for example `-Wno-error=switch' makes `-Wswitch' 2669 warnings not be errors, even when `-Werror' is in effect. You can 2670 use the `-fdiagnostics-show-option' option to have each 2671 controllable warning amended with the option which controls it, to 2672 determine what to use with this option. 2673 2674 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 2675 However, `-Wno-error='FOO does not imply anything. 2676 2677 `-Wfatal-errors' 2678 This option causes the compiler to abort compilation on the first 2679 error occurred rather than trying to keep going and printing 2680 further error messages. 2681 2682 2683 You can request many specific warnings with options beginning `-W', 2684 for example `-Wimplicit' to request warnings on implicit declarations. 2685 Each of these specific warning options also has a negative form 2686 beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. 2687 This manual lists only one of the two forms, whichever is not the 2688 default. For further, language-specific options also refer to *Note 2689 C++ Dialect Options:: and *Note Objective-C and Objective-C++ Dialect 2690 Options::. 2691 2692 `-pedantic' 2693 Issue all the warnings demanded by strict ISO C and ISO C++; 2694 reject all programs that use forbidden extensions, and some other 2695 programs that do not follow ISO C and ISO C++. For ISO C, follows 2696 the version of the ISO C standard specified by any `-std' option 2697 used. 2698 2699 Valid ISO C and ISO C++ programs should compile properly with or 2700 without this option (though a rare few will require `-ansi' or a 2701 `-std' option specifying the required version of ISO C). However, 2702 without this option, certain GNU extensions and traditional C and 2703 C++ features are supported as well. With this option, they are 2704 rejected. 2705 2706 `-pedantic' does not cause warning messages for use of the 2707 alternate keywords whose names begin and end with `__'. Pedantic 2708 warnings are also disabled in the expression that follows 2709 `__extension__'. However, only system header files should use 2710 these escape routes; application programs should avoid them. 2711 *Note Alternate Keywords::. 2712 2713 Some users try to use `-pedantic' to check programs for strict ISO 2714 C conformance. They soon find that it does not do quite what they 2715 want: it finds some non-ISO practices, but not all--only those for 2716 which ISO C _requires_ a diagnostic, and some others for which 2717 diagnostics have been added. 2718 2719 A feature to report any failure to conform to ISO C might be 2720 useful in some instances, but would require considerable 2721 additional work and would be quite different from `-pedantic'. We 2722 don't have plans to support such a feature in the near future. 2723 2724 Where the standard specified with `-std' represents a GNU extended 2725 dialect of C, such as `gnu89' or `gnu99', there is a corresponding 2726 "base standard", the version of ISO C on which the GNU extended 2727 dialect is based. Warnings from `-pedantic' are given where they 2728 are required by the base standard. (It would not make sense for 2729 such warnings to be given only for features not in the specified 2730 GNU C dialect, since by definition the GNU dialects of C include 2731 all features the compiler supports with the given option, and 2732 there would be nothing to warn about.) 2733 2734 `-pedantic-errors' 2735 Like `-pedantic', except that errors are produced rather than 2736 warnings. 2737 2738 `-Wall' 2739 This enables all the warnings about constructions that some users 2740 consider questionable, and that are easy to avoid (or modify to 2741 prevent the warning), even in conjunction with macros. This also 2742 enables some language-specific warnings described in *Note C++ 2743 Dialect Options:: and *Note Objective-C and Objective-C++ Dialect 2744 Options::. 2745 2746 `-Wall' turns on the following warning flags: 2747 2748 -Waddress 2749 -Warray-bounds (only with `-O2') 2750 -Wc++0x-compat 2751 -Wchar-subscripts 2752 -Wimplicit-int 2753 -Wimplicit-function-declaration 2754 -Wcomment 2755 -Wformat 2756 -Wmain (only for C/ObjC and unless `-ffreestanding') 2757 -Wmissing-braces 2758 -Wnonnull 2759 -Wparentheses 2760 -Wpointer-sign 2761 -Wreorder 2762 -Wreturn-type 2763 -Wripa-opt-mismatch 2764 -Wsequence-point 2765 -Wsign-compare (only in C++) 2766 -Wstrict-aliasing 2767 -Wstrict-overflow=1 2768 -Wswitch 2769 -Wtrigraphs 2770 -Wuninitialized 2771 -Wunknown-pragmas 2772 -Wunused-function 2773 -Wunused-label 2774 -Wunused-value 2775 -Wunused-variable 2776 -Wvolatile-register-var 2777 2778 Note that some warning flags are not implied by `-Wall'. Some of 2779 them warn about constructions that users generally do not consider 2780 questionable, but which occasionally you might wish to check for; 2781 others warn about constructions that are necessary or hard to 2782 avoid in some cases, and there is no simple way to modify the code 2783 to suppress the warning. Some of them are enabled by `-Wextra' but 2784 many of them must be enabled individually. 2785 2786 `-Wextra' 2787 This enables some extra warning flags that are not enabled by 2788 `-Wall'. (This option used to be called `-W'. The older name is 2789 still supported, but the newer name is more descriptive.) 2790 2791 -Wclobbered 2792 -Wempty-body 2793 -Wignored-qualifiers 2794 -Wmissing-field-initializers 2795 -Wmissing-parameter-type (C only) 2796 -Wold-style-declaration (C only) 2797 -Woverride-init 2798 -Wsign-compare 2799 -Wtype-limits 2800 -Wuninitialized 2801 -Wunused-parameter (only with `-Wunused' or `-Wall') 2802 2803 The option `-Wextra' also prints warning messages for the 2804 following cases: 2805 2806 * A pointer is compared against integer zero with `<', `<=', 2807 `>', or `>='. 2808 2809 * (C++ only) An enumerator and a non-enumerator both appear in a 2810 conditional expression. 2811 2812 * (C++ only) Ambiguous virtual bases. 2813 2814 * (C++ only) Subscripting an array which has been declared 2815 `register'. 2816 2817 * (C++ only) Taking the address of a variable which has been 2818 declared `register'. 2819 2820 * (C++ only) A base class is not initialized in a derived 2821 class' copy constructor. 2822 2823 2824 `-Wchar-subscripts' 2825 Warn if an array subscript has type `char'. This is a common cause 2826 of error, as programmers often forget that this type is signed on 2827 some machines. This warning is enabled by `-Wall'. 2828 2829 `-Wcomment' 2830 Warn whenever a comment-start sequence `/*' appears in a `/*' 2831 comment, or whenever a Backslash-Newline appears in a `//' comment. 2832 This warning is enabled by `-Wall'. 2833 2834 `-Wformat' 2835 Check calls to `printf' and `scanf', etc., to make sure that the 2836 arguments supplied have types appropriate to the format string 2837 specified, and that the conversions specified in the format string 2838 make sense. This includes standard functions, and others 2839 specified by format attributes (*note Function Attributes::), in 2840 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 2841 extension, not in the C standard) families (or other 2842 target-specific families). Which functions are checked without 2843 format attributes having been specified depends on the standard 2844 version selected, and such checks of functions without the 2845 attribute specified are disabled by `-ffreestanding' or 2846 `-fno-builtin'. 2847 2848 The formats are checked against the format features supported by 2849 GNU libc version 2.2. These include all ISO C90 and C99 features, 2850 as well as features from the Single Unix Specification and some 2851 BSD and GNU extensions. Other library implementations may not 2852 support all these features; GCC does not support warning about 2853 features that go beyond a particular library's limitations. 2854 However, if `-pedantic' is used with `-Wformat', warnings will be 2855 given about format features not in the selected standard version 2856 (but not for `strfmon' formats, since those are not in any version 2857 of the C standard). *Note Options Controlling C Dialect: C 2858 Dialect Options. 2859 2860 Since `-Wformat' also checks for null format arguments for several 2861 functions, `-Wformat' also implies `-Wnonnull'. 2862 2863 `-Wformat' is included in `-Wall'. For more control over some 2864 aspects of format checking, the options `-Wformat-y2k', 2865 `-Wno-format-extra-args', `-Wno-format-zero-length', 2866 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are 2867 available, but are not included in `-Wall'. 2868 2869 `-Wformat-y2k' 2870 If `-Wformat' is specified, also warn about `strftime' formats 2871 which may yield only a two-digit year. 2872 2873 `-Wno-format-contains-nul' 2874 If `-Wformat' is specified, do not warn about format strings that 2875 contain NUL bytes. 2876 2877 `-Wno-format-extra-args' 2878 If `-Wformat' is specified, do not warn about excess arguments to a 2879 `printf' or `scanf' format function. The C standard specifies 2880 that such arguments are ignored. 2881 2882 Where the unused arguments lie between used arguments that are 2883 specified with `$' operand number specifications, normally 2884 warnings are still given, since the implementation could not know 2885 what type to pass to `va_arg' to skip the unused arguments. 2886 However, in the case of `scanf' formats, this option will suppress 2887 the warning if the unused arguments are all pointers, since the 2888 Single Unix Specification says that such unused arguments are 2889 allowed. 2890 2891 `-Wno-format-zero-length (C and Objective-C only)' 2892 If `-Wformat' is specified, do not warn about zero-length formats. 2893 The C standard specifies that zero-length formats are allowed. 2894 2895 `-Wformat-nonliteral' 2896 If `-Wformat' is specified, also warn if the format string is not a 2897 string literal and so cannot be checked, unless the format function 2898 takes its format arguments as a `va_list'. 2899 2900 `-Wformat-security' 2901 If `-Wformat' is specified, also warn about uses of format 2902 functions that represent possible security problems. At present, 2903 this warns about calls to `printf' and `scanf' functions where the 2904 format string is not a string literal and there are no format 2905 arguments, as in `printf (foo);'. This may be a security hole if 2906 the format string came from untrusted input and contains `%n'. 2907 (This is currently a subset of what `-Wformat-nonliteral' warns 2908 about, but in future warnings may be added to `-Wformat-security' 2909 that are not included in `-Wformat-nonliteral'.) 2910 2911 `-Wformat=2' 2912 Enable `-Wformat' plus format checks not included in `-Wformat'. 2913 Currently equivalent to `-Wformat -Wformat-nonliteral 2914 -Wformat-security -Wformat-y2k'. 2915 2916 `-Wnonnull (C and Objective-C only)' 2917 Warn about passing a null pointer for arguments marked as 2918 requiring a non-null value by the `nonnull' function attribute. 2919 2920 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 2921 disabled with the `-Wno-nonnull' option. 2922 2923 `-Winit-self (C, C++, Objective-C and Objective-C++ only)' 2924 Warn about uninitialized variables which are initialized with 2925 themselves. Note this option can only be used with the 2926 `-Wuninitialized' option. 2927 2928 For example, GCC will warn about `i' being uninitialized in the 2929 following snippet only when `-Winit-self' has been specified: 2930 int f() 2931 { 2932 int i = i; 2933 return i; 2934 } 2935 2936 `-Wimplicit-int (C and Objective-C only)' 2937 Warn when a declaration does not specify a type. This warning is 2938 enabled by `-Wall'. 2939 2940 `-Wimplicit-function-declaration (C and Objective-C only)' 2941 Give a warning whenever a function is used before being declared. 2942 In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled 2943 by default and it is made into an error by `-pedantic-errors'. 2944 This warning is also enabled by `-Wall'. 2945 2946 `-Wimplicit' 2947 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 2948 This warning is enabled by `-Wall'. 2949 2950 `-Wignored-qualifiers (C and C++ only)' 2951 Warn if the return type of a function has a type qualifier such as 2952 `const'. For ISO C such a type qualifier has no effect, since the 2953 value returned by a function is not an lvalue. For C++, the 2954 warning is only emitted for scalar types or `void'. ISO C 2955 prohibits qualified `void' return types on function definitions, 2956 so such return types always receive a warning even without this 2957 option. 2958 2959 This warning is also enabled by `-Wextra'. 2960 2961 `-Wmain' 2962 Warn if the type of `main' is suspicious. `main' should be a 2963 function with external linkage, returning int, taking either zero 2964 arguments, two, or three arguments of appropriate types. This 2965 warning is enabled by default in C++ and is enabled by either 2966 `-Wall' or `-pedantic'. 2967 2968 `-Wmissing-braces' 2969 Warn if an aggregate or union initializer is not fully bracketed. 2970 In the following example, the initializer for `a' is not fully 2971 bracketed, but that for `b' is fully bracketed. 2972 2973 int a[2][2] = { 0, 1, 2, 3 }; 2974 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 2975 2976 This warning is enabled by `-Wall'. 2977 2978 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 2979 Warn if a user-supplied include directory does not exist. 2980 2981 `-Wparentheses' 2982 Warn if parentheses are omitted in certain contexts, such as when 2983 there is an assignment in a context where a truth value is 2984 expected, or when operators are nested whose precedence people 2985 often get confused about. 2986 2987 Also warn if a comparison like `x<=y<=z' appears; this is 2988 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 2989 interpretation from that of ordinary mathematical notation. 2990 2991 Also warn about constructions where there may be confusion to which 2992 `if' statement an `else' branch belongs. Here is an example of 2993 such a case: 2994 2995 { 2996 if (a) 2997 if (b) 2998 foo (); 2999 else 3000 bar (); 3001 } 3002 3003 In C/C++, every `else' branch belongs to the innermost possible 3004 `if' statement, which in this example is `if (b)'. This is often 3005 not what the programmer expected, as illustrated in the above 3006 example by indentation the programmer chose. When there is the 3007 potential for this confusion, GCC will issue a warning when this 3008 flag is specified. To eliminate the warning, add explicit braces 3009 around the innermost `if' statement so there is no way the `else' 3010 could belong to the enclosing `if'. The resulting code would look 3011 like this: 3012 3013 { 3014 if (a) 3015 { 3016 if (b) 3017 foo (); 3018 else 3019 bar (); 3020 } 3021 } 3022 3023 This warning is enabled by `-Wall'. 3024 3025 `-Wsequence-point' 3026 Warn about code that may have undefined semantics because of 3027 violations of sequence point rules in the C and C++ standards. 3028 3029 The C and C++ standards defines the order in which expressions in 3030 a C/C++ program are evaluated in terms of "sequence points", which 3031 represent a partial ordering between the execution of parts of the 3032 program: those executed before the sequence point, and those 3033 executed after it. These occur after the evaluation of a full 3034 expression (one which is not part of a larger expression), after 3035 the evaluation of the first operand of a `&&', `||', `? :' or `,' 3036 (comma) operator, before a function is called (but after the 3037 evaluation of its arguments and the expression denoting the called 3038 function), and in certain other places. Other than as expressed 3039 by the sequence point rules, the order of evaluation of 3040 subexpressions of an expression is not specified. All these rules 3041 describe only a partial order rather than a total order, since, 3042 for example, if two functions are called within one expression 3043 with no sequence point between them, the order in which the 3044 functions are called is not specified. However, the standards 3045 committee have ruled that function calls do not overlap. 3046 3047 It is not specified when between sequence points modifications to 3048 the values of objects take effect. Programs whose behavior 3049 depends on this have undefined behavior; the C and C++ standards 3050 specify that "Between the previous and next sequence point an 3051 object shall have its stored value modified at most once by the 3052 evaluation of an expression. Furthermore, the prior value shall 3053 be read only to determine the value to be stored.". If a program 3054 breaks these rules, the results on any particular implementation 3055 are entirely unpredictable. 3056 3057 Examples of code with undefined behavior are `a = a++;', `a[n] = 3058 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 3059 diagnosed by this option, and it may give an occasional false 3060 positive result, but in general it has been found fairly effective 3061 at detecting this sort of problem in programs. 3062 3063 The standard is worded confusingly, therefore there is some debate 3064 over the precise meaning of the sequence point rules in subtle 3065 cases. Links to discussions of the problem, including proposed 3066 formal definitions, may be found on the GCC readings page, at 3067 `http://gcc.gnu.org/readings.html'. 3068 3069 This warning is enabled by `-Wall' for C and C++. 3070 3071 `-Wreturn-type' 3072 Warn whenever a function is defined with a return-type that 3073 defaults to `int'. Also warn about any `return' statement with no 3074 return-value in a function whose return-type is not `void' 3075 (falling off the end of the function body is considered returning 3076 without a value), and about a `return' statement with a expression 3077 in a function whose return-type is `void'. 3078 3079 For C++, a function without return type always produces a 3080 diagnostic message, even when `-Wno-return-type' is specified. 3081 The only exceptions are `main' and functions defined in system 3082 headers. 3083 3084 This warning is enabled by `-Wall'. 3085 3086 `-Wripa-opt-mismatch' 3087 When doing an FDO build with `-fprofile-use' and `-fripa', warn if 3088 importing an axuiliary module that was built with a different GCC 3089 command line during the profile-generate phase than the primary 3090 module. 3091 3092 This warning is enabled by `-Wall'. 3093 3094 `-Wswitch' 3095 Warn whenever a `switch' statement has an index of enumerated type 3096 and lacks a `case' for one or more of the named codes of that 3097 enumeration. (The presence of a `default' label prevents this 3098 warning.) `case' labels outside the enumeration range also 3099 provoke warnings when this option is used. This warning is 3100 enabled by `-Wall'. 3101 3102 `-Wswitch-default' 3103 Warn whenever a `switch' statement does not have a `default' case. 3104 3105 `-Wswitch-enum' 3106 Warn whenever a `switch' statement has an index of enumerated type 3107 and lacks a `case' for one or more of the named codes of that 3108 enumeration. `case' labels outside the enumeration range also 3109 provoke warnings when this option is used. 3110 3111 `-Wsync-nand (C and C++ only)' 3112 Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch' 3113 built-in functions are used. These functions changed semantics in 3114 GCC 4.4. 3115 3116 `-Wtrigraphs' 3117 Warn if any trigraphs are encountered that might change the 3118 meaning of the program (trigraphs within comments are not warned 3119 about). This warning is enabled by `-Wall'. 3120 3121 `-Wunused-function' 3122 Warn whenever a static function is declared but not defined or a 3123 non-inline static function is unused. This warning is enabled by 3124 `-Wall'. 3125 3126 `-Wunused-label' 3127 Warn whenever a label is declared but not used. This warning is 3128 enabled by `-Wall'. 3129 3130 To suppress this warning use the `unused' attribute (*note 3131 Variable Attributes::). 3132 3133 `-Wunused-parameter' 3134 Warn whenever a function parameter is unused aside from its 3135 declaration. 3136 3137 To suppress this warning use the `unused' attribute (*note 3138 Variable Attributes::). 3139 3140 `-Wunused-variable' 3141 Warn whenever a local variable or non-constant static variable is 3142 unused aside from its declaration. This warning is enabled by 3143 `-Wall'. 3144 3145 To suppress this warning use the `unused' attribute (*note 3146 Variable Attributes::). 3147 3148 `-Wunused-value' 3149 Warn whenever a statement computes a result that is explicitly not 3150 used. To suppress this warning cast the unused expression to 3151 `void'. This includes an expression-statement or the left-hand 3152 side of a comma expression that contains no side effects. For 3153 example, an expression such as `x[i,j]' will cause a warning, while 3154 `x[(void)i,j]' will not. 3155 3156 This warning is enabled by `-Wall'. 3157 3158 `-Wunused' 3159 All the above `-Wunused' options combined. 3160 3161 In order to get a warning about an unused function parameter, you 3162 must either specify `-Wextra -Wunused' (note that `-Wall' implies 3163 `-Wunused'), or separately specify `-Wunused-parameter'. 3164 3165 `-Wuninitialized' 3166 Warn if an automatic variable is used without first being 3167 initialized or if a variable may be clobbered by a `setjmp' call. 3168 In C++, warn if a non-static reference or non-static `const' member 3169 appears in a class without constructors. 3170 3171 If you want to warn about code which uses the uninitialized value 3172 of the variable in its own initializer, use the `-Winit-self' 3173 option. 3174 3175 These warnings occur for individual uninitialized or clobbered 3176 elements of structure, union or array variables as well as for 3177 variables which are uninitialized or clobbered as a whole. They do 3178 not occur for variables or elements declared `volatile'. Because 3179 these warnings depend on optimization, the exact variables or 3180 elements for which there are warnings will depend on the precise 3181 optimization options and version of GCC used. 3182 3183 Note that there may be no warning about a variable that is used 3184 only to compute a value that itself is never used, because such 3185 computations may be deleted by data flow analysis before the 3186 warnings are printed. 3187 3188 These warnings are made optional because GCC is not smart enough 3189 to see all the reasons why the code might be correct despite 3190 appearing to have an error. Here is one example of how this can 3191 happen: 3192 3193 { 3194 int x; 3195 switch (y) 3196 { 3197 case 1: x = 1; 3198 break; 3199 case 2: x = 4; 3200 break; 3201 case 3: x = 5; 3202 } 3203 foo (x); 3204 } 3205 3206 If the value of `y' is always 1, 2 or 3, then `x' is always 3207 initialized, but GCC doesn't know this. Here is another common 3208 case: 3209 3210 { 3211 int save_y; 3212 if (change_y) save_y = y, y = new_y; 3213 ... 3214 if (change_y) y = save_y; 3215 } 3216 3217 This has no bug because `save_y' is used only if it is set. 3218 3219 This option also warns when a non-volatile automatic variable 3220 might be changed by a call to `longjmp'. These warnings as well 3221 are possible only in optimizing compilation. 3222 3223 The compiler sees only the calls to `setjmp'. It cannot know 3224 where `longjmp' will be called; in fact, a signal handler could 3225 call it at any point in the code. As a result, you may get a 3226 warning even when there is in fact no problem because `longjmp' 3227 cannot in fact be called at the place which would cause a problem. 3228 3229 Some spurious warnings can be avoided if you declare all the 3230 functions you use that never return as `noreturn'. *Note Function 3231 Attributes::. 3232 3233 This warning is enabled by `-Wall' or `-Wextra'. 3234 3235 `-Wunknown-pragmas' 3236 Warn when a #pragma directive is encountered which is not 3237 understood by GCC. If this command line option is used, warnings 3238 will even be issued for unknown pragmas in system header files. 3239 This is not the case if the warnings were only enabled by the 3240 `-Wall' command line option. 3241 3242 `-Wno-pragmas' 3243 Do not warn about misuses of pragmas, such as incorrect parameters, 3244 invalid syntax, or conflicts between pragmas. See also 3245 `-Wunknown-pragmas'. 3246 3247 `-Wstrict-aliasing' 3248 This option is only active when `-fstrict-aliasing' is active. It 3249 warns about code which might break the strict aliasing rules that 3250 the compiler is using for optimization. The warning does not 3251 catch all cases, but does attempt to catch the more common 3252 pitfalls. It is included in `-Wall'. It is equivalent to 3253 `-Wstrict-aliasing=3' 3254 3255 `-Wstrict-aliasing=n' 3256 This option is only active when `-fstrict-aliasing' is active. It 3257 warns about code which might break the strict aliasing rules that 3258 the compiler is using for optimization. Higher levels correspond 3259 to higher accuracy (fewer false positives). Higher levels also 3260 correspond to more effort, similar to the way -O works. 3261 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with 3262 n=3. 3263 3264 Level 1: Most aggressive, quick, least accurate. Possibly useful 3265 when higher levels do not warn but -fstrict-aliasing still breaks 3266 the code, as it has very few false negatives. However, it has 3267 many false positives. Warns for all pointer conversions between 3268 possibly incompatible types, even if never dereferenced. Runs in 3269 the frontend only. 3270 3271 Level 2: Aggressive, quick, not too precise. May still have many 3272 false positives (not as many as level 1 though), and few false 3273 negatives (but possibly more than level 1). Unlike level 1, it 3274 only warns when an address is taken. Warns about incomplete 3275 types. Runs in the frontend only. 3276 3277 Level 3 (default for `-Wstrict-aliasing'): Should have very few 3278 false positives and few false negatives. Slightly slower than 3279 levels 1 or 2 when optimization is enabled. Takes care of the 3280 common punn+dereference pattern in the frontend: 3281 `*(int*)&some_float'. If optimization is enabled, it also runs in 3282 the backend, where it deals with multiple statement cases using 3283 flow-sensitive points-to information. Only warns when the 3284 converted pointer is dereferenced. Does not warn about incomplete 3285 types. 3286 3287 `-Wstrict-overflow' 3288 `-Wstrict-overflow=N' 3289 This option is only active when `-fstrict-overflow' is active. It 3290 warns about cases where the compiler optimizes based on the 3291 assumption that signed overflow does not occur. Note that it does 3292 not warn about all cases where the code might overflow: it only 3293 warns about cases where the compiler implements some optimization. 3294 Thus this warning depends on the optimization level. 3295 3296 An optimization which assumes that signed overflow does not occur 3297 is perfectly safe if the values of the variables involved are such 3298 that overflow never does, in fact, occur. Therefore this warning 3299 can easily give a false positive: a warning about code which is not 3300 actually a problem. To help focus on important issues, several 3301 warning levels are defined. No warnings are issued for the use of 3302 undefined signed overflow when estimating how many iterations a 3303 loop will require, in particular when determining whether a loop 3304 will be executed at all. 3305 3306 `-Wstrict-overflow=1' 3307 Warn about cases which are both questionable and easy to 3308 avoid. For example: `x + 1 > x'; with `-fstrict-overflow', 3309 the compiler will simplify this to `1'. This level of 3310 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 3311 not, and must be explicitly requested. 3312 3313 `-Wstrict-overflow=2' 3314 Also warn about other cases where a comparison is simplified 3315 to a constant. For example: `abs (x) >= 0'. This can only be 3316 simplified when `-fstrict-overflow' is in effect, because 3317 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 3318 zero. `-Wstrict-overflow' (with no level) is the same as 3319 `-Wstrict-overflow=2'. 3320 3321 `-Wstrict-overflow=3' 3322 Also warn about other cases where a comparison is simplified. 3323 For example: `x + 1 > 1' will be simplified to `x > 0'. 3324 3325 `-Wstrict-overflow=4' 3326 Also warn about other simplifications not covered by the 3327 above cases. For example: `(x * 10) / 5' will be simplified 3328 to `x * 2'. 3329 3330 `-Wstrict-overflow=5' 3331 Also warn about cases where the compiler reduces the 3332 magnitude of a constant involved in a comparison. For 3333 example: `x + 2 > y' will be simplified to `x + 1 >= y'. 3334 This is reported only at the highest warning level because 3335 this simplification applies to many comparisons, so this 3336 warning level will give a very large number of false 3337 positives. 3338 3339 `-Warray-bounds' 3340 This option is only active when `-ftree-vrp' is active (default 3341 for -O2 and above). It warns about subscripts to arrays that are 3342 always out of bounds. This warning is enabled by `-Wall'. 3343 3344 `-Wno-div-by-zero' 3345 Do not warn about compile-time integer division by zero. Floating 3346 point division by zero is not warned about, as it can be a 3347 legitimate way of obtaining infinities and NaNs. 3348 3349 `-Wsystem-headers' 3350 Print warning messages for constructs found in system header files. 3351 Warnings from system headers are normally suppressed, on the 3352 assumption that they usually do not indicate real problems and 3353 would only make the compiler output harder to read. Using this 3354 command line option tells GCC to emit warnings from system headers 3355 as if they occurred in user code. However, note that using 3356 `-Wall' in conjunction with this option will _not_ warn about 3357 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 3358 must also be used. 3359 3360 `-Wfloat-equal' 3361 Warn if floating point values are used in equality comparisons. 3362 3363 The idea behind this is that sometimes it is convenient (for the 3364 programmer) to consider floating-point values as approximations to 3365 infinitely precise real numbers. If you are doing this, then you 3366 need to compute (by analyzing the code, or in some other way) the 3367 maximum or likely maximum error that the computation introduces, 3368 and allow for it when performing comparisons (and when producing 3369 output, but that's a different problem). In particular, instead 3370 of testing for equality, you would check to see whether the two 3371 values have ranges that overlap; and this is done with the 3372 relational operators, so equality comparisons are probably 3373 mistaken. 3374 3375 `-Wtraditional (C and Objective-C only)' 3376 Warn about certain constructs that behave differently in 3377 traditional and ISO C. Also warn about ISO C constructs that have 3378 no traditional C equivalent, and/or problematic constructs which 3379 should be avoided. 3380 3381 * Macro parameters that appear within string literals in the 3382 macro body. In traditional C macro replacement takes place 3383 within string literals, but does not in ISO C. 3384 3385 * In traditional C, some preprocessor directives did not exist. 3386 Traditional preprocessors would only consider a line to be a 3387 directive if the `#' appeared in column 1 on the line. 3388 Therefore `-Wtraditional' warns about directives that 3389 traditional C understands but would ignore because the `#' 3390 does not appear as the first character on the line. It also 3391 suggests you hide directives like `#pragma' not understood by 3392 traditional C by indenting them. Some traditional 3393 implementations would not recognize `#elif', so it suggests 3394 avoiding it altogether. 3395 3396 * A function-like macro that appears without arguments. 3397 3398 * The unary plus operator. 3399 3400 * The `U' integer constant suffix, or the `F' or `L' floating 3401 point constant suffixes. (Traditional C does support the `L' 3402 suffix on integer constants.) Note, these suffixes appear in 3403 macros defined in the system headers of most modern systems, 3404 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these 3405 macros in user code might normally lead to spurious warnings, 3406 however GCC's integrated preprocessor has enough context to 3407 avoid warning in these cases. 3408 3409 * A function declared external in one block and then used after 3410 the end of the block. 3411 3412 * A `switch' statement has an operand of type `long'. 3413 3414 * A non-`static' function declaration follows a `static' one. 3415 This construct is not accepted by some traditional C 3416 compilers. 3417 3418 * The ISO type of an integer constant has a different width or 3419 signedness from its traditional type. This warning is only 3420 issued if the base of the constant is ten. I.e. hexadecimal 3421 or octal values, which typically represent bit patterns, are 3422 not warned about. 3423 3424 * Usage of ISO string concatenation is detected. 3425 3426 * Initialization of automatic aggregates. 3427 3428 * Identifier conflicts with labels. Traditional C lacks a 3429 separate namespace for labels. 3430 3431 * Initialization of unions. If the initializer is zero, the 3432 warning is omitted. This is done under the assumption that 3433 the zero initializer in user code appears conditioned on e.g. 3434 `__STDC__' to avoid missing initializer warnings and relies 3435 on default initialization to zero in the traditional C case. 3436 3437 * Conversions by prototypes between fixed/floating point values 3438 and vice versa. The absence of these prototypes when 3439 compiling with traditional C would cause serious problems. 3440 This is a subset of the possible conversion warnings, for the 3441 full set use `-Wtraditional-conversion'. 3442 3443 * Use of ISO C style function definitions. This warning 3444 intentionally is _not_ issued for prototype declarations or 3445 variadic functions because these ISO C features will appear 3446 in your code when using libiberty's traditional C 3447 compatibility macros, `PARAMS' and `VPARAMS'. This warning 3448 is also bypassed for nested functions because that feature is 3449 already a GCC extension and thus not relevant to traditional 3450 C compatibility. 3451 3452 `-Wtraditional-conversion (C and Objective-C only)' 3453 Warn if a prototype causes a type conversion that is different 3454 from what would happen to the same argument in the absence of a 3455 prototype. This includes conversions of fixed point to floating 3456 and vice versa, and conversions changing the width or signedness 3457 of a fixed point argument except when the same as the default 3458 promotion. 3459 3460 `-Wdeclaration-after-statement (C and Objective-C only)' 3461 Warn when a declaration is found after a statement in a block. 3462 This construct, known from C++, was introduced with ISO C99 and is 3463 by default allowed in GCC. It is not supported by ISO C90 and was 3464 not supported by GCC versions before GCC 3.0. *Note Mixed 3465 Declarations::. 3466 3467 `-Wundef' 3468 Warn if an undefined identifier is evaluated in an `#if' directive. 3469 3470 `-Wno-endif-labels' 3471 Do not warn whenever an `#else' or an `#endif' are followed by 3472 text. 3473 3474 `-Wshadow' 3475 Warn whenever a local variable shadows another local variable, 3476 parameter or global variable or whenever a built-in function is 3477 shadowed. 3478 3479 `-Wlarger-than=LEN' 3480 Warn whenever an object of larger than LEN bytes is defined. 3481 3482 `-Wframe-larger-than=LEN' 3483 Warn if the size of a function frame is larger than LEN bytes. 3484 The computation done to determine the stack frame size is 3485 approximate and not conservative. The actual requirements may be 3486 somewhat greater than LEN even if you do not get a warning. In 3487 addition, any space allocated via `alloca', variable-length 3488 arrays, or related constructs is not included by the compiler when 3489 determining whether or not to issue a warning. 3490 3491 `-Wunsafe-loop-optimizations' 3492 Warn if the loop cannot be optimized because the compiler could not 3493 assume anything on the bounds of the loop indices. With 3494 `-funsafe-loop-optimizations' warn if the compiler made such 3495 assumptions. 3496 3497 `-Wno-pedantic-ms-format (MinGW targets only)' 3498 Disables the warnings about non-ISO `printf' / `scanf' format 3499 width specifiers `I32', `I64', and `I' used on Windows targets 3500 depending on the MS runtime, when you are using the options 3501 `-Wformat' and `-pedantic' without gnu-extensions. 3502 3503 `-Wpointer-arith' 3504 Warn about anything that depends on the "size of" a function type 3505 or of `void'. GNU C assigns these types a size of 1, for 3506 convenience in calculations with `void *' pointers and pointers to 3507 functions. In C++, warn also when an arithmetic operation involves 3508 `NULL'. This warning is also enabled by `-pedantic'. 3509 3510 `-Wtype-limits' 3511 Warn if a comparison is always true or always false due to the 3512 limited range of the data type, but do not warn for constant 3513 expressions. For example, warn if an unsigned variable is 3514 compared against zero with `<' or `>='. This warning is also 3515 enabled by `-Wextra'. 3516 3517 `-Wbad-function-cast (C and Objective-C only)' 3518 Warn whenever a function call is cast to a non-matching type. For 3519 example, warn if `int malloc()' is cast to `anything *'. 3520 3521 `-Wc++-compat (C and Objective-C only)' 3522 Warn about ISO C constructs that are outside of the common subset 3523 of ISO C and ISO C++, e.g. request for implicit conversion from 3524 `void *' to a pointer to non-`void' type. 3525 3526 `-Wc++0x-compat (C++ and Objective-C++ only)' 3527 Warn about C++ constructs whose meaning differs between ISO C++ 3528 1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will 3529 become keywords in ISO C++ 200x. This warning is enabled by 3530 `-Wall'. 3531 3532 `-Wcast-qual' 3533 Warn whenever a pointer is cast so as to remove a type qualifier 3534 from the target type. For example, warn if a `const char *' is 3535 cast to an ordinary `char *'. 3536 3537 `-Wcast-align' 3538 Warn whenever a pointer is cast such that the required alignment 3539 of the target is increased. For example, warn if a `char *' is 3540 cast to an `int *' on machines where integers can only be accessed 3541 at two- or four-byte boundaries. 3542 3543 `-Wwrite-strings' 3544 When compiling C, give string constants the type `const 3545 char[LENGTH]' so that copying the address of one into a 3546 non-`const' `char *' pointer will get a warning. These warnings 3547 will help you find at compile time code that can try to write into 3548 a string constant, but only if you have been very careful about 3549 using `const' in declarations and prototypes. Otherwise, it will 3550 just be a nuisance. This is why we did not make `-Wall' request 3551 these warnings. 3552 3553 When compiling C++, warn about the deprecated conversion from 3554 string literals to `char *'. This warning is enabled by default 3555 for C++ programs. 3556 3557 `-Wclobbered' 3558 Warn for variables that might be changed by `longjmp' or `vfork'. 3559 This warning is also enabled by `-Wextra'. 3560 3561 `-Wconversion' 3562 Warn for implicit conversions that may alter a value. This includes 3563 conversions between real and integer, like `abs (x)' when `x' is 3564 `double'; conversions between signed and unsigned, like `unsigned 3565 ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'. 3566 Do not warn for explicit casts like `abs ((int) x)' and `ui = 3567 (unsigned) -1', or if the value is not changed by the conversion 3568 like in `abs (2.0)'. Warnings about conversions between signed 3569 and unsigned integers can be disabled by using 3570 `-Wno-sign-conversion'. 3571 3572 For C++, also warn for conversions between `NULL' and non-pointer 3573 types; confusing overload resolution for user-defined conversions; 3574 and conversions that will never use a type conversion operator: 3575 conversions to `void', the same type, a base class or a reference 3576 to them. Warnings about conversions between signed and unsigned 3577 integers are disabled by default in C++ unless `-Wsign-conversion' 3578 is explicitly enabled. 3579 3580 `-Wempty-body' 3581 Warn if an empty body occurs in an `if', `else' or `do while' 3582 statement. This warning is also enabled by `-Wextra'. 3583 3584 `-Wenum-compare (C++ and Objective-C++ only)' 3585 Warn about a comparison between values of different enum types. 3586 This warning is enabled by default. 3587 3588 `-Wsign-compare' 3589 Warn when a comparison between signed and unsigned values could 3590 produce an incorrect result when the signed value is converted to 3591 unsigned. This warning is also enabled by `-Wextra'; to get the 3592 other warnings of `-Wextra' without this warning, use `-Wextra 3593 -Wno-sign-compare'. 3594 3595 `-Wsign-conversion' 3596 Warn for implicit conversions that may change the sign of an 3597 integer value, like assigning a signed integer expression to an 3598 unsigned integer variable. An explicit cast silences the warning. 3599 In C, this option is enabled also by `-Wconversion'. 3600 3601 `-Waddress' 3602 Warn about suspicious uses of memory addresses. These include using 3603 the address of a function in a conditional expression, such as 3604 `void func(void); if (func)', and comparisons against the memory 3605 address of a string literal, such as `if (x == "abc")'. Such uses 3606 typically indicate a programmer error: the address of a function 3607 always evaluates to true, so their use in a conditional usually 3608 indicate that the programmer forgot the parentheses in a function 3609 call; and comparisons against string literals result in unspecified 3610 behavior and are not portable in C, so they usually indicate that 3611 the programmer intended to use `strcmp'. This warning is enabled 3612 by `-Wall'. 3613 3614 `-Wlogical-op' 3615 Warn about suspicious uses of logical operators in expressions. 3616 This includes using logical operators in contexts where a bit-wise 3617 operator is likely to be expected. 3618 3619 `-Waggregate-return' 3620 Warn if any functions that return structures or unions are defined 3621 or called. (In languages where you can return an array, this also 3622 elicits a warning.) 3623 3624 `-Wno-attributes' 3625 Do not warn if an unexpected `__attribute__' is used, such as 3626 unrecognized attributes, function attributes applied to variables, 3627 etc. This will not stop errors for incorrect use of supported 3628 attributes. 3629 3630 `-Wno-builtin-macro-redefined' 3631 Do not warn if certain built-in macros are redefined. This 3632 suppresses warnings for redefinition of `__TIMESTAMP__', 3633 `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'. 3634 3635 `-Wstrict-prototypes (C and Objective-C only)' 3636 Warn if a function is declared or defined without specifying the 3637 argument types. (An old-style function definition is permitted 3638 without a warning if preceded by a declaration which specifies the 3639 argument types.) 3640 3641 `-Wold-style-declaration (C and Objective-C only)' 3642 Warn for obsolescent usages, according to the C Standard, in a 3643 declaration. For example, warn if storage-class specifiers like 3644 `static' are not the first things in a declaration. This warning 3645 is also enabled by `-Wextra'. 3646 3647 `-Wold-style-definition (C and Objective-C only)' 3648 Warn if an old-style function definition is used. A warning is 3649 given even if there is a previous prototype. 3650 3651 `-Wmissing-parameter-type (C and Objective-C only)' 3652 A function parameter is declared without a type specifier in 3653 K&R-style functions: 3654 3655 void foo(bar) { } 3656 3657 This warning is also enabled by `-Wextra'. 3658 3659 `-Wmissing-prototypes (C and Objective-C only)' 3660 Warn if a global function is defined without a previous prototype 3661 declaration. This warning is issued even if the definition itself 3662 provides a prototype. The aim is to detect global functions that 3663 fail to be declared in header files. 3664 3665 `-Wmissing-declarations' 3666 Warn if a global function is defined without a previous 3667 declaration. Do so even if the definition itself provides a 3668 prototype. Use this option to detect global functions that are 3669 not declared in header files. In C++, no warnings are issued for 3670 function templates, or for inline functions, or for functions in 3671 anonymous namespaces. 3672 3673 `-Wmissing-field-initializers' 3674 Warn if a structure's initializer has some fields missing. For 3675 example, the following code would cause such a warning, because 3676 `x.h' is implicitly zero: 3677 3678 struct s { int f, g, h; }; 3679 struct s x = { 3, 4 }; 3680 3681 This option does not warn about designated initializers, so the 3682 following modification would not trigger a warning: 3683 3684 struct s { int f, g, h; }; 3685 struct s x = { .f = 3, .g = 4 }; 3686 3687 This warning is included in `-Wextra'. To get other `-Wextra' 3688 warnings without this one, use `-Wextra 3689 -Wno-missing-field-initializers'. 3690 3691 `-Wmissing-noreturn' 3692 Warn about functions which might be candidates for attribute 3693 `noreturn'. Note these are only possible candidates, not absolute 3694 ones. Care should be taken to manually verify functions actually 3695 do not ever return before adding the `noreturn' attribute, 3696 otherwise subtle code generation bugs could be introduced. You 3697 will not get a warning for `main' in hosted C environments. 3698 3699 `-Wmissing-format-attribute' 3700 Warn about function pointers which might be candidates for `format' 3701 attributes. Note these are only possible candidates, not absolute 3702 ones. GCC will guess that function pointers with `format' 3703 attributes that are used in assignment, initialization, parameter 3704 passing or return statements should have a corresponding `format' 3705 attribute in the resulting type. I.e. the left-hand side of the 3706 assignment or initialization, the type of the parameter variable, 3707 or the return type of the containing function respectively should 3708 also have a `format' attribute to avoid the warning. 3709 3710 GCC will also warn about function definitions which might be 3711 candidates for `format' attributes. Again, these are only 3712 possible candidates. GCC will guess that `format' attributes 3713 might be appropriate for any function that calls a function like 3714 `vprintf' or `vscanf', but this might not always be the case, and 3715 some functions for which `format' attributes are appropriate may 3716 not be detected. 3717 3718 `-Wno-multichar' 3719 Do not warn if a multicharacter constant (`'FOOF'') is used. 3720 Usually they indicate a typo in the user's code, as they have 3721 implementation-defined values, and should not be used in portable 3722 code. 3723 3724 `-Wnormalized=<none|id|nfc|nfkc>' 3725 In ISO C and ISO C++, two identifiers are different if they are 3726 different sequences of characters. However, sometimes when 3727 characters outside the basic ASCII character set are used, you can 3728 have two different character sequences that look the same. To 3729 avoid confusion, the ISO 10646 standard sets out some 3730 "normalization rules" which when applied ensure that two sequences 3731 that look the same are turned into the same sequence. GCC can 3732 warn you if you are using identifiers which have not been 3733 normalized; this option controls that warning. 3734 3735 There are four levels of warning that GCC supports. The default is 3736 `-Wnormalized=nfc', which warns about any identifier which is not 3737 in the ISO 10646 "C" normalized form, "NFC". NFC is the 3738 recommended form for most uses. 3739 3740 Unfortunately, there are some characters which ISO C and ISO C++ 3741 allow in identifiers that when turned into NFC aren't allowable as 3742 identifiers. That is, there's no way to use these symbols in 3743 portable ISO C or C++ and have all your identifiers in NFC. 3744 `-Wnormalized=id' suppresses the warning for these characters. It 3745 is hoped that future versions of the standards involved will 3746 correct this, which is why this option is not the default. 3747 3748 You can switch the warning off for all characters by writing 3749 `-Wnormalized=none'. You would only want to do this if you were 3750 using some other normalization scheme (like "D"), because 3751 otherwise you can easily create bugs that are literally impossible 3752 to see. 3753 3754 Some characters in ISO 10646 have distinct meanings but look 3755 identical in some fonts or display methodologies, especially once 3756 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 3757 LATIN SMALL LETTER N", will display just like a regular `n' which 3758 has been placed in a superscript. ISO 10646 defines the "NFKC" 3759 normalization scheme to convert all these into a standard form as 3760 well, and GCC will warn if your code is not in NFKC if you use 3761 `-Wnormalized=nfkc'. This warning is comparable to warning about 3762 every identifier that contains the letter O because it might be 3763 confused with the digit 0, and so is not the default, but may be 3764 useful as a local coding convention if the programming environment 3765 is unable to be fixed to display these characters distinctly. 3766 3767 `-Wno-deprecated' 3768 Do not warn about usage of deprecated features. *Note Deprecated 3769 Features::. 3770 3771 `-Wno-deprecated-declarations' 3772 Do not warn about uses of functions (*note Function Attributes::), 3773 variables (*note Variable Attributes::), and types (*note Type 3774 Attributes::) marked as deprecated by using the `deprecated' 3775 attribute. 3776 3777 `-Wno-overflow' 3778 Do not warn about compile-time overflow in constant expressions. 3779 3780 `-Woverride-init (C and Objective-C only)' 3781 Warn if an initialized field without side effects is overridden 3782 when using designated initializers (*note Designated Initializers: 3783 Designated Inits.). 3784 3785 This warning is included in `-Wextra'. To get other `-Wextra' 3786 warnings without this one, use `-Wextra -Wno-override-init'. 3787 3788 `-Wpacked' 3789 Warn if a structure is given the packed attribute, but the packed 3790 attribute has no effect on the layout or size of the structure. 3791 Such structures may be mis-aligned for little benefit. For 3792 instance, in this code, the variable `f.x' in `struct bar' will be 3793 misaligned even though `struct bar' does not itself have the 3794 packed attribute: 3795 3796 struct foo { 3797 int x; 3798 char a, b, c, d; 3799 } __attribute__((packed)); 3800 struct bar { 3801 char z; 3802 struct foo f; 3803 }; 3804 3805 `-Wpacked-bitfield-compat' 3806 The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute 3807 on bit-fields of type `char'. This has been fixed in GCC 4.4 but 3808 the change can lead to differences in the structure layout. GCC 3809 informs you when the offset of such a field has changed in GCC 4.4. 3810 For example there is no longer a 4-bit padding between field `a' 3811 and `b' in this structure: 3812 3813 struct foo 3814 { 3815 char a:4; 3816 char b:8; 3817 } __attribute__ ((packed)); 3818 3819 This warning is enabled by default. Use 3820 `-Wno-packed-bitfield-compat' to disable this warning. 3821 3822 `-Wpadded' 3823 Warn if padding is included in a structure, either to align an 3824 element of the structure or to align the whole structure. 3825 Sometimes when this happens it is possible to rearrange the fields 3826 of the structure to reduce the padding and so make the structure 3827 smaller. 3828 3829 `-Wredundant-decls' 3830 Warn if anything is declared more than once in the same scope, 3831 even in cases where multiple declaration is valid and changes 3832 nothing. 3833 3834 `-Wnested-externs (C and Objective-C only)' 3835 Warn if an `extern' declaration is encountered within a function. 3836 3837 `-Wunreachable-code' 3838 Warn if the compiler detects that code will never be executed. 3839 3840 This option is intended to warn when the compiler detects that at 3841 least a whole line of source code will never be executed, because 3842 some condition is never satisfied or because it is after a 3843 procedure that never returns. 3844 3845 It is possible for this option to produce a warning even though 3846 there are circumstances under which part of the affected line can 3847 be executed, so care should be taken when removing 3848 apparently-unreachable code. 3849 3850 For instance, when a function is inlined, a warning may mean that 3851 the line is unreachable in only one inlined copy of the function. 3852 3853 This option is not made part of `-Wall' because in a debugging 3854 version of a program there is often substantial code which checks 3855 correct functioning of the program and is, hopefully, unreachable 3856 because the program does work. Another common use of unreachable 3857 code is to provide behavior which is selectable at compile-time. 3858 3859 `-Winline' 3860 Warn if a function can not be inlined and it was declared as 3861 inline. Even with this option, the compiler will not warn about 3862 failures to inline functions declared in system headers. 3863 3864 The compiler uses a variety of heuristics to determine whether or 3865 not to inline a function. For example, the compiler takes into 3866 account the size of the function being inlined and the amount of 3867 inlining that has already been done in the current function. 3868 Therefore, seemingly insignificant changes in the source program 3869 can cause the warnings produced by `-Winline' to appear or 3870 disappear. 3871 3872 `-Wno-invalid-offsetof (C++ and Objective-C++ only)' 3873 Suppress warnings from applying the `offsetof' macro to a non-POD 3874 type. According to the 1998 ISO C++ standard, applying `offsetof' 3875 to a non-POD type is undefined. In existing C++ implementations, 3876 however, `offsetof' typically gives meaningful results even when 3877 applied to certain kinds of non-POD types. (Such as a simple 3878 `struct' that fails to be a POD type only by virtue of having a 3879 constructor.) This flag is for users who are aware that they are 3880 writing nonportable code and who have deliberately chosen to 3881 ignore the warning about it. 3882 3883 The restrictions on `offsetof' may be relaxed in a future version 3884 of the C++ standard. 3885 3886 `-Wno-int-to-pointer-cast (C and Objective-C only)' 3887 Suppress warnings from casts to pointer type of an integer of a 3888 different size. 3889 3890 `-Wno-pointer-to-int-cast (C and Objective-C only)' 3891 Suppress warnings from casts from a pointer to an integer type of a 3892 different size. 3893 3894 `-Winvalid-pch' 3895 Warn if a precompiled header (*note Precompiled Headers::) is 3896 found in the search path but can't be used. 3897 3898 `-Wlong-long' 3899 Warn if `long long' type is used. This is default. To inhibit 3900 the warning messages, use `-Wno-long-long'. Flags `-Wlong-long' 3901 and `-Wno-long-long' are taken into account only when `-pedantic' 3902 flag is used. 3903 3904 `-Wvariadic-macros' 3905 Warn if variadic macros are used in pedantic ISO C90 mode, or the 3906 GNU alternate syntax when in pedantic ISO C99 mode. This is 3907 default. To inhibit the warning messages, use 3908 `-Wno-variadic-macros'. 3909 3910 `-Wvla' 3911 Warn if variable length array is used in the code. `-Wno-vla' 3912 will prevent the `-pedantic' warning of the variable length array. 3913 3914 `-Wvolatile-register-var' 3915 Warn if a register variable is declared volatile. The volatile 3916 modifier does not inhibit all optimizations that may eliminate 3917 reads and/or writes to register variables. This warning is 3918 enabled by `-Wall'. 3919 3920 `-Wdisabled-optimization' 3921 Warn if a requested optimization pass is disabled. This warning 3922 does not generally indicate that there is anything wrong with your 3923 code; it merely indicates that GCC's optimizers were unable to 3924 handle the code effectively. Often, the problem is that your code 3925 is too big or too complex; GCC will refuse to optimize programs 3926 when the optimization itself is likely to take inordinate amounts 3927 of time. 3928 3929 `-Wpointer-sign (C and Objective-C only)' 3930 Warn for pointer argument passing or assignment with different 3931 signedness. This option is only supported for C and Objective-C. 3932 It is implied by `-Wall' and by `-pedantic', which can be disabled 3933 with `-Wno-pointer-sign'. 3934 3935 `-Wstack-protector' 3936 This option is only active when `-fstack-protector' is active. It 3937 warns about functions that will not be protected against stack 3938 smashing. 3939 3940 `-Wno-mudflap' 3941 Suppress warnings about constructs that cannot be instrumented by 3942 `-fmudflap'. 3943 3944 `-Woverlength-strings' 3945 Warn about string constants which are longer than the "minimum 3946 maximum" length specified in the C standard. Modern compilers 3947 generally allow string constants which are much longer than the 3948 standard's minimum limit, but very portable programs should avoid 3949 using longer strings. 3950 3951 The limit applies _after_ string constant concatenation, and does 3952 not count the trailing NUL. In C89, the limit was 509 characters; 3953 in C99, it was raised to 4095. C++98 does not specify a normative 3954 minimum maximum, so we do not diagnose overlength strings in C++. 3955 3956 This option is implied by `-pedantic', and can be disabled with 3957 `-Wno-overlength-strings'. 3958 3959 3960 File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 3961 3962 3.9 Options for Debugging Your Program or GCC 3963 ============================================= 3964 3965 GCC has various special options that are used for debugging either your 3966 program or GCC: 3967 3968 `-g' 3969 Produce debugging information in the operating system's native 3970 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 3971 debugging information. 3972 3973 On most systems that use stabs format, `-g' enables use of extra 3974 debugging information that only GDB can use; this extra information 3975 makes debugging work better in GDB but will probably make other 3976 debuggers crash or refuse to read the program. If you want to 3977 control for certain whether to generate the extra information, use 3978 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 3979 below). 3980 3981 GCC allows you to use `-g' with `-O'. The shortcuts taken by 3982 optimized code may occasionally produce surprising results: some 3983 variables you declared may not exist at all; flow of control may 3984 briefly move where you did not expect it; some statements may not 3985 be executed because they compute constant results or their values 3986 were already at hand; some statements may execute in different 3987 places because they were moved out of loops. 3988 3989 Nevertheless it proves possible to debug optimized output. This 3990 makes it reasonable to use the optimizer for programs that might 3991 have bugs. 3992 3993 The following options are useful when GCC is generated with the 3994 capability for more than one debugging format. 3995 3996 `-ggdb' 3997 Produce debugging information for use by GDB. This means to use 3998 the most expressive format available (DWARF 2, stabs, or the 3999 native format if neither of those are supported), including GDB 4000 extensions if at all possible. 4001 4002 `-gstabs' 4003 Produce debugging information in stabs format (if that is 4004 supported), without GDB extensions. This is the format used by 4005 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 4006 systems this option produces stabs debugging output which is not 4007 understood by DBX or SDB. On System V Release 4 systems this 4008 option requires the GNU assembler. 4009 4010 `-feliminate-unused-debug-symbols' 4011 Produce debugging information in stabs format (if that is 4012 supported), for only symbols that are actually used. 4013 4014 `-femit-class-debug-always' 4015 Instead of emitting debugging information for a C++ class in only 4016 one object file, emit it in all object files using the class. 4017 This option should be used only with debuggers that are unable to 4018 handle the way GCC normally emits debugging information for 4019 classes because using this option will increase the size of 4020 debugging information by as much as a factor of two. 4021 4022 `-gstabs+' 4023 Produce debugging information in stabs format (if that is 4024 supported), using GNU extensions understood only by the GNU 4025 debugger (GDB). The use of these extensions is likely to make 4026 other debuggers crash or refuse to read the program. 4027 4028 `-gcoff' 4029 Produce debugging information in COFF format (if that is 4030 supported). This is the format used by SDB on most System V 4031 systems prior to System V Release 4. 4032 4033 `-gxcoff' 4034 Produce debugging information in XCOFF format (if that is 4035 supported). This is the format used by the DBX debugger on IBM 4036 RS/6000 systems. 4037 4038 `-gxcoff+' 4039 Produce debugging information in XCOFF format (if that is 4040 supported), using GNU extensions understood only by the GNU 4041 debugger (GDB). The use of these extensions is likely to make 4042 other debuggers crash or refuse to read the program, and may cause 4043 assemblers other than the GNU assembler (GAS) to fail with an 4044 error. 4045 4046 `-gdwarf-2' 4047 Produce debugging information in DWARF version 2 format (if that is 4048 supported). This is the format used by DBX on IRIX 6. With this 4049 option, GCC uses features of DWARF version 3 when they are useful; 4050 version 3 is upward compatible with version 2, but may still cause 4051 problems for older debuggers. 4052 4053 `-gdwarf-4' 4054 Produce debugging information in DWARF version 4 format (if that is 4055 supported). With this option, GCC uses features of DWARF version 4 4056 when they are useful, including the placement of most type 4057 information in separate comdat sections. The DWARF version 4 4058 format is still a draft specification, and this option is 4059 currently experimental. 4060 4061 `-gvms' 4062 Produce debugging information in VMS debug format (if that is 4063 supported). This is the format used by DEBUG on VMS systems. 4064 4065 `-gLEVEL' 4066 `-ggdbLEVEL' 4067 `-gstabsLEVEL' 4068 `-gcoffLEVEL' 4069 `-gxcoffLEVEL' 4070 `-gvmsLEVEL' 4071 Request debugging information and also use LEVEL to specify how 4072 much information. The default level is 2. 4073 4074 Level 0 produces no debug information at all. Thus, `-g0' negates 4075 `-g'. 4076 4077 Level 1 produces minimal information, enough for making backtraces 4078 in parts of the program that you don't plan to debug. This 4079 includes descriptions of functions and external variables, but no 4080 information about local variables and no line numbers. 4081 4082 Level 3 includes extra information, such as all the macro 4083 definitions present in the program. Some debuggers support macro 4084 expansion when you use `-g3'. 4085 4086 `-gdwarf-2' does not accept a concatenated debug level, because 4087 GCC used to support an option `-gdwarf' that meant to generate 4088 debug information in version 1 of the DWARF format (which is very 4089 different from version 2), and it would have been too confusing. 4090 That debug format is long obsolete, but the option cannot be 4091 changed now. Instead use an additional `-gLEVEL' option to change 4092 the debug level for DWARF2. 4093 4094 `-gmlt' 4095 Produce a minimal line table, with level 1 debugging information 4096 plus information about inlined functions and line numbers. 4097 4098 `-feliminate-dwarf2-dups' 4099 Compress DWARF2 debugging information by eliminating duplicated 4100 information about each symbol. This option only makes sense when 4101 generating DWARF2 debugging information with `-gdwarf-2'. 4102 4103 `-femit-struct-debug-baseonly' 4104 Emit debug information for struct-like types only when the base 4105 name of the compilation source file matches the base name of file 4106 in which the struct was defined. 4107 4108 This option substantially reduces the size of debugging 4109 information, but at significant potential loss in type information 4110 to the debugger. See `-femit-struct-debug-reduced' for a less 4111 aggressive option. See `-femit-struct-debug-detailed' for more 4112 detailed control. 4113 4114 This option works only with DWARF 2. 4115 4116 `-femit-struct-debug-reduced' 4117 Emit debug information for struct-like types only when the base 4118 name of the compilation source file matches the base name of file 4119 in which the type was defined, unless the struct is a template or 4120 defined in a system header. 4121 4122 This option significantly reduces the size of debugging 4123 information, with some potential loss in type information to the 4124 debugger. See `-femit-struct-debug-baseonly' for a more 4125 aggressive option. See `-femit-struct-debug-detailed' for more 4126 detailed control. 4127 4128 This option works only with DWARF 2. 4129 4130 `-femit-struct-debug-detailed[=SPEC-LIST]' 4131 Specify the struct-like types for which the compiler will generate 4132 debug information. The intent is to reduce duplicate struct debug 4133 information between different object files within the same program. 4134 4135 This option is a detailed version of `-femit-struct-debug-reduced' 4136 and `-femit-struct-debug-baseonly', which will serve for most 4137 needs. 4138 4139 A specification has the syntax 4140 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 4141 4142 The optional first word limits the specification to structs that 4143 are used directly (`dir:') or used indirectly (`ind:'). A struct 4144 type is used directly when it is the type of a variable, member. 4145 Indirect uses arise through pointers to structs. That is, when 4146 use of an incomplete struct would be legal, the use is indirect. 4147 An example is `struct one direct; struct two * indirect;'. 4148 4149 The optional second word limits the specification to ordinary 4150 structs (`ord:') or generic structs (`gen:'). Generic structs are 4151 a bit complicated to explain. For C++, these are non-explicit 4152 specializations of template classes, or non-template classes 4153 within the above. Other programming languages have generics, but 4154 `-femit-struct-debug-detailed' does not yet implement them. 4155 4156 The third word specifies the source files for those structs for 4157 which the compiler will emit debug information. The values `none' 4158 and `any' have the normal meaning. The value `base' means that 4159 the base of name of the file in which the type declaration appears 4160 must match the base of the name of the main compilation file. In 4161 practice, this means that types declared in `foo.c' and `foo.h' 4162 will have debug information, but types declared in other header 4163 will not. The value `sys' means those types satisfying `base' or 4164 declared in system or compiler headers. 4165 4166 You may need to experiment to determine the best settings for your 4167 application. 4168 4169 The default is `-femit-struct-debug-detailed=all'. 4170 4171 This option works only with DWARF 2. 4172 4173 `-fenable-icf-debug' 4174 Generate additional debug information to support identical code 4175 folding (ICF). This option only works with DWARF version 2 or 4176 higher. 4177 4178 `-fno-merge-debug-strings' 4179 Direct the linker to not merge together strings in the debugging 4180 information which are identical in different object files. 4181 Merging is not supported by all assemblers or linkers. Merging 4182 decreases the size of the debug information in the output file at 4183 the cost of increasing link processing time. Merging is enabled 4184 by default. 4185 4186 `-fdebug-prefix-map=OLD=NEW' 4187 When compiling files in directory `OLD', record debugging 4188 information describing them as in `NEW' instead. 4189 4190 `-fno-dwarf2-cfi-asm' 4191 Emit DWARF 2 unwind info as compiler generated `.eh_frame' section 4192 instead of using GAS `.cfi_*' directives. 4193 4194 `-p' 4195 Generate extra code to write profile information suitable for the 4196 analysis program `prof'. You must use this option when compiling 4197 the source files you want data about, and you must also use it when 4198 linking. 4199 4200 `-pg' 4201 Generate extra code to write profile information suitable for the 4202 analysis program `gprof'. You must use this option when compiling 4203 the source files you want data about, and you must also use it when 4204 linking. 4205 4206 `-Q' 4207 Makes the compiler print out each function name as it is compiled, 4208 and print some statistics about each pass when it finishes. 4209 4210 `-ftime-report' 4211 Makes the compiler print some statistics about the time consumed 4212 by each pass when it finishes. 4213 4214 `-fmem-report' 4215 Makes the compiler print some statistics about permanent memory 4216 allocation when it finishes. 4217 4218 `-fpre-ipa-mem-report' 4219 4220 `-fpost-ipa-mem-report' 4221 Makes the compiler print some statistics about permanent memory 4222 allocation before or after interprocedural optimization. 4223 4224 `-fprofile-arcs' 4225 Add code so that program flow "arcs" are instrumented. During 4226 execution the program records how many times each branch and call 4227 is executed and how many times it is taken or returns. When the 4228 compiled program exits it saves this data to a file called 4229 `AUXNAME.gcda' for each source file. The data may be used for 4230 profile-directed optimizations (`-fbranch-probabilities'), or for 4231 test coverage analysis (`-ftest-coverage'). Each object file's 4232 AUXNAME is generated from the name of the output file, if 4233 explicitly specified and it is not the final executable, otherwise 4234 it is the basename of the source file. In both cases any suffix 4235 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 4236 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 4237 *Note Cross-profiling::. 4238 4239 `--coverage' 4240 This option is used to compile and link code instrumented for 4241 coverage analysis. The option is a synonym for `-fprofile-arcs' 4242 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 4243 See the documentation for those options for more details. 4244 4245 * Compile the source files with `-fprofile-arcs' plus 4246 optimization and code generation options. For test coverage 4247 analysis, use the additional `-ftest-coverage' option. You 4248 do not need to profile every source file in a program. 4249 4250 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 4251 latter implies the former). 4252 4253 * Run the program on a representative workload to generate the 4254 arc profile information. This may be repeated any number of 4255 times. You can run concurrent instances of your program, and 4256 provided that the file system supports locking, the data 4257 files will be correctly updated. Also `fork' calls are 4258 detected and correctly handled (double counting will not 4259 happen). 4260 4261 * For profile-directed optimizations, compile the source files 4262 again with the same optimization and code generation options 4263 plus `-fbranch-probabilities' (*note Options that Control 4264 Optimization: Optimize Options.). 4265 4266 * For test coverage analysis, use `gcov' to produce human 4267 readable information from the `.gcno' and `.gcda' files. 4268 Refer to the `gcov' documentation for further information. 4269 4270 4271 With `-fprofile-arcs', for each function of your program GCC 4272 creates a program flow graph, then finds a spanning tree for the 4273 graph. Only arcs that are not on the spanning tree have to be 4274 instrumented: the compiler adds code to count the number of times 4275 that these arcs are executed. When an arc is the only exit or 4276 only entrance to a block, the instrumentation code can be added to 4277 the block; otherwise, a new basic block must be created to hold 4278 the instrumentation code. 4279 4280 `-ftest-coverage' 4281 Produce a notes file that the `gcov' code-coverage utility (*note 4282 `gcov'--a Test Coverage Program: Gcov.) can use to show program 4283 coverage. Each source file's note file is called `AUXNAME.gcno'. 4284 Refer to the `-fprofile-arcs' option above for a description of 4285 AUXNAME and instructions on how to generate test coverage data. 4286 Coverage data will match the source files more closely, if you do 4287 not optimize. 4288 4289 `-fdbg-cnt-list' 4290 Print the name and the counter upperbound for all debug counters. 4291 4292 `-fdbg-cnt=COUNTER-VALUE-LIST' 4293 Set the internal debug counter upperbound. COUNTER-VALUE-LIST is a 4294 comma-separated list of NAME:VALUE pairs which sets the upperbound 4295 of each debug counter NAME to VALUE. All debug counters have the 4296 initial upperbound of UINT_MAX, thus dbg_cnt() returns true always 4297 unless the upperbound is set by this option. e.g. With 4298 -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only 4299 for first 10 invocations and dbg_cnt(tail_call) will return false 4300 always. 4301 4302 `-dLETTERS' 4303 `-fdump-rtl-PASS' 4304 Says to make debugging dumps during compilation at times specified 4305 by LETTERS. This is used for debugging the RTL-based passes of the 4306 compiler. The file names for most of the dumps are made by 4307 appending a pass number and a word to the DUMPNAME, and the files 4308 are created in the directory of the output file. DUMPNAME is 4309 generated from the name of the output file, if explicitly specified 4310 and it is not an executable, otherwise it is the basename of the 4311 source file. These switches may have different effects when `-E' 4312 is used for preprocessing. 4313 4314 Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d' 4315 option LETTERS. Here are the possible letters for use in PASS and 4316 LETTERS, and their meanings: 4317 4318 `-fdump-rtl-alignments' 4319 Dump after branch alignments have been computed. 4320 4321 `-fdump-rtl-asmcons' 4322 Dump after fixing rtl statements that have unsatisfied in/out 4323 constraints. 4324 4325 `-fdump-rtl-auto_inc_dec' 4326 Dump after auto-inc-dec discovery. This pass is only run on 4327 architectures that have auto inc or auto dec instructions. 4328 4329 `-fdump-rtl-barriers' 4330 Dump after cleaning up the barrier instructions. 4331 4332 `-fdump-rtl-bbpart' 4333 Dump after partitioning hot and cold basic blocks. 4334 4335 `-fdump-rtl-bbro' 4336 Dump after block reordering. 4337 4338 `-fdump-rtl-btl1' 4339 `-fdump-rtl-btl2' 4340 `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after 4341 the two branch target load optimization passes. 4342 4343 `-fdump-rtl-bypass' 4344 Dump after jump bypassing and control flow optimizations. 4345 4346 `-fdump-rtl-combine' 4347 Dump after the RTL instruction combination pass. 4348 4349 `-fdump-rtl-compgotos' 4350 Dump after duplicating the computed gotos. 4351 4352 `-fdump-rtl-ce1' 4353 `-fdump-rtl-ce2' 4354 `-fdump-rtl-ce3' 4355 `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3' 4356 enable dumping after the three if conversion passes. 4357 4358 `-fdump-rtl-cprop_hardreg' 4359 Dump after hard register copy propagation. 4360 4361 `-fdump-rtl-csa' 4362 Dump after combining stack adjustments. 4363 4364 `-fdump-rtl-cse1' 4365 `-fdump-rtl-cse2' 4366 `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after 4367 the two common sub-expression elimination passes. 4368 4369 `-fdump-rtl-dce' 4370 Dump after the standalone dead code elimination passes. 4371 4372 `-fdump-rtl-dbr' 4373 Dump after delayed branch scheduling. 4374 4375 `-fdump-rtl-dce1' 4376 `-fdump-rtl-dce2' 4377 `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after 4378 the two dead store elimination passes. 4379 4380 `-fdump-rtl-eh' 4381 Dump after finalization of EH handling code. 4382 4383 `-fdump-rtl-eh_ranges' 4384 Dump after conversion of EH handling range regions. 4385 4386 `-fdump-rtl-expand' 4387 Dump after RTL generation. 4388 4389 `-fdump-rtl-fwprop1' 4390 `-fdump-rtl-fwprop2' 4391 `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping 4392 after the two forward propagation passes. 4393 4394 `-fdump-rtl-gcse1' 4395 `-fdump-rtl-gcse2' 4396 `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping 4397 after global common subexpression elimination. 4398 4399 `-fdump-rtl-init-regs' 4400 Dump after the initialization of the registers. 4401 4402 `-fdump-rtl-initvals' 4403 Dump after the computation of the initial value sets. 4404 4405 `-fdump-rtl-into_cfglayout' 4406 Dump after converting to cfglayout mode. 4407 4408 `-fdump-rtl-ira' 4409 Dump after iterated register allocation. 4410 4411 `-fdump-rtl-jump' 4412 Dump after the second jump optimization. 4413 4414 `-fdump-rtl-loop2' 4415 `-fdump-rtl-loop2' enables dumping after the rtl loop 4416 optimization passes. 4417 4418 `-fdump-rtl-mach' 4419 Dump after performing the machine dependent reorganization 4420 pass, if that pass exists. 4421 4422 `-fdump-rtl-mode_sw' 4423 Dump after removing redundant mode switches. 4424 4425 `-fdump-rtl-rnreg' 4426 Dump after register renumbering. 4427 4428 `-fdump-rtl-outof_cfglayout' 4429 Dump after converting from cfglayout mode. 4430 4431 `-fdump-rtl-peephole2' 4432 Dump after the peephole pass. 4433 4434 `-fdump-rtl-postreload' 4435 Dump after post-reload optimizations. 4436 4437 `-fdump-rtl-pro_and_epilogue' 4438 Dump after generating the function pro and epilogues. 4439 4440 `-fdump-rtl-regmove' 4441 Dump after the register move pass. 4442 4443 `-fdump-rtl-sched1' 4444 `-fdump-rtl-sched2' 4445 `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping 4446 after the basic block scheduling passes. 4447 4448 `-fdump-rtl-see' 4449 Dump after sign extension elimination. 4450 4451 `-fdump-rtl-seqabstr' 4452 Dump after common sequence discovery. 4453 4454 `-fdump-rtl-shorten' 4455 Dump after shortening branches. 4456 4457 `-fdump-rtl-sibling' 4458 Dump after sibling call optimizations. 4459 4460 `-fdump-rtl-split1' 4461 `-fdump-rtl-split2' 4462 `-fdump-rtl-split3' 4463 `-fdump-rtl-split4' 4464 `-fdump-rtl-split5' 4465 `-fdump-rtl-split1', `-fdump-rtl-split2', 4466 `-fdump-rtl-split3', `-fdump-rtl-split4' and 4467 `-fdump-rtl-split5' enable dumping after five rounds of 4468 instruction splitting. 4469 4470 `-fdump-rtl-sms' 4471 Dump after modulo scheduling. This pass is only run on some 4472 architectures. 4473 4474 `-fdump-rtl-stack' 4475 Dump after conversion from GCC's "flat register file" 4476 registers to the x87's stack-like registers. This pass is 4477 only run on x86 variants. 4478 4479 `-fdump-rtl-subreg1' 4480 `-fdump-rtl-subreg2' 4481 `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping 4482 after the two subreg expansion passes. 4483 4484 `-fdump-rtl-unshare' 4485 Dump after all rtl has been unshared. 4486 4487 `-fdump-rtl-vartrack' 4488 Dump after variable tracking. 4489 4490 `-fdump-rtl-vregs' 4491 Dump after converting virtual registers to hard registers. 4492 4493 `-fdump-rtl-web' 4494 Dump after live range splitting. 4495 4496 `-fdump-rtl-regclass' 4497 `-fdump-rtl-subregs_of_mode_init' 4498 `-fdump-rtl-subregs_of_mode_finish' 4499 `-fdump-rtl-dfinit' 4500 `-fdump-rtl-dfinish' 4501 These dumps are defined but always produce empty files. 4502 4503 `-fdump-rtl-all' 4504 Produce all the dumps listed above. 4505 4506 `-dA' 4507 Annotate the assembler output with miscellaneous debugging 4508 information. 4509 4510 `-dD' 4511 Dump all macro definitions, at the end of preprocessing, in 4512 addition to normal output. 4513 4514 `-dH' 4515 Produce a core dump whenever an error occurs. 4516 4517 `-dm' 4518 Print statistics on memory usage, at the end of the run, to 4519 standard error. 4520 4521 `-dp' 4522 Annotate the assembler output with a comment indicating which 4523 pattern and alternative was used. The length of each 4524 instruction is also printed. 4525 4526 `-dP' 4527 Dump the RTL in the assembler output as a comment before each 4528 instruction. Also turns on `-dp' annotation. 4529 4530 `-dv' 4531 For each of the other indicated dump files 4532 (`-fdump-rtl-PASS'), dump a representation of the control 4533 flow graph suitable for viewing with VCG to `FILE.PASS.vcg'. 4534 4535 `-dx' 4536 Just generate RTL for a function instead of compiling it. 4537 Usually used with `-fdump-rtl-expand'. 4538 4539 `-dy' 4540 Dump debugging information during parsing, to standard error. 4541 4542 `-fdump-noaddr' 4543 When doing debugging dumps, suppress address output. This makes 4544 it more feasible to use diff on debugging dumps for compiler 4545 invocations with different compiler binaries and/or different text 4546 / bss / data / heap / stack / dso start locations. 4547 4548 `-fdump-unnumbered' 4549 When doing debugging dumps, suppress instruction numbers and 4550 address output. This makes it more feasible to use diff on 4551 debugging dumps for compiler invocations with different options, 4552 in particular with and without `-g'. 4553 4554 `-fdump-translation-unit (C++ only)' 4555 `-fdump-translation-unit-OPTIONS (C++ only)' 4556 Dump a representation of the tree structure for the entire 4557 translation unit to a file. The file name is made by appending 4558 `.tu' to the source file name, and the file is created in the same 4559 directory as the output file. If the `-OPTIONS' form is used, 4560 OPTIONS controls the details of the dump as described for the 4561 `-fdump-tree' options. 4562 4563 `-fdump-class-hierarchy (C++ only)' 4564 `-fdump-class-hierarchy-OPTIONS (C++ only)' 4565 Dump a representation of each class's hierarchy and virtual 4566 function table layout to a file. The file name is made by 4567 appending `.class' to the source file name, and the file is 4568 created in the same directory as the output file. If the 4569 `-OPTIONS' form is used, OPTIONS controls the details of the dump 4570 as described for the `-fdump-tree' options. 4571 4572 `-fdump-ipa-SWITCH' 4573 Control the dumping at various stages of inter-procedural analysis 4574 language tree to a file. The file name is generated by appending a 4575 switch specific suffix to the source file name, and the file is 4576 created in the same directory as the output file. The following 4577 dumps are possible: 4578 4579 `all' 4580 Enables all inter-procedural analysis dumps. 4581 4582 `cgraph' 4583 Dumps information about call-graph optimization, unused 4584 function removal, and inlining decisions. 4585 4586 `inline' 4587 Dump after function inlining. 4588 4589 4590 `-fdump-statistics-OPTION' 4591 Enable and control dumping of pass statistics in a separate file. 4592 The file name is generated by appending a suffix ending in 4593 `.statistics' to the source file name, and the file is created in 4594 the same directory as the output file. If the `-OPTION' form is 4595 used, `-stats' will cause counters to be summed over the whole 4596 compilation unit while `-details' will dump every event as the 4597 passes generate them. The default with no option is to sum 4598 counters for each function compiled. 4599 4600 `-fdump-tree-SWITCH' 4601 `-fdump-tree-SWITCH-OPTIONS' 4602 Control the dumping at various stages of processing the 4603 intermediate language tree to a file. The file name is generated 4604 by appending a switch specific suffix to the source file name, and 4605 the file is created in the same directory as the output file. If 4606 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 4607 options that control the details of the dump. Not all options are 4608 applicable to all dumps, those which are not meaningful will be 4609 ignored. The following options are available 4610 4611 `address' 4612 Print the address of each node. Usually this is not 4613 meaningful as it changes according to the environment and 4614 source file. Its primary use is for tying up a dump file 4615 with a debug environment. 4616 4617 `slim' 4618 Inhibit dumping of members of a scope or body of a function 4619 merely because that scope has been reached. Only dump such 4620 items when they are directly reachable by some other path. 4621 When dumping pretty-printed trees, this option inhibits 4622 dumping the bodies of control structures. 4623 4624 `raw' 4625 Print a raw representation of the tree. By default, trees are 4626 pretty-printed into a C-like representation. 4627 4628 `details' 4629 Enable more detailed dumps (not honored by every dump option). 4630 4631 `stats' 4632 Enable dumping various statistics about the pass (not honored 4633 by every dump option). 4634 4635 `blocks' 4636 Enable showing basic block boundaries (disabled in raw dumps). 4637 4638 `vops' 4639 Enable showing virtual operands for every statement. 4640 4641 `lineno' 4642 Enable showing line numbers for statements. 4643 4644 `uid' 4645 Enable showing the unique ID (`DECL_UID') for each variable. 4646 4647 `verbose' 4648 Enable showing the tree dump for each statement. 4649 4650 `all' 4651 Turn on all options, except `raw', `slim', `verbose' and 4652 `lineno'. 4653 4654 The following tree dumps are possible: 4655 `original' 4656 Dump before any tree based optimization, to `FILE.original'. 4657 4658 `optimized' 4659 Dump after all tree based optimization, to `FILE.optimized'. 4660 4661 `gimple' 4662 Dump each function before and after the gimplification pass 4663 to a file. The file name is made by appending `.gimple' to 4664 the source file name. 4665 4666 `cfg' 4667 Dump the control flow graph of each function to a file. The 4668 file name is made by appending `.cfg' to the source file name. 4669 4670 `vcg' 4671 Dump the control flow graph of each function to a file in VCG 4672 format. The file name is made by appending `.vcg' to the 4673 source file name. Note that if the file contains more than 4674 one function, the generated file cannot be used directly by 4675 VCG. You will need to cut and paste each function's graph 4676 into its own separate file first. 4677 4678 `ch' 4679 Dump each function after copying loop headers. The file name 4680 is made by appending `.ch' to the source file name. 4681 4682 `ssa' 4683 Dump SSA related information to a file. The file name is 4684 made by appending `.ssa' to the source file name. 4685 4686 `alias' 4687 Dump aliasing information for each function. The file name 4688 is made by appending `.alias' to the source file name. 4689 4690 `ccp' 4691 Dump each function after CCP. The file name is made by 4692 appending `.ccp' to the source file name. 4693 4694 `storeccp' 4695 Dump each function after STORE-CCP. The file name is made by 4696 appending `.storeccp' to the source file name. 4697 4698 `pre' 4699 Dump trees after partial redundancy elimination. The file 4700 name is made by appending `.pre' to the source file name. 4701 4702 `fre' 4703 Dump trees after full redundancy elimination. The file name 4704 is made by appending `.fre' to the source file name. 4705 4706 `copyprop' 4707 Dump trees after copy propagation. The file name is made by 4708 appending `.copyprop' to the source file name. 4709 4710 `store_copyprop' 4711 Dump trees after store copy-propagation. The file name is 4712 made by appending `.store_copyprop' to the source file name. 4713 4714 `dce' 4715 Dump each function after dead code elimination. The file 4716 name is made by appending `.dce' to the source file name. 4717 4718 `mudflap' 4719 Dump each function after adding mudflap instrumentation. The 4720 file name is made by appending `.mudflap' to the source file 4721 name. 4722 4723 `sra' 4724 Dump each function after performing scalar replacement of 4725 aggregates. The file name is made by appending `.sra' to the 4726 source file name. 4727 4728 `sink' 4729 Dump each function after performing code sinking. The file 4730 name is made by appending `.sink' to the source file name. 4731 4732 `dom' 4733 Dump each function after applying dominator tree 4734 optimizations. The file name is made by appending `.dom' to 4735 the source file name. 4736 4737 `dse' 4738 Dump each function after applying dead store elimination. 4739 The file name is made by appending `.dse' to the source file 4740 name. 4741 4742 `phiopt' 4743 Dump each function after optimizing PHI nodes into 4744 straightline code. The file name is made by appending 4745 `.phiopt' to the source file name. 4746 4747 `forwprop' 4748 Dump each function after forward propagating single use 4749 variables. The file name is made by appending `.forwprop' to 4750 the source file name. 4751 4752 `copyrename' 4753 Dump each function after applying the copy rename 4754 optimization. The file name is made by appending 4755 `.copyrename' to the source file name. 4756 4757 `nrv' 4758 Dump each function after applying the named return value 4759 optimization on generic trees. The file name is made by 4760 appending `.nrv' to the source file name. 4761 4762 `vect' 4763 Dump each function after applying vectorization of loops. 4764 The file name is made by appending `.vect' to the source file 4765 name. 4766 4767 `vrp' 4768 Dump each function after Value Range Propagation (VRP). The 4769 file name is made by appending `.vrp' to the source file name. 4770 4771 `all' 4772 Enable all the available tree dumps with the flags provided 4773 in this option. 4774 4775 `-ftree-vectorizer-verbose=N' 4776 This option controls the amount of debugging output the vectorizer 4777 prints. This information is written to standard error, unless 4778 `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which 4779 case it is output to the usual dump listing file, `.vect'. For 4780 N=0 no diagnostic information is reported. If N=1 the vectorizer 4781 reports each loop that got vectorized, and the total number of 4782 loops that got vectorized. If N=2 the vectorizer also reports 4783 non-vectorized loops that passed the first analysis phase 4784 (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb, 4785 single-entry/exit loops. This is the same verbosity level that 4786 `-fdump-tree-vect-stats' uses. Higher verbosity levels mean 4787 either more information dumped for each reported loop, or same 4788 amount of information reported for more loops: If N=3, alignment 4789 related information is added to the reports. If N=4, 4790 data-references related information (e.g. memory dependences, 4791 memory access-patterns) is added to the reports. If N=5, the 4792 vectorizer reports also non-vectorized inner-most loops that did 4793 not pass the first analysis phase (i.e., may not be countable, or 4794 may have complicated control-flow). If N=6, the vectorizer 4795 reports also non-vectorized nested loops. For N=7, all the 4796 information the vectorizer generates during its analysis and 4797 transformation is reported. This is the same verbosity level that 4798 `-fdump-tree-vect-details' uses. 4799 4800 `-frandom-seed=STRING' 4801 This option provides a seed that GCC uses when it would otherwise 4802 use random numbers. It is used to generate certain symbol names 4803 that have to be different in every compiled file. It is also used 4804 to place unique stamps in coverage data files and the object files 4805 that produce them. You can use the `-frandom-seed' option to 4806 produce reproducibly identical object files. 4807 4808 The STRING should be different for every file you compile. 4809 4810 `-fsched-verbose=N' 4811 On targets that use instruction scheduling, this option controls 4812 the amount of debugging output the scheduler prints. This 4813 information is written to standard error, unless 4814 `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which 4815 case it is output to the usual dump listing file, `.sched' or 4816 `.sched2' respectively. However for N greater than nine, the 4817 output is always printed to standard error. 4818 4819 For N greater than zero, `-fsched-verbose' outputs the same 4820 information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'. For N 4821 greater than one, it also output basic block probabilities, 4822 detailed ready list information and unit/insn info. For N greater 4823 than two, it includes RTL at abort point, control-flow and regions 4824 info. And for N over four, `-fsched-verbose' also includes 4825 dependence info. 4826 4827 `-save-temps' 4828 Store the usual "temporary" intermediate files permanently; place 4829 them in the current directory and name them based on the source 4830 file. Thus, compiling `foo.c' with `-c -save-temps' would produce 4831 files `foo.i' and `foo.s', as well as `foo.o'. This creates a 4832 preprocessed `foo.i' output file even though the compiler now 4833 normally uses an integrated preprocessor. 4834 4835 When used in combination with the `-x' command line option, 4836 `-save-temps' is sensible enough to avoid over writing an input 4837 source file with the same extension as an intermediate file. The 4838 corresponding intermediate file may be obtained by renaming the 4839 source file before using `-save-temps'. 4840 4841 `-time' 4842 Report the CPU time taken by each subprocess in the compilation 4843 sequence. For C source files, this is the compiler proper and 4844 assembler (plus the linker if linking is done). The output looks 4845 like this: 4846 4847 # cc1 0.12 0.01 4848 # as 0.00 0.01 4849 4850 The first number on each line is the "user time", that is time 4851 spent executing the program itself. The second number is "system 4852 time", time spent executing operating system routines on behalf of 4853 the program. Both numbers are in seconds. 4854 4855 `-fvar-tracking' 4856 Run variable tracking pass. It computes where variables are 4857 stored at each position in code. Better debugging information is 4858 then generated (if the debugging information format supports this 4859 information). 4860 4861 It is enabled by default when compiling with optimization (`-Os', 4862 `-O', `-O2', ...), debugging information (`-g') and the debug info 4863 format supports it. 4864 4865 `-print-file-name=LIBRARY' 4866 Print the full absolute name of the library file LIBRARY that 4867 would be used when linking--and don't do anything else. With this 4868 option, GCC does not compile or link anything; it just prints the 4869 file name. 4870 4871 `-print-multi-directory' 4872 Print the directory name corresponding to the multilib selected by 4873 any other switches present in the command line. This directory is 4874 supposed to exist in `GCC_EXEC_PREFIX'. 4875 4876 `-print-multi-lib' 4877 Print the mapping from multilib directory names to compiler 4878 switches that enable them. The directory name is separated from 4879 the switches by `;', and each switch starts with an `@' instead of 4880 the `-', without spaces between multiple switches. This is 4881 supposed to ease shell-processing. 4882 4883 `-print-prog-name=PROGRAM' 4884 Like `-print-file-name', but searches for a program such as `cpp'. 4885 4886 `-print-libgcc-file-name' 4887 Same as `-print-file-name=libgcc.a'. 4888 4889 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 4890 you do want to link with `libgcc.a'. You can do 4891 4892 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 4893 4894 `-print-search-dirs' 4895 Print the name of the configured installation directory and a list 4896 of program and library directories `gcc' will search--and don't do 4897 anything else. 4898 4899 This is useful when `gcc' prints the error message `installation 4900 problem, cannot exec cpp0: No such file or directory'. To resolve 4901 this you either need to put `cpp0' and the other compiler 4902 components where `gcc' expects to find them, or you can set the 4903 environment variable `GCC_EXEC_PREFIX' to the directory where you 4904 installed them. Don't forget the trailing `/'. *Note Environment 4905 Variables::. 4906 4907 `-print-sysroot' 4908 Print the target sysroot directory that will be used during 4909 compilation. This is the target sysroot specified either at 4910 configure time or using the `--sysroot' option, possibly with an 4911 extra suffix that depends on compilation options. If no target 4912 sysroot is specified, the option prints nothing. 4913 4914 `-print-sysroot-headers-suffix' 4915 Print the suffix added to the target sysroot when searching for 4916 headers, or give an error if the compiler is not configured with 4917 such a suffix--and don't do anything else. 4918 4919 `-dumpmachine' 4920 Print the compiler's target machine (for example, 4921 `i686-pc-linux-gnu')--and don't do anything else. 4922 4923 `-dumpversion' 4924 Print the compiler version (for example, `3.0')--and don't do 4925 anything else. 4926 4927 `-dumpspecs' 4928 Print the compiler's built-in specs--and don't do anything else. 4929 (This is used when GCC itself is being built.) *Note Spec Files::. 4930 4931 `-feliminate-unused-debug-types' 4932 Normally, when producing DWARF2 output, GCC will emit debugging 4933 information for all types declared in a compilation unit, 4934 regardless of whether or not they are actually used in that 4935 compilation unit. Sometimes this is useful, such as if, in the 4936 debugger, you want to cast a value to a type that is not actually 4937 used in your program (but is declared). More often, however, this 4938 results in a significant amount of wasted space. With this 4939 option, GCC will avoid producing debug symbol output for types 4940 that are nowhere used in the source file being compiled. 4941 4942 4943 File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 4944 4945 3.10 Options That Control Optimization 4946 ====================================== 4947 4948 These options control various sorts of optimizations. 4949 4950 Without any optimization option, the compiler's goal is to reduce the 4951 cost of compilation and to make debugging produce the expected results. 4952 Statements are independent: if you stop the program with a breakpoint 4953 between statements, you can then assign a new value to any variable or 4954 change the program counter to any other statement in the function and 4955 get exactly the results you would expect from the source code. 4956 4957 Turning on optimization flags makes the compiler attempt to improve 4958 the performance and/or code size at the expense of compilation time and 4959 possibly the ability to debug the program. 4960 4961 The compiler performs optimization based on the knowledge it has of the 4962 program. Compiling multiple files at once to a single output file mode 4963 allows the compiler to use information gained from all of the files 4964 when compiling each of them. 4965 4966 Not all optimizations are controlled directly by a flag. Only 4967 optimizations that have a flag are listed. 4968 4969 `-O' 4970 `-O1' 4971 Optimize. Optimizing compilation takes somewhat more time, and a 4972 lot more memory for a large function. 4973 4974 With `-O', the compiler tries to reduce code size and execution 4975 time, without performing any optimizations that take a great deal 4976 of compilation time. 4977 4978 `-O' turns on the following optimization flags: 4979 -fauto-inc-dec 4980 -fcprop-registers 4981 -fdce 4982 -fdefer-pop 4983 -fdelayed-branch 4984 -fdse 4985 -fguess-branch-probability 4986 -fif-conversion2 4987 -fif-conversion 4988 -finline-small-functions 4989 -fipa-pure-const 4990 -fipa-reference 4991 -fmerge-constants 4992 -fsplit-wide-types 4993 -ftree-builtin-call-dce 4994 -ftree-ccp 4995 -ftree-ch 4996 -ftree-copyrename 4997 -ftree-dce 4998 -ftree-dominator-opts 4999 -ftree-dse 5000 -ftree-fre 5001 -ftree-sra 5002 -ftree-ter 5003 -funit-at-a-time 5004 5005 `-O' also turns on `-fomit-frame-pointer' on machines where doing 5006 so does not interfere with debugging. 5007 5008 `-O2' 5009 Optimize even more. GCC performs nearly all supported 5010 optimizations that do not involve a space-speed tradeoff. As 5011 compared to `-O', this option increases both compilation time and 5012 the performance of the generated code. 5013 5014 `-O2' turns on all optimization flags specified by `-O'. It also 5015 turns on the following optimization flags: 5016 -fthread-jumps 5017 -falign-functions -falign-jumps 5018 -falign-loops -falign-labels 5019 -fcaller-saves 5020 -fcrossjumping 5021 -fcse-follow-jumps -fcse-skip-blocks 5022 -fdelete-null-pointer-checks 5023 -fexpensive-optimizations 5024 -fgcse -fgcse-lm 5025 -findirect-inlining 5026 -foptimize-sibling-calls 5027 -fpeephole2 5028 -fregmove 5029 -freorder-blocks -freorder-functions 5030 -frerun-cse-after-loop 5031 -fsched-interblock -fsched-spec 5032 -fschedule-insns -fschedule-insns2 5033 -fstrict-aliasing -fstrict-overflow 5034 -ftree-switch-conversion 5035 -ftree-pre 5036 -ftree-vrp 5037 5038 Please note the warning under `-fgcse' about invoking `-O2' on 5039 programs that use computed gotos. 5040 5041 `-O3' 5042 Optimize yet more. `-O3' turns on all optimizations specified by 5043 `-O2' and also turns on the `-finline-functions', 5044 `-funswitch-loops', `-fpredictive-commoning', 5045 `-fgcse-after-reload' and `-ftree-vectorize' options. 5046 5047 `-O0' 5048 Reduce compilation time and make debugging produce the expected 5049 results. This is the default. 5050 5051 `-Os' 5052 Optimize for size. `-Os' enables all `-O2' optimizations that do 5053 not typically increase code size. It also performs further 5054 optimizations designed to reduce code size. 5055 5056 `-Os' disables the following optimization flags: 5057 -falign-functions -falign-jumps -falign-loops 5058 -falign-labels -freorder-blocks -freorder-blocks-and-partition 5059 -fprefetch-loop-arrays -ftree-vect-loop-version 5060 5061 If you use multiple `-O' options, with or without level numbers, 5062 the last such option is the one that is effective. 5063 5064 Options of the form `-fFLAG' specify machine-independent flags. Most 5065 flags have both positive and negative forms; the negative form of 5066 `-ffoo' would be `-fno-foo'. In the table below, only one of the forms 5067 is listed--the one you typically will use. You can figure out the 5068 other form by either removing `no-' or adding it. 5069 5070 The following options control specific optimizations. They are either 5071 activated by `-O' options or are related to ones that are. You can use 5072 the following flags in the rare cases when "fine-tuning" of 5073 optimizations to be performed is desired. 5074 5075 `-fno-default-inline' 5076 Do not make member functions inline by default merely because they 5077 are defined inside the class scope (C++ only). Otherwise, when 5078 you specify `-O', member functions defined inside class scope are 5079 compiled inline by default; i.e., you don't need to add `inline' 5080 in front of the member function name. 5081 5082 `-fno-defer-pop' 5083 Always pop the arguments to each function call as soon as that 5084 function returns. For machines which must pop arguments after a 5085 function call, the compiler normally lets arguments accumulate on 5086 the stack for several function calls and pops them all at once. 5087 5088 Disabled at levels `-O', `-O2', `-O3', `-Os'. 5089 5090 `-fforward-propagate' 5091 Perform a forward propagation pass on RTL. The pass tries to 5092 combine two instructions and checks if the result can be 5093 simplified. If loop unrolling is active, two passes are performed 5094 and the second is scheduled after loop unrolling. 5095 5096 This option is enabled by default at optimization levels `-O2', 5097 `-O3', `-Os'. 5098 5099 `-fomit-frame-pointer' 5100 Don't keep the frame pointer in a register for functions that 5101 don't need one. This avoids the instructions to save, set up and 5102 restore frame pointers; it also makes an extra register available 5103 in many functions. *It also makes debugging impossible on some 5104 machines.* 5105 5106 On some machines, such as the VAX, this flag has no effect, because 5107 the standard calling sequence automatically handles the frame 5108 pointer and nothing is saved by pretending it doesn't exist. The 5109 machine-description macro `FRAME_POINTER_REQUIRED' controls 5110 whether a target machine supports this flag. *Note Register 5111 Usage: (gccint)Registers. 5112 5113 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5114 5115 `-foptimize-sibling-calls' 5116 Optimize sibling and tail recursive calls. 5117 5118 Enabled at levels `-O2', `-O3', `-Os'. 5119 5120 `-fno-inline' 5121 Don't pay attention to the `inline' keyword. Normally this option 5122 is used to keep the compiler from expanding any functions inline. 5123 Note that if you are not optimizing, no functions can be expanded 5124 inline. 5125 5126 `-finline-small-functions' 5127 Integrate functions into their callers when their body is smaller 5128 than expected function call code (so overall size of program gets 5129 smaller). The compiler heuristically decides which functions are 5130 simple enough to be worth integrating in this way. 5131 5132 Enabled at level `-O2'. 5133 5134 `-findirect-inlining' 5135 Inline also indirect calls that are discovered to be known at 5136 compile time thanks to previous inlining. This option has any 5137 effect only when inlining itself is turned on by the 5138 `-finline-functions' or `-finline-small-functions' options. 5139 5140 Enabled at level `-O2'. 5141 5142 `-finline-functions' 5143 Integrate all simple functions into their callers. The compiler 5144 heuristically decides which functions are simple enough to be worth 5145 integrating in this way. 5146 5147 If all calls to a given function are integrated, and the function 5148 is declared `static', then the function is normally not output as 5149 assembler code in its own right. 5150 5151 Enabled at level `-O3'. 5152 5153 `-finline-functions-called-once' 5154 Consider all `static' functions called once for inlining into their 5155 caller even if they are not marked `inline'. If a call to a given 5156 function is integrated, then the function is not output as 5157 assembler code in its own right. 5158 5159 Enabled at levels `-O1', `-O2', `-O3' and `-Os'. 5160 5161 `-fearly-inlining' 5162 Inline functions marked by `always_inline' and functions whose 5163 body seems smaller than the function call overhead early before 5164 doing `-fprofile-generate' instrumentation and real inlining pass. 5165 Doing so makes profiling significantly cheaper and usually 5166 inlining faster on programs having large chains of nested wrapper 5167 functions. 5168 5169 Enabled by default. 5170 5171 `-finline-limit=N' 5172 By default, GCC limits the size of functions that can be inlined. 5173 This flag allows coarse control of this limit. N is the size of 5174 functions that can be inlined in number of pseudo instructions. 5175 5176 Inlining is actually controlled by a number of parameters, which 5177 may be specified individually by using `--param NAME=VALUE'. The 5178 `-finline-limit=N' option sets some of these parameters as follows: 5179 5180 `max-inline-insns-single' 5181 is set to N/2. 5182 5183 `max-inline-insns-auto' 5184 is set to N/2. 5185 5186 See below for a documentation of the individual parameters 5187 controlling inlining and for the defaults of these parameters. 5188 5189 _Note:_ there may be no value to `-finline-limit' that results in 5190 default behavior. 5191 5192 _Note:_ pseudo instruction represents, in this particular context, 5193 an abstract measurement of function's size. In no way does it 5194 represent a count of assembly instructions and as such its exact 5195 meaning might change from one release to an another. 5196 5197 `-fkeep-inline-functions' 5198 In C, emit `static' functions that are declared `inline' into the 5199 object file, even if the function has been inlined into all of its 5200 callers. This switch does not affect functions using the `extern 5201 inline' extension in GNU C89. In C++, emit any and all inline 5202 functions into the object file. 5203 5204 `-fkeep-static-consts' 5205 Emit variables declared `static const' when optimization isn't 5206 turned on, even if the variables aren't referenced. 5207 5208 GCC enables this option by default. If you want to force the 5209 compiler to check if the variable was referenced, regardless of 5210 whether or not optimization is turned on, use the 5211 `-fno-keep-static-consts' option. 5212 5213 `-fmerge-constants' 5214 Attempt to merge identical constants (string constants and 5215 floating point constants) across compilation units. 5216 5217 This option is the default for optimized compilation if the 5218 assembler and linker support it. Use `-fno-merge-constants' to 5219 inhibit this behavior. 5220 5221 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5222 5223 `-fmerge-all-constants' 5224 Attempt to merge identical constants and identical variables. 5225 5226 This option implies `-fmerge-constants'. In addition to 5227 `-fmerge-constants' this considers e.g. even constant initialized 5228 arrays or initialized constant variables with integral or floating 5229 point types. Languages like C or C++ require each variable, 5230 including multiple instances of the same variable in recursive 5231 calls, to have distinct locations, so using this option will 5232 result in non-conforming behavior. 5233 5234 `-fmodulo-sched' 5235 Perform swing modulo scheduling immediately before the first 5236 scheduling pass. This pass looks at innermost loops and reorders 5237 their instructions by overlapping different iterations. 5238 5239 `-fmodulo-sched-allow-regmoves' 5240 Perform more aggressive SMS based modulo scheduling with register 5241 moves allowed. By setting this flag certain anti-dependences 5242 edges will be deleted which will trigger the generation of 5243 reg-moves based on the life-range analysis. This option is 5244 effective only with `-fmodulo-sched' enabled. 5245 5246 `-fno-branch-count-reg' 5247 Do not use "decrement and branch" instructions on a count register, 5248 but instead generate a sequence of instructions that decrement a 5249 register, compare it against zero, then branch based upon the 5250 result. This option is only meaningful on architectures that 5251 support such instructions, which include x86, PowerPC, IA-64 and 5252 S/390. 5253 5254 The default is `-fbranch-count-reg'. 5255 5256 `-fno-function-cse' 5257 Do not put function addresses in registers; make each instruction 5258 that calls a constant function contain the function's address 5259 explicitly. 5260 5261 This option results in less efficient code, but some strange hacks 5262 that alter the assembler output may be confused by the 5263 optimizations performed when this option is not used. 5264 5265 The default is `-ffunction-cse' 5266 5267 `-fno-zero-initialized-in-bss' 5268 If the target supports a BSS section, GCC by default puts 5269 variables that are initialized to zero into BSS. This can save 5270 space in the resulting code. 5271 5272 This option turns off this behavior because some programs 5273 explicitly rely on variables going to the data section. E.g., so 5274 that the resulting executable can find the beginning of that 5275 section and/or make assumptions based on that. 5276 5277 The default is `-fzero-initialized-in-bss'. 5278 5279 `-fmudflap -fmudflapth -fmudflapir' 5280 For front-ends that support it (C and C++), instrument all risky 5281 pointer/array dereferencing operations, some standard library 5282 string/heap functions, and some other associated constructs with 5283 range/validity tests. Modules so instrumented should be immune to 5284 buffer overflows, invalid heap use, and some other classes of C/C++ 5285 programming errors. The instrumentation relies on a separate 5286 runtime library (`libmudflap'), which will be linked into a 5287 program if `-fmudflap' is given at link time. Run-time behavior 5288 of the instrumented program is controlled by the `MUDFLAP_OPTIONS' 5289 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 5290 its options. 5291 5292 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 5293 your program is multi-threaded. Use `-fmudflapir', in addition to 5294 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 5295 pointer reads. This produces less instrumentation (and therefore 5296 faster execution) and still provides some protection against 5297 outright memory corrupting writes, but allows erroneously read 5298 data to propagate within a program. 5299 5300 `-fthread-jumps' 5301 Perform optimizations where we check to see if a jump branches to a 5302 location where another comparison subsumed by the first is found. 5303 If so, the first branch is redirected to either the destination of 5304 the second branch or a point immediately following it, depending 5305 on whether the condition is known to be true or false. 5306 5307 Enabled at levels `-O2', `-O3', `-Os'. 5308 5309 `-fsplit-wide-types' 5310 When using a type that occupies multiple registers, such as `long 5311 long' on a 32-bit system, split the registers apart and allocate 5312 them independently. This normally generates better code for those 5313 types, but may make debugging more difficult. 5314 5315 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5316 5317 `-fcse-follow-jumps' 5318 In common subexpression elimination (CSE), scan through jump 5319 instructions when the target of the jump is not reached by any 5320 other path. For example, when CSE encounters an `if' statement 5321 with an `else' clause, CSE will follow the jump when the condition 5322 tested is false. 5323 5324 Enabled at levels `-O2', `-O3', `-Os'. 5325 5326 `-fcse-skip-blocks' 5327 This is similar to `-fcse-follow-jumps', but causes CSE to follow 5328 jumps which conditionally skip over blocks. When CSE encounters a 5329 simple `if' statement with no else clause, `-fcse-skip-blocks' 5330 causes CSE to follow the jump around the body of the `if'. 5331 5332 Enabled at levels `-O2', `-O3', `-Os'. 5333 5334 `-frerun-cse-after-loop' 5335 Re-run common subexpression elimination after loop optimizations 5336 has been performed. 5337 5338 Enabled at levels `-O2', `-O3', `-Os'. 5339 5340 `-fgcse' 5341 Perform a global common subexpression elimination pass. This pass 5342 also performs global constant and copy propagation. 5343 5344 _Note:_ When compiling a program using computed gotos, a GCC 5345 extension, you may get better runtime performance if you disable 5346 the global common subexpression elimination pass by adding 5347 `-fno-gcse' to the command line. 5348 5349 Enabled at levels `-O2', `-O3', `-Os'. 5350 5351 `-fgcse-lm' 5352 When `-fgcse-lm' is enabled, global common subexpression 5353 elimination will attempt to move loads which are only killed by 5354 stores into themselves. This allows a loop containing a 5355 load/store sequence to be changed to a load outside the loop, and 5356 a copy/store within the loop. 5357 5358 Enabled by default when gcse is enabled. 5359 5360 `-fgcse-sm' 5361 When `-fgcse-sm' is enabled, a store motion pass is run after 5362 global common subexpression elimination. This pass will attempt 5363 to move stores out of loops. When used in conjunction with 5364 `-fgcse-lm', loops containing a load/store sequence can be changed 5365 to a load before the loop and a store after the loop. 5366 5367 Not enabled at any optimization level. 5368 5369 `-fgcse-las' 5370 When `-fgcse-las' is enabled, the global common subexpression 5371 elimination pass eliminates redundant loads that come after stores 5372 to the same memory location (both partial and full redundancies). 5373 5374 Not enabled at any optimization level. 5375 5376 `-fgcse-after-reload' 5377 When `-fgcse-after-reload' is enabled, a redundant load elimination 5378 pass is performed after reload. The purpose of this pass is to 5379 cleanup redundant spilling. 5380 5381 `-funsafe-loop-optimizations' 5382 If given, the loop optimizer will assume that loop indices do not 5383 overflow, and that the loops with nontrivial exit condition are not 5384 infinite. This enables a wider range of loop optimizations even if 5385 the loop optimizer itself cannot prove that these assumptions are 5386 valid. Using `-Wunsafe-loop-optimizations', the compiler will 5387 warn you if it finds this kind of loop. 5388 5389 `-fcrossjumping' 5390 Perform cross-jumping transformation. This transformation unifies 5391 equivalent code and save code size. The resulting code may or may 5392 not perform better than without cross-jumping. 5393 5394 Enabled at levels `-O2', `-O3', `-Os'. 5395 5396 `-fauto-inc-dec' 5397 Combine increments or decrements of addresses with memory accesses. 5398 This pass is always skipped on architectures that do not have 5399 instructions to support this. Enabled by default at `-O' and 5400 higher on architectures that support this. 5401 5402 `-fdce' 5403 Perform dead code elimination (DCE) on RTL. Enabled by default at 5404 `-O' and higher. 5405 5406 `-fdse' 5407 Perform dead store elimination (DSE) on RTL. Enabled by default 5408 at `-O' and higher. 5409 5410 `-fif-conversion' 5411 Attempt to transform conditional jumps into branch-less 5412 equivalents. This include use of conditional moves, min, max, set 5413 flags and abs instructions, and some tricks doable by standard 5414 arithmetics. The use of conditional execution on chips where it 5415 is available is controlled by `if-conversion2'. 5416 5417 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5418 5419 `-fif-conversion2' 5420 Use conditional execution (where available) to transform 5421 conditional jumps into branch-less equivalents. 5422 5423 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5424 5425 `-fdelete-null-pointer-checks' 5426 Use global dataflow analysis to identify and eliminate useless 5427 checks for null pointers. The compiler assumes that dereferencing 5428 a null pointer would have halted the program. If a pointer is 5429 checked after it has already been dereferenced, it cannot be null. 5430 5431 In some environments, this assumption is not true, and programs can 5432 safely dereference null pointers. Use 5433 `-fno-delete-null-pointer-checks' to disable this optimization for 5434 programs which depend on that behavior. 5435 5436 Enabled at levels `-O2', `-O3', `-Os'. 5437 5438 `-fexpensive-optimizations' 5439 Perform a number of minor optimizations that are relatively 5440 expensive. 5441 5442 Enabled at levels `-O2', `-O3', `-Os'. 5443 5444 `-foptimize-register-move' 5445 `-fregmove' 5446 Attempt to reassign register numbers in move instructions and as 5447 operands of other simple instructions in order to maximize the 5448 amount of register tying. This is especially helpful on machines 5449 with two-operand instructions. 5450 5451 Note `-fregmove' and `-foptimize-register-move' are the same 5452 optimization. 5453 5454 Enabled at levels `-O2', `-O3', `-Os'. 5455 5456 `-fira-algorithm=ALGORITHM' 5457 Use specified coloring algorithm for the integrated register 5458 allocator. The ALGORITHM argument should be `priority' or `CB'. 5459 The first algorithm specifies Chow's priority coloring, the second 5460 one specifies Chaitin-Briggs coloring. The second algorithm can 5461 be unimplemented for some architectures. If it is implemented, it 5462 is the default because Chaitin-Briggs coloring as a rule generates 5463 a better code. 5464 5465 `-fira-region=REGION' 5466 Use specified regions for the integrated register allocator. The 5467 REGION argument should be one of `all', `mixed', or `one'. The 5468 first value means using all loops as register allocation regions, 5469 the second value which is the default means using all loops except 5470 for loops with small register pressure as the regions, and third 5471 one means using all function as a single region. The first value 5472 can give best result for machines with small size and irregular 5473 register set, the third one results in faster and generates decent 5474 code and the smallest size code, and the default value usually 5475 give the best results in most cases and for most architectures. 5476 5477 `-fira-coalesce' 5478 Do optimistic register coalescing. This option might be 5479 profitable for architectures with big regular register files. 5480 5481 `-fno-ira-share-save-slots' 5482 Switch off sharing stack slots used for saving call used hard 5483 registers living through a call. Each hard register will get a 5484 separate stack slot and as a result function stack frame will be 5485 bigger. 5486 5487 `-fno-ira-share-spill-slots' 5488 Switch off sharing stack slots allocated for pseudo-registers. 5489 Each pseudo-register which did not get a hard register will get a 5490 separate stack slot and as a result function stack frame will be 5491 bigger. 5492 5493 `-fira-verbose=N' 5494 Set up how verbose dump file for the integrated register allocator 5495 will be. Default value is 5. If the value is greater or equal to 5496 10, the dump file will be stderr as if the value were N minus 10. 5497 5498 `-fdelayed-branch' 5499 If supported for the target machine, attempt to reorder 5500 instructions to exploit instruction slots available after delayed 5501 branch instructions. 5502 5503 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5504 5505 `-fschedule-insns' 5506 If supported for the target machine, attempt to reorder 5507 instructions to eliminate execution stalls due to required data 5508 being unavailable. This helps machines that have slow floating 5509 point or memory load instructions by allowing other instructions 5510 to be issued until the result of the load or floating point 5511 instruction is required. 5512 5513 Enabled at levels `-O2', `-O3', `-Os'. 5514 5515 `-fschedule-insns2' 5516 Similar to `-fschedule-insns', but requests an additional pass of 5517 instruction scheduling after register allocation has been done. 5518 This is especially useful on machines with a relatively small 5519 number of registers and where memory load instructions take more 5520 than one cycle. 5521 5522 Enabled at levels `-O2', `-O3', `-Os'. 5523 5524 `-fno-sched-interblock' 5525 Don't schedule instructions across basic blocks. This is normally 5526 enabled by default when scheduling before register allocation, i.e. 5527 with `-fschedule-insns' or at `-O2' or higher. 5528 5529 `-fno-sched-spec' 5530 Don't allow speculative motion of non-load instructions. This is 5531 normally enabled by default when scheduling before register 5532 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 5533 5534 `-fsched-spec-load' 5535 Allow speculative motion of some load instructions. This only 5536 makes sense when scheduling before register allocation, i.e. with 5537 `-fschedule-insns' or at `-O2' or higher. 5538 5539 `-fsched-spec-load-dangerous' 5540 Allow speculative motion of more load instructions. This only 5541 makes sense when scheduling before register allocation, i.e. with 5542 `-fschedule-insns' or at `-O2' or higher. 5543 5544 `-fsched-stalled-insns' 5545 `-fsched-stalled-insns=N' 5546 Define how many insns (if any) can be moved prematurely from the 5547 queue of stalled insns into the ready list, during the second 5548 scheduling pass. `-fno-sched-stalled-insns' means that no insns 5549 will be moved prematurely, `-fsched-stalled-insns=0' means there 5550 is no limit on how many queued insns can be moved prematurely. 5551 `-fsched-stalled-insns' without a value is equivalent to 5552 `-fsched-stalled-insns=1'. 5553 5554 `-fsched-stalled-insns-dep' 5555 `-fsched-stalled-insns-dep=N' 5556 Define how many insn groups (cycles) will be examined for a 5557 dependency on a stalled insn that is candidate for premature 5558 removal from the queue of stalled insns. This has an effect only 5559 during the second scheduling pass, and only if 5560 `-fsched-stalled-insns' is used. `-fno-sched-stalled-insns-dep' 5561 is equivalent to `-fsched-stalled-insns-dep=0'. 5562 `-fsched-stalled-insns-dep' without a value is equivalent to 5563 `-fsched-stalled-insns-dep=1'. 5564 5565 `-fsched2-use-superblocks' 5566 When scheduling after register allocation, do use superblock 5567 scheduling algorithm. Superblock scheduling allows motion across 5568 basic block boundaries resulting on faster schedules. This option 5569 is experimental, as not all machine descriptions used by GCC model 5570 the CPU closely enough to avoid unreliable results from the 5571 algorithm. 5572 5573 This only makes sense when scheduling after register allocation, 5574 i.e. with `-fschedule-insns2' or at `-O2' or higher. 5575 5576 `-fsched2-use-traces' 5577 Use `-fsched2-use-superblocks' algorithm when scheduling after 5578 register allocation and additionally perform code duplication in 5579 order to increase the size of superblocks using tracer pass. See 5580 `-ftracer' for details on trace formation. 5581 5582 This mode should produce faster but significantly longer programs. 5583 Also without `-fbranch-probabilities' the traces constructed may 5584 not match the reality and hurt the performance. This only makes 5585 sense when scheduling after register allocation, i.e. with 5586 `-fschedule-insns2' or at `-O2' or higher. 5587 5588 `-fsee' 5589 Eliminate redundant sign extension instructions and move the 5590 non-redundant ones to optimal placement using lazy code motion 5591 (LCM). 5592 5593 `-freschedule-modulo-scheduled-loops' 5594 The modulo scheduling comes before the traditional scheduling, if 5595 a loop was modulo scheduled we may want to prevent the later 5596 scheduling passes from changing its schedule, we use this option 5597 to control that. 5598 5599 `-fselective-scheduling' 5600 Schedule instructions using selective scheduling algorithm. 5601 Selective scheduling runs instead of the first scheduler pass. 5602 5603 `-fselective-scheduling2' 5604 Schedule instructions using selective scheduling algorithm. 5605 Selective scheduling runs instead of the second scheduler pass. 5606 5607 `-fsel-sched-pipelining' 5608 Enable software pipelining of innermost loops during selective 5609 scheduling. This option has no effect until one of 5610 `-fselective-scheduling' or `-fselective-scheduling2' is turned on. 5611 5612 `-fsel-sched-pipelining-outer-loops' 5613 When pipelining loops during selective scheduling, also pipeline 5614 outer loops. This option has no effect until 5615 `-fsel-sched-pipelining' is turned on. 5616 5617 `-fcaller-saves' 5618 Enable values to be allocated in registers that will be clobbered 5619 by function calls, by emitting extra instructions to save and 5620 restore the registers around such calls. Such allocation is done 5621 only when it seems to result in better code than would otherwise 5622 be produced. 5623 5624 This option is always enabled by default on certain machines, 5625 usually those which have no call-preserved registers to use 5626 instead. 5627 5628 Enabled at levels `-O2', `-O3', `-Os'. 5629 5630 `-fconserve-stack' 5631 Attempt to minimize stack usage. The compiler will attempt to use 5632 less stack space, even if that makes the program slower. This 5633 option implies setting the `large-stack-frame' parameter to 100 5634 and the `large-stack-frame-growth' parameter to 400. 5635 5636 `-ftree-reassoc' 5637 Perform reassociation on trees. This flag is enabled by default 5638 at `-O' and higher. 5639 5640 `-ftree-pre' 5641 Perform partial redundancy elimination (PRE) on trees. This flag 5642 is enabled by default at `-O2' and `-O3'. 5643 5644 `-ftree-fre' 5645 Perform full redundancy elimination (FRE) on trees. The difference 5646 between FRE and PRE is that FRE only considers expressions that 5647 are computed on all paths leading to the redundant computation. 5648 This analysis is faster than PRE, though it exposes fewer 5649 redundancies. This flag is enabled by default at `-O' and higher. 5650 5651 `-ftree-copy-prop' 5652 Perform copy propagation on trees. This pass eliminates 5653 unnecessary copy operations. This flag is enabled by default at 5654 `-O' and higher. 5655 5656 `-fipa-pure-const' 5657 Discover which functions are pure or constant. Enabled by default 5658 at `-O' and higher. 5659 5660 `-fipa-reference' 5661 Discover which static variables do not escape cannot escape the 5662 compilation unit. Enabled by default at `-O' and higher. 5663 5664 `-fipa-struct-reorg' 5665 Perform structure reorganization optimization, that change C-like 5666 structures layout in order to better utilize spatial locality. 5667 This transformation is affective for programs containing arrays of 5668 structures. Available in two compilation modes: profile-based 5669 (enabled with `-fprofile-generate') or static (which uses built-in 5670 heuristics). Require `-fipa-type-escape' to provide the safety of 5671 this transformation. It works only in whole program mode, so it 5672 requires `-fwhole-program' and `-combine' to be enabled. 5673 Structures considered `cold' by this transformation are not 5674 affected (see `--param struct-reorg-cold-struct-ratio=VALUE'). 5675 5676 With this flag, the program debug info reflects a new structure 5677 layout. 5678 5679 `-fipa-pta' 5680 Perform interprocedural pointer analysis. This option is 5681 experimental and does not affect generated code. 5682 5683 `-fipa-cp' 5684 Perform interprocedural constant propagation. This optimization 5685 analyzes the program to determine when values passed to functions 5686 are constants and then optimizes accordingly. This optimization 5687 can substantially increase performance if the application has 5688 constants passed to functions. This flag is enabled by default at 5689 `-O2', `-Os' and `-O3'. 5690 5691 `-fipa-cp-clone' 5692 Perform function cloning to make interprocedural constant 5693 propagation stronger. When enabled, interprocedural constant 5694 propagation will perform function cloning when externally visible 5695 function can be called with constant arguments. Because this 5696 optimization can create multiple copies of functions, it may 5697 significantly increase code size (see `--param 5698 ipcp-unit-growth=VALUE'). This flag is enabled by default at 5699 `-O3'. 5700 5701 `-fipa-matrix-reorg' 5702 Perform matrix flattening and transposing. Matrix flattening 5703 tries to replace a m-dimensional matrix with its equivalent 5704 n-dimensional matrix, where n < m. This reduces the level of 5705 indirection needed for accessing the elements of the matrix. The 5706 second optimization is matrix transposing that attempts to change 5707 the order of the matrix's dimensions in order to improve cache 5708 locality. Both optimizations need the `-fwhole-program' flag. 5709 Transposing is enabled only if profiling information is available. 5710 5711 `-ftree-sink' 5712 Perform forward store motion on trees. This flag is enabled by 5713 default at `-O' and higher. 5714 5715 `-ftree-ccp' 5716 Perform sparse conditional constant propagation (CCP) on trees. 5717 This pass only operates on local scalar variables and is enabled 5718 by default at `-O' and higher. 5719 5720 `-ftree-switch-conversion' 5721 Perform conversion of simple initializations in a switch to 5722 initializations from a scalar array. This flag is enabled by 5723 default at `-O2' and higher. 5724 5725 `-ftree-dce' 5726 Perform dead code elimination (DCE) on trees. This flag is 5727 enabled by default at `-O' and higher. 5728 5729 `-ftree-builtin-call-dce' 5730 Perform conditional dead code elimination (DCE) for calls to 5731 builtin functions that may set `errno' but are otherwise 5732 side-effect free. This flag is enabled by default at `-O2' and 5733 higher if `-Os' is not also specified. 5734 5735 `-ftree-dominator-opts' 5736 Perform a variety of simple scalar cleanups (constant/copy 5737 propagation, redundancy elimination, range propagation and 5738 expression simplification) based on a dominator tree traversal. 5739 This also performs jump threading (to reduce jumps to jumps). This 5740 flag is enabled by default at `-O' and higher. 5741 5742 `-ftree-dse' 5743 Perform dead store elimination (DSE) on trees. A dead store is a 5744 store into a memory location which will later be overwritten by 5745 another store without any intervening loads. In this case the 5746 earlier store can be deleted. This flag is enabled by default at 5747 `-O' and higher. 5748 5749 `-ftree-ch' 5750 Perform loop header copying on trees. This is beneficial since it 5751 increases effectiveness of code motion optimizations. It also 5752 saves one jump. This flag is enabled by default at `-O' and 5753 higher. It is not enabled for `-Os', since it usually increases 5754 code size. 5755 5756 `-ftree-lr-shrinking' 5757 Enable live range shrinking optimization on trees. This 5758 optimization is used to help reducing register pressure. 5759 5760 `-ftree-loop-optimize' 5761 Perform loop optimizations on trees. This flag is enabled by 5762 default at `-O' and higher. 5763 5764 `-ftree-loop-linear' 5765 Perform linear loop transformations on tree. This flag can 5766 improve cache performance and allow further loop optimizations to 5767 take place. 5768 5769 `-floop-interchange' 5770 Perform loop interchange transformations on loops. Interchanging 5771 two nested loops switches the inner and outer loops. For example, 5772 given a loop like: 5773 DO J = 1, M 5774 DO I = 1, N 5775 A(J, I) = A(J, I) * C 5776 ENDDO 5777 ENDDO 5778 loop interchange will transform the loop as if the user had 5779 written: 5780 DO I = 1, N 5781 DO J = 1, M 5782 A(J, I) = A(J, I) * C 5783 ENDDO 5784 ENDDO 5785 which can be beneficial when `N' is larger than the caches, 5786 because in Fortran, the elements of an array are stored in memory 5787 contiguously by column, and the original loop iterates over rows, 5788 potentially creating at each access a cache miss. This 5789 optimization applies to all the languages supported by GCC and is 5790 not limited to Fortran. To use this code transformation, GCC has 5791 to be configured with `--with-ppl' and `--with-cloog' to enable the 5792 Graphite loop transformation infrastructure. 5793 5794 `-floop-strip-mine' 5795 Perform loop strip mining transformations on loops. Strip mining 5796 splits a loop into two nested loops. The outer loop has strides 5797 equal to the strip size and the inner loop has strides of the 5798 original loop within a strip. For example, given a loop like: 5799 DO I = 1, N 5800 A(I) = A(I) + C 5801 ENDDO 5802 loop strip mining will transform the loop as if the user had 5803 written: 5804 DO II = 1, N, 4 5805 DO I = II, min (II + 3, N) 5806 A(I) = A(I) + C 5807 ENDDO 5808 ENDDO 5809 This optimization applies to all the languages supported by GCC 5810 and is not limited to Fortran. To use this code transformation, 5811 GCC has to be configured with `--with-ppl' and `--with-cloog' to 5812 enable the Graphite loop transformation infrastructure. 5813 5814 `-floop-block' 5815 Perform loop blocking transformations on loops. Blocking strip 5816 mines each loop in the loop nest such that the memory accesses of 5817 the element loops fit inside caches. For example, given a loop 5818 like: 5819 DO I = 1, N 5820 DO J = 1, M 5821 A(J, I) = B(I) + C(J) 5822 ENDDO 5823 ENDDO 5824 loop blocking will transform the loop as if the user had written: 5825 DO II = 1, N, 64 5826 DO JJ = 1, M, 64 5827 DO I = II, min (II + 63, N) 5828 DO J = JJ, min (JJ + 63, M) 5829 A(J, I) = B(I) + C(J) 5830 ENDDO 5831 ENDDO 5832 ENDDO 5833 ENDDO 5834 which can be beneficial when `M' is larger than the caches, 5835 because the innermost loop will iterate over a smaller amount of 5836 data that can be kept in the caches. This optimization applies to 5837 all the languages supported by GCC and is not limited to Fortran. 5838 To use this code transformation, GCC has to be configured with 5839 `--with-ppl' and `--with-cloog' to enable the Graphite loop 5840 transformation infrastructure. 5841 5842 `-fcheck-data-deps' 5843 Compare the results of several data dependence analyzers. This 5844 option is used for debugging the data dependence analyzers. 5845 5846 `-ftree-loop-distribution' 5847 Perform loop distribution. This flag can improve cache 5848 performance on big loop bodies and allow further loop 5849 optimizations, like parallelization or vectorization, to take 5850 place. For example, the loop 5851 DO I = 1, N 5852 A(I) = B(I) + C 5853 D(I) = E(I) * F 5854 ENDDO 5855 is transformed to 5856 DO I = 1, N 5857 A(I) = B(I) + C 5858 ENDDO 5859 DO I = 1, N 5860 D(I) = E(I) * F 5861 ENDDO 5862 5863 `-ftree-loop-im' 5864 Perform loop invariant motion on trees. This pass moves only 5865 invariants that would be hard to handle at RTL level (function 5866 calls, operations that expand to nontrivial sequences of insns). 5867 With `-funswitch-loops' it also moves operands of conditions that 5868 are invariant out of the loop, so that we can use just trivial 5869 invariantness analysis in loop unswitching. The pass also includes 5870 store motion. 5871 5872 `-ftree-loop-ivcanon' 5873 Create a canonical counter for number of iterations in the loop 5874 for that determining number of iterations requires complicated 5875 analysis. Later optimizations then may determine the number 5876 easily. Useful especially in connection with unrolling. 5877 5878 `-fivopts' 5879 Perform induction variable optimizations (strength reduction, 5880 induction variable merging and induction variable elimination) on 5881 trees. 5882 5883 `-ftree-parallelize-loops=n' 5884 Parallelize loops, i.e., split their iteration space to run in n 5885 threads. This is only possible for loops whose iterations are 5886 independent and can be arbitrarily reordered. The optimization is 5887 only profitable on multiprocessor machines, for loops that are 5888 CPU-intensive, rather than constrained e.g. by memory bandwidth. 5889 This option implies `-pthread', and thus is only supported on 5890 targets that have support for `-pthread'. 5891 5892 `-ftree-sra' 5893 Perform scalar replacement of aggregates. This pass replaces 5894 structure references with scalars to prevent committing structures 5895 to memory too early. This flag is enabled by default at `-O' and 5896 higher. 5897 5898 `-ftree-copyrename' 5899 Perform copy renaming on trees. This pass attempts to rename 5900 compiler temporaries to other variables at copy locations, usually 5901 resulting in variable names which more closely resemble the 5902 original variables. This flag is enabled by default at `-O' and 5903 higher. 5904 5905 `-ftree-ter' 5906 Perform temporary expression replacement during the SSA->normal 5907 phase. Single use/single def temporaries are replaced at their 5908 use location with their defining expression. This results in 5909 non-GIMPLE code, but gives the expanders much more complex trees 5910 to work on resulting in better RTL generation. This is enabled by 5911 default at `-O' and higher. 5912 5913 `-ftree-vectorize' 5914 Perform loop vectorization on trees. This flag is enabled by 5915 default at `-O3'. 5916 5917 `-ftree-vect-loop-version' 5918 Perform loop versioning when doing loop vectorization on trees. 5919 When a loop appears to be vectorizable except that data alignment 5920 or data dependence cannot be determined at compile time then 5921 vectorized and non-vectorized versions of the loop are generated 5922 along with runtime checks for alignment or dependence to control 5923 which version is executed. This option is enabled by default 5924 except at level `-Os' where it is disabled. 5925 5926 `-fvect-cost-model' 5927 Enable cost model for vectorization. 5928 5929 `-ftree-vrp' 5930 Perform Value Range Propagation on trees. This is similar to the 5931 constant propagation pass, but instead of values, ranges of values 5932 are propagated. This allows the optimizers to remove unnecessary 5933 range checks like array bound checks and null pointer checks. 5934 This is enabled by default at `-O2' and higher. Null pointer check 5935 elimination is only done if `-fdelete-null-pointer-checks' is 5936 enabled. 5937 5938 `-ftracer' 5939 Perform tail duplication to enlarge superblock size. This 5940 transformation simplifies the control flow of the function 5941 allowing other optimizations to do better job. 5942 5943 `-funroll-loops' 5944 Unroll loops whose number of iterations can be determined at 5945 compile time or upon entry to the loop. `-funroll-loops' implies 5946 `-frerun-cse-after-loop'. This option makes code larger, and may 5947 or may not make it run faster. 5948 5949 `-funroll-all-loops' 5950 Unroll all loops, even if their number of iterations is uncertain 5951 when the loop is entered. This usually makes programs run more 5952 slowly. `-funroll-all-loops' implies the same options as 5953 `-funroll-loops', 5954 5955 `-fsplit-ivs-in-unroller' 5956 Enables expressing of values of induction variables in later 5957 iterations of the unrolled loop using the value in the first 5958 iteration. This breaks long dependency chains, thus improving 5959 efficiency of the scheduling passes. 5960 5961 Combination of `-fweb' and CSE is often sufficient to obtain the 5962 same effect. However in cases the loop body is more complicated 5963 than a single basic block, this is not reliable. It also does not 5964 work at all on some of the architectures due to restrictions in 5965 the CSE pass. 5966 5967 This optimization is enabled by default. 5968 5969 `-fvariable-expansion-in-unroller' 5970 With this option, the compiler will create multiple copies of some 5971 local variables when unrolling a loop which can result in superior 5972 code. 5973 5974 `-fpredictive-commoning' 5975 Perform predictive commoning optimization, i.e., reusing 5976 computations (especially memory loads and stores) performed in 5977 previous iterations of loops. 5978 5979 This option is enabled at level `-O3'. 5980 5981 `-fprefetch-loop-arrays' 5982 If supported by the target machine, generate instructions to 5983 prefetch memory to improve the performance of loops that access 5984 large arrays. 5985 5986 This option may generate better or worse code; results are highly 5987 dependent on the structure of loops within the source code. 5988 5989 Disabled at level `-Os'. 5990 5991 `-fno-peephole' 5992 `-fno-peephole2' 5993 Disable any machine-specific peephole optimizations. The 5994 difference between `-fno-peephole' and `-fno-peephole2' is in how 5995 they are implemented in the compiler; some targets use one, some 5996 use the other, a few use both. 5997 5998 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 5999 levels `-O2', `-O3', `-Os'. 6000 6001 `-fno-guess-branch-probability' 6002 Do not guess branch probabilities using heuristics. 6003 6004 GCC will use heuristics to guess branch probabilities if they are 6005 not provided by profiling feedback (`-fprofile-arcs'). These 6006 heuristics are based on the control flow graph. If some branch 6007 probabilities are specified by `__builtin_expect', then the 6008 heuristics will be used to guess branch probabilities for the rest 6009 of the control flow graph, taking the `__builtin_expect' info into 6010 account. The interactions between the heuristics and 6011 `__builtin_expect' can be complex, and in some cases, it may be 6012 useful to disable the heuristics so that the effects of 6013 `__builtin_expect' are easier to understand. 6014 6015 The default is `-fguess-branch-probability' at levels `-O', `-O2', 6016 `-O3', `-Os'. 6017 6018 `-freorder-blocks' 6019 Reorder basic blocks in the compiled function in order to reduce 6020 number of taken branches and improve code locality. 6021 6022 Enabled at levels `-O2', `-O3'. 6023 6024 `-freorder-blocks-and-partition' 6025 In addition to reordering basic blocks in the compiled function, 6026 in order to reduce number of taken branches, partitions hot and 6027 cold basic blocks into separate sections of the assembly and .o 6028 files, to improve paging and cache locality performance. 6029 6030 This optimization is automatically turned off in the presence of 6031 exception handling, for linkonce sections, for functions with a 6032 user-defined section attribute and on any architecture that does 6033 not support named sections. 6034 6035 `-freorder-functions' 6036 Reorder functions in the object file in order to improve code 6037 locality. This is implemented by using special subsections 6038 `.text.hot' for most frequently executed functions and 6039 `.text.unlikely' for unlikely executed functions. Reordering is 6040 done by the linker so object file format must support named 6041 sections and linker must place them in a reasonable way. 6042 6043 Also profile feedback must be available in to make this option 6044 effective. See `-fprofile-arcs' for details. 6045 6046 Enabled at levels `-O2', `-O3', `-Os'. 6047 6048 `-fstrict-aliasing' 6049 Allows the compiler to assume the strictest aliasing rules 6050 applicable to the language being compiled. For C (and C++), this 6051 activates optimizations based on the type of expressions. In 6052 particular, an object of one type is assumed never to reside at 6053 the same address as an object of a different type, unless the 6054 types are almost the same. For example, an `unsigned int' can 6055 alias an `int', but not a `void*' or a `double'. A character type 6056 may alias any other type. 6057 6058 Pay special attention to code like this: 6059 union a_union { 6060 int i; 6061 double d; 6062 }; 6063 6064 int f() { 6065 a_union t; 6066 t.d = 3.0; 6067 return t.i; 6068 } 6069 The practice of reading from a different union member than the one 6070 most recently written to (called "type-punning") is common. Even 6071 with `-fstrict-aliasing', type-punning is allowed, provided the 6072 memory is accessed through the union type. So, the code above 6073 will work as expected. *Note Structures unions enumerations and 6074 bit-fields implementation::. However, this code might not: 6075 int f() { 6076 a_union t; 6077 int* ip; 6078 t.d = 3.0; 6079 ip = &t.i; 6080 return *ip; 6081 } 6082 6083 Similarly, access by taking the address, casting the resulting 6084 pointer and dereferencing the result has undefined behavior, even 6085 if the cast uses a union type, e.g.: 6086 int f() { 6087 double d = 3.0; 6088 return ((union a_union *) &d)->i; 6089 } 6090 6091 The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3', 6092 `-Os'. 6093 6094 `-fstrict-overflow' 6095 Allow the compiler to assume strict signed overflow rules, 6096 depending on the language being compiled. For C (and C++) this 6097 means that overflow when doing arithmetic with signed numbers is 6098 undefined, which means that the compiler may assume that it will 6099 not happen. This permits various optimizations. For example, the 6100 compiler will assume that an expression like `i + 10 > i' will 6101 always be true for signed `i'. This assumption is only valid if 6102 signed overflow is undefined, as the expression is false if `i + 6103 10' overflows when using twos complement arithmetic. When this 6104 option is in effect any attempt to determine whether an operation 6105 on signed numbers will overflow must be written carefully to not 6106 actually involve overflow. 6107 6108 This option also allows the compiler to assume strict pointer 6109 semantics: given a pointer to an object, if adding an offset to 6110 that pointer does not produce a pointer to the same object, the 6111 addition is undefined. This permits the compiler to conclude that 6112 `p + u > p' is always true for a pointer `p' and unsigned integer 6113 `u'. This assumption is only valid because pointer wraparound is 6114 undefined, as the expression is false if `p + u' overflows using 6115 twos complement arithmetic. 6116 6117 See also the `-fwrapv' option. Using `-fwrapv' means that integer 6118 signed overflow is fully defined: it wraps. When `-fwrapv' is 6119 used, there is no difference between `-fstrict-overflow' and 6120 `-fno-strict-overflow' for integers. With `-fwrapv' certain types 6121 of overflow are permitted. For example, if the compiler gets an 6122 overflow when doing arithmetic on constants, the overflowed value 6123 can still be used with `-fwrapv', but not otherwise. 6124 6125 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 6126 `-Os'. 6127 6128 `-falign-functions' 6129 `-falign-functions=N' 6130 Align the start of functions to the next power-of-two greater than 6131 N, skipping up to N bytes. For instance, `-falign-functions=32' 6132 aligns functions to the next 32-byte boundary, but 6133 `-falign-functions=24' would align to the next 32-byte boundary 6134 only if this can be done by skipping 23 bytes or less. 6135 6136 `-fno-align-functions' and `-falign-functions=1' are equivalent 6137 and mean that functions will not be aligned. 6138 6139 Some assemblers only support this flag when N is a power of two; 6140 in that case, it is rounded up. 6141 6142 If N is not specified or is zero, use a machine-dependent default. 6143 6144 Enabled at levels `-O2', `-O3'. 6145 6146 `-falign-labels' 6147 `-falign-labels=N' 6148 Align all branch targets to a power-of-two boundary, skipping up to 6149 N bytes like `-falign-functions'. This option can easily make 6150 code slower, because it must insert dummy operations for when the 6151 branch target is reached in the usual flow of the code. 6152 6153 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 6154 that labels will not be aligned. 6155 6156 If `-falign-loops' or `-falign-jumps' are applicable and are 6157 greater than this value, then their values are used instead. 6158 6159 If N is not specified or is zero, use a machine-dependent default 6160 which is very likely to be `1', meaning no alignment. 6161 6162 Enabled at levels `-O2', `-O3'. 6163 6164 `-falign-loops' 6165 `-falign-loops=N' 6166 Align loops to a power-of-two boundary, skipping up to N bytes 6167 like `-falign-functions'. The hope is that the loop will be 6168 executed many times, which will make up for any execution of the 6169 dummy operations. 6170 6171 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 6172 that loops will not be aligned. 6173 6174 If N is not specified or is zero, use a machine-dependent default. 6175 6176 Enabled at levels `-O2', `-O3'. 6177 6178 `-falign-jumps' 6179 `-falign-jumps=N' 6180 Align branch targets to a power-of-two boundary, for branch targets 6181 where the targets can only be reached by jumping, skipping up to N 6182 bytes like `-falign-functions'. In this case, no dummy operations 6183 need be executed. 6184 6185 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 6186 that loops will not be aligned. 6187 6188 If N is not specified or is zero, use a machine-dependent default. 6189 6190 Enabled at levels `-O2', `-O3'. 6191 6192 `-funit-at-a-time' 6193 This option is left for compatibility reasons. `-funit-at-a-time' 6194 has no effect, while `-fno-unit-at-a-time' implies 6195 `-fno-toplevel-reorder' and `-fno-section-anchors'. 6196 6197 Enabled by default. 6198 6199 `-fno-toplevel-reorder' 6200 Do not reorder top-level functions, variables, and `asm' 6201 statements. Output them in the same order that they appear in the 6202 input file. When this option is used, unreferenced static 6203 variables will not be removed. This option is intended to support 6204 existing code which relies on a particular ordering. For new 6205 code, it is better to use attributes. 6206 6207 Enabled at level `-O0'. When disabled explicitly, it also imply 6208 `-fno-section-anchors' that is otherwise enabled at `-O0' on some 6209 targets. 6210 6211 `-fweb' 6212 Constructs webs as commonly used for register allocation purposes 6213 and assign each web individual pseudo register. This allows the 6214 register allocation pass to operate on pseudos directly, but also 6215 strengthens several other optimization passes, such as CSE, loop 6216 optimizer and trivial dead code remover. It can, however, make 6217 debugging impossible, since variables will no longer stay in a 6218 "home register". 6219 6220 Enabled by default with `-funroll-loops'. 6221 6222 `-fwhole-program' 6223 Assume that the current compilation unit represents whole program 6224 being compiled. All public functions and variables with the 6225 exception of `main' and those merged by attribute 6226 `externally_visible' become static functions and in a affect gets 6227 more aggressively optimized by interprocedural optimizers. While 6228 this option is equivalent to proper use of `static' keyword for 6229 programs consisting of single file, in combination with option 6230 `--combine' this flag can be used to compile most of smaller scale 6231 C programs since the functions and variables become local for the 6232 whole combined compilation unit, not for the single source file 6233 itself. 6234 6235 This option is not supported for Fortran programs. 6236 6237 `-fcprop-registers' 6238 After register allocation and post-register allocation instruction 6239 splitting, we perform a copy-propagation pass to try to reduce 6240 scheduling dependencies and occasionally eliminate the copy. 6241 6242 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6243 6244 `-fprofile-correction' 6245 Profiles collected using an instrumented binary for multi-threaded 6246 programs may be inconsistent due to missed counter updates. When 6247 this option is specified, GCC will use heuristics to correct or 6248 smooth out such inconsistencies. By default, GCC will emit an 6249 error message when an inconsistent profile is detected. 6250 6251 `-fprofile-dir=PATH' 6252 Set the directory to search the profile data files in to PATH. 6253 This option affects only the profile data generated by 6254 `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used 6255 by `-fprofile-use' and `-fbranch-probabilities' and its related 6256 options. By default, GCC will use the current directory as PATH 6257 thus the profile data file will appear in the same directory as 6258 the object file. 6259 6260 `-fprofile-generate' 6261 `-fprofile-generate=PATH' 6262 Enable options usually used for instrumenting application to 6263 produce profile useful for later recompilation with profile 6264 feedback based optimization. You must use `-fprofile-generate' 6265 both when compiling and when linking your program. 6266 6267 The following options are enabled: `-fprofile-arcs', 6268 `-fprofile-values', `-fvpt'. 6269 6270 If PATH is specified, GCC will look at the PATH to find the 6271 profile feedback data files. See `-fprofile-dir'. 6272 6273 `-fprofile-use' 6274 `-fprofile-use=PATH' 6275 Enable profile feedback directed optimizations, and optimizations 6276 generally profitable only with profile feedback available. 6277 6278 The following options are enabled: `-fbranch-probabilities', 6279 `-fvpt', `-funroll-loops', `-fpeel-loops' 6280 6281 By default, GCC emits an error message if the feedback profiles do 6282 not match the source code. This error can be turned into a 6283 warning by using `-Wcoverage-mismatch'. Note this may result in 6284 poorly optimized code. 6285 6286 If PATH is specified, GCC will look at the PATH to find the 6287 profile feedback data files. See `-fprofile-dir'. 6288 6289 `-fripa' 6290 Perform dynamic inter-procedural analysis. This is used in 6291 conjunction with the `-fprofile-generate' and `-fprofile-use' 6292 options. During the `-fprofile-generate' phase, this flag turns 6293 on some additional instrumentation code that enables dynamic 6294 call-graph analysis. During the `-fprofile-use' phase, this flag 6295 enables cross-module optimizations such as inlining. 6296 6297 `-fripa-disallow-opt-mismatch' 6298 Don't import an auxiliary module, if the GCC command line options 6299 used for this auxiliary module during the profile-generate stage 6300 were different from those used for the primary module. Note that 6301 any mismatches in warning-related options are ignored for this 6302 comparison. 6303 6304 `-fripa-verbose' 6305 Enable printing of verbose information about dynamic 6306 inter-procedural optimizations. This is used in conjunction with 6307 the `-fripa'. 6308 6309 `-fsample-profile' 6310 `-fsample-profile=PATH' 6311 Enable profile feedback directed optimizations using profiles 6312 obtained via sampling, and optimizations generally profitable only 6313 with profile feedback available. 6314 6315 `-fsample-profile-aggregate-using=METHOD' 6316 Select the method for (average or maximum) for converting 6317 instruction-level profiles into basic block level profiles. 6318 6319 The following options control compiler behavior regarding floating 6320 point arithmetic. These options trade off between speed and 6321 correctness. All must be specifically enabled. 6322 6323 `-ffloat-store' 6324 Do not store floating point variables in registers, and inhibit 6325 other options that might change whether a floating point value is 6326 taken from a register or memory. 6327 6328 This option prevents undesirable excess precision on machines such 6329 as the 68000 where the floating registers (of the 68881) keep more 6330 precision than a `double' is supposed to have. Similarly for the 6331 x86 architecture. For most programs, the excess precision does 6332 only good, but a few programs rely on the precise definition of 6333 IEEE floating point. Use `-ffloat-store' for such programs, after 6334 modifying them to store all pertinent intermediate computations 6335 into variables. 6336 6337 `-ffast-math' 6338 Sets `-fno-math-errno', `-funsafe-math-optimizations', 6339 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans' 6340 and `-fcx-limited-range'. 6341 6342 This option causes the preprocessor macro `__FAST_MATH__' to be 6343 defined. 6344 6345 This option is not turned on by any `-O' option since it can 6346 result in incorrect output for programs which depend on an exact 6347 implementation of IEEE or ISO rules/specifications for math 6348 functions. It may, however, yield faster code for programs that do 6349 not require the guarantees of these specifications. 6350 6351 `-fno-math-errno' 6352 Do not set ERRNO after calling math functions that are executed 6353 with a single instruction, e.g., sqrt. A program that relies on 6354 IEEE exceptions for math error handling may want to use this flag 6355 for speed while maintaining IEEE arithmetic compatibility. 6356 6357 This option is not turned on by any `-O' option since it can 6358 result in incorrect output for programs which depend on an exact 6359 implementation of IEEE or ISO rules/specifications for math 6360 functions. It may, however, yield faster code for programs that do 6361 not require the guarantees of these specifications. 6362 6363 The default is `-fmath-errno'. 6364 6365 On Darwin systems, the math library never sets `errno'. There is 6366 therefore no reason for the compiler to consider the possibility 6367 that it might, and `-fno-math-errno' is the default. 6368 6369 `-funsafe-math-optimizations' 6370 Allow optimizations for floating-point arithmetic that (a) assume 6371 that arguments and results are valid and (b) may violate IEEE or 6372 ANSI standards. When used at link-time, it may include libraries 6373 or startup files that change the default FPU control word or other 6374 similar optimizations. 6375 6376 This option is not turned on by any `-O' option since it can 6377 result in incorrect output for programs which depend on an exact 6378 implementation of IEEE or ISO rules/specifications for math 6379 functions. It may, however, yield faster code for programs that do 6380 not require the guarantees of these specifications. Enables 6381 `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math' 6382 and `-freciprocal-math'. 6383 6384 The default is `-fno-unsafe-math-optimizations'. 6385 6386 `-fassociative-math' 6387 Allow re-association of operands in series of floating-point 6388 operations. This violates the ISO C and C++ language standard by 6389 possibly changing computation result. NOTE: re-ordering may 6390 change the sign of zero as well as ignore NaNs and inhibit or 6391 create underflow or overflow (and thus cannot be used on a code 6392 which relies on rounding behavior like `(x + 2**52) - 2**52)'. 6393 May also reorder floating-point comparisons and thus may not be 6394 used when ordered comparisons are required. This option requires 6395 that both `-fno-signed-zeros' and `-fno-trapping-math' be in 6396 effect. Moreover, it doesn't make much sense with 6397 `-frounding-math'. 6398 6399 The default is `-fno-associative-math'. 6400 6401 `-freciprocal-math' 6402 Allow the reciprocal of a value to be used instead of dividing by 6403 the value if this enables optimizations. For example `x / y' can 6404 be replaced with `x * (1/y)' which is useful if `(1/y)' is subject 6405 to common subexpression elimination. Note that this loses 6406 precision and increases the number of flops operating on the value. 6407 6408 The default is `-fno-reciprocal-math'. 6409 6410 `-ffinite-math-only' 6411 Allow optimizations for floating-point arithmetic that assume that 6412 arguments and results are not NaNs or +-Infs. 6413 6414 This option is not turned on by any `-O' option since it can 6415 result in incorrect output for programs which depend on an exact 6416 implementation of IEEE or ISO rules/specifications for math 6417 functions. It may, however, yield faster code for programs that do 6418 not require the guarantees of these specifications. 6419 6420 The default is `-fno-finite-math-only'. 6421 6422 `-fno-signed-zeros' 6423 Allow optimizations for floating point arithmetic that ignore the 6424 signedness of zero. IEEE arithmetic specifies the behavior of 6425 distinct +0.0 and -0.0 values, which then prohibits simplification 6426 of expressions such as x+0.0 or 0.0*x (even with 6427 `-ffinite-math-only'). This option implies that the sign of a 6428 zero result isn't significant. 6429 6430 The default is `-fsigned-zeros'. 6431 6432 `-fno-trapping-math' 6433 Compile code assuming that floating-point operations cannot 6434 generate user-visible traps. These traps include division by 6435 zero, overflow, underflow, inexact result and invalid operation. 6436 This option requires that `-fno-signaling-nans' be in effect. 6437 Setting this option may allow faster code if one relies on 6438 "non-stop" IEEE arithmetic, for example. 6439 6440 This option should never be turned on by any `-O' option since it 6441 can result in incorrect output for programs which depend on an 6442 exact implementation of IEEE or ISO rules/specifications for math 6443 functions. 6444 6445 The default is `-ftrapping-math'. 6446 6447 `-frounding-math' 6448 Disable transformations and optimizations that assume default 6449 floating point rounding behavior. This is round-to-zero for all 6450 floating point to integer conversions, and round-to-nearest for 6451 all other arithmetic truncations. This option should be specified 6452 for programs that change the FP rounding mode dynamically, or that 6453 may be executed with a non-default rounding mode. This option 6454 disables constant folding of floating point expressions at 6455 compile-time (which may be affected by rounding mode) and 6456 arithmetic transformations that are unsafe in the presence of 6457 sign-dependent rounding modes. 6458 6459 The default is `-fno-rounding-math'. 6460 6461 This option is experimental and does not currently guarantee to 6462 disable all GCC optimizations that are affected by rounding mode. 6463 Future versions of GCC may provide finer control of this setting 6464 using C99's `FENV_ACCESS' pragma. This command line option will 6465 be used to specify the default state for `FENV_ACCESS'. 6466 6467 `-fsignaling-nans' 6468 Compile code assuming that IEEE signaling NaNs may generate 6469 user-visible traps during floating-point operations. Setting this 6470 option disables optimizations that may change the number of 6471 exceptions visible with signaling NaNs. This option implies 6472 `-ftrapping-math'. 6473 6474 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 6475 defined. 6476 6477 The default is `-fno-signaling-nans'. 6478 6479 This option is experimental and does not currently guarantee to 6480 disable all GCC optimizations that affect signaling NaN behavior. 6481 6482 `-fsingle-precision-constant' 6483 Treat floating point constant as single precision constant instead 6484 of implicitly converting it to double precision constant. 6485 6486 `-fcx-limited-range' 6487 When enabled, this option states that a range reduction step is not 6488 needed when performing complex division. Also, there is no 6489 checking whether the result of a complex multiplication or 6490 division is `NaN + I*NaN', with an attempt to rescue the situation 6491 in that case. The default is `-fno-cx-limited-range', but is 6492 enabled by `-ffast-math'. 6493 6494 This option controls the default setting of the ISO C99 6495 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 6496 all languages. 6497 6498 `-fcx-fortran-rules' 6499 Complex multiplication and division follow Fortran rules. Range 6500 reduction is done as part of complex division, but there is no 6501 checking whether the result of a complex multiplication or 6502 division is `NaN + I*NaN', with an attempt to rescue the situation 6503 in that case. 6504 6505 The default is `-fno-cx-fortran-rules'. 6506 6507 6508 The following options control optimizations that may improve 6509 performance, but are not enabled by any `-O' options. This section 6510 includes experimental options that may produce broken code. 6511 6512 `-fbranch-probabilities' 6513 After running a program compiled with `-fprofile-arcs' (*note 6514 Options for Debugging Your Program or `gcc': Debugging Options.), 6515 you can compile it a second time using `-fbranch-probabilities', 6516 to improve optimizations based on the number of times each branch 6517 was taken. When the program compiled with `-fprofile-arcs' exits 6518 it saves arc execution counts to a file called `SOURCENAME.gcda' 6519 for each source file. The information in this data file is very 6520 dependent on the structure of the generated code, so you must use 6521 the same source code and the same optimization options for both 6522 compilations. 6523 6524 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 6525 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 6526 optimization. Currently, they are only used in one place: in 6527 `reorg.c', instead of guessing which path a branch is mostly to 6528 take, the `REG_BR_PROB' values are used to exactly determine which 6529 path is taken more often. 6530 6531 `-fprofile-values' 6532 If combined with `-fprofile-arcs', it adds code so that some data 6533 about values of expressions in the program is gathered. 6534 6535 With `-fbranch-probabilities', it reads back the data gathered 6536 from profiling values of expressions and adds `REG_VALUE_PROFILE' 6537 notes to instructions for their later usage in optimizations. 6538 6539 Enabled with `-fprofile-generate' and `-fprofile-use'. 6540 6541 `-fvpt' 6542 If combined with `-fprofile-arcs', it instructs the compiler to add 6543 a code to gather information about values of expressions. 6544 6545 With `-fbranch-probabilities', it reads back the data gathered and 6546 actually performs the optimizations based on them. Currently the 6547 optimizations include specialization of division operation using 6548 the knowledge about the value of the denominator. 6549 6550 `-frename-registers' 6551 Attempt to avoid false dependencies in scheduled code by making use 6552 of registers left over after register allocation. This 6553 optimization will most benefit processors with lots of registers. 6554 Depending on the debug information format adopted by the target, 6555 however, it can make debugging impossible, since variables will no 6556 longer stay in a "home register". 6557 6558 Enabled by default with `-funroll-loops'. 6559 6560 `-ftracer' 6561 Perform tail duplication to enlarge superblock size. This 6562 transformation simplifies the control flow of the function 6563 allowing other optimizations to do better job. 6564 6565 Enabled with `-fprofile-use'. 6566 6567 `-funroll-loops' 6568 Unroll loops whose number of iterations can be determined at 6569 compile time or upon entry to the loop. `-funroll-loops' implies 6570 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 6571 also turns on complete loop peeling (i.e. complete removal of 6572 loops with small constant number of iterations). This option 6573 makes code larger, and may or may not make it run faster. 6574 6575 Enabled with `-fprofile-use'. 6576 6577 `-funroll-all-loops' 6578 Unroll all loops, even if their number of iterations is uncertain 6579 when the loop is entered. This usually makes programs run more 6580 slowly. `-funroll-all-loops' implies the same options as 6581 `-funroll-loops'. 6582 6583 `-fpeel-loops' 6584 Peels the loops for that there is enough information that they do 6585 not roll much (from profile feedback). It also turns on complete 6586 loop peeling (i.e. complete removal of loops with small constant 6587 number of iterations). 6588 6589 Enabled with `-fprofile-use'. 6590 6591 `-fmove-loop-invariants' 6592 Enables the loop invariant motion pass in the RTL loop optimizer. 6593 Enabled at level `-O1' 6594 6595 `-funswitch-loops' 6596 Move branches with loop invariant conditions out of the loop, with 6597 duplicates of the loop on both branches (modified according to 6598 result of the condition). 6599 6600 `-ffunction-sections' 6601 `-fdata-sections' 6602 Place each function or data item into its own section in the output 6603 file if the target supports arbitrary sections. The name of the 6604 function or the name of the data item determines the section's name 6605 in the output file. 6606 6607 Use these options on systems where the linker can perform 6608 optimizations to improve locality of reference in the instruction 6609 space. Most systems using the ELF object format and SPARC 6610 processors running Solaris 2 have linkers with such optimizations. 6611 AIX may have these optimizations in the future. 6612 6613 Only use these options when there are significant benefits from 6614 doing so. When you specify these options, the assembler and 6615 linker will create larger object and executable files and will 6616 also be slower. You will not be able to use `gprof' on all 6617 systems if you specify this option and you may have problems with 6618 debugging if you specify both this option and `-g'. 6619 6620 `-fbranch-target-load-optimize' 6621 Perform branch target register load optimization before prologue / 6622 epilogue threading. The use of target registers can typically be 6623 exposed only during reload, thus hoisting loads out of loops and 6624 doing inter-block scheduling needs a separate optimization pass. 6625 6626 `-fbranch-target-load-optimize2' 6627 Perform branch target register load optimization after prologue / 6628 epilogue threading. 6629 6630 `-fbtr-bb-exclusive' 6631 When performing branch target register load optimization, don't 6632 reuse branch target registers in within any basic block. 6633 6634 `-fstack-protector' 6635 Emit extra code to check for buffer overflows, such as stack 6636 smashing attacks. This is done by adding a guard variable to 6637 functions with vulnerable objects. This includes functions that 6638 call alloca, and functions with buffers larger than 8 bytes. The 6639 guards are initialized when a function is entered and then checked 6640 when the function exits. If a guard check fails, an error message 6641 is printed and the program exits. 6642 6643 `-fstack-protector-all' 6644 Like `-fstack-protector' except that all functions are protected. 6645 6646 `-fsection-anchors' 6647 Try to reduce the number of symbolic address calculations by using 6648 shared "anchor" symbols to address nearby objects. This 6649 transformation can help to reduce the number of GOT entries and 6650 GOT accesses on some targets. 6651 6652 For example, the implementation of the following function `foo': 6653 6654 static int a, b, c; 6655 int foo (void) { return a + b + c; } 6656 6657 would usually calculate the addresses of all three variables, but 6658 if you compile it with `-fsection-anchors', it will access the 6659 variables from a common anchor point instead. The effect is 6660 similar to the following pseudocode (which isn't valid C): 6661 6662 int foo (void) 6663 { 6664 register int *xr = &x; 6665 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 6666 } 6667 6668 Not all targets support this option. 6669 6670 `--param NAME=VALUE' 6671 In some places, GCC uses various constants to control the amount of 6672 optimization that is done. For example, GCC will not inline 6673 functions that contain more that a certain number of instructions. 6674 You can control some of these constants on the command-line using 6675 the `--param' option. 6676 6677 The names of specific parameters, and the meaning of the values, 6678 are tied to the internals of the compiler, and are subject to 6679 change without notice in future releases. 6680 6681 In each case, the VALUE is an integer. The allowable choices for 6682 NAME are given in the following table: 6683 6684 `sra-max-structure-size' 6685 The maximum structure size, in bytes, at which the scalar 6686 replacement of aggregates (SRA) optimization will perform 6687 block copies. The default value, 0, implies that GCC will 6688 select the most appropriate size itself. 6689 6690 `sra-field-structure-ratio' 6691 The threshold ratio (as a percentage) between instantiated 6692 fields and the complete structure size. We say that if the 6693 ratio of the number of bytes in instantiated fields to the 6694 number of bytes in the complete structure exceeds this 6695 parameter, then block copies are not used. The default is 75. 6696 6697 `struct-reorg-cold-struct-ratio' 6698 The threshold ratio (as a percentage) between a structure 6699 frequency and the frequency of the hottest structure in the 6700 program. This parameter is used by struct-reorg optimization 6701 enabled by `-fipa-struct-reorg'. We say that if the ratio of 6702 a structure frequency, calculated by profiling, to the 6703 hottest structure frequency in the program is less than this 6704 parameter, then structure reorganization is not applied to 6705 this structure. The default is 10. 6706 6707 `predictable-branch-cost-outcome' 6708 When branch is predicted to be taken with probability lower 6709 than this threshold (in percent), then it is considered well 6710 predictable. The default is 10. 6711 6712 `max-crossjump-edges' 6713 The maximum number of incoming edges to consider for 6714 crossjumping. The algorithm used by `-fcrossjumping' is 6715 O(N^2) in the number of edges incoming to each block. 6716 Increasing values mean more aggressive optimization, making 6717 the compile time increase with probably small improvement in 6718 executable size. 6719 6720 `min-crossjump-insns' 6721 The minimum number of instructions which must be matched at 6722 the end of two blocks before crossjumping will be performed 6723 on them. This value is ignored in the case where all 6724 instructions in the block being crossjumped from are matched. 6725 The default value is 5. 6726 6727 `max-grow-copy-bb-insns' 6728 The maximum code size expansion factor when copying basic 6729 blocks instead of jumping. The expansion is relative to a 6730 jump instruction. The default value is 8. 6731 6732 `max-goto-duplication-insns' 6733 The maximum number of instructions to duplicate to a block 6734 that jumps to a computed goto. To avoid O(N^2) behavior in a 6735 number of passes, GCC factors computed gotos early in the 6736 compilation process, and unfactors them as late as possible. 6737 Only computed jumps at the end of a basic blocks with no more 6738 than max-goto-duplication-insns are unfactored. The default 6739 value is 8. 6740 6741 `max-delay-slot-insn-search' 6742 The maximum number of instructions to consider when looking 6743 for an instruction to fill a delay slot. If more than this 6744 arbitrary number of instructions is searched, the time 6745 savings from filling the delay slot will be minimal so stop 6746 searching. Increasing values mean more aggressive 6747 optimization, making the compile time increase with probably 6748 small improvement in executable run time. 6749 6750 `max-delay-slot-live-search' 6751 When trying to fill delay slots, the maximum number of 6752 instructions to consider when searching for a block with 6753 valid live register information. Increasing this arbitrarily 6754 chosen value means more aggressive optimization, increasing 6755 the compile time. This parameter should be removed when the 6756 delay slot code is rewritten to maintain the control-flow 6757 graph. 6758 6759 `max-gcse-memory' 6760 The approximate maximum amount of memory that will be 6761 allocated in order to perform the global common subexpression 6762 elimination optimization. If more memory than specified is 6763 required, the optimization will not be done. 6764 6765 `max-gcse-passes' 6766 The maximum number of passes of GCSE to run. The default is 6767 1. 6768 6769 `max-pending-list-length' 6770 The maximum number of pending dependencies scheduling will 6771 allow before flushing the current state and starting over. 6772 Large functions with few branches or calls can create 6773 excessively large lists which needlessly consume memory and 6774 resources. 6775 6776 `max-inline-insns-single' 6777 Several parameters control the tree inliner used in gcc. 6778 This number sets the maximum number of instructions (counted 6779 in GCC's internal representation) in a single function that 6780 the tree inliner will consider for inlining. This only 6781 affects functions declared inline and methods implemented in 6782 a class declaration (C++). The default value is 450. 6783 6784 `max-inline-insns-auto' 6785 When you use `-finline-functions' (included in `-O3'), a lot 6786 of functions that would otherwise not be considered for 6787 inlining by the compiler will be investigated. To those 6788 functions, a different (potentially more restrictive) limit 6789 compared to functions declared inline can be applied. The 6790 default value is 450. 6791 6792 `inline-limit-increase-with-profile' 6793 When profile information is available, such as when compiling 6794 with `-fprofile-use', the maximum function size limits 6795 `--param max-inline-insns-single' and `--param 6796 max-inline-insns-auto' are increased by this percentage 6797 amount. Profile information increases the selectivity and 6798 quality of the inlining decisions, so having a larger set of 6799 candidate functions available for inlining can improve 6800 performance. The default value is 100. 6801 6802 `large-function-insns' 6803 The limit specifying really large functions. For functions 6804 larger than this limit after inlining, inlining is 6805 constrained by `--param large-function-growth'. This 6806 parameter is useful primarily to avoid extreme compilation 6807 time caused by non-linear algorithms used by the backend. 6808 The default value is 2700. 6809 6810 `large-function-growth' 6811 Specifies maximal growth of large function caused by inlining 6812 in percents. The default value is 100 which limits large 6813 function growth to 2.0 times the original size. 6814 6815 `large-unit-insns' 6816 The limit specifying large translation unit. Growth caused 6817 by inlining of units larger than this limit is limited by 6818 `--param inline-unit-growth'. For small units this might be 6819 too tight (consider unit consisting of function A that is 6820 inline and B that just calls A three time. If B is small 6821 relative to A, the growth of unit is 300\% and yet such 6822 inlining is very sane. For very large units consisting of 6823 small inlineable functions however the overall unit growth 6824 limit is needed to avoid exponential explosion of code size. 6825 Thus for smaller units, the size is increased to `--param 6826 large-unit-insns' before applying `--param 6827 inline-unit-growth'. The default is 10000 6828 6829 `inline-unit-growth' 6830 Specifies maximal overall growth of the compilation unit 6831 caused by inlining. The default value is 30 which limits 6832 unit growth to 1.3 times the original size. 6833 6834 `ipcp-unit-growth' 6835 Specifies maximal overall growth of the compilation unit 6836 caused by interprocedural constant propagation. The default 6837 value is 10 which limits unit growth to 1.1 times the 6838 original size. 6839 6840 `large-stack-frame' 6841 The limit specifying large stack frames. While inlining the 6842 algorithm is trying to not grow past this limit too much. 6843 Default value is 256 bytes. 6844 6845 `large-stack-frame-growth' 6846 Specifies maximal growth of large stack frames caused by 6847 inlining in percents. The default value is 1000 which limits 6848 large stack frame growth to 11 times the original size. 6849 6850 `max-inline-insns-recursive' 6851 `max-inline-insns-recursive-auto' 6852 Specifies maximum number of instructions out-of-line copy of 6853 self recursive inline function can grow into by performing 6854 recursive inlining. 6855 6856 For functions declared inline `--param 6857 max-inline-insns-recursive' is taken into account. For 6858 function not declared inline, recursive inlining happens only 6859 when `-finline-functions' (included in `-O3') is enabled and 6860 `--param max-inline-insns-recursive-auto' is used. The 6861 default value is 450. 6862 6863 `max-inline-recursive-depth' 6864 `max-inline-recursive-depth-auto' 6865 Specifies maximum recursion depth used by the recursive 6866 inlining. 6867 6868 For functions declared inline `--param 6869 max-inline-recursive-depth' is taken into account. For 6870 function not declared inline, recursive inlining happens only 6871 when `-finline-functions' (included in `-O3') is enabled and 6872 `--param max-inline-recursive-depth-auto' is used. The 6873 default value is 8. 6874 6875 `min-inline-recursive-probability' 6876 Recursive inlining is profitable only for function having 6877 deep recursion in average and can hurt for function having 6878 little recursion depth by increasing the prologue size or 6879 complexity of function body to other optimizers. 6880 6881 When profile feedback is available (see `-fprofile-generate') 6882 the actual recursion depth can be guessed from probability 6883 that function will recurse via given call expression. This 6884 parameter limits inlining only to call expression whose 6885 probability exceeds given threshold (in percents). The 6886 default value is 10. 6887 6888 `inline-call-cost' 6889 Specify cost of call instruction relative to simple 6890 arithmetics operations (having cost of 1). Increasing this 6891 cost disqualifies inlining of non-leaf functions and at the 6892 same time increases size of leaf function that is believed to 6893 reduce function size by being inlined. In effect it 6894 increases amount of inlining for code having large 6895 abstraction penalty (many functions that just pass the 6896 arguments to other functions) and decrease inlining for code 6897 with low abstraction penalty. The default value is 12. 6898 6899 `min-vect-loop-bound' 6900 The minimum number of iterations under which a loop will not 6901 get vectorized when `-ftree-vectorize' is used. The number 6902 of iterations after vectorization needs to be greater than 6903 the value specified by this option to allow vectorization. 6904 The default value is 0. 6905 6906 `max-unrolled-insns' 6907 The maximum number of instructions that a loop should have if 6908 that loop is unrolled, and if the loop is unrolled, it 6909 determines how many times the loop code is unrolled. 6910 6911 `max-average-unrolled-insns' 6912 The maximum number of instructions biased by probabilities of 6913 their execution that a loop should have if that loop is 6914 unrolled, and if the loop is unrolled, it determines how many 6915 times the loop code is unrolled. 6916 6917 `max-unroll-times' 6918 The maximum number of unrollings of a single loop. 6919 6920 `max-peeled-insns' 6921 The maximum number of instructions that a loop should have if 6922 that loop is peeled, and if the loop is peeled, it determines 6923 how many times the loop code is peeled. 6924 6925 `max-peel-times' 6926 The maximum number of peelings of a single loop. 6927 6928 `max-completely-peeled-insns' 6929 6930 `max-completely-peeled-insns-feedback' 6931 The maximum number of insns of a completely peeled loop. 6932 6933 The `max-completely-peeled-insns-feedback' is used only when 6934 profile feedback is available and the loop is hot. Because of 6935 the real profiles, this value may set to be larger for hot 6936 loops. 6937 6938 `max-once-peeled-insns' 6939 6940 `max-once-peeled-insns-feedback' 6941 The maximum number of insns of a peeled loop that rolls only 6942 once. The `max-once-peeled-insns-feedback' is used only 6943 when profile feedback is available and the loop is hot. 6944 Because of the real profiles, this value may set to be larger 6945 for hot loops. 6946 6947 `max-completely-peel-times' 6948 6949 `max-completely-peel-times-feedback' 6950 The maximum number of iterations of a loop to be suitable for 6951 complete peeling. 6952 6953 The `max-completely-peel-times-feedback' is used only when 6954 profile feedback is available and the loop is hot. Because of 6955 the real profiles, this value may set to be larger for hot 6956 loops. 6957 6958 `max-unswitch-insns' 6959 The maximum number of insns of an unswitched loop. 6960 6961 `max-unswitch-level' 6962 The maximum number of branches unswitched in a single loop. 6963 6964 `lim-expensive' 6965 The minimum cost of an expensive expression in the loop 6966 invariant motion. 6967 6968 `iv-consider-all-candidates-bound' 6969 Bound on number of candidates for induction variables below 6970 that all candidates are considered for each use in induction 6971 variable optimizations. Only the most relevant candidates 6972 are considered if there are more candidates, to avoid 6973 quadratic time complexity. 6974 6975 `iv-max-considered-uses' 6976 The induction variable optimizations give up on loops that 6977 contain more induction variable uses. 6978 6979 `iv-always-prune-cand-set-bound' 6980 If number of candidates in the set is smaller than this value, 6981 we always try to remove unnecessary ivs from the set during 6982 its optimization when a new iv is added to the set. 6983 6984 `scev-max-expr-size' 6985 Bound on size of expressions used in the scalar evolutions 6986 analyzer. Large expressions slow the analyzer. 6987 6988 `omega-max-vars' 6989 The maximum number of variables in an Omega constraint system. 6990 The default value is 128. 6991 6992 `omega-max-geqs' 6993 The maximum number of inequalities in an Omega constraint 6994 system. The default value is 256. 6995 6996 `omega-max-eqs' 6997 The maximum number of equalities in an Omega constraint 6998 system. The default value is 128. 6999 7000 `omega-max-wild-cards' 7001 The maximum number of wildcard variables that the Omega 7002 solver will be able to insert. The default value is 18. 7003 7004 `omega-hash-table-size' 7005 The size of the hash table in the Omega solver. The default 7006 value is 550. 7007 7008 `omega-max-keys' 7009 The maximal number of keys used by the Omega solver. The 7010 default value is 500. 7011 7012 `omega-eliminate-redundant-constraints' 7013 When set to 1, use expensive methods to eliminate all 7014 redundant constraints. The default value is 0. 7015 7016 `vect-max-version-for-alignment-checks' 7017 The maximum number of runtime checks that can be performed 7018 when doing loop versioning for alignment in the vectorizer. 7019 See option ftree-vect-loop-version for more information. 7020 7021 `vect-max-version-for-alias-checks' 7022 The maximum number of runtime checks that can be performed 7023 when doing loop versioning for alias in the vectorizer. See 7024 option ftree-vect-loop-version for more information. 7025 7026 `max-iterations-to-track' 7027 The maximum number of iterations of a loop the brute force 7028 algorithm for analysis of # of iterations of the loop tries 7029 to evaluate. 7030 7031 `hot-bb-count-fraction' 7032 Select fraction of the maximal count of repetitions of basic 7033 block in program given basic block needs to have to be 7034 considered hot. 7035 7036 `hot-bb-frequency-fraction' 7037 Select fraction of the maximal frequency of executions of 7038 basic block in function given basic block needs to have to be 7039 considered hot 7040 7041 `max-predicted-iterations' 7042 The maximum number of loop iterations we predict statically. 7043 This is useful in cases where function contain single loop 7044 with known bound and other loop with unknown. We predict the 7045 known number of iterations correctly, while the unknown 7046 number of iterations average to roughly 10. This means that 7047 the loop without bounds would appear artificially cold 7048 relative to the other one. 7049 7050 `align-threshold' 7051 Select fraction of the maximal frequency of executions of 7052 basic block in function given basic block will get aligned. 7053 7054 `align-loop-iterations' 7055 A loop expected to iterate at lest the selected number of 7056 iterations will get aligned. 7057 7058 `tracer-dynamic-coverage' 7059 `tracer-dynamic-coverage-feedback' 7060 This value is used to limit superblock formation once the 7061 given percentage of executed instructions is covered. This 7062 limits unnecessary code size expansion. 7063 7064 The `tracer-dynamic-coverage-feedback' is used only when 7065 profile feedback is available. The real profiles (as opposed 7066 to statically estimated ones) are much less balanced allowing 7067 the threshold to be larger value. 7068 7069 `tracer-max-code-growth' 7070 Stop tail duplication once code growth has reached given 7071 percentage. This is rather hokey argument, as most of the 7072 duplicates will be eliminated later in cross jumping, so it 7073 may be set to much higher values than is the desired code 7074 growth. 7075 7076 `tracer-min-branch-ratio' 7077 Stop reverse growth when the reverse probability of best edge 7078 is less than this threshold (in percent). 7079 7080 `tracer-min-branch-ratio' 7081 `tracer-min-branch-ratio-feedback' 7082 Stop forward growth if the best edge do have probability 7083 lower than this threshold. 7084 7085 Similarly to `tracer-dynamic-coverage' two values are 7086 present, one for compilation for profile feedback and one for 7087 compilation without. The value for compilation with profile 7088 feedback needs to be more conservative (higher) in order to 7089 make tracer effective. 7090 7091 `max-cse-path-length' 7092 Maximum number of basic blocks on path that cse considers. 7093 The default is 10. 7094 7095 `max-cse-insns' 7096 The maximum instructions CSE process before flushing. The 7097 default is 1000. 7098 7099 `max-aliased-vops' 7100 Maximum number of virtual operands per function allowed to 7101 represent aliases before triggering the alias partitioning 7102 heuristic. Alias partitioning reduces compile times and 7103 memory consumption needed for aliasing at the expense of 7104 precision loss in alias information. The default value for 7105 this parameter is 100 for -O1, 500 for -O2 and 1000 for -O3. 7106 7107 Notice that if a function contains more memory statements 7108 than the value of this parameter, it is not really possible 7109 to achieve this reduction. In this case, the compiler will 7110 use the number of memory statements as the value for 7111 `max-aliased-vops'. 7112 7113 `avg-aliased-vops' 7114 Average number of virtual operands per statement allowed to 7115 represent aliases before triggering the alias partitioning 7116 heuristic. This works in conjunction with 7117 `max-aliased-vops'. If a function contains more than 7118 `max-aliased-vops' virtual operators, then memory symbols 7119 will be grouped into memory partitions until either the total 7120 number of virtual operators is below `max-aliased-vops' or 7121 the average number of virtual operators per memory statement 7122 is below `avg-aliased-vops'. The default value for this 7123 parameter is 1 for -O1 and -O2, and 3 for -O3. 7124 7125 `ggc-min-expand' 7126 GCC uses a garbage collector to manage its own memory 7127 allocation. This parameter specifies the minimum percentage 7128 by which the garbage collector's heap should be allowed to 7129 expand between collections. Tuning this may improve 7130 compilation speed; it has no effect on code generation. 7131 7132 The default is 30% + 70% * (RAM/1GB) with an upper bound of 7133 100% when RAM >= 1GB. If `getrlimit' is available, the 7134 notion of "RAM" is the smallest of actual RAM and 7135 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 7136 calculate RAM on a particular platform, the lower bound of 7137 30% is used. Setting this parameter and `ggc-min-heapsize' 7138 to zero causes a full collection to occur at every 7139 opportunity. This is extremely slow, but can be useful for 7140 debugging. 7141 7142 `ggc-min-heapsize' 7143 Minimum size of the garbage collector's heap before it begins 7144 bothering to collect garbage. The first collection occurs 7145 after the heap expands by `ggc-min-expand'% beyond 7146 `ggc-min-heapsize'. Again, tuning this may improve 7147 compilation speed, and has no effect on code generation. 7148 7149 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 7150 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 7151 exceeded, but with a lower bound of 4096 (four megabytes) and 7152 an upper bound of 131072 (128 megabytes). If GCC is not able 7153 to calculate RAM on a particular platform, the lower bound is 7154 used. Setting this parameter very large effectively disables 7155 garbage collection. Setting this parameter and 7156 `ggc-min-expand' to zero causes a full collection to occur at 7157 every opportunity. 7158 7159 `max-reload-search-insns' 7160 The maximum number of instruction reload should look backward 7161 for equivalent register. Increasing values mean more 7162 aggressive optimization, making the compile time increase 7163 with probably slightly better performance. The default value 7164 is 100. 7165 7166 `max-cselib-memory-locations' 7167 The maximum number of memory locations cselib should take 7168 into account. Increasing values mean more aggressive 7169 optimization, making the compile time increase with probably 7170 slightly better performance. The default value is 500. 7171 7172 `reorder-blocks-duplicate' 7173 `reorder-blocks-duplicate-feedback' 7174 Used by basic block reordering pass to decide whether to use 7175 unconditional branch or duplicate the code on its 7176 destination. Code is duplicated when its estimated size is 7177 smaller than this value multiplied by the estimated size of 7178 unconditional jump in the hot spots of the program. 7179 7180 The `reorder-block-duplicate-feedback' is used only when 7181 profile feedback is available and may be set to higher values 7182 than `reorder-block-duplicate' since information about the 7183 hot spots is more accurate. 7184 7185 `max-sched-ready-insns' 7186 The maximum number of instructions ready to be issued the 7187 scheduler should consider at any given time during the first 7188 scheduling pass. Increasing values mean more thorough 7189 searches, making the compilation time increase with probably 7190 little benefit. The default value is 100. 7191 7192 `max-sched-region-blocks' 7193 The maximum number of blocks in a region to be considered for 7194 interblock scheduling. The default value is 10. 7195 7196 `max-pipeline-region-blocks' 7197 The maximum number of blocks in a region to be considered for 7198 pipelining in the selective scheduler. The default value is 7199 15. 7200 7201 `max-sched-region-insns' 7202 The maximum number of insns in a region to be considered for 7203 interblock scheduling. The default value is 100. 7204 7205 `max-pipeline-region-insns' 7206 The maximum number of insns in a region to be considered for 7207 pipelining in the selective scheduler. The default value is 7208 200. 7209 7210 `min-spec-prob' 7211 The minimum probability (in percents) of reaching a source 7212 block for interblock speculative scheduling. The default 7213 value is 40. 7214 7215 `max-sched-extend-regions-iters' 7216 The maximum number of iterations through CFG to extend 7217 regions. 0 - disable region extension, N - do at most N 7218 iterations. The default value is 0. 7219 7220 `max-sched-insn-conflict-delay' 7221 The maximum conflict delay for an insn to be considered for 7222 speculative motion. The default value is 3. 7223 7224 `sched-spec-prob-cutoff' 7225 The minimal probability of speculation success (in percents), 7226 so that speculative insn will be scheduled. The default 7227 value is 40. 7228 7229 `sched-mem-true-dep-cost' 7230 Minimal distance (in CPU cycles) between store and load 7231 targeting same memory locations. The default value is 1. 7232 7233 `selsched-max-lookahead' 7234 The maximum size of the lookahead window of selective 7235 scheduling. It is a depth of search for available 7236 instructions. The default value is 50. 7237 7238 `selsched-max-sched-times' 7239 The maximum number of times that an instruction will be 7240 scheduled during selective scheduling. This is the limit on 7241 the number of iterations through which the instruction may be 7242 pipelined. The default value is 2. 7243 7244 `selsched-max-insns-to-rename' 7245 The maximum number of best instructions in the ready list 7246 that are considered for renaming in the selective scheduler. 7247 The default value is 2. 7248 7249 `max-last-value-rtl' 7250 The maximum size measured as number of RTLs that can be 7251 recorded in an expression in combiner for a pseudo register 7252 as last known value of that register. The default is 10000. 7253 7254 `integer-share-limit' 7255 Small integer constants can use a shared data structure, 7256 reducing the compiler's memory usage and increasing its 7257 speed. This sets the maximum value of a shared integer 7258 constant. The default value is 256. 7259 7260 `min-virtual-mappings' 7261 Specifies the minimum number of virtual mappings in the 7262 incremental SSA updater that should be registered to trigger 7263 the virtual mappings heuristic defined by 7264 virtual-mappings-ratio. The default value is 100. 7265 7266 `virtual-mappings-ratio' 7267 If the number of virtual mappings is virtual-mappings-ratio 7268 bigger than the number of virtual symbols to be updated, then 7269 the incremental SSA updater switches to a full update for 7270 those symbols. The default ratio is 3. 7271 7272 `ssp-buffer-size' 7273 The minimum size of buffers (i.e. arrays) that will receive 7274 stack smashing protection when `-fstack-protection' is used. 7275 7276 `max-jump-thread-duplication-stmts' 7277 Maximum number of statements allowed in a block that needs to 7278 be duplicated when threading jumps. 7279 7280 `max-fields-for-field-sensitive' 7281 Maximum number of fields in a structure we will treat in a 7282 field sensitive manner during pointer analysis. The default 7283 is zero for -O0, and -O1 and 100 for -Os, -O2, and -O3. 7284 7285 `prefetch-latency' 7286 Estimate on average number of instructions that are executed 7287 before prefetch finishes. The distance we prefetch ahead is 7288 proportional to this constant. Increasing this number may 7289 also lead to less streams being prefetched (see 7290 `simultaneous-prefetches'). 7291 7292 `simultaneous-prefetches' 7293 Maximum number of prefetches that can run at the same time. 7294 7295 `l1-cache-line-size' 7296 The size of cache line in L1 cache, in bytes. 7297 7298 `l1-cache-size' 7299 The size of L1 cache, in kilobytes. 7300 7301 `l2-cache-size' 7302 The size of L2 cache, in kilobytes. 7303 7304 `use-canonical-types' 7305 Whether the compiler should use the "canonical" type system. 7306 By default, this should always be 1, which uses a more 7307 efficient internal mechanism for comparing types in C++ and 7308 Objective-C++. However, if bugs in the canonical type system 7309 are causing compilation failures, set this value to 0 to 7310 disable canonical types. 7311 7312 `switch-conversion-max-branch-ratio' 7313 Switch initialization conversion will refuse to create arrays 7314 that are bigger than `switch-conversion-max-branch-ratio' 7315 times the number of branches in the switch. 7316 7317 `max-partial-antic-length' 7318 Maximum length of the partial antic set computed during the 7319 tree partial redundancy elimination optimization 7320 (`-ftree-pre') when optimizing at `-O3' and above. For some 7321 sorts of source code the enhanced partial redundancy 7322 elimination optimization can run away, consuming all of the 7323 memory available on the host machine. This parameter sets a 7324 limit on the length of the sets that are computed, which 7325 prevents the runaway behavior. Setting a value of 0 for this 7326 parameter will allow an unlimited set length. 7327 7328 `sccvn-max-scc-size' 7329 Maximum size of a strongly connected component (SCC) during 7330 SCCVN processing. If this limit is hit, SCCVN processing for 7331 the whole function will not be done and optimizations 7332 depending on it will be disabled. The default maximum SCC 7333 size is 10000. 7334 7335 `ira-max-loops-num' 7336 IRA uses a regional register allocation by default. If a 7337 function contains loops more than number given by the 7338 parameter, only at most given number of the most frequently 7339 executed loops will form regions for the regional register 7340 allocation. The default value of the parameter is 100. 7341 7342 `ira-max-conflict-table-size' 7343 Although IRA uses a sophisticated algorithm of compression 7344 conflict table, the table can be still big for huge 7345 functions. If the conflict table for a function could be 7346 more than size in MB given by the parameter, the conflict 7347 table is not built and faster, simpler, and lower quality 7348 register allocation algorithm will be used. The algorithm do 7349 not use pseudo-register conflicts. The default value of the 7350 parameter is 2000. 7351 7352 `loop-invariant-max-bbs-in-loop' 7353 Loop invariant motion can be very expensive, both in compile 7354 time and in amount of needed compile time memory, with very 7355 large loops. Loops with more basic blocks than this 7356 parameter won't have loop invariant motion optimization 7357 performed on them. The default value of the parameter is 7358 1000 for -O1 and 10000 for -O2 and above. 7359 7360 `ctrl-regpre' 7361 This is a switch to turn on live range shrinking optimization. 7362 7363 `ctrl-regpre-mode' 7364 This is used as a control knob to enable different 7365 transformations in the live range shrinking phase. Values of 7366 1, 2, and 4 are used to enable upward motion, downward 7367 motion, and tree reshaping transformations respectively. The 7368 values can be bitwise ORed. 7369 7370 `reg-pressure-min-bb-factor' 7371 A performance tuning knob to control register pressure. When 7372 the size (in the number of gimple statements) of a basic 7373 block in a loop is larger than the threshold specified by 7374 this parameter multiplied by the number of available 7375 registers, live range shrinking optimization is enabled. 7376 7377 `reg-pressure-min-tree' 7378 The minimal size (number of leaves) of a tree to be reshaped 7379 in the Live Range Shrinking optimization. 7380 7381 `min-mcf-cancel-iters' 7382 The minimum number of iterations of negative cycle 7383 cancellation during MCF profile correction before early 7384 termination. This parameter is only useful when using 7385 `-fprofile-correction'. 7386 7387 `samplefdo-mcf-high-confidence-cost-mult' 7388 Multiply the cost used by MCF during profile correction by 7389 this factor for all input profile data that is determined to 7390 be high confidence. This parameter is only useful when using 7391 `-fsample-profile' and `-fprofile-correction'. 7392 7393 `samplefdo-use-discrim' 7394 When attributing samples to the CFG, use discriminators to 7395 identify which CFG nodes correspond to which samples. This 7396 parameter is only useful when using `-fsample-profile'. 7397 7398 `samplefdo-large-block-thresh' 7399 Consider a basic block large if it has more than this many 7400 gimple statements in it. If a block is large and has no 7401 profile samples attributed to it, it will be assigned a 7402 weight of 0 with high confidence. This parameter is only 7403 useful when using `-fsample-profile'. 7404 7405 7406 7407 File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 7408 7409 3.11 Options Controlling the Preprocessor 7410 ========================================= 7411 7412 These options control the C preprocessor, which is run on each C source 7413 file before actual compilation. 7414 7415 If you use the `-E' option, nothing is done except preprocessing. 7416 Some of these options make sense only together with `-E' because they 7417 cause the preprocessor output to be unsuitable for actual compilation. 7418 7419 You can use `-Wp,OPTION' to bypass the compiler driver and pass 7420 OPTION directly through to the preprocessor. If OPTION contains 7421 commas, it is split into multiple options at the commas. However, 7422 many options are modified, translated or interpreted by the 7423 compiler driver before being passed to the preprocessor, and `-Wp' 7424 forcibly bypasses this phase. The preprocessor's direct interface 7425 is undocumented and subject to change, so whenever possible you 7426 should avoid using `-Wp' and let the driver handle the options 7427 instead. 7428 7429 `-Xpreprocessor OPTION' 7430 Pass OPTION as an option to the preprocessor. You can use this to 7431 supply system-specific preprocessor options which GCC does not 7432 know how to recognize. 7433 7434 If you want to pass an option that takes an argument, you must use 7435 `-Xpreprocessor' twice, once for the option and once for the 7436 argument. 7437 7438 `-D NAME' 7439 Predefine NAME as a macro, with definition `1'. 7440 7441 `-D NAME=DEFINITION' 7442 The contents of DEFINITION are tokenized and processed as if they 7443 appeared during translation phase three in a `#define' directive. 7444 In particular, the definition will be truncated by embedded 7445 newline characters. 7446 7447 If you are invoking the preprocessor from a shell or shell-like 7448 program you may need to use the shell's quoting syntax to protect 7449 characters such as spaces that have a meaning in the shell syntax. 7450 7451 If you wish to define a function-like macro on the command line, 7452 write its argument list with surrounding parentheses before the 7453 equals sign (if any). Parentheses are meaningful to most shells, 7454 so you will need to quote the option. With `sh' and `csh', 7455 `-D'NAME(ARGS...)=DEFINITION'' works. 7456 7457 `-D' and `-U' options are processed in the order they are given on 7458 the command line. All `-imacros FILE' and `-include FILE' options 7459 are processed after all `-D' and `-U' options. 7460 7461 `-U NAME' 7462 Cancel any previous definition of NAME, either built in or 7463 provided with a `-D' option. 7464 7465 `-undef' 7466 Do not predefine any system-specific or GCC-specific macros. The 7467 standard predefined macros remain defined. 7468 7469 `-I DIR' 7470 Add the directory DIR to the list of directories to be searched 7471 for header files. Directories named by `-I' are searched before 7472 the standard system include directories. If the directory DIR is 7473 a standard system include directory, the option is ignored to 7474 ensure that the default search order for system directories and 7475 the special treatment of system headers are not defeated . If DIR 7476 begins with `=', then the `=' will be replaced by the sysroot 7477 prefix; see `--sysroot' and `-isysroot'. 7478 7479 `-o FILE' 7480 Write output to FILE. This is the same as specifying FILE as the 7481 second non-option argument to `cpp'. `gcc' has a different 7482 interpretation of a second non-option argument, so you must use 7483 `-o' to specify the output file. 7484 7485 `-Wall' 7486 Turns on all optional warnings which are desirable for normal code. 7487 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 7488 warning about integer promotion causing a change of sign in `#if' 7489 expressions. Note that many of the preprocessor's warnings are on 7490 by default and have no options to control them. 7491 7492 `-Wcomment' 7493 `-Wcomments' 7494 Warn whenever a comment-start sequence `/*' appears in a `/*' 7495 comment, or whenever a backslash-newline appears in a `//' comment. 7496 (Both forms have the same effect.) 7497 7498 `-Wtrigraphs' 7499 Most trigraphs in comments cannot affect the meaning of the 7500 program. However, a trigraph that would form an escaped newline 7501 (`??/' at the end of a line) can, by changing where the comment 7502 begins or ends. Therefore, only trigraphs that would form escaped 7503 newlines produce warnings inside a comment. 7504 7505 This option is implied by `-Wall'. If `-Wall' is not given, this 7506 option is still enabled unless trigraphs are enabled. To get 7507 trigraph conversion without warnings, but get the other `-Wall' 7508 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 7509 7510 `-Wtraditional' 7511 Warn about certain constructs that behave differently in 7512 traditional and ISO C. Also warn about ISO C constructs that have 7513 no traditional C equivalent, and problematic constructs which 7514 should be avoided. 7515 7516 `-Wundef' 7517 Warn whenever an identifier which is not a macro is encountered in 7518 an `#if' directive, outside of `defined'. Such identifiers are 7519 replaced with zero. 7520 7521 `-Wunused-macros' 7522 Warn about macros defined in the main file that are unused. A 7523 macro is "used" if it is expanded or tested for existence at least 7524 once. The preprocessor will also warn if the macro has not been 7525 used at the time it is redefined or undefined. 7526 7527 Built-in macros, macros defined on the command line, and macros 7528 defined in include files are not warned about. 7529 7530 _Note:_ If a macro is actually used, but only used in skipped 7531 conditional blocks, then CPP will report it as unused. To avoid 7532 the warning in such a case, you might improve the scope of the 7533 macro's definition by, for example, moving it into the first 7534 skipped block. Alternatively, you could provide a dummy use with 7535 something like: 7536 7537 #if defined the_macro_causing_the_warning 7538 #endif 7539 7540 `-Wendif-labels' 7541 Warn whenever an `#else' or an `#endif' are followed by text. 7542 This usually happens in code of the form 7543 7544 #if FOO 7545 ... 7546 #else FOO 7547 ... 7548 #endif FOO 7549 7550 The second and third `FOO' should be in comments, but often are not 7551 in older programs. This warning is on by default. 7552 7553 `-Werror' 7554 Make all warnings into hard errors. Source code which triggers 7555 warnings will be rejected. 7556 7557 `-Wsystem-headers' 7558 Issue warnings for code in system headers. These are normally 7559 unhelpful in finding bugs in your own code, therefore suppressed. 7560 If you are responsible for the system library, you may want to see 7561 them. 7562 7563 `-w' 7564 Suppress all warnings, including those which GNU CPP issues by 7565 default. 7566 7567 `-pedantic' 7568 Issue all the mandatory diagnostics listed in the C standard. 7569 Some of them are left out by default, since they trigger 7570 frequently on harmless code. 7571 7572 `-pedantic-errors' 7573 Issue all the mandatory diagnostics, and make all mandatory 7574 diagnostics into errors. This includes mandatory diagnostics that 7575 GCC issues without `-pedantic' but treats as warnings. 7576 7577 `-M' 7578 Instead of outputting the result of preprocessing, output a rule 7579 suitable for `make' describing the dependencies of the main source 7580 file. The preprocessor outputs one `make' rule containing the 7581 object file name for that source file, a colon, and the names of 7582 all the included files, including those coming from `-include' or 7583 `-imacros' command line options. 7584 7585 Unless specified explicitly (with `-MT' or `-MQ'), the object file 7586 name consists of the name of the source file with any suffix 7587 replaced with object file suffix and with any leading directory 7588 parts removed. If there are many included files then the rule is 7589 split into several lines using `\'-newline. The rule has no 7590 commands. 7591 7592 This option does not suppress the preprocessor's debug output, 7593 such as `-dM'. To avoid mixing such debug output with the 7594 dependency rules you should explicitly specify the dependency 7595 output file with `-MF', or use an environment variable like 7596 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 7597 output will still be sent to the regular output stream as normal. 7598 7599 Passing `-M' to the driver implies `-E', and suppresses warnings 7600 with an implicit `-w'. 7601 7602 `-MM' 7603 Like `-M' but do not mention header files that are found in system 7604 header directories, nor header files that are included, directly 7605 or indirectly, from such a header. 7606 7607 This implies that the choice of angle brackets or double quotes in 7608 an `#include' directive does not in itself determine whether that 7609 header will appear in `-MM' dependency output. This is a slight 7610 change in semantics from GCC versions 3.0 and earlier. 7611 7612 `-MF FILE' 7613 When used with `-M' or `-MM', specifies a file to write the 7614 dependencies to. If no `-MF' switch is given the preprocessor 7615 sends the rules to the same place it would have sent preprocessed 7616 output. 7617 7618 When used with the driver options `-MD' or `-MMD', `-MF' overrides 7619 the default dependency output file. 7620 7621 `-MG' 7622 In conjunction with an option such as `-M' requesting dependency 7623 generation, `-MG' assumes missing header files are generated files 7624 and adds them to the dependency list without raising an error. 7625 The dependency filename is taken directly from the `#include' 7626 directive without prepending any path. `-MG' also suppresses 7627 preprocessed output, as a missing header file renders this useless. 7628 7629 This feature is used in automatic updating of makefiles. 7630 7631 `-MP' 7632 This option instructs CPP to add a phony target for each dependency 7633 other than the main file, causing each to depend on nothing. These 7634 dummy rules work around errors `make' gives if you remove header 7635 files without updating the `Makefile' to match. 7636 7637 This is typical output: 7638 7639 test.o: test.c test.h 7640 7641 test.h: 7642 7643 `-MT TARGET' 7644 Change the target of the rule emitted by dependency generation. By 7645 default CPP takes the name of the main input file, deletes any 7646 directory components and any file suffix such as `.c', and appends 7647 the platform's usual object suffix. The result is the target. 7648 7649 An `-MT' option will set the target to be exactly the string you 7650 specify. If you want multiple targets, you can specify them as a 7651 single argument to `-MT', or use multiple `-MT' options. 7652 7653 For example, `-MT '$(objpfx)foo.o'' might give 7654 7655 $(objpfx)foo.o: foo.c 7656 7657 `-MQ TARGET' 7658 Same as `-MT', but it quotes any characters which are special to 7659 Make. `-MQ '$(objpfx)foo.o'' gives 7660 7661 $$(objpfx)foo.o: foo.c 7662 7663 The default target is automatically quoted, as if it were given 7664 with `-MQ'. 7665 7666 `-MD' 7667 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 7668 implied. The driver determines FILE based on whether an `-o' 7669 option is given. If it is, the driver uses its argument but with 7670 a suffix of `.d', otherwise it takes the name of the input file, 7671 removes any directory components and suffix, and applies a `.d' 7672 suffix. 7673 7674 If `-MD' is used in conjunction with `-E', any `-o' switch is 7675 understood to specify the dependency output file (*note -MF: 7676 dashMF.), but if used without `-E', each `-o' is understood to 7677 specify a target object file. 7678 7679 Since `-E' is not implied, `-MD' can be used to generate a 7680 dependency output file as a side-effect of the compilation process. 7681 7682 `-MMD' 7683 Like `-MD' except mention only user header files, not system 7684 header files. 7685 7686 `-fpch-deps' 7687 When using precompiled headers (*note Precompiled Headers::), this 7688 flag will cause the dependency-output flags to also list the files 7689 from the precompiled header's dependencies. If not specified only 7690 the precompiled header would be listed and not the files that were 7691 used to create it because those files are not consulted when a 7692 precompiled header is used. 7693 7694 `-fpch-preprocess' 7695 This option allows use of a precompiled header (*note Precompiled 7696 Headers::) together with `-E'. It inserts a special `#pragma', 7697 `#pragma GCC pch_preprocess "<filename>"' in the output to mark 7698 the place where the precompiled header was found, and its 7699 filename. When `-fpreprocessed' is in use, GCC recognizes this 7700 `#pragma' and loads the PCH. 7701 7702 This option is off by default, because the resulting preprocessed 7703 output is only really suitable as input to GCC. It is switched on 7704 by `-save-temps'. 7705 7706 You should not write this `#pragma' in your own code, but it is 7707 safe to edit the filename if the PCH file is available in a 7708 different location. The filename may be absolute or it may be 7709 relative to GCC's current directory. 7710 7711 `-x c' 7712 `-x c++' 7713 `-x objective-c' 7714 `-x assembler-with-cpp' 7715 Specify the source language: C, C++, Objective-C, or assembly. 7716 This has nothing to do with standards conformance or extensions; 7717 it merely selects which base syntax to expect. If you give none 7718 of these options, cpp will deduce the language from the extension 7719 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 7720 extensions for C++ and assembly are also recognized. If cpp does 7721 not recognize the extension, it will treat the file as C; this is 7722 the most generic mode. 7723 7724 _Note:_ Previous versions of cpp accepted a `-lang' option which 7725 selected both the language and the standards conformance level. 7726 This option has been removed, because it conflicts with the `-l' 7727 option. 7728 7729 `-std=STANDARD' 7730 `-ansi' 7731 Specify the standard to which the code should conform. Currently 7732 CPP knows about C and C++ standards; others may be added in the 7733 future. 7734 7735 STANDARD may be one of: 7736 `iso9899:1990' 7737 `c89' 7738 The ISO C standard from 1990. `c89' is the customary 7739 shorthand for this version of the standard. 7740 7741 The `-ansi' option is equivalent to `-std=c89'. 7742 7743 `iso9899:199409' 7744 The 1990 C standard, as amended in 1994. 7745 7746 `iso9899:1999' 7747 `c99' 7748 `iso9899:199x' 7749 `c9x' 7750 The revised ISO C standard, published in December 1999. 7751 Before publication, this was known as C9X. 7752 7753 `gnu89' 7754 The 1990 C standard plus GNU extensions. This is the default. 7755 7756 `gnu99' 7757 `gnu9x' 7758 The 1999 C standard plus GNU extensions. 7759 7760 `c++98' 7761 The 1998 ISO C++ standard plus amendments. 7762 7763 `gnu++98' 7764 The same as `-std=c++98' plus GNU extensions. This is the 7765 default for C++ code. 7766 7767 `-I-' 7768 Split the include path. Any directories specified with `-I' 7769 options before `-I-' are searched only for headers requested with 7770 `#include "FILE"'; they are not searched for `#include <FILE>'. 7771 If additional directories are specified with `-I' options after 7772 the `-I-', those directories are searched for all `#include' 7773 directives. 7774 7775 In addition, `-I-' inhibits the use of the directory of the current 7776 file directory as the first search directory for `#include "FILE"'. 7777 This option has been deprecated. 7778 7779 `-nostdinc' 7780 Do not search the standard system directories for header files. 7781 Only the directories you have specified with `-I' options (and the 7782 directory of the current file, if appropriate) are searched. 7783 7784 `-nostdinc++' 7785 Do not search for header files in the C++-specific standard 7786 directories, but do still search the other standard directories. 7787 (This option is used when building the C++ library.) 7788 7789 `-include FILE' 7790 Process FILE as if `#include "file"' appeared as the first line of 7791 the primary source file. However, the first directory searched 7792 for FILE is the preprocessor's working directory _instead of_ the 7793 directory containing the main source file. If not found there, it 7794 is searched for in the remainder of the `#include "..."' search 7795 chain as normal. 7796 7797 If multiple `-include' options are given, the files are included 7798 in the order they appear on the command line. 7799 7800 `-imacros FILE' 7801 Exactly like `-include', except that any output produced by 7802 scanning FILE is thrown away. Macros it defines remain defined. 7803 This allows you to acquire all the macros from a header without 7804 also processing its declarations. 7805 7806 All files specified by `-imacros' are processed before all files 7807 specified by `-include'. 7808 7809 `-idirafter DIR' 7810 Search DIR for header files, but do it _after_ all directories 7811 specified with `-I' and the standard system directories have been 7812 exhausted. DIR is treated as a system include directory. If DIR 7813 begins with `=', then the `=' will be replaced by the sysroot 7814 prefix; see `--sysroot' and `-isysroot'. 7815 7816 `-iprefix PREFIX' 7817 Specify PREFIX as the prefix for subsequent `-iwithprefix' 7818 options. If the prefix represents a directory, you should include 7819 the final `/'. 7820 7821 `-iwithprefix DIR' 7822 `-iwithprefixbefore DIR' 7823 Append DIR to the prefix specified previously with `-iprefix', and 7824 add the resulting directory to the include search path. 7825 `-iwithprefixbefore' puts it in the same place `-I' would; 7826 `-iwithprefix' puts it where `-idirafter' would. 7827 7828 `-isysroot DIR' 7829 This option is like the `--sysroot' option, but applies only to 7830 header files. See the `--sysroot' option for more information. 7831 7832 `-imultilib DIR' 7833 Use DIR as a subdirectory of the directory containing 7834 target-specific C++ headers. 7835 7836 `-isystem DIR' 7837 Search DIR for header files, after all directories specified by 7838 `-I' but before the standard system directories. Mark it as a 7839 system directory, so that it gets the same special treatment as is 7840 applied to the standard system directories. If DIR begins with 7841 `=', then the `=' will be replaced by the sysroot prefix; see 7842 `--sysroot' and `-isysroot'. 7843 7844 `-iquote DIR' 7845 Search DIR only for header files requested with `#include "FILE"'; 7846 they are not searched for `#include <FILE>', before all 7847 directories specified by `-I' and before the standard system 7848 directories. If DIR begins with `=', then the `=' will be replaced 7849 by the sysroot prefix; see `--sysroot' and `-isysroot'. 7850 7851 `-fdirectives-only' 7852 When preprocessing, handle directives, but do not expand macros. 7853 7854 The option's behavior depends on the `-E' and `-fpreprocessed' 7855 options. 7856 7857 With `-E', preprocessing is limited to the handling of directives 7858 such as `#define', `#ifdef', and `#error'. Other preprocessor 7859 operations, such as macro expansion and trigraph conversion are 7860 not performed. In addition, the `-dD' option is implicitly 7861 enabled. 7862 7863 With `-fpreprocessed', predefinition of command line and most 7864 builtin macros is disabled. Macros such as `__LINE__', which are 7865 contextually dependent, are handled normally. This enables 7866 compilation of files previously preprocessed with `-E 7867 -fdirectives-only'. 7868 7869 With both `-E' and `-fpreprocessed', the rules for 7870 `-fpreprocessed' take precedence. This enables full preprocessing 7871 of files previously preprocessed with `-E -fdirectives-only'. 7872 7873 `-fdollars-in-identifiers' 7874 Accept `$' in identifiers. 7875 7876 `-fextended-identifiers' 7877 Accept universal character names in identifiers. This option is 7878 experimental; in a future version of GCC, it will be enabled by 7879 default for C99 and C++. 7880 7881 `-fpreprocessed' 7882 Indicate to the preprocessor that the input file has already been 7883 preprocessed. This suppresses things like macro expansion, 7884 trigraph conversion, escaped newline splicing, and processing of 7885 most directives. The preprocessor still recognizes and removes 7886 comments, so that you can pass a file preprocessed with `-C' to 7887 the compiler without problems. In this mode the integrated 7888 preprocessor is little more than a tokenizer for the front ends. 7889 7890 `-fpreprocessed' is implicit if the input file has one of the 7891 extensions `.i', `.ii' or `.mi'. These are the extensions that 7892 GCC uses for preprocessed files created by `-save-temps'. 7893 7894 `-ftabstop=WIDTH' 7895 Set the distance between tab stops. This helps the preprocessor 7896 report correct column numbers in warnings or errors, even if tabs 7897 appear on the line. If the value is less than 1 or greater than 7898 100, the option is ignored. The default is 8. 7899 7900 `-fexec-charset=CHARSET' 7901 Set the execution character set, used for string and character 7902 constants. The default is UTF-8. CHARSET can be any encoding 7903 supported by the system's `iconv' library routine. 7904 7905 `-fwide-exec-charset=CHARSET' 7906 Set the wide execution character set, used for wide string and 7907 character constants. The default is UTF-32 or UTF-16, whichever 7908 corresponds to the width of `wchar_t'. As with `-fexec-charset', 7909 CHARSET can be any encoding supported by the system's `iconv' 7910 library routine; however, you will have problems with encodings 7911 that do not fit exactly in `wchar_t'. 7912 7913 `-finput-charset=CHARSET' 7914 Set the input character set, used for translation from the 7915 character set of the input file to the source character set used 7916 by GCC. If the locale does not specify, or GCC cannot get this 7917 information from the locale, the default is UTF-8. This can be 7918 overridden by either the locale or this command line option. 7919 Currently the command line option takes precedence if there's a 7920 conflict. CHARSET can be any encoding supported by the system's 7921 `iconv' library routine. 7922 7923 `-fworking-directory' 7924 Enable generation of linemarkers in the preprocessor output that 7925 will let the compiler know the current working directory at the 7926 time of preprocessing. When this option is enabled, the 7927 preprocessor will emit, after the initial linemarker, a second 7928 linemarker with the current working directory followed by two 7929 slashes. GCC will use this directory, when it's present in the 7930 preprocessed input, as the directory emitted as the current 7931 working directory in some debugging information formats. This 7932 option is implicitly enabled if debugging information is enabled, 7933 but this can be inhibited with the negated form 7934 `-fno-working-directory'. If the `-P' flag is present in the 7935 command line, this option has no effect, since no `#line' 7936 directives are emitted whatsoever. 7937 7938 `-fno-show-column' 7939 Do not print column numbers in diagnostics. This may be necessary 7940 if diagnostics are being scanned by a program that does not 7941 understand the column numbers, such as `dejagnu'. 7942 7943 `-A PREDICATE=ANSWER' 7944 Make an assertion with the predicate PREDICATE and answer ANSWER. 7945 This form is preferred to the older form `-A PREDICATE(ANSWER)', 7946 which is still supported, because it does not use shell special 7947 characters. 7948 7949 `-A -PREDICATE=ANSWER' 7950 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 7951 7952 `-dCHARS' 7953 CHARS is a sequence of one or more of the following characters, 7954 and must not be preceded by a space. Other characters are 7955 interpreted by the compiler proper, or reserved for future 7956 versions of GCC, and so are silently ignored. If you specify 7957 characters whose behavior conflicts, the result is undefined. 7958 7959 `M' 7960 Instead of the normal output, generate a list of `#define' 7961 directives for all the macros defined during the execution of 7962 the preprocessor, including predefined macros. This gives 7963 you a way of finding out what is predefined in your version 7964 of the preprocessor. Assuming you have no file `foo.h', the 7965 command 7966 7967 touch foo.h; cpp -dM foo.h 7968 7969 will show all the predefined macros. 7970 7971 If you use `-dM' without the `-E' option, `-dM' is 7972 interpreted as a synonym for `-fdump-rtl-mach'. *Note 7973 Debugging Options: (gcc)Debugging Options. 7974 7975 `D' 7976 Like `M' except in two respects: it does _not_ include the 7977 predefined macros, and it outputs _both_ the `#define' 7978 directives and the result of preprocessing. Both kinds of 7979 output go to the standard output file. 7980 7981 `N' 7982 Like `D', but emit only the macro names, not their expansions. 7983 7984 `I' 7985 Output `#include' directives in addition to the result of 7986 preprocessing. 7987 7988 `U' 7989 Like `D' except that only macros that are expanded, or whose 7990 definedness is tested in preprocessor directives, are output; 7991 the output is delayed until the use or test of the macro; and 7992 `#undef' directives are also output for macros tested but 7993 undefined at the time. 7994 7995 `-P' 7996 Inhibit generation of linemarkers in the output from the 7997 preprocessor. This might be useful when running the preprocessor 7998 on something that is not C code, and will be sent to a program 7999 which might be confused by the linemarkers. 8000 8001 `-C' 8002 Do not discard comments. All comments are passed through to the 8003 output file, except for comments in processed directives, which 8004 are deleted along with the directive. 8005 8006 You should be prepared for side effects when using `-C'; it causes 8007 the preprocessor to treat comments as tokens in their own right. 8008 For example, comments appearing at the start of what would be a 8009 directive line have the effect of turning that line into an 8010 ordinary source line, since the first token on the line is no 8011 longer a `#'. 8012 8013 `-CC' 8014 Do not discard comments, including during macro expansion. This is 8015 like `-C', except that comments contained within macros are also 8016 passed through to the output file where the macro is expanded. 8017 8018 In addition to the side-effects of the `-C' option, the `-CC' 8019 option causes all C++-style comments inside a macro to be 8020 converted to C-style comments. This is to prevent later use of 8021 that macro from inadvertently commenting out the remainder of the 8022 source line. 8023 8024 The `-CC' option is generally used to support lint comments. 8025 8026 `-traditional-cpp' 8027 Try to imitate the behavior of old-fashioned C preprocessors, as 8028 opposed to ISO C preprocessors. 8029 8030 `-trigraphs' 8031 Process trigraph sequences. These are three-character sequences, 8032 all starting with `??', that are defined by ISO C to stand for 8033 single characters. For example, `??/' stands for `\', so `'??/n'' 8034 is a character constant for a newline. By default, GCC ignores 8035 trigraphs, but in standard-conforming modes it converts them. See 8036 the `-std' and `-ansi' options. 8037 8038 The nine trigraphs and their replacements are 8039 8040 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 8041 Replacement: [ ] { } # \ ^ | ~ 8042 8043 `-remap' 8044 Enable special code to work around file systems which only permit 8045 very short file names, such as MS-DOS. 8046 8047 `--help' 8048 `--target-help' 8049 Print text describing all the command line options instead of 8050 preprocessing anything. 8051 8052 `-v' 8053 Verbose mode. Print out GNU CPP's version number at the beginning 8054 of execution, and report the final form of the include path. 8055 8056 `-H' 8057 Print the name of each header file used, in addition to other 8058 normal activities. Each name is indented to show how deep in the 8059 `#include' stack it is. Precompiled header files are also 8060 printed, even if they are found to be invalid; an invalid 8061 precompiled header file is printed with `...x' and a valid one 8062 with `...!' . 8063 8064 `-version' 8065 `--version' 8066 Print out GNU CPP's version number. With one dash, proceed to 8067 preprocess as normal. With two dashes, exit immediately. 8068 8069 8070 File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 8071 8072 3.12 Passing Options to the Assembler 8073 ===================================== 8074 8075 You can pass options to the assembler. 8076 8077 `-Wa,OPTION' 8078 Pass OPTION as an option to the assembler. If OPTION contains 8079 commas, it is split into multiple options at the commas. 8080 8081 `-Xassembler OPTION' 8082 Pass OPTION as an option to the assembler. You can use this to 8083 supply system-specific assembler options which GCC does not know 8084 how to recognize. 8085 8086 If you want to pass an option that takes an argument, you must use 8087 `-Xassembler' twice, once for the option and once for the argument. 8088 8089 8090 8091 File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 8092 8093 3.13 Options for Linking 8094 ======================== 8095 8096 These options come into play when the compiler links object files into 8097 an executable output file. They are meaningless if the compiler is not 8098 doing a link step. 8099 8100 `OBJECT-FILE-NAME' 8101 A file name that does not end in a special recognized suffix is 8102 considered to name an object file or library. (Object files are 8103 distinguished from libraries by the linker according to the file 8104 contents.) If linking is done, these object files are used as 8105 input to the linker. 8106 8107 `-c' 8108 `-S' 8109 `-E' 8110 If any of these options is used, then the linker is not run, and 8111 object file names should not be used as arguments. *Note Overall 8112 Options::. 8113 8114 `-lLIBRARY' 8115 `-l LIBRARY' 8116 Search the library named LIBRARY when linking. (The second 8117 alternative with the library as a separate argument is only for 8118 POSIX compliance and is not recommended.) 8119 8120 It makes a difference where in the command you write this option; 8121 the linker searches and processes libraries and object files in 8122 the order they are specified. Thus, `foo.o -lz bar.o' searches 8123 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 8124 refers to functions in `z', those functions may not be loaded. 8125 8126 The linker searches a standard list of directories for the library, 8127 which is actually a file named `libLIBRARY.a'. The linker then 8128 uses this file as if it had been specified precisely by name. 8129 8130 The directories searched include several standard system 8131 directories plus any that you specify with `-L'. 8132 8133 Normally the files found this way are library files--archive files 8134 whose members are object files. The linker handles an archive 8135 file by scanning through it for members which define symbols that 8136 have so far been referenced but not defined. But if the file that 8137 is found is an ordinary object file, it is linked in the usual 8138 fashion. The only difference between using an `-l' option and 8139 specifying a file name is that `-l' surrounds LIBRARY with `lib' 8140 and `.a' and searches several directories. 8141 8142 `-lobjc' 8143 You need this special case of the `-l' option in order to link an 8144 Objective-C or Objective-C++ program. 8145 8146 `-nostartfiles' 8147 Do not use the standard system startup files when linking. The 8148 standard system libraries are used normally, unless `-nostdlib' or 8149 `-nodefaultlibs' is used. 8150 8151 `-nodefaultlibs' 8152 Do not use the standard system libraries when linking. Only the 8153 libraries you specify will be passed to the linker. The standard 8154 startup files are used normally, unless `-nostartfiles' is used. 8155 The compiler may generate calls to `memcmp', `memset', `memcpy' 8156 and `memmove'. These entries are usually resolved by entries in 8157 libc. These entry points should be supplied through some other 8158 mechanism when this option is specified. 8159 8160 `-nostdlib' 8161 Do not use the standard system startup files or libraries when 8162 linking. No startup files and only the libraries you specify will 8163 be passed to the linker. The compiler may generate calls to 8164 `memcmp', `memset', `memcpy' and `memmove'. These entries are 8165 usually resolved by entries in libc. These entry points should be 8166 supplied through some other mechanism when this option is 8167 specified. 8168 8169 One of the standard libraries bypassed by `-nostdlib' and 8170 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 8171 that GCC uses to overcome shortcomings of particular machines, or 8172 special needs for some languages. (*Note Interfacing to GCC 8173 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 8174 most cases, you need `libgcc.a' even when you want to avoid other 8175 standard libraries. In other words, when you specify `-nostdlib' 8176 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 8177 This ensures that you have no unresolved references to internal GCC 8178 library subroutines. (For example, `__main', used to ensure C++ 8179 constructors will be called; *note `collect2': (gccint)Collect2.) 8180 8181 `-pie' 8182 Produce a position independent executable on targets which support 8183 it. For predictable results, you must also specify the same set 8184 of options that were used to generate code (`-fpie', `-fPIE', or 8185 model suboptions) when you specify this option. 8186 8187 `-rdynamic' 8188 Pass the flag `-export-dynamic' to the ELF linker, on targets that 8189 support it. This instructs the linker to add all symbols, not only 8190 used ones, to the dynamic symbol table. This option is needed for 8191 some uses of `dlopen' or to allow obtaining backtraces from within 8192 a program. 8193 8194 `-s' 8195 Remove all symbol table and relocation information from the 8196 executable. 8197 8198 `-static' 8199 On systems that support dynamic linking, this prevents linking 8200 with the shared libraries. On other systems, this option has no 8201 effect. 8202 8203 `-shared' 8204 Produce a shared object which can then be linked with other 8205 objects to form an executable. Not all systems support this 8206 option. For predictable results, you must also specify the same 8207 set of options that were used to generate code (`-fpic', `-fPIC', 8208 or model suboptions) when you specify this option.(1) 8209 8210 `-shared-libgcc' 8211 `-static-libgcc' 8212 On systems that provide `libgcc' as a shared library, these options 8213 force the use of either the shared or static version respectively. 8214 If no shared version of `libgcc' was built when the compiler was 8215 configured, these options have no effect. 8216 8217 There are several situations in which an application should use the 8218 shared `libgcc' instead of the static version. The most common of 8219 these is when the application wishes to throw and catch exceptions 8220 across different shared libraries. In that case, each of the 8221 libraries as well as the application itself should use the shared 8222 `libgcc'. 8223 8224 Therefore, the G++ and GCJ drivers automatically add 8225 `-shared-libgcc' whenever you build a shared library or a main 8226 executable, because C++ and Java programs typically use 8227 exceptions, so this is the right thing to do. 8228 8229 If, instead, you use the GCC driver to create shared libraries, 8230 you may find that they will not always be linked with the shared 8231 `libgcc'. If GCC finds, at its configuration time, that you have 8232 a non-GNU linker or a GNU linker that does not support option 8233 `--eh-frame-hdr', it will link the shared version of `libgcc' into 8234 shared libraries by default. Otherwise, it will take advantage of 8235 the linker and optimize away the linking with the shared version 8236 of `libgcc', linking with the static version of libgcc by default. 8237 This allows exceptions to propagate through such shared 8238 libraries, without incurring relocation costs at library load time. 8239 8240 However, if a library or main executable is supposed to throw or 8241 catch exceptions, you must link it using the G++ or GCJ driver, as 8242 appropriate for the languages used in the program, or using the 8243 option `-shared-libgcc', such that it is linked with the shared 8244 `libgcc'. 8245 8246 `-symbolic' 8247 Bind references to global symbols when building a shared object. 8248 Warn about any unresolved references (unless overridden by the 8249 link editor option `-Xlinker -z -Xlinker defs'). Only a few 8250 systems support this option. 8251 8252 `-T SCRIPT' 8253 Use SCRIPT as the linker script. This option is supported by most 8254 systems using the GNU linker. On some targets, such as bare-board 8255 targets without an operating system, the `-T' option may be 8256 required when linking to avoid references to undefined symbols. 8257 8258 `-Xlinker OPTION' 8259 Pass OPTION as an option to the linker. You can use this to 8260 supply system-specific linker options which GCC does not know how 8261 to recognize. 8262 8263 If you want to pass an option that takes a separate argument, you 8264 must use `-Xlinker' twice, once for the option and once for the 8265 argument. For example, to pass `-assert definitions', you must 8266 write `-Xlinker -assert -Xlinker definitions'. It does not work 8267 to write `-Xlinker "-assert definitions"', because this passes the 8268 entire string as a single argument, which is not what the linker 8269 expects. 8270 8271 When using the GNU linker, it is usually more convenient to pass 8272 arguments to linker options using the `OPTION=VALUE' syntax than 8273 as separate arguments. For example, you can specify `-Xlinker 8274 -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'. 8275 Other linkers may not support this syntax for command-line options. 8276 8277 `-Wl,OPTION' 8278 Pass OPTION as an option to the linker. If OPTION contains 8279 commas, it is split into multiple options at the commas. You can 8280 use this syntax to pass an argument to the option. For example, 8281 `-Wl,-Map,output.map' passes `-Map output.map' to the linker. 8282 When using the GNU linker, you can also get the same effect with 8283 `-Wl,-Map=output.map'. 8284 8285 `-u SYMBOL' 8286 Pretend the symbol SYMBOL is undefined, to force linking of 8287 library modules to define it. You can use `-u' multiple times with 8288 different symbols to force loading of additional library modules. 8289 8290 ---------- Footnotes ---------- 8291 8292 (1) On some systems, `gcc -shared' needs to build supplementary stub 8293 code for constructors to work. On multi-libbed systems, `gcc -shared' 8294 must select the correct support libraries to link against. Failing to 8295 supply the correct flags may lead to subtle defects. Supplying them in 8296 cases where they are not necessary is innocuous. 8297 8298 8299 File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 8300 8301 3.14 Options for Directory Search 8302 ================================= 8303 8304 These options specify directories to search for header files, for 8305 libraries and for parts of the compiler: 8306 8307 `-IDIR' 8308 Add the directory DIR to the head of the list of directories to be 8309 searched for header files. This can be used to override a system 8310 header file, substituting your own version, since these 8311 directories are searched before the system header file 8312 directories. However, you should not use this option to add 8313 directories that contain vendor-supplied system header files (use 8314 `-isystem' for that). If you use more than one `-I' option, the 8315 directories are scanned in left-to-right order; the standard 8316 system directories come after. 8317 8318 If a standard system include directory, or a directory specified 8319 with `-isystem', is also specified with `-I', the `-I' option will 8320 be ignored. The directory will still be searched but as a system 8321 directory at its normal position in the system include chain. 8322 This is to ensure that GCC's procedure to fix buggy system headers 8323 and the ordering for the include_next directive are not 8324 inadvertently changed. If you really need to change the search 8325 order for system directories, use the `-nostdinc' and/or 8326 `-isystem' options. 8327 8328 `-iquoteDIR' 8329 Add the directory DIR to the head of the list of directories to be 8330 searched for header files only for the case of `#include "FILE"'; 8331 they are not searched for `#include <FILE>', otherwise just like 8332 `-I'. 8333 8334 `-LDIR' 8335 Add directory DIR to the list of directories to be searched for 8336 `-l'. 8337 8338 `-BPREFIX' 8339 This option specifies where to find the executables, libraries, 8340 include files, and data files of the compiler itself. 8341 8342 The compiler driver program runs one or more of the subprograms 8343 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 8344 program it tries to run, both with and without `MACHINE/VERSION/' 8345 (*note Target Options::). 8346 8347 For each subprogram to be run, the compiler driver first tries the 8348 `-B' prefix, if any. If that name is not found, or if `-B' was 8349 not specified, the driver tries two standard prefixes, which are 8350 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those 8351 results in a file name that is found, the unmodified program name 8352 is searched for using the directories specified in your `PATH' 8353 environment variable. 8354 8355 The compiler will check to see if the path provided by the `-B' 8356 refers to a directory, and if necessary it will add a directory 8357 separator character at the end of the path. 8358 8359 `-B' prefixes that effectively specify directory names also apply 8360 to libraries in the linker, because the compiler translates these 8361 options into `-L' options for the linker. They also apply to 8362 includes files in the preprocessor, because the compiler 8363 translates these options into `-isystem' options for the 8364 preprocessor. In this case, the compiler appends `include' to the 8365 prefix. 8366 8367 The run-time support file `libgcc.a' can also be searched for using 8368 the `-B' prefix, if needed. If it is not found there, the two 8369 standard prefixes above are tried, and that is all. The file is 8370 left out of the link if it is not found by those means. 8371 8372 Another way to specify a prefix much like the `-B' prefix is to use 8373 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 8374 Variables::. 8375 8376 As a special kludge, if the path provided by `-B' is 8377 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 8378 will be replaced by `[dir/]include'. This is to help with 8379 boot-strapping the compiler. 8380 8381 `-specs=FILE' 8382 Process FILE after the compiler reads in the standard `specs' 8383 file, in order to override the defaults that the `gcc' driver 8384 program uses when determining what switches to pass to `cc1', 8385 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 8386 specified on the command line, and they are processed in order, 8387 from left to right. 8388 8389 `--sysroot=DIR' 8390 Use DIR as the logical root directory for headers and libraries. 8391 For example, if the compiler would normally search for headers in 8392 `/usr/include' and libraries in `/usr/lib', it will instead search 8393 `DIR/usr/include' and `DIR/usr/lib'. 8394 8395 If you use both this option and the `-isysroot' option, then the 8396 `--sysroot' option will apply to libraries, but the `-isysroot' 8397 option will apply to header files. 8398 8399 The GNU linker (beginning with version 2.16) has the necessary 8400 support for this option. If your linker does not support this 8401 option, the header file aspect of `--sysroot' will still work, but 8402 the library aspect will not. 8403 8404 `-I-' 8405 This option has been deprecated. Please use `-iquote' instead for 8406 `-I' directories before the `-I-' and remove the `-I-'. Any 8407 directories you specify with `-I' options before the `-I-' option 8408 are searched only for the case of `#include "FILE"'; they are not 8409 searched for `#include <FILE>'. 8410 8411 If additional directories are specified with `-I' options after 8412 the `-I-', these directories are searched for all `#include' 8413 directives. (Ordinarily _all_ `-I' directories are used this way.) 8414 8415 In addition, the `-I-' option inhibits the use of the current 8416 directory (where the current input file came from) as the first 8417 search directory for `#include "FILE"'. There is no way to 8418 override this effect of `-I-'. With `-I.' you can specify 8419 searching the directory which was current when the compiler was 8420 invoked. That is not exactly the same as what the preprocessor 8421 does by default, but it is often satisfactory. 8422 8423 `-I-' does not inhibit the use of the standard system directories 8424 for header files. Thus, `-I-' and `-nostdinc' are independent. 8425 8426 8427 File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 8428 8429 3.15 Specifying subprocesses and the switches to pass to them 8430 ============================================================= 8431 8432 `gcc' is a driver program. It performs its job by invoking a sequence 8433 of other programs to do the work of compiling, assembling and linking. 8434 GCC interprets its command-line parameters and uses these to deduce 8435 which programs it should invoke, and which command-line options it 8436 ought to place on their command lines. This behavior is controlled by 8437 "spec strings". In most cases there is one spec string for each 8438 program that GCC can invoke, but a few programs have multiple spec 8439 strings to control their behavior. The spec strings built into GCC can 8440 be overridden by using the `-specs=' command-line switch to specify a 8441 spec file. 8442 8443 "Spec files" are plaintext files that are used to construct spec 8444 strings. They consist of a sequence of directives separated by blank 8445 lines. The type of directive is determined by the first non-whitespace 8446 character on the line and it can be one of the following: 8447 8448 `%COMMAND' 8449 Issues a COMMAND to the spec file processor. The commands that can 8450 appear here are: 8451 8452 `%include <FILE>' 8453 Search for FILE and insert its text at the current point in 8454 the specs file. 8455 8456 `%include_noerr <FILE>' 8457 Just like `%include', but do not generate an error message if 8458 the include file cannot be found. 8459 8460 `%rename OLD_NAME NEW_NAME' 8461 Rename the spec string OLD_NAME to NEW_NAME. 8462 8463 8464 `*[SPEC_NAME]:' 8465 This tells the compiler to create, override or delete the named 8466 spec string. All lines after this directive up to the next 8467 directive or blank line are considered to be the text for the spec 8468 string. If this results in an empty string then the spec will be 8469 deleted. (Or, if the spec did not exist, then nothing will 8470 happened.) Otherwise, if the spec does not currently exist a new 8471 spec will be created. If the spec does exist then its contents 8472 will be overridden by the text of this directive, unless the first 8473 character of that text is the `+' character, in which case the 8474 text will be appended to the spec. 8475 8476 `[SUFFIX]:' 8477 Creates a new `[SUFFIX] spec' pair. All lines after this directive 8478 and up to the next directive or blank line are considered to make 8479 up the spec string for the indicated suffix. When the compiler 8480 encounters an input file with the named suffix, it will processes 8481 the spec string in order to work out how to compile that file. 8482 For example: 8483 8484 .ZZ: 8485 z-compile -input %i 8486 8487 This says that any input file whose name ends in `.ZZ' should be 8488 passed to the program `z-compile', which should be invoked with the 8489 command-line switch `-input' and with the result of performing the 8490 `%i' substitution. (See below.) 8491 8492 As an alternative to providing a spec string, the text that 8493 follows a suffix directive can be one of the following: 8494 8495 `@LANGUAGE' 8496 This says that the suffix is an alias for a known LANGUAGE. 8497 This is similar to using the `-x' command-line switch to GCC 8498 to specify a language explicitly. For example: 8499 8500 .ZZ: 8501 @c++ 8502 8503 Says that .ZZ files are, in fact, C++ source files. 8504 8505 `#NAME' 8506 This causes an error messages saying: 8507 8508 NAME compiler not installed on this system. 8509 8510 GCC already has an extensive list of suffixes built into it. This 8511 directive will add an entry to the end of the list of suffixes, but 8512 since the list is searched from the end backwards, it is 8513 effectively possible to override earlier entries using this 8514 technique. 8515 8516 8517 GCC has the following spec strings built into it. Spec files can 8518 override these strings or create their own. Note that individual 8519 targets can also add their own spec strings to this list. 8520 8521 asm Options to pass to the assembler 8522 asm_final Options to pass to the assembler post-processor 8523 cpp Options to pass to the C preprocessor 8524 cc1 Options to pass to the C compiler 8525 cc1plus Options to pass to the C++ compiler 8526 endfile Object files to include at the end of the link 8527 link Options to pass to the linker 8528 lib Libraries to include on the command line to the linker 8529 libgcc Decides which GCC support library to pass to the linker 8530 linker Sets the name of the linker 8531 predefines Defines to be passed to the C preprocessor 8532 signed_char Defines to pass to CPP to say whether `char' is signed 8533 by default 8534 startfile Object files to include at the start of the link 8535 8536 Here is a small example of a spec file: 8537 8538 %rename lib old_lib 8539 8540 *lib: 8541 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 8542 8543 This example renames the spec called `lib' to `old_lib' and then 8544 overrides the previous definition of `lib' with a new one. The new 8545 definition adds in some extra command-line options before including the 8546 text of the old definition. 8547 8548 "Spec strings" are a list of command-line options to be passed to their 8549 corresponding program. In addition, the spec strings can contain 8550 `%'-prefixed sequences to substitute variable text or to conditionally 8551 insert text into the command line. Using these constructs it is 8552 possible to generate quite complex command lines. 8553 8554 Here is a table of all defined `%'-sequences for spec strings. Note 8555 that spaces are not generated automatically around the results of 8556 expanding these sequences. Therefore you can concatenate them together 8557 or combine them with constant text in a single argument. 8558 8559 `%%' 8560 Substitute one `%' into the program name or argument. 8561 8562 `%i' 8563 Substitute the name of the input file being processed. 8564 8565 `%b' 8566 Substitute the basename of the input file being processed. This 8567 is the substring up to (and not including) the last period and not 8568 including the directory. 8569 8570 `%B' 8571 This is the same as `%b', but include the file suffix (text after 8572 the last period). 8573 8574 `%d' 8575 Marks the argument containing or following the `%d' as a temporary 8576 file name, so that that file will be deleted if GCC exits 8577 successfully. Unlike `%g', this contributes no text to the 8578 argument. 8579 8580 `%gSUFFIX' 8581 Substitute a file name that has suffix SUFFIX and is chosen once 8582 per compilation, and mark the argument in the same way as `%d'. 8583 To reduce exposure to denial-of-service attacks, the file name is 8584 now chosen in a way that is hard to predict even when previously 8585 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 8586 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 8587 matches the regexp `[.A-Za-z]*' or the special string `%O', which 8588 is treated exactly as if `%O' had been preprocessed. Previously, 8589 `%g' was simply substituted with a file name chosen once per 8590 compilation, without regard to any appended suffix (which was 8591 therefore treated just like ordinary text), making such attacks 8592 more likely to succeed. 8593 8594 `%uSUFFIX' 8595 Like `%g', but generates a new temporary file name even if 8596 `%uSUFFIX' was already seen. 8597 8598 `%USUFFIX' 8599 Substitutes the last file name generated with `%uSUFFIX', 8600 generating a new one if there is no such last file name. In the 8601 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 8602 they don't share the same suffix _space_, so `%g.s ... %U.s ... 8603 %g.s ... %U.s' would involve the generation of two distinct file 8604 names, one for each `%g.s' and another for each `%U.s'. 8605 Previously, `%U' was simply substituted with a file name chosen 8606 for the previous `%u', without regard to any appended suffix. 8607 8608 `%jSUFFIX' 8609 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 8610 writable, and if save-temps is off; otherwise, substitute the name 8611 of a temporary file, just like `%u'. This temporary file is not 8612 meant for communication between processes, but rather as a junk 8613 disposal mechanism. 8614 8615 `%|SUFFIX' 8616 `%mSUFFIX' 8617 Like `%g', except if `-pipe' is in effect. In that case `%|' 8618 substitutes a single dash and `%m' substitutes nothing at all. 8619 These are the two most common ways to instruct a program that it 8620 should read from standard input or write to standard output. If 8621 you need something more elaborate you can use an `%{pipe:`X'}' 8622 construct: see for example `f/lang-specs.h'. 8623 8624 `%.SUFFIX' 8625 Substitutes .SUFFIX for the suffixes of a matched switch's args 8626 when it is subsequently output with `%*'. SUFFIX is terminated by 8627 the next space or %. 8628 8629 `%w' 8630 Marks the argument containing or following the `%w' as the 8631 designated output file of this compilation. This puts the argument 8632 into the sequence of arguments that `%o' will substitute later. 8633 8634 `%o' 8635 Substitutes the names of all the output files, with spaces 8636 automatically placed around them. You should write spaces around 8637 the `%o' as well or the results are undefined. `%o' is for use in 8638 the specs for running the linker. Input files whose names have no 8639 recognized suffix are not compiled at all, but they are included 8640 among the output files, so they will be linked. 8641 8642 `%O' 8643 Substitutes the suffix for object files. Note that this is 8644 handled specially when it immediately follows `%g, %u, or %U', 8645 because of the need for those to form complete file names. The 8646 handling is such that `%O' is treated exactly as if it had already 8647 been substituted, except that `%g, %u, and %U' do not currently 8648 support additional SUFFIX characters following `%O' as they would 8649 following, for example, `.o'. 8650 8651 `%p' 8652 Substitutes the standard macro predefinitions for the current 8653 target machine. Use this when running `cpp'. 8654 8655 `%P' 8656 Like `%p', but puts `__' before and after the name of each 8657 predefined macro, except for macros that start with `__' or with 8658 `_L', where L is an uppercase letter. This is for ISO C. 8659 8660 `%I' 8661 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 8662 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 8663 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 8664 necessary. 8665 8666 `%s' 8667 Current argument is the name of a library or startup file of some 8668 sort. Search for that file in a standard list of directories and 8669 substitute the full name found. 8670 8671 `%eSTR' 8672 Print STR as an error message. STR is terminated by a newline. 8673 Use this when inconsistent options are detected. 8674 8675 `%(NAME)' 8676 Substitute the contents of spec string NAME at this point. 8677 8678 `%[NAME]' 8679 Like `%(...)' but put `__' around `-D' arguments. 8680 8681 `%x{OPTION}' 8682 Accumulate an option for `%X'. 8683 8684 `%X' 8685 Output the accumulated linker options specified by `-Wl' or a `%x' 8686 spec string. 8687 8688 `%Y' 8689 Output the accumulated assembler options specified by `-Wa'. 8690 8691 `%Z' 8692 Output the accumulated preprocessor options specified by `-Wp'. 8693 8694 `%a' 8695 Process the `asm' spec. This is used to compute the switches to 8696 be passed to the assembler. 8697 8698 `%A' 8699 Process the `asm_final' spec. This is a spec string for passing 8700 switches to an assembler post-processor, if such a program is 8701 needed. 8702 8703 `%l' 8704 Process the `link' spec. This is the spec for computing the 8705 command line passed to the linker. Typically it will make use of 8706 the `%L %G %S %D and %E' sequences. 8707 8708 `%D' 8709 Dump out a `-L' option for each directory that GCC believes might 8710 contain startup files. If the target supports multilibs then the 8711 current multilib directory will be prepended to each of these 8712 paths. 8713 8714 `%L' 8715 Process the `lib' spec. This is a spec string for deciding which 8716 libraries should be included on the command line to the linker. 8717 8718 `%G' 8719 Process the `libgcc' spec. This is a spec string for deciding 8720 which GCC support library should be included on the command line 8721 to the linker. 8722 8723 `%S' 8724 Process the `startfile' spec. This is a spec for deciding which 8725 object files should be the first ones passed to the linker. 8726 Typically this might be a file named `crt0.o'. 8727 8728 `%E' 8729 Process the `endfile' spec. This is a spec string that specifies 8730 the last object files that will be passed to the linker. 8731 8732 `%C' 8733 Process the `cpp' spec. This is used to construct the arguments 8734 to be passed to the C preprocessor. 8735 8736 `%1' 8737 Process the `cc1' spec. This is used to construct the options to 8738 be passed to the actual C compiler (`cc1'). 8739 8740 `%2' 8741 Process the `cc1plus' spec. This is used to construct the options 8742 to be passed to the actual C++ compiler (`cc1plus'). 8743 8744 `%*' 8745 Substitute the variable part of a matched option. See below. 8746 Note that each comma in the substituted string is replaced by a 8747 single space. 8748 8749 `%<`S'' 8750 Remove all occurrences of `-S' from the command line. Note--this 8751 command is position dependent. `%' commands in the spec string 8752 before this one will see `-S', `%' commands in the spec string 8753 after this one will not. 8754 8755 `%:FUNCTION(ARGS)' 8756 Call the named function FUNCTION, passing it ARGS. ARGS is first 8757 processed as a nested spec string, then split into an argument 8758 vector in the usual fashion. The function returns a string which 8759 is processed as if it had appeared literally as part of the 8760 current spec. 8761 8762 The following built-in spec functions are provided: 8763 8764 ``getenv'' 8765 The `getenv' spec function takes two arguments: an environment 8766 variable name and a string. If the environment variable is 8767 not defined, a fatal error is issued. Otherwise, the return 8768 value is the value of the environment variable concatenated 8769 with the string. For example, if `TOPDIR' is defined as 8770 `/path/to/top', then: 8771 8772 %:getenv(TOPDIR /include) 8773 8774 expands to `/path/to/top/include'. 8775 8776 ``if-exists'' 8777 The `if-exists' spec function takes one argument, an absolute 8778 pathname to a file. If the file exists, `if-exists' returns 8779 the pathname. Here is a small example of its usage: 8780 8781 *startfile: 8782 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 8783 8784 ``if-exists-else'' 8785 The `if-exists-else' spec function is similar to the 8786 `if-exists' spec function, except that it takes two 8787 arguments. The first argument is an absolute pathname to a 8788 file. If the file exists, `if-exists-else' returns the 8789 pathname. If it does not exist, it returns the second 8790 argument. This way, `if-exists-else' can be used to select 8791 one file or another, based on the existence of the first. 8792 Here is a small example of its usage: 8793 8794 *startfile: 8795 crt0%O%s %:if-exists(crti%O%s) \ 8796 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 8797 8798 ``replace-outfile'' 8799 The `replace-outfile' spec function takes two arguments. It 8800 looks for the first argument in the outfiles array and 8801 replaces it with the second argument. Here is a small 8802 example of its usage: 8803 8804 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 8805 8806 ``print-asm-header'' 8807 The `print-asm-header' function takes no arguments and simply 8808 prints a banner like: 8809 8810 Assembler options 8811 ================= 8812 8813 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 8814 8815 It is used to separate compiler options from assembler options 8816 in the `--target-help' output. 8817 8818 `%{`S'}' 8819 Substitutes the `-S' switch, if that switch was given to GCC. If 8820 that switch was not specified, this substitutes nothing. Note that 8821 the leading dash is omitted when specifying this option, and it is 8822 automatically inserted if the substitution is performed. Thus the 8823 spec string `%{foo}' would match the command-line option `-foo' 8824 and would output the command line option `-foo'. 8825 8826 `%W{`S'}' 8827 Like %{`S'} but mark last argument supplied within as a file to be 8828 deleted on failure. 8829 8830 `%{`S'*}' 8831 Substitutes all the switches specified to GCC whose names start 8832 with `-S', but which also take an argument. This is used for 8833 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 8834 being one switch whose names starts with `o'. %{o*} would 8835 substitute this text, including the space. Thus two arguments 8836 would be generated. 8837 8838 `%{`S'*&`T'*}' 8839 Like %{`S'*}, but preserve order of `S' and `T' options (the order 8840 of `S' and `T' in the spec is not significant). There can be any 8841 number of ampersand-separated variables; for each the wild card is 8842 optional. Useful for CPP as `%{D*&U*&A*}'. 8843 8844 `%{`S':`X'}' 8845 Substitutes `X', if the `-S' switch was given to GCC. 8846 8847 `%{!`S':`X'}' 8848 Substitutes `X', if the `-S' switch was _not_ given to GCC. 8849 8850 `%{`S'*:`X'}' 8851 Substitutes `X' if one or more switches whose names start with 8852 `-S' are specified to GCC. Normally `X' is substituted only once, 8853 no matter how many such switches appeared. However, if `%*' 8854 appears somewhere in `X', then `X' will be substituted once for 8855 each matching switch, with the `%*' replaced by the part of that 8856 switch that matched the `*'. 8857 8858 `%{.`S':`X'}' 8859 Substitutes `X', if processing a file with suffix `S'. 8860 8861 `%{!.`S':`X'}' 8862 Substitutes `X', if _not_ processing a file with suffix `S'. 8863 8864 `%{,`S':`X'}' 8865 Substitutes `X', if processing a file for language `S'. 8866 8867 `%{!,`S':`X'}' 8868 Substitutes `X', if not processing a file for language `S'. 8869 8870 `%{`S'|`P':`X'}' 8871 Substitutes `X' if either `-S' or `-P' was given to GCC. This may 8872 be combined with `!', `.', `,', and `*' sequences as well, 8873 although they have a stronger binding than the `|'. If `%*' 8874 appears in `X', all of the alternatives must be starred, and only 8875 the first matching alternative is substituted. 8876 8877 For example, a spec string like this: 8878 8879 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 8880 8881 will output the following command-line options from the following 8882 input command-line options: 8883 8884 fred.c -foo -baz 8885 jim.d -bar -boggle 8886 -d fred.c -foo -baz -boggle 8887 -d jim.d -bar -baz -boggle 8888 8889 `%{S:X; T:Y; :D}' 8890 If `S' was given to GCC, substitutes `X'; else if `T' was given to 8891 GCC, substitutes `Y'; else substitutes `D'. There can be as many 8892 clauses as you need. This may be combined with `.', `,', `!', 8893 `|', and `*' as needed. 8894 8895 8896 The conditional text `X' in a %{`S':`X'} or similar construct may 8897 contain other nested `%' constructs or spaces, or even newlines. They 8898 are processed as usual, as described above. Trailing white space in 8899 `X' is ignored. White space may also appear anywhere on the left side 8900 of the colon in these constructs, except between `.' or `*' and the 8901 corresponding word. 8902 8903 The `-O', `-f', `-m', and `-W' switches are handled specifically in 8904 these constructs. If another value of `-O' or the negated form of a 8905 `-f', `-m', or `-W' switch is found later in the command line, the 8906 earlier switch value is ignored, except with {`S'*} where `S' is just 8907 one letter, which passes all matching options. 8908 8909 The character `|' at the beginning of the predicate text is used to 8910 indicate that a command should be piped to the following command, but 8911 only if `-pipe' is specified. 8912 8913 It is built into GCC which switches take arguments and which do not. 8914 (You might think it would be useful to generalize this to allow each 8915 compiler's spec to say which switches take arguments. But this cannot 8916 be done in a consistent fashion. GCC cannot even decide which input 8917 files have been specified without knowing which switches take arguments, 8918 and it must know which input files to compile in order to tell which 8919 compilers to run). 8920 8921 GCC also knows implicitly that arguments starting in `-l' are to be 8922 treated as compiler output files, and passed to the linker in their 8923 proper position among the other output files. 8924 8925 8926 File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 8927 8928 3.16 Specifying Target Machine and Compiler Version 8929 =================================================== 8930 8931 The usual way to run GCC is to run the executable called `gcc', or 8932 `<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to 8933 run a version other than the one that was installed last. Sometimes 8934 this is inconvenient, so GCC provides options that will switch to 8935 another cross-compiler or version. 8936 8937 `-b MACHINE' 8938 The argument MACHINE specifies the target machine for compilation. 8939 8940 The value to use for MACHINE is the same as was specified as the 8941 machine type when configuring GCC as a cross-compiler. For 8942 example, if a cross-compiler was configured with `configure 8943 arm-elf', meaning to compile for an arm processor with elf 8944 binaries, then you would specify `-b arm-elf' to run that cross 8945 compiler. Because there are other options beginning with `-b', the 8946 configuration must contain a hyphen, or `-b' alone should be one 8947 argument followed by the configuration in the next argument. 8948 8949 `-V VERSION' 8950 The argument VERSION specifies which version of GCC to run. This 8951 is useful when multiple versions are installed. For example, 8952 VERSION might be `4.0', meaning to run GCC version 4.0. 8953 8954 The `-V' and `-b' options work by running the 8955 `<machine>-gcc-<version>' executable, so there's no real reason to use 8956 them if you can just run that directly. 8957 8958 8959 File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 8960 8961 3.17 Hardware Models and Configurations 8962 ======================================= 8963 8964 Earlier we discussed the standard option `-b' which chooses among 8965 different installed compilers for completely different target machines, 8966 such as VAX vs. 68000 vs. 80386. 8967 8968 In addition, each of these target machine types can have its own 8969 special options, starting with `-m', to choose among various hardware 8970 models or configurations--for example, 68010 vs 68020, floating 8971 coprocessor or none. A single installed version of the compiler can 8972 compile for any model or configuration, according to the options 8973 specified. 8974 8975 Some configurations of the compiler also support additional special 8976 options, usually for compatibility with other compilers on the same 8977 platform. 8978 8979 * Menu: 8980 8981 * ARC Options:: 8982 * ARM Options:: 8983 * AVR Options:: 8984 * Blackfin Options:: 8985 * CRIS Options:: 8986 * CRX Options:: 8987 * Darwin Options:: 8988 * DEC Alpha Options:: 8989 * DEC Alpha/VMS Options:: 8990 * FR30 Options:: 8991 * FRV Options:: 8992 * GNU/Linux Options:: 8993 * H8/300 Options:: 8994 * HPPA Options:: 8995 * i386 and x86-64 Options:: 8996 * i386 and x86-64 Windows Options:: 8997 * IA-64 Options:: 8998 * M32C Options:: 8999 * M32R/D Options:: 9000 * M680x0 Options:: 9001 * M68hc1x Options:: 9002 * MCore Options:: 9003 * MIPS Options:: 9004 * MMIX Options:: 9005 * MN10300 Options:: 9006 * PDP-11 Options:: 9007 * picoChip Options:: 9008 * PowerPC Options:: 9009 * RS/6000 and PowerPC Options:: 9010 * S/390 and zSeries Options:: 9011 * Score Options:: 9012 * SH Options:: 9013 * SPARC Options:: 9014 * SPU Options:: 9015 * System V Options:: 9016 * V850 Options:: 9017 * VAX Options:: 9018 * VxWorks Options:: 9019 * x86-64 Options:: 9020 * Xstormy16 Options:: 9021 * Xtensa Options:: 9022 * zSeries Options:: 9023 9024 9025 File: gcc.info, Node: ARC Options, Next: ARM Options, Up: Submodel Options 9026 9027 3.17.1 ARC Options 9028 ------------------ 9029 9030 These options are defined for ARC implementations: 9031 9032 `-EL' 9033 Compile code for little endian mode. This is the default. 9034 9035 `-EB' 9036 Compile code for big endian mode. 9037 9038 `-mmangle-cpu' 9039 Prepend the name of the cpu to all public symbol names. In 9040 multiple-processor systems, there are many ARC variants with 9041 different instruction and register set characteristics. This flag 9042 prevents code compiled for one cpu to be linked with code compiled 9043 for another. No facility exists for handling variants that are 9044 "almost identical". This is an all or nothing option. 9045 9046 `-mcpu=CPU' 9047 Compile code for ARC variant CPU. Which variants are supported 9048 depend on the configuration. All variants support `-mcpu=base', 9049 this is the default. 9050 9051 `-mtext=TEXT-SECTION' 9052 `-mdata=DATA-SECTION' 9053 `-mrodata=READONLY-DATA-SECTION' 9054 Put functions, data, and readonly data in TEXT-SECTION, 9055 DATA-SECTION, and READONLY-DATA-SECTION respectively by default. 9056 This can be overridden with the `section' attribute. *Note 9057 Variable Attributes::. 9058 9059 `-mfix-cortex-m3-ldrd' 9060 Some Cortex-M3 cores can cause data corruption when `ldrd' 9061 instructions with overlapping destination and base registers are 9062 used. This option avoids generating these instructions. This 9063 option is enabled by default when `-mcpu=cortex-m3' is specified. 9064 9065 9066 9067 File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 9068 9069 3.17.2 ARM Options 9070 ------------------ 9071 9072 These `-m' options are defined for Advanced RISC Machines (ARM) 9073 architectures: 9074 9075 `-mabi=NAME' 9076 Generate code for the specified ABI. Permissible values are: 9077 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 9078 9079 `-mapcs-frame' 9080 Generate a stack frame that is compliant with the ARM Procedure 9081 Call Standard for all functions, even if this is not strictly 9082 necessary for correct execution of the code. Specifying 9083 `-fomit-frame-pointer' with this option will cause the stack 9084 frames not to be generated for leaf functions. The default is 9085 `-mno-apcs-frame'. 9086 9087 `-mapcs' 9088 This is a synonym for `-mapcs-frame'. 9089 9090 `-mthumb-interwork' 9091 Generate code which supports calling between the ARM and Thumb 9092 instruction sets. Without this option the two instruction sets 9093 cannot be reliably used inside one program. The default is 9094 `-mno-thumb-interwork', since slightly larger code is generated 9095 when `-mthumb-interwork' is specified. 9096 9097 `-mno-sched-prolog' 9098 Prevent the reordering of instructions in the function prolog, or 9099 the merging of those instruction with the instructions in the 9100 function's body. This means that all functions will start with a 9101 recognizable set of instructions (or in fact one of a choice from 9102 a small set of different function prologues), and this information 9103 can be used to locate the start if functions inside an executable 9104 piece of code. The default is `-msched-prolog'. 9105 9106 `-mfloat-abi=NAME' 9107 Specifies which floating-point ABI to use. Permissible values 9108 are: `soft', `softfp' and `hard'. 9109 9110 Specifying `soft' causes GCC to generate output containing library 9111 calls for floating-point operations. `softfp' allows the 9112 generation of code using hardware floating-point instructions, but 9113 still uses the soft-float calling conventions. `hard' allows 9114 generation of floating-point instructions and uses FPU-specific 9115 calling conventions. 9116 9117 Using `-mfloat-abi=hard' with VFP coprocessors is not supported. 9118 Use `-mfloat-abi=softfp' with the appropriate `-mfpu' option to 9119 allow the compiler to generate code that makes use of the hardware 9120 floating-point capabilities for these CPUs. 9121 9122 The default depends on the specific target configuration. Note 9123 that the hard-float and soft-float ABIs are not link-compatible; 9124 you must compile your entire program with the same ABI, and link 9125 with a compatible set of libraries. 9126 9127 `-mhard-float' 9128 Equivalent to `-mfloat-abi=hard'. 9129 9130 `-msoft-float' 9131 Equivalent to `-mfloat-abi=soft'. 9132 9133 `-mlittle-endian' 9134 Generate code for a processor running in little-endian mode. This 9135 is the default for all standard configurations. 9136 9137 `-mbig-endian' 9138 Generate code for a processor running in big-endian mode; the 9139 default is to compile code for a little-endian processor. 9140 9141 `-mwords-little-endian' 9142 This option only applies when generating code for big-endian 9143 processors. Generate code for a little-endian word order but a 9144 big-endian byte order. That is, a byte order of the form 9145 `32107654'. Note: this option should only be used if you require 9146 compatibility with code for big-endian ARM processors generated by 9147 versions of the compiler prior to 2.8. 9148 9149 `-mcpu=NAME' 9150 This specifies the name of the target ARM processor. GCC uses 9151 this name to determine what kind of instructions it can emit when 9152 generating assembly code. Permissible names are: `arm2', `arm250', 9153 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 9154 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 9155 `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500', 9156 `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', 9157 `arm740t', `strongarm', `strongarm110', `strongarm1100', 9158 `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920', 9159 `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', 9160 `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', 9161 `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', 9162 `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s', 9163 `arm1176jz-s', `arm1176jzf-s', `cortex-a8', `cortex-a9', 9164 `cortex-r4', `cortex-r4f', `cortex-m3', `cortex-m1', `xscale', 9165 `iwmmxt', `iwmmxt2', `ep9312'. 9166 9167 `-mtune=NAME' 9168 This option is very similar to the `-mcpu=' option, except that 9169 instead of specifying the actual target processor type, and hence 9170 restricting which instructions can be used, it specifies that GCC 9171 should tune the performance of the code as if the target were of 9172 the type specified in this option, but still choosing the 9173 instructions that it will generate based on the cpu specified by a 9174 `-mcpu=' option. For some ARM implementations better performance 9175 can be obtained by using this option. 9176 9177 `-march=NAME' 9178 This specifies the name of the target ARM architecture. GCC uses 9179 this name to determine what kind of instructions it can emit when 9180 generating assembly code. This option can be used in conjunction 9181 with or instead of the `-mcpu=' option. Permissible names are: 9182 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 9183 `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2', 9184 `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r', 9185 `armv7-m', `iwmmxt', `iwmmxt2', `ep9312'. 9186 9187 `-mfpu=NAME' 9188 `-mfpe=NUMBER' 9189 `-mfp=NUMBER' 9190 This specifies what floating point hardware (or hardware 9191 emulation) is available on the target. Permissible names are: 9192 `fpa', `fpe2', `fpe3', `maverick', `vfp', `vfpv3', `vfpv3-d16' and 9193 `neon'. `-mfp' and `-mfpe' are synonyms for `-mfpu'=`fpe'NUMBER, 9194 for compatibility with older versions of GCC. 9195 9196 If `-msoft-float' is specified this specifies the format of 9197 floating point values. 9198 9199 `-mstructure-size-boundary=N' 9200 The size of all structures and unions will be rounded up to a 9201 multiple of the number of bits set by this option. Permissible 9202 values are 8, 32 and 64. The default value varies for different 9203 toolchains. For the COFF targeted toolchain the default value is 9204 8. A value of 64 is only allowed if the underlying ABI supports 9205 it. 9206 9207 Specifying the larger number can produce faster, more efficient 9208 code, but can also increase the size of the program. Different 9209 values are potentially incompatible. Code compiled with one value 9210 cannot necessarily expect to work with code or libraries compiled 9211 with another value, if they exchange information using structures 9212 or unions. 9213 9214 `-mabort-on-noreturn' 9215 Generate a call to the function `abort' at the end of a `noreturn' 9216 function. It will be executed if the function tries to return. 9217 9218 `-mlong-calls' 9219 `-mno-long-calls' 9220 Tells the compiler to perform function calls by first loading the 9221 address of the function into a register and then performing a 9222 subroutine call on this register. This switch is needed if the 9223 target function will lie outside of the 64 megabyte addressing 9224 range of the offset based version of subroutine call instruction. 9225 9226 Even if this switch is enabled, not all function calls will be 9227 turned into long calls. The heuristic is that static functions, 9228 functions which have the `short-call' attribute, functions that 9229 are inside the scope of a `#pragma no_long_calls' directive and 9230 functions whose definitions have already been compiled within the 9231 current compilation unit, will not be turned into long calls. The 9232 exception to this rule is that weak function definitions, 9233 functions with the `long-call' attribute or the `section' 9234 attribute, and functions that are within the scope of a `#pragma 9235 long_calls' directive, will always be turned into long calls. 9236 9237 This feature is not enabled by default. Specifying 9238 `-mno-long-calls' will restore the default behavior, as will 9239 placing the function calls within the scope of a `#pragma 9240 long_calls_off' directive. Note these switches have no effect on 9241 how the compiler generates code to handle function calls via 9242 function pointers. 9243 9244 `-msingle-pic-base' 9245 Treat the register used for PIC addressing as read-only, rather 9246 than loading it in the prologue for each function. The run-time 9247 system is responsible for initializing this register with an 9248 appropriate value before execution begins. 9249 9250 `-mpic-register=REG' 9251 Specify the register to be used for PIC addressing. The default 9252 is R10 unless stack-checking is enabled, when R9 is used. 9253 9254 `-mcirrus-fix-invalid-insns' 9255 Insert NOPs into the instruction stream to in order to work around 9256 problems with invalid Maverick instruction combinations. This 9257 option is only valid if the `-mcpu=ep9312' option has been used to 9258 enable generation of instructions for the Cirrus Maverick floating 9259 point co-processor. This option is not enabled by default, since 9260 the problem is only present in older Maverick implementations. 9261 The default can be re-enabled by use of the 9262 `-mno-cirrus-fix-invalid-insns' switch. 9263 9264 `-mpoke-function-name' 9265 Write the name of each function into the text section, directly 9266 preceding the function prologue. The generated code is similar to 9267 this: 9268 9269 t0 9270 .ascii "arm_poke_function_name", 0 9271 .align 9272 t1 9273 .word 0xff000000 + (t1 - t0) 9274 arm_poke_function_name 9275 mov ip, sp 9276 stmfd sp!, {fp, ip, lr, pc} 9277 sub fp, ip, #4 9278 9279 When performing a stack backtrace, code can inspect the value of 9280 `pc' stored at `fp + 0'. If the trace function then looks at 9281 location `pc - 12' and the top 8 bits are set, then we know that 9282 there is a function name embedded immediately preceding this 9283 location and has length `((pc[-3]) & 0xff000000)'. 9284 9285 `-mthumb' 9286 Generate code for the Thumb instruction set. The default is to 9287 use the 32-bit ARM instruction set. This option automatically 9288 enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2 9289 instructions based on the `-mcpu=NAME' and `-march=NAME' options. 9290 9291 `-mtpcs-frame' 9292 Generate a stack frame that is compliant with the Thumb Procedure 9293 Call Standard for all non-leaf functions. (A leaf function is one 9294 that does not call any other functions.) The default is 9295 `-mno-tpcs-frame'. 9296 9297 `-mtpcs-leaf-frame' 9298 Generate a stack frame that is compliant with the Thumb Procedure 9299 Call Standard for all leaf functions. (A leaf function is one 9300 that does not call any other functions.) The default is 9301 `-mno-apcs-leaf-frame'. 9302 9303 `-mcallee-super-interworking' 9304 Gives all externally visible functions in the file being compiled 9305 an ARM instruction set header which switches to Thumb mode before 9306 executing the rest of the function. This allows these functions 9307 to be called from non-interworking code. 9308 9309 `-mcaller-super-interworking' 9310 Allows calls via function pointers (including virtual functions) to 9311 execute correctly regardless of whether the target code has been 9312 compiled for interworking or not. There is a small overhead in 9313 the cost of executing a function pointer if this option is enabled. 9314 9315 `-mtp=NAME' 9316 Specify the access model for the thread local storage pointer. 9317 The valid models are `soft', which generates calls to 9318 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 9319 `cp15' directly (supported in the arm6k architecture), and `auto', 9320 which uses the best available method for the selected processor. 9321 The default setting is `auto'. 9322 9323 `-mword-relocations' 9324 Only generate absolute relocations on word sized values (i.e. 9325 R_ARM_ABS32). This is enabled by default on targets (uClinux, 9326 SymbianOS) where the runtime loader imposes this restriction, and 9327 when `-fpic' or `-fPIC' is specified. 9328 9329 `-mandroid' 9330 Enable Android specific compilier options. 9331 9332 If this option is used, a preprocessor macro `__ANDROID__' is 9333 defined and has the value 1 during compilation. The option also 9334 implies C/C++ options `-fno-exceptions' `-fpic' `-mthumb-interwork' 9335 `-fno-short-enums' and C++ option `-fno-rtti'. These implied 9336 options can be overridden. For example RTTI in C++ code can still 9337 be enabled with -frtti even when -mandroid is also used. 9338 9339 Linking options depend on whether a static executable, a dynamic 9340 executable or a shared library is built. When `-static' is given, 9341 `-mandroid' implies linking flag `-Bstatic', start file 9342 `crtbegin_static.o' and end file `crtend_android.o'. 9343 9344 When `-shared' is given, `-mandroid' implies the linking flag 9345 `-Bsymbolic' and no start and end files. 9346 9347 When none of `-static' and `-shared' is given, `-mandroid' implies 9348 linking flags `-Bdynamic -dynamic-linker /system/bin/linker', 9349 start file `crtbegin_dynamic.o' and end file `crtend_android.o'. 9350 The dynamic linker used can be overriden by another 9351 `-dynamic-linker' in command line. 9352 9353 The linking option `-ldl' is also added if `-static' is not given. 9354 9355 If more than one of `-dynamic', `-static' and `-shared' are given, 9356 behaviour of `-mandroid' is undefined. 9357 9358 9359 9360 File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 9361 9362 3.17.3 AVR Options 9363 ------------------ 9364 9365 These options are defined for AVR implementations: 9366 9367 `-mmcu=MCU' 9368 Specify ATMEL AVR instruction set or MCU type. 9369 9370 Instruction set avr1 is for the minimal AVR core, not supported by 9371 the C compiler, only for assembler programs (MCU types: at90s1200, 9372 attiny10, attiny11, attiny12, attiny15, attiny28). 9373 9374 Instruction set avr2 (default) is for the classic AVR core with up 9375 to 8K program memory space (MCU types: at90s2313, at90s2323, 9376 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, 9377 at90s8515, at90c8534, at90s8535). 9378 9379 Instruction set avr3 is for the classic AVR core with up to 128K 9380 program memory space (MCU types: atmega103, atmega603, at43usb320, 9381 at76c711). 9382 9383 Instruction set avr4 is for the enhanced AVR core with up to 8K 9384 program memory space (MCU types: atmega8, atmega83, atmega85). 9385 9386 Instruction set avr5 is for the enhanced AVR core with up to 128K 9387 program memory space (MCU types: atmega16, atmega161, atmega163, 9388 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k). 9389 9390 `-msize' 9391 Output instruction sizes to the asm file. 9392 9393 `-minit-stack=N' 9394 Specify the initial stack address, which may be a symbol or 9395 numeric value, `__stack' is the default. 9396 9397 `-mno-interrupts' 9398 Generated code is not compatible with hardware interrupts. Code 9399 size will be smaller. 9400 9401 `-mcall-prologues' 9402 Functions prologues/epilogues expanded as call to appropriate 9403 subroutines. Code size will be smaller. 9404 9405 `-mno-tablejump' 9406 Do not generate tablejump insns which sometimes increase code size. 9407 The option is now deprecated in favor of the equivalent 9408 `-fno-jump-tables' 9409 9410 `-mtiny-stack' 9411 Change only the low 8 bits of the stack pointer. 9412 9413 `-mint8' 9414 Assume int to be 8 bit integer. This affects the sizes of all 9415 types: A char will be 1 byte, an int will be 1 byte, an long will 9416 be 2 bytes and long long will be 4 bytes. Please note that this 9417 option does not comply to the C standards, but it will provide you 9418 with smaller code size. 9419 9420 9421 File: gcc.info, Node: Blackfin Options, Next: CRIS Options, Prev: AVR Options, Up: Submodel Options 9422 9423 3.17.4 Blackfin Options 9424 ----------------------- 9425 9426 `-mcpu=CPU[-SIREVISION]' 9427 Specifies the name of the target Blackfin processor. Currently, 9428 CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522', 9429 `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532', 9430 `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542', 9431 `bf544', `bf547', `bf548', `bf549', `bf561'. The optional 9432 SIREVISION specifies the silicon revision of the target Blackfin 9433 processor. Any workarounds available for the targeted silicon 9434 revision will be enabled. If SIREVISION is `none', no workarounds 9435 are enabled. If SIREVISION is `any', all workarounds for the 9436 targeted processor will be enabled. The `__SILICON_REVISION__' 9437 macro is defined to two hexadecimal digits representing the major 9438 and minor numbers in the silicon revision. If SIREVISION is 9439 `none', the `__SILICON_REVISION__' is not defined. If SIREVISION 9440 is `any', the `__SILICON_REVISION__' is defined to be `0xffff'. 9441 If this optional SIREVISION is not used, GCC assumes the latest 9442 known silicon revision of the targeted Blackfin processor. 9443 9444 Support for `bf561' is incomplete. For `bf561', Only the 9445 processor macro is defined. Without this option, `bf532' is used 9446 as the processor by default. The corresponding predefined 9447 processor macros for CPU is to be defined. And for `bfin-elf' 9448 toolchain, this causes the hardware BSP provided by libgloss to be 9449 linked in if `-msim' is not given. 9450 9451 `-msim' 9452 Specifies that the program will be run on the simulator. This 9453 causes the simulator BSP provided by libgloss to be linked in. 9454 This option has effect only for `bfin-elf' toolchain. Certain 9455 other options, such as `-mid-shared-library' and `-mfdpic', imply 9456 `-msim'. 9457 9458 `-momit-leaf-frame-pointer' 9459 Don't keep the frame pointer in a register for leaf functions. 9460 This avoids the instructions to save, set up and restore frame 9461 pointers and makes an extra register available in leaf functions. 9462 The option `-fomit-frame-pointer' removes the frame pointer for 9463 all functions which might make debugging harder. 9464 9465 `-mspecld-anomaly' 9466 When enabled, the compiler will ensure that the generated code 9467 does not contain speculative loads after jump instructions. If 9468 this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined. 9469 9470 `-mno-specld-anomaly' 9471 Don't generate extra code to prevent speculative loads from 9472 occurring. 9473 9474 `-mcsync-anomaly' 9475 When enabled, the compiler will ensure that the generated code 9476 does not contain CSYNC or SSYNC instructions too soon after 9477 conditional branches. If this option is used, 9478 `__WORKAROUND_SPECULATIVE_SYNCS' is defined. 9479 9480 `-mno-csync-anomaly' 9481 Don't generate extra code to prevent CSYNC or SSYNC instructions 9482 from occurring too soon after a conditional branch. 9483 9484 `-mlow-64k' 9485 When enabled, the compiler is free to take advantage of the 9486 knowledge that the entire program fits into the low 64k of memory. 9487 9488 `-mno-low-64k' 9489 Assume that the program is arbitrarily large. This is the default. 9490 9491 `-mstack-check-l1' 9492 Do stack checking using information placed into L1 scratchpad 9493 memory by the uClinux kernel. 9494 9495 `-mid-shared-library' 9496 Generate code that supports shared libraries via the library ID 9497 method. This allows for execute in place and shared libraries in 9498 an environment without virtual memory management. This option 9499 implies `-fPIC'. With a `bfin-elf' target, this option implies 9500 `-msim'. 9501 9502 `-mno-id-shared-library' 9503 Generate code that doesn't assume ID based shared libraries are 9504 being used. This is the default. 9505 9506 `-mleaf-id-shared-library' 9507 Generate code that supports shared libraries via the library ID 9508 method, but assumes that this library or executable won't link 9509 against any other ID shared libraries. That allows the compiler 9510 to use faster code for jumps and calls. 9511 9512 `-mno-leaf-id-shared-library' 9513 Do not assume that the code being compiled won't link against any 9514 ID shared libraries. Slower code will be generated for jump and 9515 call insns. 9516 9517 `-mshared-library-id=n' 9518 Specified the identification number of the ID based shared library 9519 being compiled. Specifying a value of 0 will generate more 9520 compact code, specifying other values will force the allocation of 9521 that number to the current library but is no more space or time 9522 efficient than omitting this option. 9523 9524 `-msep-data' 9525 Generate code that allows the data segment to be located in a 9526 different area of memory from the text segment. This allows for 9527 execute in place in an environment without virtual memory 9528 management by eliminating relocations against the text section. 9529 9530 `-mno-sep-data' 9531 Generate code that assumes that the data segment follows the text 9532 segment. This is the default. 9533 9534 `-mlong-calls' 9535 `-mno-long-calls' 9536 Tells the compiler to perform function calls by first loading the 9537 address of the function into a register and then performing a 9538 subroutine call on this register. This switch is needed if the 9539 target function will lie outside of the 24 bit addressing range of 9540 the offset based version of subroutine call instruction. 9541 9542 This feature is not enabled by default. Specifying 9543 `-mno-long-calls' will restore the default behavior. Note these 9544 switches have no effect on how the compiler generates code to 9545 handle function calls via function pointers. 9546 9547 `-mfast-fp' 9548 Link with the fast floating-point library. This library relaxes 9549 some of the IEEE floating-point standard's rules for checking 9550 inputs against Not-a-Number (NAN), in the interest of performance. 9551 9552 `-minline-plt' 9553 Enable inlining of PLT entries in function calls to functions that 9554 are not known to bind locally. It has no effect without `-mfdpic'. 9555 9556 `-mmulticore' 9557 Build standalone application for multicore Blackfin processor. 9558 Proper start files and link scripts will be used to support 9559 multicore. This option defines `__BFIN_MULTICORE'. It can only be 9560 used with `-mcpu=bf561[-SIREVISION]'. It can be used with 9561 `-mcorea' or `-mcoreb'. If it's used without `-mcorea' or 9562 `-mcoreb', single application/dual core programming model is used. 9563 In this model, the main function of Core B should be named as 9564 coreb_main. If it's used with `-mcorea' or `-mcoreb', one 9565 application per core programming model is used. If this option is 9566 not used, single core application programming model is used. 9567 9568 `-mcorea' 9569 Build standalone application for Core A of BF561 when using one 9570 application per core programming model. Proper start files and 9571 link scripts will be used to support Core A. This option defines 9572 `__BFIN_COREA'. It must be used with `-mmulticore'. 9573 9574 `-mcoreb' 9575 Build standalone application for Core B of BF561 when using one 9576 application per core programming model. Proper start files and 9577 link scripts will be used to support Core B. This option defines 9578 `__BFIN_COREB'. When this option is used, coreb_main should be 9579 used instead of main. It must be used with `-mmulticore'. 9580 9581 `-msdram' 9582 Build standalone application for SDRAM. Proper start files and 9583 link scripts will be used to put the application into SDRAM. 9584 Loader should initialize SDRAM before loading the application into 9585 SDRAM. This option defines `__BFIN_SDRAM'. 9586 9587 `-micplb' 9588 Assume that ICPLBs are enabled at runtime. This has an effect on 9589 certain anomaly workarounds. For Linux targets, the default is to 9590 assume ICPLBs are enabled; for standalone applications the default 9591 is off. 9592 9593 9594 File: gcc.info, Node: CRIS Options, Next: CRX Options, Prev: Blackfin Options, Up: Submodel Options 9595 9596 3.17.5 CRIS Options 9597 ------------------- 9598 9599 These options are defined specifically for the CRIS ports. 9600 9601 `-march=ARCHITECTURE-TYPE' 9602 `-mcpu=ARCHITECTURE-TYPE' 9603 Generate code for the specified architecture. The choices for 9604 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 9605 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 9606 cris-axis-linux-gnu, where the default is `v10'. 9607 9608 `-mtune=ARCHITECTURE-TYPE' 9609 Tune to ARCHITECTURE-TYPE everything applicable about the generated 9610 code, except for the ABI and the set of available instructions. 9611 The choices for ARCHITECTURE-TYPE are the same as for 9612 `-march=ARCHITECTURE-TYPE'. 9613 9614 `-mmax-stack-frame=N' 9615 Warn when the stack frame of a function exceeds N bytes. 9616 9617 `-metrax4' 9618 `-metrax100' 9619 The options `-metrax4' and `-metrax100' are synonyms for 9620 `-march=v3' and `-march=v8' respectively. 9621 9622 `-mmul-bug-workaround' 9623 `-mno-mul-bug-workaround' 9624 Work around a bug in the `muls' and `mulu' instructions for CPU 9625 models where it applies. This option is active by default. 9626 9627 `-mpdebug' 9628 Enable CRIS-specific verbose debug-related information in the 9629 assembly code. This option also has the effect to turn off the 9630 `#NO_APP' formatted-code indicator to the assembler at the 9631 beginning of the assembly file. 9632 9633 `-mcc-init' 9634 Do not use condition-code results from previous instruction; 9635 always emit compare and test instructions before use of condition 9636 codes. 9637 9638 `-mno-side-effects' 9639 Do not emit instructions with side-effects in addressing modes 9640 other than post-increment. 9641 9642 `-mstack-align' 9643 `-mno-stack-align' 9644 `-mdata-align' 9645 `-mno-data-align' 9646 `-mconst-align' 9647 `-mno-const-align' 9648 These options (no-options) arranges (eliminate arrangements) for 9649 the stack-frame, individual data and constants to be aligned for 9650 the maximum single data access size for the chosen CPU model. The 9651 default is to arrange for 32-bit alignment. ABI details such as 9652 structure layout are not affected by these options. 9653 9654 `-m32-bit' 9655 `-m16-bit' 9656 `-m8-bit' 9657 Similar to the stack- data- and const-align options above, these 9658 options arrange for stack-frame, writable data and constants to 9659 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 9660 alignment. 9661 9662 `-mno-prologue-epilogue' 9663 `-mprologue-epilogue' 9664 With `-mno-prologue-epilogue', the normal function prologue and 9665 epilogue that sets up the stack-frame are omitted and no return 9666 instructions or return sequences are generated in the code. Use 9667 this option only together with visual inspection of the compiled 9668 code: no warnings or errors are generated when call-saved 9669 registers must be saved, or storage for local variable needs to be 9670 allocated. 9671 9672 `-mno-gotplt' 9673 `-mgotplt' 9674 With `-fpic' and `-fPIC', don't generate (do generate) instruction 9675 sequences that load addresses for functions from the PLT part of 9676 the GOT rather than (traditional on other architectures) calls to 9677 the PLT. The default is `-mgotplt'. 9678 9679 `-melf' 9680 Legacy no-op option only recognized with the cris-axis-elf and 9681 cris-axis-linux-gnu targets. 9682 9683 `-mlinux' 9684 Legacy no-op option only recognized with the cris-axis-linux-gnu 9685 target. 9686 9687 `-sim' 9688 This option, recognized for the cris-axis-elf arranges to link 9689 with input-output functions from a simulator library. Code, 9690 initialized data and zero-initialized data are allocated 9691 consecutively. 9692 9693 `-sim2' 9694 Like `-sim', but pass linker options to locate initialized data at 9695 0x40000000 and zero-initialized data at 0x80000000. 9696 9697 9698 File: gcc.info, Node: CRX Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 9699 9700 3.17.6 CRX Options 9701 ------------------ 9702 9703 These options are defined specifically for the CRX ports. 9704 9705 `-mmac' 9706 Enable the use of multiply-accumulate instructions. Disabled by 9707 default. 9708 9709 `-mpush-args' 9710 Push instructions will be used to pass outgoing arguments when 9711 functions are called. Enabled by default. 9712 9713 9714 File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CRX Options, Up: Submodel Options 9715 9716 3.17.7 Darwin Options 9717 --------------------- 9718 9719 These options are defined for all architectures running the Darwin 9720 operating system. 9721 9722 FSF GCC on Darwin does not create "fat" object files; it will create 9723 an object file for the single architecture that it was built to target. 9724 Apple's GCC on Darwin does create "fat" files if multiple `-arch' 9725 options are used; it does so by running the compiler or linker multiple 9726 times and joining the results together with `lipo'. 9727 9728 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 9729 is determined by the flags that specify the ISA that GCC is targetting, 9730 like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 9731 used to override this. 9732 9733 The Darwin tools vary in their behavior when presented with an ISA 9734 mismatch. The assembler, `as', will only permit instructions to be 9735 used that are valid for the subtype of the file it is generating, so 9736 you cannot put 64-bit instructions in an `ppc750' object file. The 9737 linker for shared libraries, `/usr/bin/libtool', will fail and print an 9738 error if asked to create a shared library with a less restrictive 9739 subtype than its input files (for instance, trying to put a `ppc970' 9740 object file in a `ppc7400' library). The linker for executables, `ld', 9741 will quietly give the executable the most restrictive subtype of any of 9742 its input files. 9743 9744 `-FDIR' 9745 Add the framework directory DIR to the head of the list of 9746 directories to be searched for header files. These directories are 9747 interleaved with those specified by `-I' options and are scanned 9748 in a left-to-right order. 9749 9750 A framework directory is a directory with frameworks in it. A 9751 framework is a directory with a `"Headers"' and/or 9752 `"PrivateHeaders"' directory contained directly in it that ends in 9753 `".framework"'. The name of a framework is the name of this 9754 directory excluding the `".framework"'. Headers associated with 9755 the framework are found in one of those two directories, with 9756 `"Headers"' being searched first. A subframework is a framework 9757 directory that is in a framework's `"Frameworks"' directory. 9758 Includes of subframework headers can only appear in a header of a 9759 framework that contains the subframework, or in a sibling 9760 subframework header. Two subframeworks are siblings if they occur 9761 in the same framework. A subframework should not have the same 9762 name as a framework, a warning will be issued if this is violated. 9763 Currently a subframework cannot have subframeworks, in the 9764 future, the mechanism may be extended to support this. The 9765 standard frameworks can be found in `"/System/Library/Frameworks"' 9766 and `"/Library/Frameworks"'. An example include looks like 9767 `#include <Framework/header.h>', where `Framework' denotes the 9768 name of the framework and header.h is found in the 9769 `"PrivateHeaders"' or `"Headers"' directory. 9770 9771 `-iframeworkDIR' 9772 Like `-F' except the directory is a treated as a system directory. 9773 The main difference between this `-iframework' and `-F' is that 9774 with `-iframework' the compiler does not warn about constructs 9775 contained within header files found via DIR. This option is valid 9776 only for the C family of languages. 9777 9778 `-gused' 9779 Emit debugging information for symbols that are used. For STABS 9780 debugging format, this enables `-feliminate-unused-debug-symbols'. 9781 This is by default ON. 9782 9783 `-gfull' 9784 Emit debugging information for all symbols and types. 9785 9786 `-mmacosx-version-min=VERSION' 9787 The earliest version of MacOS X that this executable will run on 9788 is VERSION. Typical values of VERSION include `10.1', `10.2', and 9789 `10.3.9'. 9790 9791 If the compiler was built to use the system's headers by default, 9792 then the default for this option is the system version on which the 9793 compiler is running, otherwise the default is to make choices which 9794 are compatible with as many systems and code bases as possible. 9795 9796 `-mkernel' 9797 Enable kernel development mode. The `-mkernel' option sets 9798 `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions', 9799 `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and 9800 `-fno-rtti' where applicable. This mode also sets `-mno-altivec', 9801 `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC 9802 targets. 9803 9804 `-mone-byte-bool' 9805 Override the defaults for `bool' so that `sizeof(bool)==1'. By 9806 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 9807 and `1' when compiling for Darwin/x86, so this option has no 9808 effect on x86. 9809 9810 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 9811 code that is not binary compatible with code generated without 9812 that switch. Using this switch may require recompiling all other 9813 modules in a program, including system libraries. Use this switch 9814 to conform to a non-default data model. 9815 9816 `-mfix-and-continue' 9817 `-ffix-and-continue' 9818 `-findirect-data' 9819 Generate code suitable for fast turn around development. Needed to 9820 enable gdb to dynamically load `.o' files into already running 9821 programs. `-findirect-data' and `-ffix-and-continue' are provided 9822 for backwards compatibility. 9823 9824 `-all_load' 9825 Loads all members of static archive libraries. See man ld(1) for 9826 more information. 9827 9828 `-arch_errors_fatal' 9829 Cause the errors having to do with files that have the wrong 9830 architecture to be fatal. 9831 9832 `-bind_at_load' 9833 Causes the output file to be marked such that the dynamic linker 9834 will bind all undefined references when the file is loaded or 9835 launched. 9836 9837 `-bundle' 9838 Produce a Mach-o bundle format file. See man ld(1) for more 9839 information. 9840 9841 `-bundle_loader EXECUTABLE' 9842 This option specifies the EXECUTABLE that will be loading the build 9843 output file being linked. See man ld(1) for more information. 9844 9845 `-dynamiclib' 9846 When passed this option, GCC will produce a dynamic library 9847 instead of an executable when linking, using the Darwin `libtool' 9848 command. 9849 9850 `-force_cpusubtype_ALL' 9851 This causes GCC's output file to have the ALL subtype, instead of 9852 one controlled by the `-mcpu' or `-march' option. 9853 9854 `-allowable_client CLIENT_NAME' 9855 `-client_name' 9856 `-compatibility_version' 9857 `-current_version' 9858 `-dead_strip' 9859 `-dependency-file' 9860 `-dylib_file' 9861 `-dylinker_install_name' 9862 `-dynamic' 9863 `-exported_symbols_list' 9864 `-filelist' 9865 `-flat_namespace' 9866 `-force_flat_namespace' 9867 `-headerpad_max_install_names' 9868 `-image_base' 9869 `-init' 9870 `-install_name' 9871 `-keep_private_externs' 9872 `-multi_module' 9873 `-multiply_defined' 9874 `-multiply_defined_unused' 9875 `-noall_load' 9876 `-no_dead_strip_inits_and_terms' 9877 `-nofixprebinding' 9878 `-nomultidefs' 9879 `-noprebind' 9880 `-noseglinkedit' 9881 `-pagezero_size' 9882 `-prebind' 9883 `-prebind_all_twolevel_modules' 9884 `-private_bundle' 9885 `-read_only_relocs' 9886 `-sectalign' 9887 `-sectobjectsymbols' 9888 `-whyload' 9889 `-seg1addr' 9890 `-sectcreate' 9891 `-sectobjectsymbols' 9892 `-sectorder' 9893 `-segaddr' 9894 `-segs_read_only_addr' 9895 `-segs_read_write_addr' 9896 `-seg_addr_table' 9897 `-seg_addr_table_filename' 9898 `-seglinkedit' 9899 `-segprot' 9900 `-segs_read_only_addr' 9901 `-segs_read_write_addr' 9902 `-single_module' 9903 `-static' 9904 `-sub_library' 9905 `-sub_umbrella' 9906 `-twolevel_namespace' 9907 `-umbrella' 9908 `-undefined' 9909 `-unexported_symbols_list' 9910 `-weak_reference_mismatches' 9911 `-whatsloaded' 9912 These options are passed to the Darwin linker. The Darwin linker 9913 man page describes them in detail. 9914 9915 9916 File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Darwin Options, Up: Submodel Options 9917 9918 3.17.8 DEC Alpha Options 9919 ------------------------ 9920 9921 These `-m' options are defined for the DEC Alpha implementations: 9922 9923 `-mno-soft-float' 9924 `-msoft-float' 9925 Use (do not use) the hardware floating-point instructions for 9926 floating-point operations. When `-msoft-float' is specified, 9927 functions in `libgcc.a' will be used to perform floating-point 9928 operations. Unless they are replaced by routines that emulate the 9929 floating-point operations, or compiled in such a way as to call 9930 such emulations routines, these routines will issue floating-point 9931 operations. If you are compiling for an Alpha without 9932 floating-point operations, you must ensure that the library is 9933 built so as not to call them. 9934 9935 Note that Alpha implementations without floating-point operations 9936 are required to have floating-point registers. 9937 9938 `-mfp-reg' 9939 `-mno-fp-regs' 9940 Generate code that uses (does not use) the floating-point register 9941 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 9942 register set is not used, floating point operands are passed in 9943 integer registers as if they were integers and floating-point 9944 results are passed in `$0' instead of `$f0'. This is a 9945 non-standard calling sequence, so any function with a 9946 floating-point argument or return value called by code compiled 9947 with `-mno-fp-regs' must also be compiled with that option. 9948 9949 A typical use of this option is building a kernel that does not 9950 use, and hence need not save and restore, any floating-point 9951 registers. 9952 9953 `-mieee' 9954 The Alpha architecture implements floating-point hardware 9955 optimized for maximum performance. It is mostly compliant with 9956 the IEEE floating point standard. However, for full compliance, 9957 software assistance is required. This option generates code fully 9958 IEEE compliant code _except_ that the INEXACT-FLAG is not 9959 maintained (see below). If this option is turned on, the 9960 preprocessor macro `_IEEE_FP' is defined during compilation. The 9961 resulting code is less efficient but is able to correctly support 9962 denormalized numbers and exceptional IEEE values such as 9963 not-a-number and plus/minus infinity. Other Alpha compilers call 9964 this option `-ieee_with_no_inexact'. 9965 9966 `-mieee-with-inexact' 9967 This is like `-mieee' except the generated code also maintains the 9968 IEEE INEXACT-FLAG. Turning on this option causes the generated 9969 code to implement fully-compliant IEEE math. In addition to 9970 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 9971 On some Alpha implementations the resulting code may execute 9972 significantly slower than the code generated by default. Since 9973 there is very little code that depends on the INEXACT-FLAG, you 9974 should normally not specify this option. Other Alpha compilers 9975 call this option `-ieee_with_inexact'. 9976 9977 `-mfp-trap-mode=TRAP-MODE' 9978 This option controls what floating-point related traps are enabled. 9979 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 9980 trap mode can be set to one of four values: 9981 9982 `n' 9983 This is the default (normal) setting. The only traps that 9984 are enabled are the ones that cannot be disabled in software 9985 (e.g., division by zero trap). 9986 9987 `u' 9988 In addition to the traps enabled by `n', underflow traps are 9989 enabled as well. 9990 9991 `su' 9992 Like `u', but the instructions are marked to be safe for 9993 software completion (see Alpha architecture manual for 9994 details). 9995 9996 `sui' 9997 Like `su', but inexact traps are enabled as well. 9998 9999 `-mfp-rounding-mode=ROUNDING-MODE' 10000 Selects the IEEE rounding mode. Other Alpha compilers call this 10001 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 10002 10003 `n' 10004 Normal IEEE rounding mode. Floating point numbers are 10005 rounded towards the nearest machine number or towards the 10006 even machine number in case of a tie. 10007 10008 `m' 10009 Round towards minus infinity. 10010 10011 `c' 10012 Chopped rounding mode. Floating point numbers are rounded 10013 towards zero. 10014 10015 `d' 10016 Dynamic rounding mode. A field in the floating point control 10017 register (FPCR, see Alpha architecture reference manual) 10018 controls the rounding mode in effect. The C library 10019 initializes this register for rounding towards plus infinity. 10020 Thus, unless your program modifies the FPCR, `d' corresponds 10021 to round towards plus infinity. 10022 10023 `-mtrap-precision=TRAP-PRECISION' 10024 In the Alpha architecture, floating point traps are imprecise. 10025 This means without software assistance it is impossible to recover 10026 from a floating trap and program execution normally needs to be 10027 terminated. GCC can generate code that can assist operating 10028 system trap handlers in determining the exact location that caused 10029 a floating point trap. Depending on the requirements of an 10030 application, different levels of precisions can be selected: 10031 10032 `p' 10033 Program precision. This option is the default and means a 10034 trap handler can only identify which program caused a 10035 floating point exception. 10036 10037 `f' 10038 Function precision. The trap handler can determine the 10039 function that caused a floating point exception. 10040 10041 `i' 10042 Instruction precision. The trap handler can determine the 10043 exact instruction that caused a floating point exception. 10044 10045 Other Alpha compilers provide the equivalent options called 10046 `-scope_safe' and `-resumption_safe'. 10047 10048 `-mieee-conformant' 10049 This option marks the generated code as IEEE conformant. You must 10050 not use this option unless you also specify `-mtrap-precision=i' 10051 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 10052 effect is to emit the line `.eflag 48' in the function prologue of 10053 the generated assembly file. Under DEC Unix, this has the effect 10054 that IEEE-conformant math library routines will be linked in. 10055 10056 `-mbuild-constants' 10057 Normally GCC examines a 32- or 64-bit integer constant to see if 10058 it can construct it from smaller constants in two or three 10059 instructions. If it cannot, it will output the constant as a 10060 literal and generate code to load it from the data segment at 10061 runtime. 10062 10063 Use this option to require GCC to construct _all_ integer constants 10064 using code, even if it takes more instructions (the maximum is 10065 six). 10066 10067 You would typically use this option to build a shared library 10068 dynamic loader. Itself a shared library, it must relocate itself 10069 in memory before it can find the variables and constants in its 10070 own data segment. 10071 10072 `-malpha-as' 10073 `-mgas' 10074 Select whether to generate code to be assembled by the 10075 vendor-supplied assembler (`-malpha-as') or by the GNU assembler 10076 `-mgas'. 10077 10078 `-mbwx' 10079 `-mno-bwx' 10080 `-mcix' 10081 `-mno-cix' 10082 `-mfix' 10083 `-mno-fix' 10084 `-mmax' 10085 `-mno-max' 10086 Indicate whether GCC should generate code to use the optional BWX, 10087 CIX, FIX and MAX instruction sets. The default is to use the 10088 instruction sets supported by the CPU type specified via `-mcpu=' 10089 option or that of the CPU on which GCC was built if none was 10090 specified. 10091 10092 `-mfloat-vax' 10093 `-mfloat-ieee' 10094 Generate code that uses (does not use) VAX F and G floating point 10095 arithmetic instead of IEEE single and double precision. 10096 10097 `-mexplicit-relocs' 10098 `-mno-explicit-relocs' 10099 Older Alpha assemblers provided no way to generate symbol 10100 relocations except via assembler macros. Use of these macros does 10101 not allow optimal instruction scheduling. GNU binutils as of 10102 version 2.12 supports a new syntax that allows the compiler to 10103 explicitly mark which relocations should apply to which 10104 instructions. This option is mostly useful for debugging, as GCC 10105 detects the capabilities of the assembler when it is built and 10106 sets the default accordingly. 10107 10108 `-msmall-data' 10109 `-mlarge-data' 10110 When `-mexplicit-relocs' is in effect, static data is accessed via 10111 "gp-relative" relocations. When `-msmall-data' is used, objects 8 10112 bytes long or smaller are placed in a "small data area" (the 10113 `.sdata' and `.sbss' sections) and are accessed via 16-bit 10114 relocations off of the `$gp' register. This limits the size of 10115 the small data area to 64KB, but allows the variables to be 10116 directly accessed via a single instruction. 10117 10118 The default is `-mlarge-data'. With this option the data area is 10119 limited to just below 2GB. Programs that require more than 2GB of 10120 data must use `malloc' or `mmap' to allocate the data in the heap 10121 instead of in the program's data segment. 10122 10123 When generating code for shared libraries, `-fpic' implies 10124 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 10125 10126 `-msmall-text' 10127 `-mlarge-text' 10128 When `-msmall-text' is used, the compiler assumes that the code of 10129 the entire program (or shared library) fits in 4MB, and is thus 10130 reachable with a branch instruction. When `-msmall-data' is used, 10131 the compiler can assume that all local symbols share the same 10132 `$gp' value, and thus reduce the number of instructions required 10133 for a function call from 4 to 1. 10134 10135 The default is `-mlarge-text'. 10136 10137 `-mcpu=CPU_TYPE' 10138 Set the instruction set and instruction scheduling parameters for 10139 machine type CPU_TYPE. You can specify either the `EV' style name 10140 or the corresponding chip number. GCC supports scheduling 10141 parameters for the EV4, EV5 and EV6 family of processors and will 10142 choose the default values for the instruction set from the 10143 processor you specify. If you do not specify a processor type, 10144 GCC will default to the processor on which the compiler was built. 10145 10146 Supported values for CPU_TYPE are 10147 10148 `ev4' 10149 `ev45' 10150 `21064' 10151 Schedules as an EV4 and has no instruction set extensions. 10152 10153 `ev5' 10154 `21164' 10155 Schedules as an EV5 and has no instruction set extensions. 10156 10157 `ev56' 10158 `21164a' 10159 Schedules as an EV5 and supports the BWX extension. 10160 10161 `pca56' 10162 `21164pc' 10163 `21164PC' 10164 Schedules as an EV5 and supports the BWX and MAX extensions. 10165 10166 `ev6' 10167 `21264' 10168 Schedules as an EV6 and supports the BWX, FIX, and MAX 10169 extensions. 10170 10171 `ev67' 10172 `21264a' 10173 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 10174 extensions. 10175 10176 Native Linux/GNU toolchains also support the value `native', which 10177 selects the best architecture option for the host processor. 10178 `-mcpu=native' has no effect if GCC does not recognize the 10179 processor. 10180 10181 `-mtune=CPU_TYPE' 10182 Set only the instruction scheduling parameters for machine type 10183 CPU_TYPE. The instruction set is not changed. 10184 10185 Native Linux/GNU toolchains also support the value `native', which 10186 selects the best architecture option for the host processor. 10187 `-mtune=native' has no effect if GCC does not recognize the 10188 processor. 10189 10190 `-mmemory-latency=TIME' 10191 Sets the latency the scheduler should assume for typical memory 10192 references as seen by the application. This number is highly 10193 dependent on the memory access patterns used by the application 10194 and the size of the external cache on the machine. 10195 10196 Valid options for TIME are 10197 10198 `NUMBER' 10199 A decimal number representing clock cycles. 10200 10201 `L1' 10202 `L2' 10203 `L3' 10204 `main' 10205 The compiler contains estimates of the number of clock cycles 10206 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 10207 (also called Dcache, Scache, and Bcache), as well as to main 10208 memory. Note that L3 is only valid for EV5. 10209 10210 10211 10212 File: gcc.info, Node: DEC Alpha/VMS Options, Next: FR30 Options, Prev: DEC Alpha Options, Up: Submodel Options 10213 10214 3.17.9 DEC Alpha/VMS Options 10215 ---------------------------- 10216 10217 These `-m' options are defined for the DEC Alpha/VMS implementations: 10218 10219 `-mvms-return-codes' 10220 Return VMS condition codes from main. The default is to return 10221 POSIX style condition (e.g. error) codes. 10222 10223 10224 File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options 10225 10226 3.17.10 FR30 Options 10227 -------------------- 10228 10229 These options are defined specifically for the FR30 port. 10230 10231 `-msmall-model' 10232 Use the small address space model. This can produce smaller code, 10233 but it does assume that all symbolic values and addresses will fit 10234 into a 20-bit range. 10235 10236 `-mno-lsim' 10237 Assume that run-time support has been provided and so there is no 10238 need to include the simulator library (`libsim.a') on the linker 10239 command line. 10240 10241 10242 10243 File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 10244 10245 3.17.11 FRV Options 10246 ------------------- 10247 10248 `-mgpr-32' 10249 Only use the first 32 general purpose registers. 10250 10251 `-mgpr-64' 10252 Use all 64 general purpose registers. 10253 10254 `-mfpr-32' 10255 Use only the first 32 floating point registers. 10256 10257 `-mfpr-64' 10258 Use all 64 floating point registers 10259 10260 `-mhard-float' 10261 Use hardware instructions for floating point operations. 10262 10263 `-msoft-float' 10264 Use library routines for floating point operations. 10265 10266 `-malloc-cc' 10267 Dynamically allocate condition code registers. 10268 10269 `-mfixed-cc' 10270 Do not try to dynamically allocate condition code registers, only 10271 use `icc0' and `fcc0'. 10272 10273 `-mdword' 10274 Change ABI to use double word insns. 10275 10276 `-mno-dword' 10277 Do not use double word instructions. 10278 10279 `-mdouble' 10280 Use floating point double instructions. 10281 10282 `-mno-double' 10283 Do not use floating point double instructions. 10284 10285 `-mmedia' 10286 Use media instructions. 10287 10288 `-mno-media' 10289 Do not use media instructions. 10290 10291 `-mmuladd' 10292 Use multiply and add/subtract instructions. 10293 10294 `-mno-muladd' 10295 Do not use multiply and add/subtract instructions. 10296 10297 `-mfdpic' 10298 Select the FDPIC ABI, that uses function descriptors to represent 10299 pointers to functions. Without any PIC/PIE-related options, it 10300 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 10301 and small data are within a 12-bit range from the GOT base 10302 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 10303 bits. With a `bfin-elf' target, this option implies `-msim'. 10304 10305 `-minline-plt' 10306 Enable inlining of PLT entries in function calls to functions that 10307 are not known to bind locally. It has no effect without `-mfdpic'. 10308 It's enabled by default if optimizing for speed and compiling for 10309 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 10310 optimization option such as `-O3' or above is present in the 10311 command line. 10312 10313 `-mTLS' 10314 Assume a large TLS segment when generating thread-local code. 10315 10316 `-mtls' 10317 Do not assume a large TLS segment when generating thread-local 10318 code. 10319 10320 `-mgprel-ro' 10321 Enable the use of `GPREL' relocations in the FDPIC ABI for data 10322 that is known to be in read-only sections. It's enabled by 10323 default, except for `-fpic' or `-fpie': even though it may help 10324 make the global offset table smaller, it trades 1 instruction for 10325 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 10326 of which may be shared by multiple symbols, and it avoids the need 10327 for a GOT entry for the referenced symbol, so it's more likely to 10328 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 10329 10330 `-multilib-library-pic' 10331 Link with the (library, not FD) pic libraries. It's implied by 10332 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 10333 `-mfdpic'. You should never have to use it explicitly. 10334 10335 `-mlinked-fp' 10336 Follow the EABI requirement of always creating a frame pointer 10337 whenever a stack frame is allocated. This option is enabled by 10338 default and can be disabled with `-mno-linked-fp'. 10339 10340 `-mlong-calls' 10341 Use indirect addressing to call functions outside the current 10342 compilation unit. This allows the functions to be placed anywhere 10343 within the 32-bit address space. 10344 10345 `-malign-labels' 10346 Try to align labels to an 8-byte boundary by inserting nops into 10347 the previous packet. This option only has an effect when VLIW 10348 packing is enabled. It doesn't create new packets; it merely adds 10349 nops to existing ones. 10350 10351 `-mlibrary-pic' 10352 Generate position-independent EABI code. 10353 10354 `-macc-4' 10355 Use only the first four media accumulator registers. 10356 10357 `-macc-8' 10358 Use all eight media accumulator registers. 10359 10360 `-mpack' 10361 Pack VLIW instructions. 10362 10363 `-mno-pack' 10364 Do not pack VLIW instructions. 10365 10366 `-mno-eflags' 10367 Do not mark ABI switches in e_flags. 10368 10369 `-mcond-move' 10370 Enable the use of conditional-move instructions (default). 10371 10372 This switch is mainly for debugging the compiler and will likely 10373 be removed in a future version. 10374 10375 `-mno-cond-move' 10376 Disable the use of conditional-move instructions. 10377 10378 This switch is mainly for debugging the compiler and will likely 10379 be removed in a future version. 10380 10381 `-mscc' 10382 Enable the use of conditional set instructions (default). 10383 10384 This switch is mainly for debugging the compiler and will likely 10385 be removed in a future version. 10386 10387 `-mno-scc' 10388 Disable the use of conditional set instructions. 10389 10390 This switch is mainly for debugging the compiler and will likely 10391 be removed in a future version. 10392 10393 `-mcond-exec' 10394 Enable the use of conditional execution (default). 10395 10396 This switch is mainly for debugging the compiler and will likely 10397 be removed in a future version. 10398 10399 `-mno-cond-exec' 10400 Disable the use of conditional execution. 10401 10402 This switch is mainly for debugging the compiler and will likely 10403 be removed in a future version. 10404 10405 `-mvliw-branch' 10406 Run a pass to pack branches into VLIW instructions (default). 10407 10408 This switch is mainly for debugging the compiler and will likely 10409 be removed in a future version. 10410 10411 `-mno-vliw-branch' 10412 Do not run a pass to pack branches into VLIW instructions. 10413 10414 This switch is mainly for debugging the compiler and will likely 10415 be removed in a future version. 10416 10417 `-mmulti-cond-exec' 10418 Enable optimization of `&&' and `||' in conditional execution 10419 (default). 10420 10421 This switch is mainly for debugging the compiler and will likely 10422 be removed in a future version. 10423 10424 `-mno-multi-cond-exec' 10425 Disable optimization of `&&' and `||' in conditional execution. 10426 10427 This switch is mainly for debugging the compiler and will likely 10428 be removed in a future version. 10429 10430 `-mnested-cond-exec' 10431 Enable nested conditional execution optimizations (default). 10432 10433 This switch is mainly for debugging the compiler and will likely 10434 be removed in a future version. 10435 10436 `-mno-nested-cond-exec' 10437 Disable nested conditional execution optimizations. 10438 10439 This switch is mainly for debugging the compiler and will likely 10440 be removed in a future version. 10441 10442 `-moptimize-membar' 10443 This switch removes redundant `membar' instructions from the 10444 compiler generated code. It is enabled by default. 10445 10446 `-mno-optimize-membar' 10447 This switch disables the automatic removal of redundant `membar' 10448 instructions from the generated code. 10449 10450 `-mtomcat-stats' 10451 Cause gas to print out tomcat statistics. 10452 10453 `-mcpu=CPU' 10454 Select the processor type for which to generate code. Possible 10455 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 10456 `fr400', `fr300' and `simple'. 10457 10458 10459 10460 File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 10461 10462 3.17.12 GNU/Linux Options 10463 ------------------------- 10464 10465 These `-m' options are defined for GNU/Linux targets: 10466 10467 `-mglibc' 10468 Use the GNU C library instead of uClibc. This is the default 10469 except on `*-*-linux-*uclibc*' targets. 10470 10471 `-muclibc' 10472 Use uClibc instead of the GNU C library. This is the default on 10473 `*-*-linux-*uclibc*' targets. 10474 10475 10476 File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 10477 10478 3.17.13 H8/300 Options 10479 ---------------------- 10480 10481 These `-m' options are defined for the H8/300 implementations: 10482 10483 `-mrelax' 10484 Shorten some address references at link time, when possible; uses 10485 the linker option `-relax'. *Note `ld' and the H8/300: 10486 (ld)H8/300, for a fuller description. 10487 10488 `-mh' 10489 Generate code for the H8/300H. 10490 10491 `-ms' 10492 Generate code for the H8S. 10493 10494 `-mn' 10495 Generate code for the H8S and H8/300H in the normal mode. This 10496 switch must be used either with `-mh' or `-ms'. 10497 10498 `-ms2600' 10499 Generate code for the H8S/2600. This switch must be used with 10500 `-ms'. 10501 10502 `-mint32' 10503 Make `int' data 32 bits by default. 10504 10505 `-malign-300' 10506 On the H8/300H and H8S, use the same alignment rules as for the 10507 H8/300. The default for the H8/300H and H8S is to align longs and 10508 floats on 4 byte boundaries. `-malign-300' causes them to be 10509 aligned on 2 byte boundaries. This option has no effect on the 10510 H8/300. 10511 10512 10513 File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 10514 10515 3.17.14 HPPA Options 10516 -------------------- 10517 10518 These `-m' options are defined for the HPPA family of computers: 10519 10520 `-march=ARCHITECTURE-TYPE' 10521 Generate code for the specified architecture. The choices for 10522 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 10523 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 10524 an HP-UX system to determine the proper architecture option for 10525 your machine. Code compiled for lower numbered architectures will 10526 run on higher numbered architectures, but not the other way around. 10527 10528 `-mpa-risc-1-0' 10529 `-mpa-risc-1-1' 10530 `-mpa-risc-2-0' 10531 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 10532 respectively. 10533 10534 `-mbig-switch' 10535 Generate code suitable for big switch tables. Use this option 10536 only if the assembler/linker complain about out of range branches 10537 within a switch table. 10538 10539 `-mjump-in-delay' 10540 Fill delay slots of function calls with unconditional jump 10541 instructions by modifying the return pointer for the function call 10542 to be the target of the conditional jump. 10543 10544 `-mdisable-fpregs' 10545 Prevent floating point registers from being used in any manner. 10546 This is necessary for compiling kernels which perform lazy context 10547 switching of floating point registers. If you use this option and 10548 attempt to perform floating point operations, the compiler will 10549 abort. 10550 10551 `-mdisable-indexing' 10552 Prevent the compiler from using indexing address modes. This 10553 avoids some rather obscure problems when compiling MIG generated 10554 code under MACH. 10555 10556 `-mno-space-regs' 10557 Generate code that assumes the target has no space registers. 10558 This allows GCC to generate faster indirect calls and use unscaled 10559 index address modes. 10560 10561 Such code is suitable for level 0 PA systems and kernels. 10562 10563 `-mfast-indirect-calls' 10564 Generate code that assumes calls never cross space boundaries. 10565 This allows GCC to emit code which performs faster indirect calls. 10566 10567 This option will not work in the presence of shared libraries or 10568 nested functions. 10569 10570 `-mfixed-range=REGISTER-RANGE' 10571 Generate code treating the given register range as fixed registers. 10572 A fixed register is one that the register allocator can not use. 10573 This is useful when compiling kernel code. A register range is 10574 specified as two registers separated by a dash. Multiple register 10575 ranges can be specified separated by a comma. 10576 10577 `-mlong-load-store' 10578 Generate 3-instruction load and store sequences as sometimes 10579 required by the HP-UX 10 linker. This is equivalent to the `+k' 10580 option to the HP compilers. 10581 10582 `-mportable-runtime' 10583 Use the portable calling conventions proposed by HP for ELF 10584 systems. 10585 10586 `-mgas' 10587 Enable the use of assembler directives only GAS understands. 10588 10589 `-mschedule=CPU-TYPE' 10590 Schedule code according to the constraints for the machine type 10591 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 10592 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 10593 HP-UX system to determine the proper scheduling option for your 10594 machine. The default scheduling is `8000'. 10595 10596 `-mlinker-opt' 10597 Enable the optimization pass in the HP-UX linker. Note this makes 10598 symbolic debugging impossible. It also triggers a bug in the 10599 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 10600 messages when linking some programs. 10601 10602 `-msoft-float' 10603 Generate output containing library calls for floating point. 10604 *Warning:* the requisite libraries are not available for all HPPA 10605 targets. Normally the facilities of the machine's usual C 10606 compiler are used, but this cannot be done directly in 10607 cross-compilation. You must make your own arrangements to provide 10608 suitable library functions for cross-compilation. 10609 10610 `-msoft-float' changes the calling convention in the output file; 10611 therefore, it is only useful if you compile _all_ of a program with 10612 this option. In particular, you need to compile `libgcc.a', the 10613 library that comes with GCC, with `-msoft-float' in order for this 10614 to work. 10615 10616 `-msio' 10617 Generate the predefine, `_SIO', for server IO. The default is 10618 `-mwsio'. This generates the predefines, `__hp9000s700', 10619 `__hp9000s700__' and `_WSIO', for workstation IO. These options 10620 are available under HP-UX and HI-UX. 10621 10622 `-mgnu-ld' 10623 Use GNU ld specific options. This passes `-shared' to ld when 10624 building a shared library. It is the default when GCC is 10625 configured, explicitly or implicitly, with the GNU linker. This 10626 option does not have any affect on which ld is called, it only 10627 changes what parameters are passed to that ld. The ld that is 10628 called is determined by the `--with-ld' configure option, GCC's 10629 program search path, and finally by the user's `PATH'. The linker 10630 used by GCC can be printed using `which `gcc 10631 -print-prog-name=ld`'. This option is only available on the 64 10632 bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'. 10633 10634 `-mhp-ld' 10635 Use HP ld specific options. This passes `-b' to ld when building 10636 a shared library and passes `+Accept TypeMismatch' to ld on all 10637 links. It is the default when GCC is configured, explicitly or 10638 implicitly, with the HP linker. This option does not have any 10639 affect on which ld is called, it only changes what parameters are 10640 passed to that ld. The ld that is called is determined by the 10641 `--with-ld' configure option, GCC's program search path, and 10642 finally by the user's `PATH'. The linker used by GCC can be 10643 printed using `which `gcc -print-prog-name=ld`'. This option is 10644 only available on the 64 bit HP-UX GCC, i.e. configured with 10645 `hppa*64*-*-hpux*'. 10646 10647 `-mlong-calls' 10648 Generate code that uses long call sequences. This ensures that a 10649 call is always able to reach linker generated stubs. The default 10650 is to generate long calls only when the distance from the call 10651 site to the beginning of the function or translation unit, as the 10652 case may be, exceeds a predefined limit set by the branch type 10653 being used. The limits for normal calls are 7,600,000 and 240,000 10654 bytes, respectively for the PA 2.0 and PA 1.X architectures. 10655 Sibcalls are always limited at 240,000 bytes. 10656 10657 Distances are measured from the beginning of functions when using 10658 the `-ffunction-sections' option, or when using the `-mgas' and 10659 `-mno-portable-runtime' options together under HP-UX with the SOM 10660 linker. 10661 10662 It is normally not desirable to use this option as it will degrade 10663 performance. However, it may be useful in large applications, 10664 particularly when partial linking is used to build the application. 10665 10666 The types of long calls used depends on the capabilities of the 10667 assembler and linker, and the type of code being generated. The 10668 impact on systems that support long absolute calls, and long pic 10669 symbol-difference or pc-relative calls should be relatively small. 10670 However, an indirect call is used on 32-bit ELF systems in pic code 10671 and it is quite long. 10672 10673 `-munix=UNIX-STD' 10674 Generate compiler predefines and select a startfile for the 10675 specified UNIX standard. The choices for UNIX-STD are `93', `95' 10676 and `98'. `93' is supported on all HP-UX versions. `95' is 10677 available on HP-UX 10.10 and later. `98' is available on HP-UX 10678 11.11 and later. The default values are `93' for HP-UX 10.00, 10679 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 10680 later. 10681 10682 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 10683 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 10684 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 10685 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 10686 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 10687 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 10688 10689 It is _important_ to note that this option changes the interfaces 10690 for various library routines. It also affects the operational 10691 behavior of the C library. Thus, _extreme_ care is needed in 10692 using this option. 10693 10694 Library code that is intended to operate with more than one UNIX 10695 standard must test, set and restore the variable 10696 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 10697 provide this capability. 10698 10699 `-nolibdld' 10700 Suppress the generation of link options to search libdld.sl when 10701 the `-static' option is specified on HP-UX 10 and later. 10702 10703 `-static' 10704 The HP-UX implementation of setlocale in libc has a dependency on 10705 libdld.sl. There isn't an archive version of libdld.sl. Thus, 10706 when the `-static' option is specified, special link options are 10707 needed to resolve this dependency. 10708 10709 On HP-UX 10 and later, the GCC driver adds the necessary options to 10710 link with libdld.sl when the `-static' option is specified. This 10711 causes the resulting binary to be dynamic. On the 64-bit port, 10712 the linkers generate dynamic binaries by default in any case. The 10713 `-nolibdld' option can be used to prevent the GCC driver from 10714 adding these link options. 10715 10716 `-threads' 10717 Add support for multithreading with the "dce thread" library under 10718 HP-UX. This option sets flags for both the preprocessor and 10719 linker. 10720 10721 10722 File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options 10723 10724 3.17.15 Intel 386 and AMD x86-64 Options 10725 ---------------------------------------- 10726 10727 These `-m' options are defined for the i386 and x86-64 family of 10728 computers: 10729 10730 `-mtune=CPU-TYPE' 10731 Tune to CPU-TYPE everything applicable about the generated code, 10732 except for the ABI and the set of available instructions. The 10733 choices for CPU-TYPE are: 10734 _generic_ 10735 Produce code optimized for the most common IA32/AMD64/EM64T 10736 processors. If you know the CPU on which your code will run, 10737 then you should use the corresponding `-mtune' option instead 10738 of `-mtune=generic'. But, if you do not know exactly what 10739 CPU users of your application will have, then you should use 10740 this option. 10741 10742 As new processors are deployed in the marketplace, the 10743 behavior of this option will change. Therefore, if you 10744 upgrade to a newer version of GCC, the code generated option 10745 will change to reflect the processors that were most common 10746 when that version of GCC was released. 10747 10748 There is no `-march=generic' option because `-march' 10749 indicates the instruction set the compiler can use, and there 10750 is no generic instruction set applicable to all processors. 10751 In contrast, `-mtune' indicates the processor (or, in this 10752 case, collection of processors) for which the code is 10753 optimized. 10754 10755 _native_ 10756 This selects the CPU to tune for at compilation time by 10757 determining the processor type of the compiling machine. 10758 Using `-mtune=native' will produce code optimized for the 10759 local machine under the constraints of the selected 10760 instruction set. Using `-march=native' will enable all 10761 instruction subsets supported by the local machine (hence the 10762 result might not run on different machines). 10763 10764 _i386_ 10765 Original Intel's i386 CPU. 10766 10767 _i486_ 10768 Intel's i486 CPU. (No scheduling is implemented for this 10769 chip.) 10770 10771 _i586, pentium_ 10772 Intel Pentium CPU with no MMX support. 10773 10774 _pentium-mmx_ 10775 Intel PentiumMMX CPU based on Pentium core with MMX 10776 instruction set support. 10777 10778 _pentiumpro_ 10779 Intel PentiumPro CPU. 10780 10781 _i686_ 10782 Same as `generic', but when used as `march' option, PentiumPro 10783 instruction set will be used, so the code will run on all 10784 i686 family chips. 10785 10786 _pentium2_ 10787 Intel Pentium2 CPU based on PentiumPro core with MMX 10788 instruction set support. 10789 10790 _pentium3, pentium3m_ 10791 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE 10792 instruction set support. 10793 10794 _pentium-m_ 10795 Low power version of Intel Pentium3 CPU with MMX, SSE and 10796 SSE2 instruction set support. Used by Centrino notebooks. 10797 10798 _pentium4, pentium4m_ 10799 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set 10800 support. 10801 10802 _prescott_ 10803 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 10804 and SSE3 instruction set support. 10805 10806 _nocona_ 10807 Improved version of Intel Pentium4 CPU with 64-bit 10808 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 10809 10810 _core2_ 10811 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 10812 and SSSE3 instruction set support. 10813 10814 _k6_ 10815 AMD K6 CPU with MMX instruction set support. 10816 10817 _k6-2, k6-3_ 10818 Improved versions of AMD K6 CPU with MMX and 3dNOW! 10819 instruction set support. 10820 10821 _athlon, athlon-tbird_ 10822 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE 10823 prefetch instructions support. 10824 10825 _athlon-4, athlon-xp, athlon-mp_ 10826 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and 10827 full SSE instruction set support. 10828 10829 _k8, opteron, athlon64, athlon-fx_ 10830 AMD K8 core based CPUs with x86-64 instruction set support. 10831 (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 10832 64-bit instruction set extensions.) 10833 10834 _k8-sse3, opteron-sse3, athlon64-sse3_ 10835 Improved versions of k8, opteron and athlon64 with SSE3 10836 instruction set support. 10837 10838 _amdfam10, barcelona_ 10839 AMD Family 10h core based CPUs with x86-64 instruction set 10840 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 10841 3dNOW!, enhanced 3dNOW!, ABM and 64-bit instruction set 10842 extensions.) 10843 10844 _winchip-c6_ 10845 IDT Winchip C6 CPU, dealt in same way as i486 with additional 10846 MMX instruction set support. 10847 10848 _winchip2_ 10849 IDT Winchip2 CPU, dealt in same way as i486 with additional 10850 MMX and 3dNOW! instruction set support. 10851 10852 _c3_ 10853 Via C3 CPU with MMX and 3dNOW! instruction set support. (No 10854 scheduling is implemented for this chip.) 10855 10856 _c3-2_ 10857 Via C3-2 CPU with MMX and SSE instruction set support. (No 10858 scheduling is implemented for this chip.) 10859 10860 _geode_ 10861 Embedded AMD CPU with MMX and 3dNOW! instruction set support. 10862 10863 While picking a specific CPU-TYPE will schedule things 10864 appropriately for that particular chip, the compiler will not 10865 generate any code that does not run on the i386 without the 10866 `-march=CPU-TYPE' option being used. 10867 10868 `-march=CPU-TYPE' 10869 Generate instructions for the machine type CPU-TYPE. The choices 10870 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying 10871 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 10872 10873 `-mcpu=CPU-TYPE' 10874 A deprecated synonym for `-mtune'. 10875 10876 `-mfpmath=UNIT' 10877 Generate floating point arithmetics for selected unit UNIT. The 10878 choices for UNIT are: 10879 10880 `387' 10881 Use the standard 387 floating point coprocessor present 10882 majority of chips and emulated otherwise. Code compiled with 10883 this option will run almost everywhere. The temporary 10884 results are computed in 80bit precision instead of precision 10885 specified by the type resulting in slightly different results 10886 compared to most of other chips. See `-ffloat-store' for 10887 more detailed description. 10888 10889 This is the default choice for i386 compiler. 10890 10891 `sse' 10892 Use scalar floating point instructions present in the SSE 10893 instruction set. This instruction set is supported by 10894 Pentium3 and newer chips, in the AMD line by Athlon-4, 10895 Athlon-xp and Athlon-mp chips. The earlier version of SSE 10896 instruction set supports only single precision arithmetics, 10897 thus the double and extended precision arithmetics is still 10898 done using 387. Later version, present only in Pentium4 and 10899 the future AMD x86-64 chips supports double precision 10900 arithmetics too. 10901 10902 For the i386 compiler, you need to use `-march=CPU-TYPE', 10903 `-msse' or `-msse2' switches to enable SSE extensions and 10904 make this option effective. For the x86-64 compiler, these 10905 extensions are enabled by default. 10906 10907 The resulting code should be considerably faster in the 10908 majority of cases and avoid the numerical instability 10909 problems of 387 code, but may break some existing code that 10910 expects temporaries to be 80bit. 10911 10912 This is the default choice for the x86-64 compiler. 10913 10914 `sse,387' 10915 `sse+387' 10916 `both' 10917 Attempt to utilize both instruction sets at once. This 10918 effectively double the amount of available registers and on 10919 chips with separate execution units for 387 and SSE the 10920 execution resources too. Use this option with care, as it is 10921 still experimental, because the GCC register allocator does 10922 not model separate functional units well resulting in 10923 instable performance. 10924 10925 `-masm=DIALECT' 10926 Output asm instructions using selected DIALECT. Supported choices 10927 are `intel' or `att' (the default one). Darwin does not support 10928 `intel'. 10929 10930 `-mieee-fp' 10931 `-mno-ieee-fp' 10932 Control whether or not the compiler uses IEEE floating point 10933 comparisons. These handle correctly the case where the result of a 10934 comparison is unordered. 10935 10936 `-msoft-float' 10937 Generate output containing library calls for floating point. 10938 *Warning:* the requisite libraries are not part of GCC. Normally 10939 the facilities of the machine's usual C compiler are used, but 10940 this can't be done directly in cross-compilation. You must make 10941 your own arrangements to provide suitable library functions for 10942 cross-compilation. 10943 10944 On machines where a function returns floating point results in the 10945 80387 register stack, some floating point opcodes may be emitted 10946 even if `-msoft-float' is used. 10947 10948 `-mno-fp-ret-in-387' 10949 Do not use the FPU registers for return values of functions. 10950 10951 The usual calling convention has functions return values of types 10952 `float' and `double' in an FPU register, even if there is no FPU. 10953 The idea is that the operating system should emulate an FPU. 10954 10955 The option `-mno-fp-ret-in-387' causes such values to be returned 10956 in ordinary CPU registers instead. 10957 10958 `-mno-fancy-math-387' 10959 Some 387 emulators do not support the `sin', `cos' and `sqrt' 10960 instructions for the 387. Specify this option to avoid generating 10961 those instructions. This option is the default on FreeBSD, 10962 OpenBSD and NetBSD. This option is overridden when `-march' 10963 indicates that the target cpu will always have an FPU and so the 10964 instruction will not need emulation. As of revision 2.6.1, these 10965 instructions are not generated unless you also use the 10966 `-funsafe-math-optimizations' switch. 10967 10968 `-malign-double' 10969 `-mno-align-double' 10970 Control whether GCC aligns `double', `long double', and `long 10971 long' variables on a two word boundary or a one word boundary. 10972 Aligning `double' variables on a two word boundary will produce 10973 code that runs somewhat faster on a `Pentium' at the expense of 10974 more memory. 10975 10976 On x86-64, `-malign-double' is enabled by default. 10977 10978 *Warning:* if you use the `-malign-double' switch, structures 10979 containing the above types will be aligned differently than the 10980 published application binary interface specifications for the 386 10981 and will not be binary compatible with structures in code compiled 10982 without that switch. 10983 10984 `-m96bit-long-double' 10985 `-m128bit-long-double' 10986 These switches control the size of `long double' type. The i386 10987 application binary interface specifies the size to be 96 bits, so 10988 `-m96bit-long-double' is the default in 32 bit mode. 10989 10990 Modern architectures (Pentium and newer) would prefer `long double' 10991 to be aligned to an 8 or 16 byte boundary. In arrays or structures 10992 conforming to the ABI, this would not be possible. So specifying a 10993 `-m128bit-long-double' will align `long double' to a 16 byte 10994 boundary by padding the `long double' with an additional 32 bit 10995 zero. 10996 10997 In the x86-64 compiler, `-m128bit-long-double' is the default 10998 choice as its ABI specifies that `long double' is to be aligned on 10999 16 byte boundary. 11000 11001 Notice that neither of these options enable any extra precision 11002 over the x87 standard of 80 bits for a `long double'. 11003 11004 *Warning:* if you override the default value for your target ABI, 11005 the structures and arrays containing `long double' variables will 11006 change their size as well as function calling convention for 11007 function taking `long double' will be modified. Hence they will 11008 not be binary compatible with arrays or structures in code 11009 compiled without that switch. 11010 11011 `-mlarge-data-threshold=NUMBER' 11012 When `-mcmodel=medium' is specified, the data greater than 11013 THRESHOLD are placed in large data section. This value must be the 11014 same across all object linked into the binary and defaults to 11015 65535. 11016 11017 `-mrtd' 11018 Use a different function-calling convention, in which functions 11019 that take a fixed number of arguments return with the `ret' NUM 11020 instruction, which pops their arguments while returning. This 11021 saves one instruction in the caller since there is no need to pop 11022 the arguments there. 11023 11024 You can specify that an individual function is called with this 11025 calling sequence with the function attribute `stdcall'. You can 11026 also override the `-mrtd' option by using the function attribute 11027 `cdecl'. *Note Function Attributes::. 11028 11029 *Warning:* this calling convention is incompatible with the one 11030 normally used on Unix, so you cannot use it if you need to call 11031 libraries compiled with the Unix compiler. 11032 11033 Also, you must provide function prototypes for all functions that 11034 take variable numbers of arguments (including `printf'); otherwise 11035 incorrect code will be generated for calls to those functions. 11036 11037 In addition, seriously incorrect code will result if you call a 11038 function with too many arguments. (Normally, extra arguments are 11039 harmlessly ignored.) 11040 11041 `-mregparm=NUM' 11042 Control how many registers are used to pass integer arguments. By 11043 default, no registers are used to pass arguments, and at most 3 11044 registers can be used. You can control this behavior for a 11045 specific function by using the function attribute `regparm'. 11046 *Note Function Attributes::. 11047 11048 *Warning:* if you use this switch, and NUM is nonzero, then you 11049 must build all modules with the same value, including any 11050 libraries. This includes the system libraries and startup modules. 11051 11052 `-msseregparm' 11053 Use SSE register passing conventions for float and double arguments 11054 and return values. You can control this behavior for a specific 11055 function by using the function attribute `sseregparm'. *Note 11056 Function Attributes::. 11057 11058 *Warning:* if you use this switch then you must build all modules 11059 with the same value, including any libraries. This includes the 11060 system libraries and startup modules. 11061 11062 `-mpc32' 11063 `-mpc64' 11064 `-mpc80' 11065 Set 80387 floating-point precision to 32, 64 or 80 bits. When 11066 `-mpc32' is specified, the significands of results of 11067 floating-point operations are rounded to 24 bits (single 11068 precision); `-mpc64' rounds the significands of results of 11069 floating-point operations to 53 bits (double precision) and 11070 `-mpc80' rounds the significands of results of floating-point 11071 operations to 64 bits (extended double precision), which is the 11072 default. When this option is used, floating-point operations in 11073 higher precisions are not available to the programmer without 11074 setting the FPU control word explicitly. 11075 11076 Setting the rounding of floating-point operations to less than the 11077 default 80 bits can speed some programs by 2% or more. Note that 11078 some mathematical libraries assume that extended precision (80 11079 bit) floating-point operations are enabled by default; routines in 11080 such libraries could suffer significant loss of accuracy, 11081 typically through so-called "catastrophic cancellation", when this 11082 option is used to set the precision to less than extended 11083 precision. 11084 11085 `-mstackrealign' 11086 Realign the stack at entry. On the Intel x86, the `-mstackrealign' 11087 option will generate an alternate prologue and epilogue that 11088 realigns the runtime stack if necessary. This supports mixing 11089 legacy codes that keep a 4-byte aligned stack with modern codes 11090 that keep a 16-byte stack for SSE compatibility. See also the 11091 attribute `force_align_arg_pointer', applicable to individual 11092 functions. 11093 11094 `-mpreferred-stack-boundary=NUM' 11095 Attempt to keep the stack boundary aligned to a 2 raised to NUM 11096 byte boundary. If `-mpreferred-stack-boundary' is not specified, 11097 the default is 4 (16 bytes or 128 bits). 11098 11099 `-mincoming-stack-boundary=NUM' 11100 Assume the incoming stack is aligned to a 2 raised to NUM byte 11101 boundary. If `-mincoming-stack-boundary' is not specified, the 11102 one specified by `-mpreferred-stack-boundary' will be used. 11103 11104 On Pentium and PentiumPro, `double' and `long double' values 11105 should be aligned to an 8 byte boundary (see `-malign-double') or 11106 suffer significant run time performance penalties. On Pentium 11107 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 11108 work properly if it is not 16 byte aligned. 11109 11110 To ensure proper alignment of this values on the stack, the stack 11111 boundary must be as aligned as that required by any value stored 11112 on the stack. Further, every function must be generated such that 11113 it keeps the stack aligned. Thus calling a function compiled with 11114 a higher preferred stack boundary from a function compiled with a 11115 lower preferred stack boundary will most likely misalign the 11116 stack. It is recommended that libraries that use callbacks always 11117 use the default setting. 11118 11119 This extra alignment does consume extra stack space, and generally 11120 increases code size. Code that is sensitive to stack space usage, 11121 such as embedded systems and operating system kernels, may want to 11122 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 11123 11124 `-mmmx' 11125 `-mno-mmx' 11126 `-msse' 11127 `-mno-sse' 11128 `-msse2' 11129 `-mno-sse2' 11130 `-msse3' 11131 `-mno-sse3' 11132 `-mssse3' 11133 `-mno-ssse3' 11134 `-msse4.1' 11135 `-mno-sse4.1' 11136 `-msse4.2' 11137 `-mno-sse4.2' 11138 `-msse4' 11139 `-mno-sse4' 11140 `-mavx' 11141 `-mno-avx' 11142 `-maes' 11143 `-mno-aes' 11144 `-mpclmul' 11145 `-mno-pclmul' 11146 `-msse4a' 11147 `-mno-sse4a' 11148 `-msse5' 11149 `-mno-sse5' 11150 `-m3dnow' 11151 `-mno-3dnow' 11152 `-mpopcnt' 11153 `-mno-popcnt' 11154 `-mabm' 11155 `-mno-abm' 11156 These switches enable or disable the use of instructions in the 11157 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, SSE4A, 11158 SSE5, ABM or 3DNow! extended instruction sets. These extensions 11159 are also available as built-in functions: see *Note X86 Built-in 11160 Functions::, for details of the functions enabled and disabled by 11161 these switches. 11162 11163 To have SSE/SSE2 instructions generated automatically from 11164 floating-point code (as opposed to 387 instructions), see 11165 `-mfpmath=sse'. 11166 11167 GCC depresses SSEx instructions when `-mavx' is used. Instead, it 11168 generates new AVX instructions or AVX equivalence for all SSEx 11169 instructions when needed. 11170 11171 These options will enable GCC to use these extended instructions in 11172 generated code, even without `-mfpmath=sse'. Applications which 11173 perform runtime CPU detection must compile separate files for each 11174 supported architecture, using the appropriate flags. In 11175 particular, the file containing the CPU detection code should be 11176 compiled without these options. 11177 11178 `-mcld' 11179 This option instructs GCC to emit a `cld' instruction in the 11180 prologue of functions that use string instructions. String 11181 instructions depend on the DF flag to select between autoincrement 11182 or autodecrement mode. While the ABI specifies the DF flag to be 11183 cleared on function entry, some operating systems violate this 11184 specification by not clearing the DF flag in their exception 11185 dispatchers. The exception handler can be invoked with the DF flag 11186 set which leads to wrong direction mode, when string instructions 11187 are used. This option can be enabled by default on 32-bit x86 11188 targets by configuring GCC with the `--enable-cld' configure 11189 option. Generation of `cld' instructions can be suppressed with 11190 the `-mno-cld' compiler option in this case. 11191 11192 `-mcx16' 11193 This option will enable GCC to use CMPXCHG16B instruction in 11194 generated code. CMPXCHG16B allows for atomic operations on 11195 128-bit double quadword (or oword) data types. This is useful for 11196 high resolution counters that could be updated by multiple 11197 processors (or cores). This instruction is generated as part of 11198 atomic built-in functions: see *Note Atomic Builtins:: for details. 11199 11200 `-msahf' 11201 This option will enable GCC to use SAHF instruction in generated 11202 64-bit code. Early Intel CPUs with Intel 64 lacked LAHF and SAHF 11203 instructions supported by AMD64 until introduction of Pentium 4 G1 11204 step in December 2005. LAHF and SAHF are load and store 11205 instructions, respectively, for certain status flags. In 64-bit 11206 mode, SAHF instruction is used to optimize `fmod', `drem' or 11207 `remainder' built-in functions: see *Note Other Builtins:: for 11208 details. 11209 11210 `-mrecip' 11211 This option will enable GCC to use RCPSS and RSQRTSS instructions 11212 (and their vectorized variants RCPPS and RSQRTPS) with an 11213 additional Newton-Raphson step to increase precision instead of 11214 DIVSS and SQRTSS (and their vectorized variants) for single 11215 precision floating point arguments. These instructions are 11216 generated only when `-funsafe-math-optimizations' is enabled 11217 together with `-finite-math-only' and `-fno-trapping-math'. Note 11218 that while the throughput of the sequence is higher than the 11219 throughput of the non-reciprocal instruction, the precision of the 11220 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 11221 equals 0.99999994). 11222 11223 `-mveclibabi=TYPE' 11224 Specifies the ABI type to use for vectorizing intrinsics using an 11225 external library. Supported types are `svml' for the Intel short 11226 vector math library and `acml' for the AMD math core library style 11227 of interfacing. GCC will currently emit calls to `vmldExp2', 11228 `vmldLn2', `vmldLog102', `vmldLog102', `vmldPow2', `vmldTanh2', 11229 `vmldTan2', `vmldAtan2', `vmldAtanh2', `vmldCbrt2', `vmldSinh2', 11230 `vmldSin2', `vmldAsinh2', `vmldAsin2', `vmldCosh2', `vmldCos2', 11231 `vmldAcosh2', `vmldAcos2', `vmlsExp4', `vmlsLn4', `vmlsLog104', 11232 `vmlsLog104', `vmlsPow4', `vmlsTanh4', `vmlsTan4', `vmlsAtan4', 11233 `vmlsAtanh4', `vmlsCbrt4', `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', 11234 `vmlsAsin4', `vmlsCosh4', `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' 11235 for corresponding function type when `-mveclibabi=svml' is used 11236 and `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log', 11237 `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', 11238 `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and 11239 `__vrs4_powf' for corresponding function type when 11240 `-mveclibabi=acml' is used. Both `-ftree-vectorize' and 11241 `-funsafe-math-optimizations' have to be enabled. A SVML or ACML 11242 ABI compatible library will have to be specified at link time. 11243 11244 `-mpush-args' 11245 `-mno-push-args' 11246 Use PUSH operations to store outgoing parameters. This method is 11247 shorter and usually equally fast as method using SUB/MOV 11248 operations and is enabled by default. In some cases disabling it 11249 may improve performance because of improved scheduling and reduced 11250 dependencies. 11251 11252 `-maccumulate-outgoing-args' 11253 If enabled, the maximum amount of space required for outgoing 11254 arguments will be computed in the function prologue. This is 11255 faster on most modern CPUs because of reduced dependencies, 11256 improved scheduling and reduced stack usage when preferred stack 11257 boundary is not equal to 2. The drawback is a notable increase in 11258 code size. This switch implies `-mno-push-args'. 11259 11260 `-mthreads' 11261 Support thread-safe exception handling on `Mingw32'. Code that 11262 relies on thread-safe exception handling must compile and link all 11263 code with the `-mthreads' option. When compiling, `-mthreads' 11264 defines `-D_MT'; when linking, it links in a special thread helper 11265 library `-lmingwthrd' which cleans up per thread exception 11266 handling data. 11267 11268 `-mno-align-stringops' 11269 Do not align destination of inlined string operations. This 11270 switch reduces code size and improves performance in case the 11271 destination is already aligned, but GCC doesn't know about it. 11272 11273 `-minline-all-stringops' 11274 By default GCC inlines string operations only when destination is 11275 known to be aligned at least to 4 byte boundary. This enables 11276 more inlining, increase code size, but may improve performance of 11277 code that depends on fast memcpy, strlen and memset for short 11278 lengths. 11279 11280 `-minline-stringops-dynamically' 11281 For string operation of unknown size, inline runtime checks so for 11282 small blocks inline code is used, while for large blocks library 11283 call is used. 11284 11285 `-minline-compares' 11286 This option enables GCC to inline calls to memcmp and strcmp. The 11287 inlined version does a byte-by-byte comparion using a repeat string 11288 operation prefix. 11289 11290 `-mstringop-strategy=ALG' 11291 Overwrite internal decision heuristic about particular algorithm 11292 to inline string operation with. The allowed values are 11293 `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386 11294 `rep' prefix of specified size, `byte_loop', `loop', 11295 `unrolled_loop' for expanding inline loop, `libcall' for always 11296 expanding library call. 11297 11298 `-momit-leaf-frame-pointer' 11299 Don't keep the frame pointer in a register for leaf functions. 11300 This avoids the instructions to save, set up and restore frame 11301 pointers and makes an extra register available in leaf functions. 11302 The option `-fomit-frame-pointer' removes the frame pointer for 11303 all functions which might make debugging harder. 11304 11305 `-mtls-direct-seg-refs' 11306 `-mno-tls-direct-seg-refs' 11307 Controls whether TLS variables may be accessed with offsets from 11308 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 11309 whether the thread base pointer must be added. Whether or not this 11310 is legal depends on the operating system, and whether it maps the 11311 segment to cover the entire TLS area. 11312 11313 For systems that use GNU libc, the default is on. 11314 11315 `-mfused-madd' 11316 `-mno-fused-madd' 11317 Enable automatic generation of fused floating point multiply-add 11318 instructions if the ISA supports such instructions. The 11319 -mfused-madd option is on by default. The fused multiply-add 11320 instructions have a different rounding behavior compared to 11321 executing a multiply followed by an add. 11322 11323 `-msse2avx' 11324 `-mno-sse2avx' 11325 Specify that the assembler should encode SSE instructions with VEX 11326 prefix. The option `-mavx' turns this on by default. 11327 11328 These `-m' switches are supported in addition to the above on AMD 11329 x86-64 processors in 64-bit environments. 11330 11331 `-m32' 11332 `-m64' 11333 Generate code for a 32-bit or 64-bit environment. The 32-bit 11334 environment sets int, long and pointer to 32 bits and generates 11335 code that runs on any i386 system. The 64-bit environment sets 11336 int to 32 bits and long and pointer to 64 bits and generates code 11337 for AMD's x86-64 architecture. For darwin only the -m64 option 11338 turns off the `-fno-pic' and `-mdynamic-no-pic' options. 11339 11340 `-mno-red-zone' 11341 Do not use a so called red zone for x86-64 code. The red zone is 11342 mandated by the x86-64 ABI, it is a 128-byte area beyond the 11343 location of the stack pointer that will not be modified by signal 11344 or interrupt handlers and therefore can be used for temporary data 11345 without adjusting the stack pointer. The flag `-mno-red-zone' 11346 disables this red zone. 11347 11348 `-mcmodel=small' 11349 Generate code for the small code model: the program and its 11350 symbols must be linked in the lower 2 GB of the address space. 11351 Pointers are 64 bits. Programs can be statically or dynamically 11352 linked. This is the default code model. 11353 11354 `-mcmodel=kernel' 11355 Generate code for the kernel code model. The kernel runs in the 11356 negative 2 GB of the address space. This model has to be used for 11357 Linux kernel code. 11358 11359 `-mcmodel=medium' 11360 Generate code for the medium model: The program is linked in the 11361 lower 2 GB of the address space. Small symbols are also placed 11362 there. Symbols with sizes larger than `-mlarge-data-threshold' 11363 are put into large data or bss sections and can be located above 11364 2GB. Programs can be statically or dynamically linked. 11365 11366 `-mcmodel=large' 11367 Generate code for the large model: This model makes no assumptions 11368 about addresses and sizes of sections. 11369 11370 11371 File: gcc.info, Node: IA-64 Options, Next: M32C Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options 11372 11373 3.17.16 IA-64 Options 11374 --------------------- 11375 11376 These are the `-m' options defined for the Intel IA-64 architecture. 11377 11378 `-mbig-endian' 11379 Generate code for a big endian target. This is the default for 11380 HP-UX. 11381 11382 `-mlittle-endian' 11383 Generate code for a little endian target. This is the default for 11384 AIX5 and GNU/Linux. 11385 11386 `-mgnu-as' 11387 `-mno-gnu-as' 11388 Generate (or don't) code for the GNU assembler. This is the 11389 default. 11390 11391 `-mgnu-ld' 11392 `-mno-gnu-ld' 11393 Generate (or don't) code for the GNU linker. This is the default. 11394 11395 `-mno-pic' 11396 Generate code that does not use a global pointer register. The 11397 result is not position independent code, and violates the IA-64 11398 ABI. 11399 11400 `-mvolatile-asm-stop' 11401 `-mno-volatile-asm-stop' 11402 Generate (or don't) a stop bit immediately before and after 11403 volatile asm statements. 11404 11405 `-mregister-names' 11406 `-mno-register-names' 11407 Generate (or don't) `in', `loc', and `out' register names for the 11408 stacked registers. This may make assembler output more readable. 11409 11410 `-mno-sdata' 11411 `-msdata' 11412 Disable (or enable) optimizations that use the small data section. 11413 This may be useful for working around optimizer bugs. 11414 11415 `-mconstant-gp' 11416 Generate code that uses a single constant global pointer value. 11417 This is useful when compiling kernel code. 11418 11419 `-mauto-pic' 11420 Generate code that is self-relocatable. This implies 11421 `-mconstant-gp'. This is useful when compiling firmware code. 11422 11423 `-minline-float-divide-min-latency' 11424 Generate code for inline divides of floating point values using 11425 the minimum latency algorithm. 11426 11427 `-minline-float-divide-max-throughput' 11428 Generate code for inline divides of floating point values using 11429 the maximum throughput algorithm. 11430 11431 `-minline-int-divide-min-latency' 11432 Generate code for inline divides of integer values using the 11433 minimum latency algorithm. 11434 11435 `-minline-int-divide-max-throughput' 11436 Generate code for inline divides of integer values using the 11437 maximum throughput algorithm. 11438 11439 `-minline-sqrt-min-latency' 11440 Generate code for inline square roots using the minimum latency 11441 algorithm. 11442 11443 `-minline-sqrt-max-throughput' 11444 Generate code for inline square roots using the maximum throughput 11445 algorithm. 11446 11447 `-mno-dwarf2-asm' 11448 `-mdwarf2-asm' 11449 Don't (or do) generate assembler code for the DWARF2 line number 11450 debugging info. This may be useful when not using the GNU 11451 assembler. 11452 11453 `-mearly-stop-bits' 11454 `-mno-early-stop-bits' 11455 Allow stop bits to be placed earlier than immediately preceding the 11456 instruction that triggered the stop bit. This can improve 11457 instruction scheduling, but does not always do so. 11458 11459 `-mfixed-range=REGISTER-RANGE' 11460 Generate code treating the given register range as fixed registers. 11461 A fixed register is one that the register allocator can not use. 11462 This is useful when compiling kernel code. A register range is 11463 specified as two registers separated by a dash. Multiple register 11464 ranges can be specified separated by a comma. 11465 11466 `-mtls-size=TLS-SIZE' 11467 Specify bit size of immediate TLS offsets. Valid values are 14, 11468 22, and 64. 11469 11470 `-mtune=CPU-TYPE' 11471 Tune the instruction scheduling for a particular CPU, Valid values 11472 are itanium, itanium1, merced, itanium2, and mckinley. 11473 11474 `-mt' 11475 `-pthread' 11476 Add support for multithreading using the POSIX threads library. 11477 This option sets flags for both the preprocessor and linker. It 11478 does not affect the thread safety of object code produced by the 11479 compiler or that of libraries supplied with it. These are HP-UX 11480 specific flags. 11481 11482 `-milp32' 11483 `-mlp64' 11484 Generate code for a 32-bit or 64-bit environment. The 32-bit 11485 environment sets int, long and pointer to 32 bits. The 64-bit 11486 environment sets int to 32 bits and long and pointer to 64 bits. 11487 These are HP-UX specific flags. 11488 11489 `-mno-sched-br-data-spec' 11490 `-msched-br-data-spec' 11491 (Dis/En)able data speculative scheduling before reload. This will 11492 result in generation of the ld.a instructions and the 11493 corresponding check instructions (ld.c / chk.a). The default is 11494 'disable'. 11495 11496 `-msched-ar-data-spec' 11497 `-mno-sched-ar-data-spec' 11498 (En/Dis)able data speculative scheduling after reload. This will 11499 result in generation of the ld.a instructions and the 11500 corresponding check instructions (ld.c / chk.a). The default is 11501 'enable'. 11502 11503 `-mno-sched-control-spec' 11504 `-msched-control-spec' 11505 (Dis/En)able control speculative scheduling. This feature is 11506 available only during region scheduling (i.e. before reload). 11507 This will result in generation of the ld.s instructions and the 11508 corresponding check instructions chk.s . The default is 'disable'. 11509 11510 `-msched-br-in-data-spec' 11511 `-mno-sched-br-in-data-spec' 11512 (En/Dis)able speculative scheduling of the instructions that are 11513 dependent on the data speculative loads before reload. This is 11514 effective only with `-msched-br-data-spec' enabled. The default 11515 is 'enable'. 11516 11517 `-msched-ar-in-data-spec' 11518 `-mno-sched-ar-in-data-spec' 11519 (En/Dis)able speculative scheduling of the instructions that are 11520 dependent on the data speculative loads after reload. This is 11521 effective only with `-msched-ar-data-spec' enabled. The default 11522 is 'enable'. 11523 11524 `-msched-in-control-spec' 11525 `-mno-sched-in-control-spec' 11526 (En/Dis)able speculative scheduling of the instructions that are 11527 dependent on the control speculative loads. This is effective 11528 only with `-msched-control-spec' enabled. The default is 'enable'. 11529 11530 `-msched-ldc' 11531 `-mno-sched-ldc' 11532 (En/Dis)able use of simple data speculation checks ld.c . If 11533 disabled, only chk.a instructions will be emitted to check data 11534 speculative loads. The default is 'enable'. 11535 11536 `-mno-sched-control-ldc' 11537 `-msched-control-ldc' 11538 (Dis/En)able use of ld.c instructions to check control speculative 11539 loads. If enabled, in case of control speculative load with no 11540 speculatively scheduled dependent instructions this load will be 11541 emitted as ld.sa and ld.c will be used to check it. The default 11542 is 'disable'. 11543 11544 `-mno-sched-spec-verbose' 11545 `-msched-spec-verbose' 11546 (Dis/En)able printing of the information about speculative motions. 11547 11548 `-mno-sched-prefer-non-data-spec-insns' 11549 `-msched-prefer-non-data-spec-insns' 11550 If enabled, data speculative instructions will be chosen for 11551 schedule only if there are no other choices at the moment. This 11552 will make the use of the data speculation much more conservative. 11553 The default is 'disable'. 11554 11555 `-mno-sched-prefer-non-control-spec-insns' 11556 `-msched-prefer-non-control-spec-insns' 11557 If enabled, control speculative instructions will be chosen for 11558 schedule only if there are no other choices at the moment. This 11559 will make the use of the control speculation much more 11560 conservative. The default is 'disable'. 11561 11562 `-mno-sched-count-spec-in-critical-path' 11563 `-msched-count-spec-in-critical-path' 11564 If enabled, speculative dependencies will be considered during 11565 computation of the instructions priorities. This will make the 11566 use of the speculation a bit more conservative. The default is 11567 'disable'. 11568 11569 11570 11571 File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: IA-64 Options, Up: Submodel Options 11572 11573 3.17.17 M32C Options 11574 -------------------- 11575 11576 `-mcpu=NAME' 11577 Select the CPU for which code is generated. NAME may be one of 11578 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 11579 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 11580 series. 11581 11582 `-msim' 11583 Specifies that the program will be run on the simulator. This 11584 causes an alternate runtime library to be linked in which 11585 supports, for example, file I/O. You must not use this option 11586 when generating programs that will run on real hardware; you must 11587 provide your own runtime library for whatever I/O functions are 11588 needed. 11589 11590 `-memregs=NUMBER' 11591 Specifies the number of memory-based pseudo-registers GCC will use 11592 during code generation. These pseudo-registers will be used like 11593 real registers, so there is a tradeoff between GCC's ability to 11594 fit the code into available registers, and the performance penalty 11595 of using memory instead of registers. Note that all modules in a 11596 program must be compiled with the same value for this option. 11597 Because of that, you must not use this option with the default 11598 runtime libraries gcc builds. 11599 11600 11601 11602 File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 11603 11604 3.17.18 M32R/D Options 11605 ---------------------- 11606 11607 These `-m' options are defined for Renesas M32R/D architectures: 11608 11609 `-m32r2' 11610 Generate code for the M32R/2. 11611 11612 `-m32rx' 11613 Generate code for the M32R/X. 11614 11615 `-m32r' 11616 Generate code for the M32R. This is the default. 11617 11618 `-mmodel=small' 11619 Assume all objects live in the lower 16MB of memory (so that their 11620 addresses can be loaded with the `ld24' instruction), and assume 11621 all subroutines are reachable with the `bl' instruction. This is 11622 the default. 11623 11624 The addressability of a particular object can be set with the 11625 `model' attribute. 11626 11627 `-mmodel=medium' 11628 Assume objects may be anywhere in the 32-bit address space (the 11629 compiler will generate `seth/add3' instructions to load their 11630 addresses), and assume all subroutines are reachable with the `bl' 11631 instruction. 11632 11633 `-mmodel=large' 11634 Assume objects may be anywhere in the 32-bit address space (the 11635 compiler will generate `seth/add3' instructions to load their 11636 addresses), and assume subroutines may not be reachable with the 11637 `bl' instruction (the compiler will generate the much slower 11638 `seth/add3/jl' instruction sequence). 11639 11640 `-msdata=none' 11641 Disable use of the small data area. Variables will be put into 11642 one of `.data', `bss', or `.rodata' (unless the `section' 11643 attribute has been specified). This is the default. 11644 11645 The small data area consists of sections `.sdata' and `.sbss'. 11646 Objects may be explicitly put in the small data area with the 11647 `section' attribute using one of these sections. 11648 11649 `-msdata=sdata' 11650 Put small global and static data in the small data area, but do not 11651 generate special code to reference them. 11652 11653 `-msdata=use' 11654 Put small global and static data in the small data area, and 11655 generate special instructions to reference them. 11656 11657 `-G NUM' 11658 Put global and static objects less than or equal to NUM bytes into 11659 the small data or bss sections instead of the normal data or bss 11660 sections. The default value of NUM is 8. The `-msdata' option 11661 must be set to one of `sdata' or `use' for this option to have any 11662 effect. 11663 11664 All modules should be compiled with the same `-G NUM' value. 11665 Compiling with different values of NUM may or may not work; if it 11666 doesn't the linker will give an error message--incorrect code will 11667 not be generated. 11668 11669 `-mdebug' 11670 Makes the M32R specific code in the compiler display some 11671 statistics that might help in debugging programs. 11672 11673 `-malign-loops' 11674 Align all loops to a 32-byte boundary. 11675 11676 `-mno-align-loops' 11677 Do not enforce a 32-byte alignment for loops. This is the default. 11678 11679 `-missue-rate=NUMBER' 11680 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 11681 11682 `-mbranch-cost=NUMBER' 11683 NUMBER can only be 1 or 2. If it is 1 then branches will be 11684 preferred over conditional code, if it is 2, then the opposite will 11685 apply. 11686 11687 `-mflush-trap=NUMBER' 11688 Specifies the trap number to use to flush the cache. The default 11689 is 12. Valid numbers are between 0 and 15 inclusive. 11690 11691 `-mno-flush-trap' 11692 Specifies that the cache cannot be flushed by using a trap. 11693 11694 `-mflush-func=NAME' 11695 Specifies the name of the operating system function to call to 11696 flush the cache. The default is __flush_cache_, but a function 11697 call will only be used if a trap is not available. 11698 11699 `-mno-flush-func' 11700 Indicates that there is no OS function for flushing the cache. 11701 11702 11703 11704 File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Prev: M32R/D Options, Up: Submodel Options 11705 11706 3.17.19 M680x0 Options 11707 ---------------------- 11708 11709 These are the `-m' options defined for M680x0 and ColdFire processors. 11710 The default settings depend on which architecture was selected when the 11711 compiler was configured; the defaults for the most common choices are 11712 given below. 11713 11714 `-march=ARCH' 11715 Generate code for a specific M680x0 or ColdFire instruction set 11716 architecture. Permissible values of ARCH for M680x0 architectures 11717 are: `68000', `68010', `68020', `68030', `68040', `68060' and 11718 `cpu32'. ColdFire architectures are selected according to 11719 Freescale's ISA classification and the permissible values are: 11720 `isaa', `isaaplus', `isab' and `isac'. 11721 11722 gcc defines a macro `__mcfARCH__' whenever it is generating code 11723 for a ColdFire target. The ARCH in this macro is one of the 11724 `-march' arguments given above. 11725 11726 When used together, `-march' and `-mtune' select code that runs on 11727 a family of similar processors but that is optimized for a 11728 particular microarchitecture. 11729 11730 `-mcpu=CPU' 11731 Generate code for a specific M680x0 or ColdFire processor. The 11732 M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040', 11733 `68060', `68302', `68332' and `cpu32'. The ColdFire CPUs are 11734 given by the table below, which also classifies the CPUs into 11735 families: 11736 11737 *Family* *`-mcpu' arguments* 11738 `51qe' `51qe' 11739 `5206' `5202' `5204' `5206' 11740 `5206e' `5206e' 11741 `5208' `5207' `5208' 11742 `5211a' `5210a' `5211a' 11743 `5213' `5211' `5212' `5213' 11744 `5216' `5214' `5216' 11745 `52235' `52230' `52231' `52232' `52233' `52234' `52235' 11746 `5225' `5224' `5225' 11747 `5235' `5232' `5233' `5234' `5235' `523x' 11748 `5249' `5249' 11749 `5250' `5250' 11750 `5271' `5270' `5271' 11751 `5272' `5272' 11752 `5275' `5274' `5275' 11753 `5282' `5280' `5281' `5282' `528x' 11754 `5307' `5307' 11755 `5329' `5327' `5328' `5329' `532x' 11756 `5373' `5372' `5373' `537x' 11757 `5407' `5407' 11758 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x' 11759 `5480' `5481' `5482' `5483' `5484' `5485' 11760 11761 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with 11762 CPU. Other combinations of `-mcpu' and `-march' are rejected. 11763 11764 gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is 11765 selected. It also defines `__mcf_family_FAMILY', where the value 11766 of FAMILY is given by the table above. 11767 11768 `-mtune=TUNE' 11769 Tune the code for a particular microarchitecture, within the 11770 constraints set by `-march' and `-mcpu'. The M680x0 11771 microarchitectures are: `68000', `68010', `68020', `68030', 11772 `68040', `68060' and `cpu32'. The ColdFire microarchitectures 11773 are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'. 11774 11775 You can also use `-mtune=68020-40' for code that needs to run 11776 relatively well on 68020, 68030 and 68040 targets. 11777 `-mtune=68020-60' is similar but includes 68060 targets as well. 11778 These two options select the same tuning decisions as `-m68020-40' 11779 and `-m68020-60' respectively. 11780 11781 gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for 11782 680x0 architecture ARCH. It also defines `mcARCH' unless either 11783 `-ansi' or a non-GNU `-std' option is used. If gcc is tuning for 11784 a range of architectures, as selected by `-mtune=68020-40' or 11785 `-mtune=68020-60', it defines the macros for every architecture in 11786 the range. 11787 11788 gcc also defines the macro `__mUARCH__' when tuning for ColdFire 11789 microarchitecture UARCH, where UARCH is one of the arguments given 11790 above. 11791 11792 `-m68000' 11793 `-mc68000' 11794 Generate output for a 68000. This is the default when the 11795 compiler is configured for 68000-based systems. It is equivalent 11796 to `-march=68000'. 11797 11798 Use this option for microcontrollers with a 68000 or EC000 core, 11799 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 11800 11801 `-m68010' 11802 Generate output for a 68010. This is the default when the 11803 compiler is configured for 68010-based systems. It is equivalent 11804 to `-march=68010'. 11805 11806 `-m68020' 11807 `-mc68020' 11808 Generate output for a 68020. This is the default when the 11809 compiler is configured for 68020-based systems. It is equivalent 11810 to `-march=68020'. 11811 11812 `-m68030' 11813 Generate output for a 68030. This is the default when the 11814 compiler is configured for 68030-based systems. It is equivalent 11815 to `-march=68030'. 11816 11817 `-m68040' 11818 Generate output for a 68040. This is the default when the 11819 compiler is configured for 68040-based systems. It is equivalent 11820 to `-march=68040'. 11821 11822 This option inhibits the use of 68881/68882 instructions that have 11823 to be emulated by software on the 68040. Use this option if your 11824 68040 does not have code to emulate those instructions. 11825 11826 `-m68060' 11827 Generate output for a 68060. This is the default when the 11828 compiler is configured for 68060-based systems. It is equivalent 11829 to `-march=68060'. 11830 11831 This option inhibits the use of 68020 and 68881/68882 instructions 11832 that have to be emulated by software on the 68060. Use this 11833 option if your 68060 does not have code to emulate those 11834 instructions. 11835 11836 `-mcpu32' 11837 Generate output for a CPU32. This is the default when the 11838 compiler is configured for CPU32-based systems. It is equivalent 11839 to `-march=cpu32'. 11840 11841 Use this option for microcontrollers with a CPU32 or CPU32+ core, 11842 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 11843 68341, 68349 and 68360. 11844 11845 `-m5200' 11846 Generate output for a 520X ColdFire CPU. This is the default when 11847 the compiler is configured for 520X-based systems. It is 11848 equivalent to `-mcpu=5206', and is now deprecated in favor of that 11849 option. 11850 11851 Use this option for microcontroller with a 5200 core, including 11852 the MCF5202, MCF5203, MCF5204 and MCF5206. 11853 11854 `-m5206e' 11855 Generate output for a 5206e ColdFire CPU. The option is now 11856 deprecated in favor of the equivalent `-mcpu=5206e'. 11857 11858 `-m528x' 11859 Generate output for a member of the ColdFire 528X family. The 11860 option is now deprecated in favor of the equivalent `-mcpu=528x'. 11861 11862 `-m5307' 11863 Generate output for a ColdFire 5307 CPU. The option is now 11864 deprecated in favor of the equivalent `-mcpu=5307'. 11865 11866 `-m5407' 11867 Generate output for a ColdFire 5407 CPU. The option is now 11868 deprecated in favor of the equivalent `-mcpu=5407'. 11869 11870 `-mcfv4e' 11871 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 11872 This includes use of hardware floating point instructions. The 11873 option is equivalent to `-mcpu=547x', and is now deprecated in 11874 favor of that option. 11875 11876 `-m68020-40' 11877 Generate output for a 68040, without using any of the new 11878 instructions. This results in code which can run relatively 11879 efficiently on either a 68020/68881 or a 68030 or a 68040. The 11880 generated code does use the 68881 instructions that are emulated 11881 on the 68040. 11882 11883 The option is equivalent to `-march=68020' `-mtune=68020-40'. 11884 11885 `-m68020-60' 11886 Generate output for a 68060, without using any of the new 11887 instructions. This results in code which can run relatively 11888 efficiently on either a 68020/68881 or a 68030 or a 68040. The 11889 generated code does use the 68881 instructions that are emulated 11890 on the 68060. 11891 11892 The option is equivalent to `-march=68020' `-mtune=68020-60'. 11893 11894 `-mhard-float' 11895 `-m68881' 11896 Generate floating-point instructions. This is the default for 11897 68020 and above, and for ColdFire devices that have an FPU. It 11898 defines the macro `__HAVE_68881__' on M680x0 targets and 11899 `__mcffpu__' on ColdFire targets. 11900 11901 `-msoft-float' 11902 Do not generate floating-point instructions; use library calls 11903 instead. This is the default for 68000, 68010, and 68832 targets. 11904 It is also the default for ColdFire devices that have no FPU. 11905 11906 `-mdiv' 11907 `-mno-div' 11908 Generate (do not generate) ColdFire hardware divide and remainder 11909 instructions. If `-march' is used without `-mcpu', the default is 11910 "on" for ColdFire architectures and "off" for M680x0 11911 architectures. Otherwise, the default is taken from the target CPU 11912 (either the default CPU, or the one specified by `-mcpu'). For 11913 example, the default is "off" for `-mcpu=5206' and "on" for 11914 `-mcpu=5206e'. 11915 11916 gcc defines the macro `__mcfhwdiv__' when this option is enabled. 11917 11918 `-mshort' 11919 Consider type `int' to be 16 bits wide, like `short int'. 11920 Additionally, parameters passed on the stack are also aligned to a 11921 16-bit boundary even on targets whose API mandates promotion to 11922 32-bit. 11923 11924 `-mno-short' 11925 Do not consider type `int' to be 16 bits wide. This is the 11926 default. 11927 11928 `-mnobitfield' 11929 `-mno-bitfield' 11930 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 11931 and `-m5200' options imply `-mnobitfield'. 11932 11933 `-mbitfield' 11934 Do use the bit-field instructions. The `-m68020' option implies 11935 `-mbitfield'. This is the default if you use a configuration 11936 designed for a 68020. 11937 11938 `-mrtd' 11939 Use a different function-calling convention, in which functions 11940 that take a fixed number of arguments return with the `rtd' 11941 instruction, which pops their arguments while returning. This 11942 saves one instruction in the caller since there is no need to pop 11943 the arguments there. 11944 11945 This calling convention is incompatible with the one normally used 11946 on Unix, so you cannot use it if you need to call libraries 11947 compiled with the Unix compiler. 11948 11949 Also, you must provide function prototypes for all functions that 11950 take variable numbers of arguments (including `printf'); otherwise 11951 incorrect code will be generated for calls to those functions. 11952 11953 In addition, seriously incorrect code will result if you call a 11954 function with too many arguments. (Normally, extra arguments are 11955 harmlessly ignored.) 11956 11957 The `rtd' instruction is supported by the 68010, 68020, 68030, 11958 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 11959 11960 `-mno-rtd' 11961 Do not use the calling conventions selected by `-mrtd'. This is 11962 the default. 11963 11964 `-malign-int' 11965 `-mno-align-int' 11966 Control whether GCC aligns `int', `long', `long long', `float', 11967 `double', and `long double' variables on a 32-bit boundary 11968 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 11969 variables on 32-bit boundaries produces code that runs somewhat 11970 faster on processors with 32-bit busses at the expense of more 11971 memory. 11972 11973 *Warning:* if you use the `-malign-int' switch, GCC will align 11974 structures containing the above types differently than most 11975 published application binary interface specifications for the m68k. 11976 11977 `-mpcrel' 11978 Use the pc-relative addressing mode of the 68000 directly, instead 11979 of using a global offset table. At present, this option implies 11980 `-fpic', allowing at most a 16-bit offset for pc-relative 11981 addressing. `-fPIC' is not presently supported with `-mpcrel', 11982 though this could be supported for 68020 and higher processors. 11983 11984 `-mno-strict-align' 11985 `-mstrict-align' 11986 Do not (do) assume that unaligned memory references will be 11987 handled by the system. 11988 11989 `-msep-data' 11990 Generate code that allows the data segment to be located in a 11991 different area of memory from the text segment. This allows for 11992 execute in place in an environment without virtual memory 11993 management. This option implies `-fPIC'. 11994 11995 `-mno-sep-data' 11996 Generate code that assumes that the data segment follows the text 11997 segment. This is the default. 11998 11999 `-mid-shared-library' 12000 Generate code that supports shared libraries via the library ID 12001 method. This allows for execute in place and shared libraries in 12002 an environment without virtual memory management. This option 12003 implies `-fPIC'. 12004 12005 `-mno-id-shared-library' 12006 Generate code that doesn't assume ID based shared libraries are 12007 being used. This is the default. 12008 12009 `-mshared-library-id=n' 12010 Specified the identification number of the ID based shared library 12011 being compiled. Specifying a value of 0 will generate more 12012 compact code, specifying other values will force the allocation of 12013 that number to the current library but is no more space or time 12014 efficient than omitting this option. 12015 12016 `-mxgot' 12017 `-mno-xgot' 12018 When generating position-independent code for ColdFire, generate 12019 code that works if the GOT has more than 8192 entries. This code 12020 is larger and slower than code generated without this option. On 12021 M680x0 processors, this option is not needed; `-fPIC' suffices. 12022 12023 GCC normally uses a single instruction to load values from the GOT. 12024 While this is relatively efficient, it only works if the GOT is 12025 smaller than about 64k. Anything larger causes the linker to 12026 report an error such as: 12027 12028 relocation truncated to fit: R_68K_GOT16O foobar 12029 12030 If this happens, you should recompile your code with `-mxgot'. It 12031 should then work with very large GOTs. However, code generated 12032 with `-mxgot' is less efficient, since it takes 4 instructions to 12033 fetch the value of a global symbol. 12034 12035 Note that some linkers, including newer versions of the GNU linker, 12036 can create multiple GOTs and sort GOT entries. If you have such a 12037 linker, you should only need to use `-mxgot' when compiling a 12038 single object file that accesses more than 8192 GOT entries. Very 12039 few do. 12040 12041 These options have no effect unless GCC is generating 12042 position-independent code. 12043 12044 12045 12046 File: gcc.info, Node: M68hc1x Options, Next: MCore Options, Prev: M680x0 Options, Up: Submodel Options 12047 12048 3.17.20 M68hc1x Options 12049 ----------------------- 12050 12051 These are the `-m' options defined for the 68hc11 and 68hc12 12052 microcontrollers. The default values for these options depends on 12053 which style of microcontroller was selected when the compiler was 12054 configured; the defaults for the most common choices are given below. 12055 12056 `-m6811' 12057 `-m68hc11' 12058 Generate output for a 68HC11. This is the default when the 12059 compiler is configured for 68HC11-based systems. 12060 12061 `-m6812' 12062 `-m68hc12' 12063 Generate output for a 68HC12. This is the default when the 12064 compiler is configured for 68HC12-based systems. 12065 12066 `-m68S12' 12067 `-m68hcs12' 12068 Generate output for a 68HCS12. 12069 12070 `-mauto-incdec' 12071 Enable the use of 68HC12 pre and post auto-increment and 12072 auto-decrement addressing modes. 12073 12074 `-minmax' 12075 `-nominmax' 12076 Enable the use of 68HC12 min and max instructions. 12077 12078 `-mlong-calls' 12079 `-mno-long-calls' 12080 Treat all calls as being far away (near). If calls are assumed to 12081 be far away, the compiler will use the `call' instruction to call 12082 a function and the `rtc' instruction for returning. 12083 12084 `-mshort' 12085 Consider type `int' to be 16 bits wide, like `short int'. 12086 12087 `-msoft-reg-count=COUNT' 12088 Specify the number of pseudo-soft registers which are used for the 12089 code generation. The maximum number is 32. Using more pseudo-soft 12090 register may or may not result in better code depending on the 12091 program. The default is 4 for 68HC11 and 2 for 68HC12. 12092 12093 12094 12095 File: gcc.info, Node: MCore Options, Next: MIPS Options, Prev: M68hc1x Options, Up: Submodel Options 12096 12097 3.17.21 MCore Options 12098 --------------------- 12099 12100 These are the `-m' options defined for the Motorola M*Core processors. 12101 12102 `-mhardlit' 12103 `-mno-hardlit' 12104 Inline constants into the code stream if it can be done in two 12105 instructions or less. 12106 12107 `-mdiv' 12108 `-mno-div' 12109 Use the divide instruction. (Enabled by default). 12110 12111 `-mrelax-immediate' 12112 `-mno-relax-immediate' 12113 Allow arbitrary sized immediates in bit operations. 12114 12115 `-mwide-bitfields' 12116 `-mno-wide-bitfields' 12117 Always treat bit-fields as int-sized. 12118 12119 `-m4byte-functions' 12120 `-mno-4byte-functions' 12121 Force all functions to be aligned to a four byte boundary. 12122 12123 `-mcallgraph-data' 12124 `-mno-callgraph-data' 12125 Emit callgraph information. 12126 12127 `-mslow-bytes' 12128 `-mno-slow-bytes' 12129 Prefer word access when reading byte quantities. 12130 12131 `-mlittle-endian' 12132 `-mbig-endian' 12133 Generate code for a little endian target. 12134 12135 `-m210' 12136 `-m340' 12137 Generate code for the 210 processor. 12138 12139 `-mno-lsim' 12140 Assume that run-time support has been provided and so omit the 12141 simulator library (`libsim.a)' from the linker command line. 12142 12143 `-mstack-increment=SIZE' 12144 Set the maximum amount for a single stack increment operation. 12145 Large values can increase the speed of programs which contain 12146 functions that need a large amount of stack space, but they can 12147 also trigger a segmentation fault if the stack is extended too 12148 much. The default value is 0x1000. 12149 12150 12151 12152 File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MCore Options, Up: Submodel Options 12153 12154 3.17.22 MIPS Options 12155 -------------------- 12156 12157 `-EB' 12158 Generate big-endian code. 12159 12160 `-EL' 12161 Generate little-endian code. This is the default for `mips*el-*-*' 12162 configurations. 12163 12164 `-march=ARCH' 12165 Generate code that will run on ARCH, which can be the name of a 12166 generic MIPS ISA, or the name of a particular processor. The ISA 12167 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 12168 `mips32r2', `mips64' and `mips64r2'. The processor names are: 12169 `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd', 12170 `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec', 12171 `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc', 12172 `74kf2_1', `74kf1_1', `74kf3_2', `loongson2e', `loongson2f', `m4k', 12173 `octeon', `orion', `r2000', `r3000', `r3900', `r4000', `r4400', 12174 `r4600', `r4650', `r6000', `r8000', `rm7000', `rm9000', `r10000', 12175 `r12000', `r14000', `r16000', `sb1', `sr71000', `vr4100', 12176 `vr4111', `vr4120', `vr4130', `vr4300', `vr5000', `vr5400', 12177 `vr5500' and `xlr'. The special value `from-abi' selects the most 12178 compatible architecture for the selected ABI (that is, `mips1' for 12179 32-bit ABIs and `mips3' for 64-bit ABIs). 12180 12181 Native Linux/GNU toolchains also support the value `native', which 12182 selects the best architecture option for the host processor. 12183 `-march=native' has no effect if GCC does not recognize the 12184 processor. 12185 12186 In processor names, a final `000' can be abbreviated as `k' (for 12187 example, `-march=r2k'). Prefixes are optional, and `vr' may be 12188 written `r'. 12189 12190 Names of the form `Nf2_1' refer to processors with FPUs clocked at 12191 half the rate of the core, names of the form `Nf1_1' refer to 12192 processors with FPUs clocked at the same rate as the core, and 12193 names of the form `Nf3_2' refer to processors with FPUs clocked a 12194 ratio of 3:2 with respect to the core. For compatibility reasons, 12195 `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are 12196 accepted as synonyms for `Nf1_1'. 12197 12198 GCC defines two macros based on the value of this option. The 12199 first is `_MIPS_ARCH', which gives the name of target 12200 architecture, as a string. The second has the form 12201 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 12202 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH' 12203 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'. 12204 12205 Note that the `_MIPS_ARCH' macro uses the processor names given 12206 above. In other words, it will have the full prefix and will not 12207 abbreviate `000' as `k'. In the case of `from-abi', the macro 12208 names the resolved architecture (either `"mips1"' or `"mips3"'). 12209 It names the default architecture when no `-march' option is given. 12210 12211 `-mtune=ARCH' 12212 Optimize for ARCH. Among other things, this option controls the 12213 way instructions are scheduled, and the perceived cost of 12214 arithmetic operations. The list of ARCH values is the same as for 12215 `-march'. 12216 12217 When this option is not used, GCC will optimize for the processor 12218 specified by `-march'. By using `-march' and `-mtune' together, 12219 it is possible to generate code that will run on a family of 12220 processors, but optimize the code for one particular member of 12221 that family. 12222 12223 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 12224 which work in the same way as the `-march' ones described above. 12225 12226 `-mips1' 12227 Equivalent to `-march=mips1'. 12228 12229 `-mips2' 12230 Equivalent to `-march=mips2'. 12231 12232 `-mips3' 12233 Equivalent to `-march=mips3'. 12234 12235 `-mips4' 12236 Equivalent to `-march=mips4'. 12237 12238 `-mips32' 12239 Equivalent to `-march=mips32'. 12240 12241 `-mips32r2' 12242 Equivalent to `-march=mips32r2'. 12243 12244 `-mips64' 12245 Equivalent to `-march=mips64'. 12246 12247 `-mips64r2' 12248 Equivalent to `-march=mips64r2'. 12249 12250 `-mips16' 12251 `-mno-mips16' 12252 Generate (do not generate) MIPS16 code. If GCC is targetting a 12253 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE. 12254 12255 MIPS16 code generation can also be controlled on a per-function 12256 basis by means of `mips16' and `nomips16' attributes. *Note 12257 Function Attributes::, for more information. 12258 12259 `-mflip-mips16' 12260 Generate MIPS16 code on alternating functions. This option is 12261 provided for regression testing of mixed MIPS16/non-MIPS16 code 12262 generation, and is not intended for ordinary use in compiling user 12263 code. 12264 12265 `-minterlink-mips16' 12266 `-mno-interlink-mips16' 12267 Require (do not require) that non-MIPS16 code be link-compatible 12268 with MIPS16 code. 12269 12270 For example, non-MIPS16 code cannot jump directly to MIPS16 code; 12271 it must either use a call or an indirect jump. 12272 `-minterlink-mips16' therefore disables direct jumps unless GCC 12273 knows that the target of the jump is not MIPS16. 12274 12275 `-mabi=32' 12276 `-mabi=o64' 12277 `-mabi=n32' 12278 `-mabi=64' 12279 `-mabi=eabi' 12280 Generate code for the given ABI. 12281 12282 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 12283 generates 64-bit code when you select a 64-bit architecture, but 12284 you can use `-mgp32' to get 32-bit code instead. 12285 12286 For information about the O64 ABI, see 12287 `http://gcc.gnu.org/projects/mipso64-abi.html'. 12288 12289 GCC supports a variant of the o32 ABI in which floating-point 12290 registers are 64 rather than 32 bits wide. You can select this 12291 combination with `-mabi=32' `-mfp64'. This ABI relies on the 12292 `mthc1' and `mfhc1' instructions and is therefore only supported 12293 for MIPS32R2 processors. 12294 12295 The register assignments for arguments and return values remain the 12296 same, but each scalar value is passed in a single 64-bit register 12297 rather than a pair of 32-bit registers. For example, scalar 12298 floating-point values are returned in `$f0' only, not a 12299 `$f0'/`$f1' pair. The set of call-saved registers also remains 12300 the same, but all 64 bits are saved. 12301 12302 `-mabicalls' 12303 `-mno-abicalls' 12304 Generate (do not generate) code that is suitable for SVR4-style 12305 dynamic objects. `-mabicalls' is the default for SVR4-based 12306 systems. 12307 12308 `-mshared' 12309 `-mno-shared' 12310 Generate (do not generate) code that is fully position-independent, 12311 and that can therefore be linked into shared libraries. This 12312 option only affects `-mabicalls'. 12313 12314 All `-mabicalls' code has traditionally been position-independent, 12315 regardless of options like `-fPIC' and `-fpic'. However, as an 12316 extension, the GNU toolchain allows executables to use absolute 12317 accesses for locally-binding symbols. It can also use shorter GP 12318 initialization sequences and generate direct calls to 12319 locally-defined functions. This mode is selected by `-mno-shared'. 12320 12321 `-mno-shared' depends on binutils 2.16 or higher and generates 12322 objects that can only be linked by the GNU linker. However, the 12323 option does not affect the ABI of the final executable; it only 12324 affects the ABI of relocatable objects. Using `-mno-shared' will 12325 generally make executables both smaller and quicker. 12326 12327 `-mshared' is the default. 12328 12329 `-mplt' 12330 `-mno-plt' 12331 Assume (do not assume) that the static and dynamic linkers support 12332 PLTs and copy relocations. This option only affects `-mno-shared 12333 -mabicalls'. For the n64 ABI, this option has no effect without 12334 `-msym32'. 12335 12336 You can make `-mplt' the default by configuring GCC with 12337 `--with-mips-plt'. The default is `-mno-plt' otherwise. 12338 12339 `-mxgot' 12340 `-mno-xgot' 12341 Lift (do not lift) the usual restrictions on the size of the global 12342 offset table. 12343 12344 GCC normally uses a single instruction to load values from the GOT. 12345 While this is relatively efficient, it will only work if the GOT 12346 is smaller than about 64k. Anything larger will cause the linker 12347 to report an error such as: 12348 12349 relocation truncated to fit: R_MIPS_GOT16 foobar 12350 12351 If this happens, you should recompile your code with `-mxgot'. It 12352 should then work with very large GOTs, although it will also be 12353 less efficient, since it will take three instructions to fetch the 12354 value of a global symbol. 12355 12356 Note that some linkers can create multiple GOTs. If you have such 12357 a linker, you should only need to use `-mxgot' when a single object 12358 file accesses more than 64k's worth of GOT entries. Very few do. 12359 12360 These options have no effect unless GCC is generating position 12361 independent code. 12362 12363 `-mgp32' 12364 Assume that general-purpose registers are 32 bits wide. 12365 12366 `-mgp64' 12367 Assume that general-purpose registers are 64 bits wide. 12368 12369 `-mfp32' 12370 Assume that floating-point registers are 32 bits wide. 12371 12372 `-mfp64' 12373 Assume that floating-point registers are 64 bits wide. 12374 12375 `-mhard-float' 12376 Use floating-point coprocessor instructions. 12377 12378 `-msoft-float' 12379 Do not use floating-point coprocessor instructions. Implement 12380 floating-point calculations using library calls instead. 12381 12382 `-msingle-float' 12383 Assume that the floating-point coprocessor only supports 12384 single-precision operations. 12385 12386 `-mdouble-float' 12387 Assume that the floating-point coprocessor supports 12388 double-precision operations. This is the default. 12389 12390 `-mllsc' 12391 `-mno-llsc' 12392 Use (do not use) `ll', `sc', and `sync' instructions to implement 12393 atomic memory built-in functions. When neither option is 12394 specified, GCC will use the instructions if the target architecture 12395 supports them. 12396 12397 `-mllsc' is useful if the runtime environment can emulate the 12398 instructions and `-mno-llsc' can be useful when compiling for 12399 nonstandard ISAs. You can make either option the default by 12400 configuring GCC with `--with-llsc' and `--without-llsc' 12401 respectively. `--with-llsc' is the default for some 12402 configurations; see the installation documentation for details. 12403 12404 `-mdsp' 12405 `-mno-dsp' 12406 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 12407 Built-in Functions::. This option defines the preprocessor macro 12408 `__mips_dsp'. It also defines `__mips_dsp_rev' to 1. 12409 12410 `-mdspr2' 12411 `-mno-dspr2' 12412 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 12413 Built-in Functions::. This option defines the preprocessor macros 12414 `__mips_dsp' and `__mips_dspr2'. It also defines `__mips_dsp_rev' 12415 to 2. 12416 12417 `-msmartmips' 12418 `-mno-smartmips' 12419 Use (do not use) the MIPS SmartMIPS ASE. 12420 12421 `-mpaired-single' 12422 `-mno-paired-single' 12423 Use (do not use) paired-single floating-point instructions. *Note 12424 MIPS Paired-Single Support::. This option requires hardware 12425 floating-point support to be enabled. 12426 12427 `-mdmx' 12428 `-mno-mdmx' 12429 Use (do not use) MIPS Digital Media Extension instructions. This 12430 option can only be used when generating 64-bit code and requires 12431 hardware floating-point support to be enabled. 12432 12433 `-mips3d' 12434 `-mno-mips3d' 12435 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 12436 Functions::. The option `-mips3d' implies `-mpaired-single'. 12437 12438 `-mmt' 12439 `-mno-mt' 12440 Use (do not use) MT Multithreading instructions. 12441 12442 `-mlong64' 12443 Force `long' types to be 64 bits wide. See `-mlong32' for an 12444 explanation of the default and the way that the pointer size is 12445 determined. 12446 12447 `-mlong32' 12448 Force `long', `int', and pointer types to be 32 bits wide. 12449 12450 The default size of `int's, `long's and pointers depends on the 12451 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 12452 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 12453 `long's. Pointers are the same size as `long's, or the same size 12454 as integer registers, whichever is smaller. 12455 12456 `-msym32' 12457 `-mno-sym32' 12458 Assume (do not assume) that all symbols have 32-bit values, 12459 regardless of the selected ABI. This option is useful in 12460 combination with `-mabi=64' and `-mno-abicalls' because it allows 12461 GCC to generate shorter and faster references to symbolic 12462 addresses. 12463 12464 `-G NUM' 12465 Put definitions of externally-visible data in a small data section 12466 if that data is no bigger than NUM bytes. GCC can then access the 12467 data more efficiently; see `-mgpopt' for details. 12468 12469 The default `-G' option depends on the configuration. 12470 12471 `-mlocal-sdata' 12472 `-mno-local-sdata' 12473 Extend (do not extend) the `-G' behavior to local data too, such 12474 as to static variables in C. `-mlocal-sdata' is the default for 12475 all configurations. 12476 12477 If the linker complains that an application is using too much 12478 small data, you might want to try rebuilding the less 12479 performance-critical parts with `-mno-local-sdata'. You might 12480 also want to build large libraries with `-mno-local-sdata', so 12481 that the libraries leave more room for the main program. 12482 12483 `-mextern-sdata' 12484 `-mno-extern-sdata' 12485 Assume (do not assume) that externally-defined data will be in a 12486 small data section if that data is within the `-G' limit. 12487 `-mextern-sdata' is the default for all configurations. 12488 12489 If you compile a module MOD with `-mextern-sdata' `-G NUM' 12490 `-mgpopt', and MOD references a variable VAR that is no bigger 12491 than NUM bytes, you must make sure that VAR is placed in a small 12492 data section. If VAR is defined by another module, you must 12493 either compile that module with a high-enough `-G' setting or 12494 attach a `section' attribute to VAR's definition. If VAR is 12495 common, you must link the application with a high-enough `-G' 12496 setting. 12497 12498 The easiest way of satisfying these restrictions is to compile and 12499 link every module with the same `-G' option. However, you may 12500 wish to build a library that supports several different small data 12501 limits. You can do this by compiling the library with the highest 12502 supported `-G' setting and additionally using `-mno-extern-sdata' 12503 to stop the library from making assumptions about 12504 externally-defined data. 12505 12506 `-mgpopt' 12507 `-mno-gpopt' 12508 Use (do not use) GP-relative accesses for symbols that are known 12509 to be in a small data section; see `-G', `-mlocal-sdata' and 12510 `-mextern-sdata'. `-mgpopt' is the default for all configurations. 12511 12512 `-mno-gpopt' is useful for cases where the `$gp' register might 12513 not hold the value of `_gp'. For example, if the code is part of 12514 a library that might be used in a boot monitor, programs that call 12515 boot monitor routines will pass an unknown value in `$gp'. (In 12516 such situations, the boot monitor itself would usually be compiled 12517 with `-G0'.) 12518 12519 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'. 12520 12521 `-membedded-data' 12522 `-mno-embedded-data' 12523 Allocate variables to the read-only data section first if 12524 possible, then next in the small data section if possible, 12525 otherwise in data. This gives slightly slower code than the 12526 default, but reduces the amount of RAM required when executing, 12527 and thus may be preferred for some embedded systems. 12528 12529 `-muninit-const-in-rodata' 12530 `-mno-uninit-const-in-rodata' 12531 Put uninitialized `const' variables in the read-only data section. 12532 This option is only meaningful in conjunction with 12533 `-membedded-data'. 12534 12535 `-mcode-readable=SETTING' 12536 Specify whether GCC may generate code that reads from executable 12537 sections. There are three possible settings: 12538 12539 `-mcode-readable=yes' 12540 Instructions may freely access executable sections. This is 12541 the default setting. 12542 12543 `-mcode-readable=pcrel' 12544 MIPS16 PC-relative load instructions can access executable 12545 sections, but other instructions must not do so. This option 12546 is useful on 4KSc and 4KSd processors when the code TLBs have 12547 the Read Inhibit bit set. It is also useful on processors 12548 that can be configured to have a dual instruction/data SRAM 12549 interface and that, like the M4K, automatically redirect 12550 PC-relative loads to the instruction RAM. 12551 12552 `-mcode-readable=no' 12553 Instructions must not access executable sections. This 12554 option can be useful on targets that are configured to have a 12555 dual instruction/data SRAM interface but that (unlike the 12556 M4K) do not automatically redirect PC-relative loads to the 12557 instruction RAM. 12558 12559 `-msplit-addresses' 12560 `-mno-split-addresses' 12561 Enable (disable) use of the `%hi()' and `%lo()' assembler 12562 relocation operators. This option has been superseded by 12563 `-mexplicit-relocs' but is retained for backwards compatibility. 12564 12565 `-mexplicit-relocs' 12566 `-mno-explicit-relocs' 12567 Use (do not use) assembler relocation operators when dealing with 12568 symbolic addresses. The alternative, selected by 12569 `-mno-explicit-relocs', is to use assembler macros instead. 12570 12571 `-mexplicit-relocs' is the default if GCC was configured to use an 12572 assembler that supports relocation operators. 12573 12574 `-mcheck-zero-division' 12575 `-mno-check-zero-division' 12576 Trap (do not trap) on integer division by zero. 12577 12578 The default is `-mcheck-zero-division'. 12579 12580 `-mdivide-traps' 12581 `-mdivide-breaks' 12582 MIPS systems check for division by zero by generating either a 12583 conditional trap or a break instruction. Using traps results in 12584 smaller code, but is only supported on MIPS II and later. Also, 12585 some versions of the Linux kernel have a bug that prevents trap 12586 from generating the proper signal (`SIGFPE'). Use 12587 `-mdivide-traps' to allow conditional traps on architectures that 12588 support them and `-mdivide-breaks' to force the use of breaks. 12589 12590 The default is usually `-mdivide-traps', but this can be 12591 overridden at configure time using `--with-divide=breaks'. 12592 Divide-by-zero checks can be completely disabled using 12593 `-mno-check-zero-division'. 12594 12595 `-mmemcpy' 12596 `-mno-memcpy' 12597 Force (do not force) the use of `memcpy()' for non-trivial block 12598 moves. The default is `-mno-memcpy', which allows GCC to inline 12599 most constant-sized copies. 12600 12601 `-mlong-calls' 12602 `-mno-long-calls' 12603 Disable (do not disable) use of the `jal' instruction. Calling 12604 functions using `jal' is more efficient but requires the caller 12605 and callee to be in the same 256 megabyte segment. 12606 12607 This option has no effect on abicalls code. The default is 12608 `-mno-long-calls'. 12609 12610 `-mmad' 12611 `-mno-mad' 12612 Enable (disable) use of the `mad', `madu' and `mul' instructions, 12613 as provided by the R4650 ISA. 12614 12615 `-mfused-madd' 12616 `-mno-fused-madd' 12617 Enable (disable) use of the floating point multiply-accumulate 12618 instructions, when they are available. The default is 12619 `-mfused-madd'. 12620 12621 When multiply-accumulate instructions are used, the intermediate 12622 product is calculated to infinite precision and is not subject to 12623 the FCSR Flush to Zero bit. This may be undesirable in some 12624 circumstances. 12625 12626 `-nocpp' 12627 Tell the MIPS assembler to not run its preprocessor over user 12628 assembler files (with a `.s' suffix) when assembling them. 12629 12630 `-mfix-r4000' 12631 `-mno-fix-r4000' 12632 Work around certain R4000 CPU errata: 12633 - A double-word or a variable shift may give an incorrect 12634 result if executed immediately after starting an integer 12635 division. 12636 12637 - A double-word or a variable shift may give an incorrect 12638 result if executed while an integer multiplication is in 12639 progress. 12640 12641 - An integer division may give an incorrect result if started 12642 in a delay slot of a taken branch or a jump. 12643 12644 `-mfix-r4400' 12645 `-mno-fix-r4400' 12646 Work around certain R4400 CPU errata: 12647 - A double-word or a variable shift may give an incorrect 12648 result if executed immediately after starting an integer 12649 division. 12650 12651 `-mfix-r10000' 12652 `-mno-fix-r10000' 12653 Work around certain R10000 errata: 12654 - `ll'/`sc' sequences may not behave atomically on revisions 12655 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 12656 12657 This option can only be used if the target architecture supports 12658 branch-likely instructions. `-mfix-r10000' is the default when 12659 `-march=r10000' is used; `-mno-fix-r10000' is the default 12660 otherwise. 12661 12662 `-mfix-vr4120' 12663 `-mno-fix-vr4120' 12664 Work around certain VR4120 errata: 12665 - `dmultu' does not always produce the correct result. 12666 12667 - `div' and `ddiv' do not always produce the correct result if 12668 one of the operands is negative. 12669 The workarounds for the division errata rely on special functions 12670 in `libgcc.a'. At present, these functions are only provided by 12671 the `mips64vr*-elf' configurations. 12672 12673 Other VR4120 errata require a nop to be inserted between certain 12674 pairs of instructions. These errata are handled by the assembler, 12675 not by GCC itself. 12676 12677 `-mfix-vr4130' 12678 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 12679 implemented by the assembler rather than by GCC, although GCC will 12680 avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 12681 `dmacc' and `dmacchi' instructions are available instead. 12682 12683 `-mfix-sb1' 12684 `-mno-fix-sb1' 12685 Work around certain SB-1 CPU core errata. (This flag currently 12686 works around the SB-1 revision 2 "F1" and "F2" floating point 12687 errata.) 12688 12689 `-mr10k-cache-barrier=SETTING' 12690 Specify whether GCC should insert cache barriers to avoid the 12691 side-effects of speculation on R10K processors. 12692 12693 In common with many processors, the R10K tries to predict the 12694 outcome of a conditional branch and speculatively executes 12695 instructions from the "taken" branch. It later aborts these 12696 instructions if the predicted outcome was wrong. However, on the 12697 R10K, even aborted instructions can have side effects. 12698 12699 This problem only affects kernel stores and, depending on the 12700 system, kernel loads. As an example, a speculatively-executed 12701 store may load the target memory into cache and mark the cache 12702 line as dirty, even if the store itself is later aborted. If a 12703 DMA operation writes to the same area of memory before the "dirty" 12704 line is flushed, the cached data will overwrite the DMA-ed data. 12705 See the R10K processor manual for a full description, including 12706 other potential problems. 12707 12708 One workaround is to insert cache barrier instructions before 12709 every memory access that might be speculatively executed and that 12710 might have side effects even if aborted. 12711 `-mr10k-cache-barrier=SETTING' controls GCC's implementation of 12712 this workaround. It assumes that aborted accesses to any byte in 12713 the following regions will not have side effects: 12714 12715 1. the memory occupied by the current function's stack frame; 12716 12717 2. the memory occupied by an incoming stack argument; 12718 12719 3. the memory occupied by an object with a link-time-constant 12720 address. 12721 12722 It is the kernel's responsibility to ensure that speculative 12723 accesses to these regions are indeed safe. 12724 12725 If the input program contains a function declaration such as: 12726 12727 void foo (void); 12728 12729 then the implementation of `foo' must allow `j foo' and `jal foo' 12730 to be executed speculatively. GCC honors this restriction for 12731 functions it compiles itself. It expects non-GCC functions (such 12732 as hand-written assembly code) to do the same. 12733 12734 The option has three forms: 12735 12736 `-mr10k-cache-barrier=load-store' 12737 Insert a cache barrier before a load or store that might be 12738 speculatively executed and that might have side effects even 12739 if aborted. 12740 12741 `-mr10k-cache-barrier=store' 12742 Insert a cache barrier before a store that might be 12743 speculatively executed and that might have side effects even 12744 if aborted. 12745 12746 `-mr10k-cache-barrier=none' 12747 Disable the insertion of cache barriers. This is the default 12748 setting. 12749 12750 `-mflush-func=FUNC' 12751 `-mno-flush-func' 12752 Specifies the function to call to flush the I and D caches, or to 12753 not call any such function. If called, the function must take the 12754 same arguments as the common `_flush_func()', that is, the address 12755 of the memory range for which the cache is being flushed, the size 12756 of the memory range, and the number 3 (to flush both caches). The 12757 default depends on the target GCC was configured for, but commonly 12758 is either `_flush_func' or `__cpu_flush'. 12759 12760 `mbranch-cost=NUM' 12761 Set the cost of branches to roughly NUM "simple" instructions. 12762 This cost is only a heuristic and is not guaranteed to produce 12763 consistent results across releases. A zero cost redundantly 12764 selects the default, which is based on the `-mtune' setting. 12765 12766 `-mbranch-likely' 12767 `-mno-branch-likely' 12768 Enable or disable use of Branch Likely instructions, regardless of 12769 the default for the selected architecture. By default, Branch 12770 Likely instructions may be generated if they are supported by the 12771 selected architecture. An exception is for the MIPS32 and MIPS64 12772 architectures and processors which implement those architectures; 12773 for those, Branch Likely instructions will not be generated by 12774 default because the MIPS32 and MIPS64 architectures specifically 12775 deprecate their use. 12776 12777 `-mfp-exceptions' 12778 `-mno-fp-exceptions' 12779 Specifies whether FP exceptions are enabled. This affects how we 12780 schedule FP instructions for some processors. The default is that 12781 FP exceptions are enabled. 12782 12783 For instance, on the SB-1, if FP exceptions are disabled, and we 12784 are emitting 64-bit code, then we can use both FP pipes. 12785 Otherwise, we can only use one FP pipe. 12786 12787 `-mvr4130-align' 12788 `-mno-vr4130-align' 12789 The VR4130 pipeline is two-way superscalar, but can only issue two 12790 instructions together if the first one is 8-byte aligned. When 12791 this option is enabled, GCC will align pairs of instructions that 12792 it thinks should execute in parallel. 12793 12794 This option only has an effect when optimizing for the VR4130. It 12795 normally makes code faster, but at the expense of making it bigger. 12796 It is enabled by default at optimization level `-O3'. 12797 12798 12799 File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 12800 12801 3.17.23 MMIX Options 12802 -------------------- 12803 12804 These options are defined for the MMIX: 12805 12806 `-mlibfuncs' 12807 `-mno-libfuncs' 12808 Specify that intrinsic library functions are being compiled, 12809 passing all values in registers, no matter the size. 12810 12811 `-mepsilon' 12812 `-mno-epsilon' 12813 Generate floating-point comparison instructions that compare with 12814 respect to the `rE' epsilon register. 12815 12816 `-mabi=mmixware' 12817 `-mabi=gnu' 12818 Generate code that passes function parameters and return values 12819 that (in the called function) are seen as registers `$0' and up, 12820 as opposed to the GNU ABI which uses global registers `$231' and 12821 up. 12822 12823 `-mzero-extend' 12824 `-mno-zero-extend' 12825 When reading data from memory in sizes shorter than 64 bits, use 12826 (do not use) zero-extending load instructions by default, rather 12827 than sign-extending ones. 12828 12829 `-mknuthdiv' 12830 `-mno-knuthdiv' 12831 Make the result of a division yielding a remainder have the same 12832 sign as the divisor. With the default, `-mno-knuthdiv', the sign 12833 of the remainder follows the sign of the dividend. Both methods 12834 are arithmetically valid, the latter being almost exclusively used. 12835 12836 `-mtoplevel-symbols' 12837 `-mno-toplevel-symbols' 12838 Prepend (do not prepend) a `:' to all global symbols, so the 12839 assembly code can be used with the `PREFIX' assembly directive. 12840 12841 `-melf' 12842 Generate an executable in the ELF format, rather than the default 12843 `mmo' format used by the `mmix' simulator. 12844 12845 `-mbranch-predict' 12846 `-mno-branch-predict' 12847 Use (do not use) the probable-branch instructions, when static 12848 branch prediction indicates a probable branch. 12849 12850 `-mbase-addresses' 12851 `-mno-base-addresses' 12852 Generate (do not generate) code that uses _base addresses_. Using 12853 a base address automatically generates a request (handled by the 12854 assembler and the linker) for a constant to be set up in a global 12855 register. The register is used for one or more base address 12856 requests within the range 0 to 255 from the value held in the 12857 register. The generally leads to short and fast code, but the 12858 number of different data items that can be addressed is limited. 12859 This means that a program that uses lots of static data may 12860 require `-mno-base-addresses'. 12861 12862 `-msingle-exit' 12863 `-mno-single-exit' 12864 Force (do not force) generated code to have a single exit point in 12865 each function. 12866 12867 12868 File: gcc.info, Node: MN10300 Options, Next: PDP-11 Options, Prev: MMIX Options, Up: Submodel Options 12869 12870 3.17.24 MN10300 Options 12871 ----------------------- 12872 12873 These `-m' options are defined for Matsushita MN10300 architectures: 12874 12875 `-mmult-bug' 12876 Generate code to avoid bugs in the multiply instructions for the 12877 MN10300 processors. This is the default. 12878 12879 `-mno-mult-bug' 12880 Do not generate code to avoid bugs in the multiply instructions 12881 for the MN10300 processors. 12882 12883 `-mam33' 12884 Generate code which uses features specific to the AM33 processor. 12885 12886 `-mno-am33' 12887 Do not generate code which uses features specific to the AM33 12888 processor. This is the default. 12889 12890 `-mreturn-pointer-on-d0' 12891 When generating a function which returns a pointer, return the 12892 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 12893 only in a0, and attempts to call such functions without a prototype 12894 would result in errors. Note that this option is on by default; 12895 use `-mno-return-pointer-on-d0' to disable it. 12896 12897 `-mno-crt0' 12898 Do not link in the C run-time initialization object file. 12899 12900 `-mrelax' 12901 Indicate to the linker that it should perform a relaxation 12902 optimization pass to shorten branches, calls and absolute memory 12903 addresses. This option only has an effect when used on the 12904 command line for the final link step. 12905 12906 This option makes symbolic debugging impossible. 12907 12908 12909 File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: MN10300 Options, Up: Submodel Options 12910 12911 3.17.25 PDP-11 Options 12912 ---------------------- 12913 12914 These options are defined for the PDP-11: 12915 12916 `-mfpu' 12917 Use hardware FPP floating point. This is the default. (FIS 12918 floating point on the PDP-11/40 is not supported.) 12919 12920 `-msoft-float' 12921 Do not use hardware floating point. 12922 12923 `-mac0' 12924 Return floating-point results in ac0 (fr0 in Unix assembler 12925 syntax). 12926 12927 `-mno-ac0' 12928 Return floating-point results in memory. This is the default. 12929 12930 `-m40' 12931 Generate code for a PDP-11/40. 12932 12933 `-m45' 12934 Generate code for a PDP-11/45. This is the default. 12935 12936 `-m10' 12937 Generate code for a PDP-11/10. 12938 12939 `-mbcopy-builtin' 12940 Use inline `movmemhi' patterns for copying memory. This is the 12941 default. 12942 12943 `-mbcopy' 12944 Do not use inline `movmemhi' patterns for copying memory. 12945 12946 `-mint16' 12947 `-mno-int32' 12948 Use 16-bit `int'. This is the default. 12949 12950 `-mint32' 12951 `-mno-int16' 12952 Use 32-bit `int'. 12953 12954 `-mfloat64' 12955 `-mno-float32' 12956 Use 64-bit `float'. This is the default. 12957 12958 `-mfloat32' 12959 `-mno-float64' 12960 Use 32-bit `float'. 12961 12962 `-mabshi' 12963 Use `abshi2' pattern. This is the default. 12964 12965 `-mno-abshi' 12966 Do not use `abshi2' pattern. 12967 12968 `-mbranch-expensive' 12969 Pretend that branches are expensive. This is for experimenting 12970 with code generation only. 12971 12972 `-mbranch-cheap' 12973 Do not pretend that branches are expensive. This is the default. 12974 12975 `-msplit' 12976 Generate code for a system with split I&D. 12977 12978 `-mno-split' 12979 Generate code for a system without split I&D. This is the default. 12980 12981 `-munix-asm' 12982 Use Unix assembler syntax. This is the default when configured for 12983 `pdp11-*-bsd'. 12984 12985 `-mdec-asm' 12986 Use DEC assembler syntax. This is the default when configured for 12987 any PDP-11 target other than `pdp11-*-bsd'. 12988 12989 12990 File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 12991 12992 3.17.26 picoChip Options 12993 ------------------------ 12994 12995 These `-m' options are defined for picoChip implementations: 12996 12997 `-mae=AE_TYPE' 12998 Set the instruction set, register set, and instruction scheduling 12999 parameters for array element type AE_TYPE. Supported values for 13000 AE_TYPE are `ANY', `MUL', and `MAC'. 13001 13002 `-mae=ANY' selects a completely generic AE type. Code generated 13003 with this option will run on any of the other AE types. The code 13004 will not be as efficient as it would be if compiled for a specific 13005 AE type, and some types of operation (e.g., multiplication) will 13006 not work properly on all types of AE. 13007 13008 `-mae=MUL' selects a MUL AE type. This is the most useful AE type 13009 for compiled code, and is the default. 13010 13011 `-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 13012 option may suffer from poor performance of byte (char) 13013 manipulation, since the DSP AE does not provide hardware support 13014 for byte load/stores. 13015 13016 `-msymbol-as-address' 13017 Enable the compiler to directly use a symbol name as an address in 13018 a load/store instruction, without first loading it into a 13019 register. Typically, the use of this option will generate larger 13020 programs, which run faster than when the option isn't used. 13021 However, the results vary from program to program, so it is left 13022 as a user option, rather than being permanently enabled. 13023 13024 `-mno-inefficient-warnings' 13025 Disables warnings about the generation of inefficient code. These 13026 warnings can be generated, for example, when compiling code which 13027 performs byte-level memory operations on the MAC AE type. The MAC 13028 AE has no hardware support for byte-level memory operations, so 13029 all byte load/stores must be synthesized from word load/store 13030 operations. This is inefficient and a warning will be generated 13031 indicating to the programmer that they should rewrite the code to 13032 avoid byte operations, or to target an AE type which has the 13033 necessary hardware support. This option enables the warning to be 13034 turned off. 13035 13036 13037 13038 File: gcc.info, Node: PowerPC Options, Next: RS/6000 and PowerPC Options, Prev: picoChip Options, Up: Submodel Options 13039 13040 3.17.27 PowerPC Options 13041 ----------------------- 13042 13043 These are listed under *Note RS/6000 and PowerPC Options::. 13044 13045 13046 File: gcc.info, Node: RS/6000 and PowerPC Options, Next: S/390 and zSeries Options, Prev: PowerPC Options, Up: Submodel Options 13047 13048 3.17.28 IBM RS/6000 and PowerPC Options 13049 --------------------------------------- 13050 13051 These `-m' options are defined for the IBM RS/6000 and PowerPC: 13052 `-mpower' 13053 `-mno-power' 13054 `-mpower2' 13055 `-mno-power2' 13056 `-mpowerpc' 13057 `-mno-powerpc' 13058 `-mpowerpc-gpopt' 13059 `-mno-powerpc-gpopt' 13060 `-mpowerpc-gfxopt' 13061 `-mno-powerpc-gfxopt' 13062 `-mpowerpc64' 13063 `-mno-powerpc64' 13064 `-mmfcrf' 13065 `-mno-mfcrf' 13066 `-mpopcntb' 13067 `-mno-popcntb' 13068 `-mfprnd' 13069 `-mno-fprnd' 13070 `-mcmpb' 13071 `-mno-cmpb' 13072 `-mmfpgpr' 13073 `-mno-mfpgpr' 13074 `-mhard-dfp' 13075 `-mno-hard-dfp' 13076 GCC supports two related instruction set architectures for the 13077 RS/6000 and PowerPC. The "POWER" instruction set are those 13078 instructions supported by the `rios' chip set used in the original 13079 RS/6000 systems and the "PowerPC" instruction set is the 13080 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx 13081 microprocessors, and the IBM 4xx, 6xx, and follow-on 13082 microprocessors. 13083 13084 Neither architecture is a subset of the other. However there is a 13085 large common subset of instructions supported by both. An MQ 13086 register is included in processors supporting the POWER 13087 architecture. 13088 13089 You use these options to specify which instructions are available 13090 on the processor you are using. The default value of these 13091 options is determined when configuring GCC. Specifying the 13092 `-mcpu=CPU_TYPE' overrides the specification of these options. We 13093 recommend you use the `-mcpu=CPU_TYPE' option rather than the 13094 options listed above. 13095 13096 The `-mpower' option allows GCC to generate instructions that are 13097 found only in the POWER architecture and to use the MQ register. 13098 Specifying `-mpower2' implies `-power' and also allows GCC to 13099 generate instructions that are present in the POWER2 architecture 13100 but not the original POWER architecture. 13101 13102 The `-mpowerpc' option allows GCC to generate instructions that 13103 are found only in the 32-bit subset of the PowerPC architecture. 13104 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 13105 GCC to use the optional PowerPC architecture instructions in the 13106 General Purpose group, including floating-point square root. 13107 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 13108 GCC to use the optional PowerPC architecture instructions in the 13109 Graphics group, including floating-point select. 13110 13111 The `-mmfcrf' option allows GCC to generate the move from 13112 condition register field instruction implemented on the POWER4 13113 processor and other processors that support the PowerPC V2.01 13114 architecture. The `-mpopcntb' option allows GCC to generate the 13115 popcount and double precision FP reciprocal estimate instruction 13116 implemented on the POWER5 processor and other processors that 13117 support the PowerPC V2.02 architecture. The `-mfprnd' option 13118 allows GCC to generate the FP round to integer instructions 13119 implemented on the POWER5+ processor and other processors that 13120 support the PowerPC V2.03 architecture. The `-mcmpb' option 13121 allows GCC to generate the compare bytes instruction implemented 13122 on the POWER6 processor and other processors that support the 13123 PowerPC V2.05 architecture. The `-mmfpgpr' option allows GCC to 13124 generate the FP move to/from general purpose register instructions 13125 implemented on the POWER6X processor and other processors that 13126 support the extended PowerPC V2.05 architecture. The `-mhard-dfp' 13127 option allows GCC to generate the decimal floating point 13128 instructions implemented on some POWER processors. 13129 13130 The `-mpowerpc64' option allows GCC to generate the additional 13131 64-bit instructions that are found in the full PowerPC64 13132 architecture and to treat GPRs as 64-bit, doubleword quantities. 13133 GCC defaults to `-mno-powerpc64'. 13134 13135 If you specify both `-mno-power' and `-mno-powerpc', GCC will use 13136 only the instructions in the common subset of both architectures 13137 plus some special AIX common-mode calls, and will not use the MQ 13138 register. Specifying both `-mpower' and `-mpowerpc' permits GCC 13139 to use any instruction from either architecture and to allow use 13140 of the MQ register; specify this for the Motorola MPC601. 13141 13142 `-mnew-mnemonics' 13143 `-mold-mnemonics' 13144 Select which mnemonics to use in the generated assembler code. 13145 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined 13146 for the PowerPC architecture. With `-mold-mnemonics' it uses the 13147 assembler mnemonics defined for the POWER architecture. 13148 Instructions defined in only one architecture have only one 13149 mnemonic; GCC uses that mnemonic irrespective of which of these 13150 options is specified. 13151 13152 GCC defaults to the mnemonics appropriate for the architecture in 13153 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of 13154 these option. Unless you are building a cross-compiler, you 13155 should normally not specify either `-mnew-mnemonics' or 13156 `-mold-mnemonics', but should instead accept the default. 13157 13158 `-mcpu=CPU_TYPE' 13159 Set architecture type, register usage, choice of mnemonics, and 13160 instruction scheduling parameters for machine type CPU_TYPE. 13161 Supported values for CPU_TYPE are `401', `403', `405', `405fp', 13162 `440', `440fp', `464', `464fp', `505', `601', `602', `603', 13163 `603e', `604', `604e', `620', `630', `740', `7400', `7450', `750', 13164 `801', `821', `823', `860', `970', `8540', `e300c2', `e300c3', 13165 `e500mc', `ec603e', `G3', `G4', `G5', `power', `power2', `power3', 13166 `power4', `power5', `power5+', `power6', `power6x', `power7' 13167 `common', `powerpc', `powerpc64', `rios', `rios1', `rios2', `rsc', 13168 and `rs64'. 13169 13170 `-mcpu=common' selects a completely generic processor. Code 13171 generated under this option will run on any POWER or PowerPC 13172 processor. GCC will use only the instructions in the common 13173 subset of both architectures, and will not use the MQ register. 13174 GCC assumes a generic processor model for scheduling purposes. 13175 13176 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and 13177 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit 13178 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 13179 types, with an appropriate, generic processor model assumed for 13180 scheduling purposes. 13181 13182 The other options specify a specific processor. Code generated 13183 under those options will run best on that processor, and may not 13184 run at all on others. 13185 13186 The `-mcpu' options automatically enable or disable the following 13187 options: 13188 13189 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 13190 -mnew-mnemonics -mpopcntb -mpower -mpower2 -mpowerpc64 13191 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 13192 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr 13193 13194 The particular options set for any particular CPU will vary between 13195 compiler versions, depending on what setting seems to produce 13196 optimal code for that CPU; it doesn't necessarily reflect the 13197 actual hardware's capabilities. If you wish to set an individual 13198 option to a particular value, you may specify it after the `-mcpu' 13199 option, like `-mcpu=970 -mno-altivec'. 13200 13201 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 13202 or disabled by the `-mcpu' option at present because AIX does not 13203 have full support for these options. You may still enable or 13204 disable them individually if you're sure it'll work in your 13205 environment. 13206 13207 `-mtune=CPU_TYPE' 13208 Set the instruction scheduling parameters for machine type 13209 CPU_TYPE, but do not set the architecture type, register usage, or 13210 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values 13211 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are 13212 specified, the code generated will use the architecture, 13213 registers, and mnemonics set by `-mcpu', but the scheduling 13214 parameters set by `-mtune'. 13215 13216 `-mswdiv' 13217 `-mno-swdiv' 13218 Generate code to compute division as reciprocal estimate and 13219 iterative refinement, creating opportunities for increased 13220 throughput. This feature requires: optional PowerPC Graphics 13221 instruction set for single precision and FRE instruction for 13222 double precision, assuming divides cannot generate user-visible 13223 traps, and the domain values not include Infinities, denormals or 13224 zero denominator. 13225 13226 `-maltivec' 13227 `-mno-altivec' 13228 Generate code that uses (does not use) AltiVec instructions, and 13229 also enable the use of built-in functions that allow more direct 13230 access to the AltiVec instruction set. You may also need to set 13231 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 13232 enhancements. 13233 13234 `-mvrsave' 13235 `-mno-vrsave' 13236 Generate VRSAVE instructions when generating AltiVec code. 13237 13238 `-mgen-cell-microcode' 13239 Generate Cell microcode instructions 13240 13241 `-mwarn-cell-microcode' 13242 Warning when a Cell microcode instruction is going to emitted. An 13243 example of a Cell microcode instruction is a variable shift. 13244 13245 `-msecure-plt' 13246 Generate code that allows ld and ld.so to build executables and 13247 shared libraries with non-exec .plt and .got sections. This is a 13248 PowerPC 32-bit SYSV ABI option. 13249 13250 `-mbss-plt' 13251 Generate code that uses a BSS .plt section that ld.so fills in, and 13252 requires .plt and .got sections that are both writable and 13253 executable. This is a PowerPC 32-bit SYSV ABI option. 13254 13255 `-misel' 13256 `-mno-isel' 13257 This switch enables or disables the generation of ISEL 13258 instructions. 13259 13260 `-misel=YES/NO' 13261 This switch has been deprecated. Use `-misel' and `-mno-isel' 13262 instead. 13263 13264 `-mspe' 13265 `-mno-spe' 13266 This switch enables or disables the generation of SPE simd 13267 instructions. 13268 13269 `-mpaired' 13270 `-mno-paired' 13271 This switch enables or disables the generation of PAIRED simd 13272 instructions. 13273 13274 `-mspe=YES/NO' 13275 This option has been deprecated. Use `-mspe' and `-mno-spe' 13276 instead. 13277 13278 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 13279 `-mfloat-gprs' 13280 This switch enables or disables the generation of floating point 13281 operations on the general purpose registers for architectures that 13282 support it. 13283 13284 The argument YES or SINGLE enables the use of single-precision 13285 floating point operations. 13286 13287 The argument DOUBLE enables the use of single and double-precision 13288 floating point operations. 13289 13290 The argument NO disables floating point operations on the general 13291 purpose registers. 13292 13293 This option is currently only available on the MPC854x. 13294 13295 `-m32' 13296 `-m64' 13297 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 13298 targets (including GNU/Linux). The 32-bit environment sets int, 13299 long and pointer to 32 bits and generates code that runs on any 13300 PowerPC variant. The 64-bit environment sets int to 32 bits and 13301 long and pointer to 64 bits, and generates code for PowerPC64, as 13302 for `-mpowerpc64'. 13303 13304 `-mfull-toc' 13305 `-mno-fp-in-toc' 13306 `-mno-sum-in-toc' 13307 `-mminimal-toc' 13308 Modify generation of the TOC (Table Of Contents), which is created 13309 for every executable file. The `-mfull-toc' option is selected by 13310 default. In that case, GCC will allocate at least one TOC entry 13311 for each unique non-automatic variable reference in your program. 13312 GCC will also place floating-point constants in the TOC. However, 13313 only 16,384 entries are available in the TOC. 13314 13315 If you receive a linker error message that saying you have 13316 overflowed the available TOC space, you can reduce the amount of 13317 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 13318 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 13319 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 13320 code to calculate the sum of an address and a constant at run-time 13321 instead of putting that sum into the TOC. You may specify one or 13322 both of these options. Each causes GCC to produce very slightly 13323 slower and larger code at the expense of conserving TOC space. 13324 13325 If you still run out of space in the TOC even when you specify 13326 both of these options, specify `-mminimal-toc' instead. This 13327 option causes GCC to make only one TOC entry for every file. When 13328 you specify this option, GCC will produce code that is slower and 13329 larger but which uses extremely little TOC space. You may wish to 13330 use this option only on files that contain less frequently 13331 executed code. 13332 13333 `-maix64' 13334 `-maix32' 13335 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 13336 64-bit `long' type, and the infrastructure needed to support them. 13337 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while 13338 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'. 13339 GCC defaults to `-maix32'. 13340 13341 `-mxl-compat' 13342 `-mno-xl-compat' 13343 Produce code that conforms more closely to IBM XL compiler 13344 semantics when using AIX-compatible ABI. Pass floating-point 13345 arguments to prototyped functions beyond the register save area 13346 (RSA) on the stack in addition to argument FPRs. Do not assume 13347 that most significant double in 128-bit long double value is 13348 properly rounded when comparing values and converting to double. 13349 Use XL symbol names for long double support routines. 13350 13351 The AIX calling convention was extended but not initially 13352 documented to handle an obscure K&R C case of calling a function 13353 that takes the address of its arguments with fewer arguments than 13354 declared. IBM XL compilers access floating point arguments which 13355 do not fit in the RSA from the stack when a subroutine is compiled 13356 without optimization. Because always storing floating-point 13357 arguments on the stack is inefficient and rarely needed, this 13358 option is not enabled by default and only is necessary when 13359 calling subroutines compiled by IBM XL compilers without 13360 optimization. 13361 13362 `-mpe' 13363 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 13364 application written to use message passing with special startup 13365 code to enable the application to run. The system must have PE 13366 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 13367 `specs' file must be overridden with the `-specs=' option to 13368 specify the appropriate directory location. The Parallel 13369 Environment does not support threads, so the `-mpe' option and the 13370 `-pthread' option are incompatible. 13371 13372 `-malign-natural' 13373 `-malign-power' 13374 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 13375 `-malign-natural' overrides the ABI-defined alignment of larger 13376 types, such as floating-point doubles, on their natural size-based 13377 boundary. The option `-malign-power' instructs GCC to follow the 13378 ABI-specified alignment rules. GCC defaults to the standard 13379 alignment defined in the ABI. 13380 13381 On 64-bit Darwin, natural alignment is the default, and 13382 `-malign-power' is not supported. 13383 13384 `-msoft-float' 13385 `-mhard-float' 13386 Generate code that does not use (uses) the floating-point register 13387 set. Software floating point emulation is provided if you use the 13388 `-msoft-float' option, and pass the option to GCC when linking. 13389 13390 `-msingle-float' 13391 `-mdouble-float' 13392 Generate code for single or double-precision floating point 13393 operations. `-mdouble-float' implies `-msingle-float'. 13394 13395 `-msimple-fpu' 13396 Do not generate sqrt and div instructions for hardware floating 13397 point unit. 13398 13399 `-mfpu' 13400 Specify type of floating point unit. Valid values are SP_LITE 13401 (equivalent to -msingle-float -msimple-fpu), DP_LITE (equivalent 13402 to -mdouble-float -msimple-fpu), SP_FULL (equivalent to 13403 -msingle-float), and DP_FULL (equivalent to -mdouble-float). 13404 13405 `-mxilinx-fpu' 13406 Perform optimizations for floating point unit on Xilinx PPC 13407 405/440. 13408 13409 `-mmultiple' 13410 `-mno-multiple' 13411 Generate code that uses (does not use) the load multiple word 13412 instructions and the store multiple word instructions. These 13413 instructions are generated by default on POWER systems, and not 13414 generated on PowerPC systems. Do not use `-mmultiple' on little 13415 endian PowerPC systems, since those instructions do not work when 13416 the processor is in little endian mode. The exceptions are PPC740 13417 and PPC750 which permit the instructions usage in little endian 13418 mode. 13419 13420 `-mstring' 13421 `-mno-string' 13422 Generate code that uses (does not use) the load string instructions 13423 and the store string word instructions to save multiple registers 13424 and do small block moves. These instructions are generated by 13425 default on POWER systems, and not generated on PowerPC systems. 13426 Do not use `-mstring' on little endian PowerPC systems, since those 13427 instructions do not work when the processor is in little endian 13428 mode. The exceptions are PPC740 and PPC750 which permit the 13429 instructions usage in little endian mode. 13430 13431 `-mupdate' 13432 `-mno-update' 13433 Generate code that uses (does not use) the load or store 13434 instructions that update the base register to the address of the 13435 calculated memory location. These instructions are generated by 13436 default. If you use `-mno-update', there is a small window 13437 between the time that the stack pointer is updated and the address 13438 of the previous frame is stored, which means code that walks the 13439 stack frame across interrupts or signals may get corrupted data. 13440 13441 `-mavoid-indexed-addresses' 13442 13443 `-mno-avoid-indexed-addresses' 13444 Generate code that tries to avoid (not avoid) the use of indexed 13445 load or store instructions. These instructions can incur a 13446 performance penalty on Power6 processors in certain situations, 13447 such as when stepping through large arrays that cross a 16M 13448 boundary. This option is enabled by default when targetting 13449 Power6 and disabled otherwise. 13450 13451 `-mfused-madd' 13452 `-mno-fused-madd' 13453 Generate code that uses (does not use) the floating point multiply 13454 and accumulate instructions. These instructions are generated by 13455 default if hardware floating is used. 13456 13457 `-mmulhw' 13458 `-mno-mulhw' 13459 Generate code that uses (does not use) the half-word multiply and 13460 multiply-accumulate instructions on the IBM 405, 440 and 464 13461 processors. These instructions are generated by default when 13462 targetting those processors. 13463 13464 `-mdlmzb' 13465 `-mno-dlmzb' 13466 Generate code that uses (does not use) the string-search `dlmzb' 13467 instruction on the IBM 405, 440 and 464 processors. This 13468 instruction is generated by default when targetting those 13469 processors. 13470 13471 `-mno-bit-align' 13472 `-mbit-align' 13473 On System V.4 and embedded PowerPC systems do not (do) force 13474 structures and unions that contain bit-fields to be aligned to the 13475 base type of the bit-field. 13476 13477 For example, by default a structure containing nothing but 8 13478 `unsigned' bit-fields of length 1 would be aligned to a 4 byte 13479 boundary and have a size of 4 bytes. By using `-mno-bit-align', 13480 the structure would be aligned to a 1 byte boundary and be one 13481 byte in size. 13482 13483 `-mno-strict-align' 13484 `-mstrict-align' 13485 On System V.4 and embedded PowerPC systems do not (do) assume that 13486 unaligned memory references will be handled by the system. 13487 13488 `-mrelocatable' 13489 `-mno-relocatable' 13490 On embedded PowerPC systems generate code that allows (does not 13491 allow) the program to be relocated to a different address at 13492 runtime. If you use `-mrelocatable' on any module, all objects 13493 linked together must be compiled with `-mrelocatable' or 13494 `-mrelocatable-lib'. 13495 13496 `-mrelocatable-lib' 13497 `-mno-relocatable-lib' 13498 On embedded PowerPC systems generate code that allows (does not 13499 allow) the program to be relocated to a different address at 13500 runtime. Modules compiled with `-mrelocatable-lib' can be linked 13501 with either modules compiled without `-mrelocatable' and 13502 `-mrelocatable-lib' or with modules compiled with the 13503 `-mrelocatable' options. 13504 13505 `-mno-toc' 13506 `-mtoc' 13507 On System V.4 and embedded PowerPC systems do not (do) assume that 13508 register 2 contains a pointer to a global area pointing to the 13509 addresses used in the program. 13510 13511 `-mlittle' 13512 `-mlittle-endian' 13513 On System V.4 and embedded PowerPC systems compile code for the 13514 processor in little endian mode. The `-mlittle-endian' option is 13515 the same as `-mlittle'. 13516 13517 `-mbig' 13518 `-mbig-endian' 13519 On System V.4 and embedded PowerPC systems compile code for the 13520 processor in big endian mode. The `-mbig-endian' option is the 13521 same as `-mbig'. 13522 13523 `-mdynamic-no-pic' 13524 On Darwin and Mac OS X systems, compile code so that it is not 13525 relocatable, but that its external references are relocatable. The 13526 resulting code is suitable for applications, but not shared 13527 libraries. 13528 13529 `-mprioritize-restricted-insns=PRIORITY' 13530 This option controls the priority that is assigned to 13531 dispatch-slot restricted instructions during the second scheduling 13532 pass. The argument PRIORITY takes the value 0/1/2 to assign 13533 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted 13534 instructions. 13535 13536 `-msched-costly-dep=DEPENDENCE_TYPE' 13537 This option controls which dependences are considered costly by 13538 the target during instruction scheduling. The argument 13539 DEPENDENCE_TYPE takes one of the following values: NO: no 13540 dependence is costly, ALL: all dependences are costly, 13541 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly, 13542 STORE_TO_LOAD: any dependence from store to load is costly, 13543 NUMBER: any dependence which latency >= NUMBER is costly. 13544 13545 `-minsert-sched-nops=SCHEME' 13546 This option controls which nop insertion scheme will be used during 13547 the second scheduling pass. The argument SCHEME takes one of the 13548 following values: NO: Don't insert nops. PAD: Pad with nops any 13549 dispatch group which has vacant issue slots, according to the 13550 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly 13551 dependent insns into separate groups. Insert exactly as many nops 13552 as needed to force an insn to a new group, according to the 13553 estimated processor grouping. NUMBER: Insert nops to force costly 13554 dependent insns into separate groups. Insert NUMBER nops to force 13555 an insn to a new group. 13556 13557 `-mcall-sysv' 13558 On System V.4 and embedded PowerPC systems compile code using 13559 calling conventions that adheres to the March 1995 draft of the 13560 System V Application Binary Interface, PowerPC processor 13561 supplement. This is the default unless you configured GCC using 13562 `powerpc-*-eabiaix'. 13563 13564 `-mcall-sysv-eabi' 13565 Specify both `-mcall-sysv' and `-meabi' options. 13566 13567 `-mcall-sysv-noeabi' 13568 Specify both `-mcall-sysv' and `-mno-eabi' options. 13569 13570 `-mcall-solaris' 13571 On System V.4 and embedded PowerPC systems compile code for the 13572 Solaris operating system. 13573 13574 `-mcall-linux' 13575 On System V.4 and embedded PowerPC systems compile code for the 13576 Linux-based GNU system. 13577 13578 `-mcall-gnu' 13579 On System V.4 and embedded PowerPC systems compile code for the 13580 Hurd-based GNU system. 13581 13582 `-mcall-netbsd' 13583 On System V.4 and embedded PowerPC systems compile code for the 13584 NetBSD operating system. 13585 13586 `-maix-struct-return' 13587 Return all structures in memory (as specified by the AIX ABI). 13588 13589 `-msvr4-struct-return' 13590 Return structures smaller than 8 bytes in registers (as specified 13591 by the SVR4 ABI). 13592 13593 `-mabi=ABI-TYPE' 13594 Extend the current ABI with a particular extension, or remove such 13595 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 13596 IBMLONGDOUBLE, IEEELONGDOUBLE. 13597 13598 `-mabi=spe' 13599 Extend the current ABI with SPE ABI extensions. This does not 13600 change the default ABI, instead it adds the SPE ABI extensions to 13601 the current ABI. 13602 13603 `-mabi=no-spe' 13604 Disable Booke SPE ABI extensions for the current ABI. 13605 13606 `-mabi=ibmlongdouble' 13607 Change the current ABI to use IBM extended precision long double. 13608 This is a PowerPC 32-bit SYSV ABI option. 13609 13610 `-mabi=ieeelongdouble' 13611 Change the current ABI to use IEEE extended precision long double. 13612 This is a PowerPC 32-bit Linux ABI option. 13613 13614 `-mprototype' 13615 `-mno-prototype' 13616 On System V.4 and embedded PowerPC systems assume that all calls to 13617 variable argument functions are properly prototyped. Otherwise, 13618 the compiler must insert an instruction before every non 13619 prototyped call to set or clear bit 6 of the condition code 13620 register (CR) to indicate whether floating point values were 13621 passed in the floating point registers in case the function takes 13622 a variable arguments. With `-mprototype', only calls to 13623 prototyped variable argument functions will set or clear the bit. 13624 13625 `-msim' 13626 On embedded PowerPC systems, assume that the startup module is 13627 called `sim-crt0.o' and that the standard C libraries are 13628 `libsim.a' and `libc.a'. This is the default for 13629 `powerpc-*-eabisim' configurations. 13630 13631 `-mmvme' 13632 On embedded PowerPC systems, assume that the startup module is 13633 called `crt0.o' and the standard C libraries are `libmvme.a' and 13634 `libc.a'. 13635 13636 `-mads' 13637 On embedded PowerPC systems, assume that the startup module is 13638 called `crt0.o' and the standard C libraries are `libads.a' and 13639 `libc.a'. 13640 13641 `-myellowknife' 13642 On embedded PowerPC systems, assume that the startup module is 13643 called `crt0.o' and the standard C libraries are `libyk.a' and 13644 `libc.a'. 13645 13646 `-mvxworks' 13647 On System V.4 and embedded PowerPC systems, specify that you are 13648 compiling for a VxWorks system. 13649 13650 `-memb' 13651 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 13652 header to indicate that `eabi' extended relocations are used. 13653 13654 `-meabi' 13655 `-mno-eabi' 13656 On System V.4 and embedded PowerPC systems do (do not) adhere to 13657 the Embedded Applications Binary Interface (eabi) which is a set of 13658 modifications to the System V.4 specifications. Selecting `-meabi' 13659 means that the stack is aligned to an 8 byte boundary, a function 13660 `__eabi' is called to from `main' to set up the eabi environment, 13661 and the `-msdata' option can use both `r2' and `r13' to point to 13662 two separate small data areas. Selecting `-mno-eabi' means that 13663 the stack is aligned to a 16 byte boundary, do not call an 13664 initialization function from `main', and the `-msdata' option will 13665 only use `r13' to point to a single small data area. The `-meabi' 13666 option is on by default if you configured GCC using one of the 13667 `powerpc*-*-eabi*' options. 13668 13669 `-msdata=eabi' 13670 On System V.4 and embedded PowerPC systems, put small initialized 13671 `const' global and static data in the `.sdata2' section, which is 13672 pointed to by register `r2'. Put small initialized non-`const' 13673 global and static data in the `.sdata' section, which is pointed 13674 to by register `r13'. Put small uninitialized global and static 13675 data in the `.sbss' section, which is adjacent to the `.sdata' 13676 section. The `-msdata=eabi' option is incompatible with the 13677 `-mrelocatable' option. The `-msdata=eabi' option also sets the 13678 `-memb' option. 13679 13680 `-msdata=sysv' 13681 On System V.4 and embedded PowerPC systems, put small global and 13682 static data in the `.sdata' section, which is pointed to by 13683 register `r13'. Put small uninitialized global and static data in 13684 the `.sbss' section, which is adjacent to the `.sdata' section. 13685 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 13686 option. 13687 13688 `-msdata=default' 13689 `-msdata' 13690 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 13691 compile code the same as `-msdata=eabi', otherwise compile code the 13692 same as `-msdata=sysv'. 13693 13694 `-msdata=data' 13695 On System V.4 and embedded PowerPC systems, put small global data 13696 in the `.sdata' section. Put small uninitialized global data in 13697 the `.sbss' section. Do not use register `r13' to address small 13698 data however. This is the default behavior unless other `-msdata' 13699 options are used. 13700 13701 `-msdata=none' 13702 `-mno-sdata' 13703 On embedded PowerPC systems, put all initialized global and static 13704 data in the `.data' section, and all uninitialized data in the 13705 `.bss' section. 13706 13707 `-G NUM' 13708 On embedded PowerPC systems, put global and static items less than 13709 or equal to NUM bytes into the small data or bss sections instead 13710 of the normal data or bss section. By default, NUM is 8. The `-G 13711 NUM' switch is also passed to the linker. All modules should be 13712 compiled with the same `-G NUM' value. 13713 13714 `-mregnames' 13715 `-mno-regnames' 13716 On System V.4 and embedded PowerPC systems do (do not) emit 13717 register names in the assembly language output using symbolic 13718 forms. 13719 13720 `-mlongcall' 13721 `-mno-longcall' 13722 By default assume that all calls are far away so that a longer more 13723 expensive calling sequence is required. This is required for calls 13724 further than 32 megabytes (33,554,432 bytes) from the current 13725 location. A short call will be generated if the compiler knows 13726 the call cannot be that far away. This setting can be overridden 13727 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 13728 13729 Some linkers are capable of detecting out-of-range calls and 13730 generating glue code on the fly. On these systems, long calls are 13731 unnecessary and generate slower code. As of this writing, the AIX 13732 linker can do this, as can the GNU linker for PowerPC/64. It is 13733 planned to add this feature to the GNU linker for 32-bit PowerPC 13734 systems as well. 13735 13736 On Darwin/PPC systems, `#pragma longcall' will generate "jbsr 13737 callee, L42", plus a "branch island" (glue code). The two target 13738 addresses represent the callee and the "branch island". The 13739 Darwin/PPC linker will prefer the first address and generate a "bl 13740 callee" if the PPC "bl" instruction will reach the callee directly; 13741 otherwise, the linker will generate "bl L42" to call the "branch 13742 island". The "branch island" is appended to the body of the 13743 calling function; it computes the full 32-bit address of the callee 13744 and jumps to it. 13745 13746 On Mach-O (Darwin) systems, this option directs the compiler emit 13747 to the glue for every direct call, and the Darwin linker decides 13748 whether to use or discard it. 13749 13750 In the future, we may cause GCC to ignore all longcall 13751 specifications when the linker is known to generate glue. 13752 13753 `-pthread' 13754 Adds support for multithreading with the "pthreads" library. This 13755 option sets flags for both the preprocessor and linker. 13756 13757 13758 13759 File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 13760 13761 3.17.29 S/390 and zSeries Options 13762 --------------------------------- 13763 13764 These are the `-m' options defined for the S/390 and zSeries 13765 architecture. 13766 13767 `-mhard-float' 13768 `-msoft-float' 13769 Use (do not use) the hardware floating-point instructions and 13770 registers for floating-point operations. When `-msoft-float' is 13771 specified, functions in `libgcc.a' will be used to perform 13772 floating-point operations. When `-mhard-float' is specified, the 13773 compiler generates IEEE floating-point instructions. This is the 13774 default. 13775 13776 `-mhard-dfp' 13777 `-mno-hard-dfp' 13778 Use (do not use) the hardware decimal-floating-point instructions 13779 for decimal-floating-point operations. When `-mno-hard-dfp' is 13780 specified, functions in `libgcc.a' will be used to perform 13781 decimal-floating-point operations. When `-mhard-dfp' is 13782 specified, the compiler generates decimal-floating-point hardware 13783 instructions. This is the default for `-march=z9-ec' or higher. 13784 13785 `-mlong-double-64' 13786 `-mlong-double-128' 13787 These switches control the size of `long double' type. A size of 13788 64bit makes the `long double' type equivalent to the `double' 13789 type. This is the default. 13790 13791 `-mbackchain' 13792 `-mno-backchain' 13793 Store (do not store) the address of the caller's frame as 13794 backchain pointer into the callee's stack frame. A backchain may 13795 be needed to allow debugging using tools that do not understand 13796 DWARF-2 call frame information. When `-mno-packed-stack' is in 13797 effect, the backchain pointer is stored at the bottom of the stack 13798 frame; when `-mpacked-stack' is in effect, the backchain is placed 13799 into the topmost word of the 96/160 byte register save area. 13800 13801 In general, code compiled with `-mbackchain' is call-compatible 13802 with code compiled with `-mmo-backchain'; however, use of the 13803 backchain for debugging purposes usually requires that the whole 13804 binary is built with `-mbackchain'. Note that the combination of 13805 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 13806 supported. In order to build a linux kernel use `-msoft-float'. 13807 13808 The default is to not maintain the backchain. 13809 13810 `-mpacked-stack' 13811 `-mno-packed-stack' 13812 Use (do not use) the packed stack layout. When 13813 `-mno-packed-stack' is specified, the compiler uses the all fields 13814 of the 96/160 byte register save area only for their default 13815 purpose; unused fields still take up stack space. When 13816 `-mpacked-stack' is specified, register save slots are densely 13817 packed at the top of the register save area; unused space is 13818 reused for other purposes, allowing for more efficient use of the 13819 available stack space. However, when `-mbackchain' is also in 13820 effect, the topmost word of the save area is always used to store 13821 the backchain, and the return address register is always saved two 13822 words below the backchain. 13823 13824 As long as the stack frame backchain is not used, code generated 13825 with `-mpacked-stack' is call-compatible with code generated with 13826 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 13827 for S/390 or zSeries generated code that uses the stack frame 13828 backchain at run time, not just for debugging purposes. Such code 13829 is not call-compatible with code compiled with `-mpacked-stack'. 13830 Also, note that the combination of `-mbackchain', `-mpacked-stack' 13831 and `-mhard-float' is not supported. In order to build a linux 13832 kernel use `-msoft-float'. 13833 13834 The default is to not use the packed stack layout. 13835 13836 `-msmall-exec' 13837 `-mno-small-exec' 13838 Generate (or do not generate) code using the `bras' instruction to 13839 do subroutine calls. This only works reliably if the total 13840 executable size does not exceed 64k. The default is to use the 13841 `basr' instruction instead, which does not have this limitation. 13842 13843 `-m64' 13844 `-m31' 13845 When `-m31' is specified, generate code compliant to the GNU/Linux 13846 for S/390 ABI. When `-m64' is specified, generate code compliant 13847 to the GNU/Linux for zSeries ABI. This allows GCC in particular 13848 to generate 64-bit instructions. For the `s390' targets, the 13849 default is `-m31', while the `s390x' targets default to `-m64'. 13850 13851 `-mzarch' 13852 `-mesa' 13853 When `-mzarch' is specified, generate code using the instructions 13854 available on z/Architecture. When `-mesa' is specified, generate 13855 code using the instructions available on ESA/390. Note that 13856 `-mesa' is not possible with `-m64'. When generating code 13857 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 13858 When generating code compliant to the GNU/Linux for zSeries ABI, 13859 the default is `-mzarch'. 13860 13861 `-mmvcle' 13862 `-mno-mvcle' 13863 Generate (or do not generate) code using the `mvcle' instruction 13864 to perform block moves. When `-mno-mvcle' is specified, use a 13865 `mvc' loop instead. This is the default unless optimizing for 13866 size. 13867 13868 `-mdebug' 13869 `-mno-debug' 13870 Print (or do not print) additional debug information when 13871 compiling. The default is to not print debug information. 13872 13873 `-march=CPU-TYPE' 13874 Generate code that will run on CPU-TYPE, which is the name of a 13875 system representing a certain processor type. Possible values for 13876 CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and 13877 `z10'. When generating code using the instructions available on 13878 z/Architecture, the default is `-march=z900'. Otherwise, the 13879 default is `-march=g5'. 13880 13881 `-mtune=CPU-TYPE' 13882 Tune to CPU-TYPE everything applicable about the generated code, 13883 except for the ABI and the set of available instructions. The 13884 list of CPU-TYPE values is the same as for `-march'. The default 13885 is the value used for `-march'. 13886 13887 `-mtpf-trace' 13888 `-mno-tpf-trace' 13889 Generate code that adds (does not add) in TPF OS specific branches 13890 to trace routines in the operating system. This option is off by 13891 default, even when compiling for the TPF OS. 13892 13893 `-mfused-madd' 13894 `-mno-fused-madd' 13895 Generate code that uses (does not use) the floating point multiply 13896 and accumulate instructions. These instructions are generated by 13897 default if hardware floating point is used. 13898 13899 `-mwarn-framesize=FRAMESIZE' 13900 Emit a warning if the current function exceeds the given frame 13901 size. Because this is a compile time check it doesn't need to be 13902 a real problem when the program runs. It is intended to identify 13903 functions which most probably cause a stack overflow. It is 13904 useful to be used in an environment with limited stack size e.g. 13905 the linux kernel. 13906 13907 `-mwarn-dynamicstack' 13908 Emit a warning if the function calls alloca or uses dynamically 13909 sized arrays. This is generally a bad idea with a limited stack 13910 size. 13911 13912 `-mstack-guard=STACK-GUARD' 13913 `-mstack-size=STACK-SIZE' 13914 If these options are provided the s390 back end emits additional 13915 instructions in the function prologue which trigger a trap if the 13916 stack size is STACK-GUARD bytes above the STACK-SIZE (remember 13917 that the stack on s390 grows downward). If the STACK-GUARD option 13918 is omitted the smallest power of 2 larger than the frame size of 13919 the compiled function is chosen. These options are intended to be 13920 used to help debugging stack overflow problems. The additionally 13921 emitted code causes only little overhead and hence can also be 13922 used in production like systems without greater performance 13923 degradation. The given values have to be exact powers of 2 and 13924 STACK-SIZE has to be greater than STACK-GUARD without exceeding 13925 64k. In order to be efficient the extra code makes the assumption 13926 that the stack starts at an address aligned to the value given by 13927 STACK-SIZE. The STACK-GUARD option can only be used in 13928 conjunction with STACK-SIZE. 13929 13930 13931 File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 13932 13933 3.17.30 Score Options 13934 --------------------- 13935 13936 These options are defined for Score implementations: 13937 13938 `-meb' 13939 Compile code for big endian mode. This is the default. 13940 13941 `-mel' 13942 Compile code for little endian mode. 13943 13944 `-mnhwloop' 13945 Disable generate bcnz instruction. 13946 13947 `-muls' 13948 Enable generate unaligned load and store instruction. 13949 13950 `-mmac' 13951 Enable the use of multiply-accumulate instructions. Disabled by 13952 default. 13953 13954 `-mscore5' 13955 Specify the SCORE5 as the target architecture. 13956 13957 `-mscore5u' 13958 Specify the SCORE5U of the target architecture. 13959 13960 `-mscore7' 13961 Specify the SCORE7 as the target architecture. This is the default. 13962 13963 `-mscore7d' 13964 Specify the SCORE7D as the target architecture. 13965 13966 13967 File: gcc.info, Node: SH Options, Next: SPARC Options, Prev: Score Options, Up: Submodel Options 13968 13969 3.17.31 SH Options 13970 ------------------ 13971 13972 These `-m' options are defined for the SH implementations: 13973 13974 `-m1' 13975 Generate code for the SH1. 13976 13977 `-m2' 13978 Generate code for the SH2. 13979 13980 `-m2e' 13981 Generate code for the SH2e. 13982 13983 `-m3' 13984 Generate code for the SH3. 13985 13986 `-m3e' 13987 Generate code for the SH3e. 13988 13989 `-m4-nofpu' 13990 Generate code for the SH4 without a floating-point unit. 13991 13992 `-m4-single-only' 13993 Generate code for the SH4 with a floating-point unit that only 13994 supports single-precision arithmetic. 13995 13996 `-m4-single' 13997 Generate code for the SH4 assuming the floating-point unit is in 13998 single-precision mode by default. 13999 14000 `-m4' 14001 Generate code for the SH4. 14002 14003 `-m4a-nofpu' 14004 Generate code for the SH4al-dsp, or for a SH4a in such a way that 14005 the floating-point unit is not used. 14006 14007 `-m4a-single-only' 14008 Generate code for the SH4a, in such a way that no double-precision 14009 floating point operations are used. 14010 14011 `-m4a-single' 14012 Generate code for the SH4a assuming the floating-point unit is in 14013 single-precision mode by default. 14014 14015 `-m4a' 14016 Generate code for the SH4a. 14017 14018 `-m4al' 14019 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 14020 the assembler. GCC doesn't generate any DSP instructions at the 14021 moment. 14022 14023 `-mb' 14024 Compile code for the processor in big endian mode. 14025 14026 `-ml' 14027 Compile code for the processor in little endian mode. 14028 14029 `-mdalign' 14030 Align doubles at 64-bit boundaries. Note that this changes the 14031 calling conventions, and thus some functions from the standard C 14032 library will not work unless you recompile it first with 14033 `-mdalign'. 14034 14035 `-mrelax' 14036 Shorten some address references at link time, when possible; uses 14037 the linker option `-relax'. 14038 14039 `-mbigtable' 14040 Use 32-bit offsets in `switch' tables. The default is to use 14041 16-bit offsets. 14042 14043 `-mbitops' 14044 Enable the use of bit manipulation instructions on SH2A. 14045 14046 `-mfmovd' 14047 Enable the use of the instruction `fmovd'. 14048 14049 `-mhitachi' 14050 Comply with the calling conventions defined by Renesas. 14051 14052 `-mrenesas' 14053 Comply with the calling conventions defined by Renesas. 14054 14055 `-mno-renesas' 14056 Comply with the calling conventions defined for GCC before the 14057 Renesas conventions were available. This option is the default 14058 for all targets of the SH toolchain except for `sh-symbianelf'. 14059 14060 `-mnomacsave' 14061 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 14062 given. 14063 14064 `-mieee' 14065 Increase IEEE-compliance of floating-point code. At the moment, 14066 this is equivalent to `-fno-finite-math-only'. When generating 16 14067 bit SH opcodes, getting IEEE-conforming results for comparisons of 14068 NANs / infinities incurs extra overhead in every floating point 14069 comparison, therefore the default is set to `-ffinite-math-only'. 14070 14071 `-minline-ic_invalidate' 14072 Inline code to invalidate instruction cache entries after setting 14073 up nested function trampolines. This option has no effect if 14074 -musermode is in effect and the selected code generation option 14075 (e.g. -m4) does not allow the use of the icbi instruction. If the 14076 selected code generation option does not allow the use of the icbi 14077 instruction, and -musermode is not in effect, the inlined code will 14078 manipulate the instruction cache address array directly with an 14079 associative write. This not only requires privileged mode, but it 14080 will also fail if the cache line had been mapped via the TLB and 14081 has become unmapped. 14082 14083 `-misize' 14084 Dump instruction size and location in the assembly code. 14085 14086 `-mpadstruct' 14087 This option is deprecated. It pads structures to multiple of 4 14088 bytes, which is incompatible with the SH ABI. 14089 14090 `-mspace' 14091 Optimize for space instead of speed. Implied by `-Os'. 14092 14093 `-mprefergot' 14094 When generating position-independent code, emit function calls 14095 using the Global Offset Table instead of the Procedure Linkage 14096 Table. 14097 14098 `-musermode' 14099 Don't generate privileged mode only code; implies 14100 -mno-inline-ic_invalidate if the inlined code would not work in 14101 user mode. This is the default when the target is `sh-*-linux*'. 14102 14103 `-multcost=NUMBER' 14104 Set the cost to assume for a multiply insn. 14105 14106 `-mdiv=STRATEGY' 14107 Set the division strategy to use for SHmedia code. STRATEGY must 14108 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, 14109 inv:call, inv:call2, inv:fp . "fp" performs the operation in 14110 floating point. This has a very high latency, but needs only a 14111 few instructions, so it might be a good choice if your code has 14112 enough easily exploitable ILP to allow the compiler to schedule 14113 the floating point instructions together with other instructions. 14114 Division by zero causes a floating point exception. "inv" uses 14115 integer operations to calculate the inverse of the divisor, and 14116 then multiplies the dividend with the inverse. This strategy 14117 allows cse and hoisting of the inverse calculation. Division by 14118 zero calculates an unspecified result, but does not trap. 14119 "inv:minlat" is a variant of "inv" where if no cse / hoisting 14120 opportunities have been found, or if the entire operation has been 14121 hoisted to the same place, the last stages of the inverse 14122 calculation are intertwined with the final multiply to reduce the 14123 overall latency, at the expense of using a few more instructions, 14124 and thus offering fewer scheduling opportunities with other code. 14125 "call" calls a library function that usually implements the 14126 inv:minlat strategy. This gives high code density for 14127 m5-*media-nofpu compilations. "call2" uses a different entry 14128 point of the same library function, where it assumes that a 14129 pointer to a lookup table has already been set up, which exposes 14130 the pointer load to cse / code hoisting optimizations. 14131 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm 14132 for initial code generation, but if the code stays unoptimized, 14133 revert to the "call", "call2", or "fp" strategies, respectively. 14134 Note that the potentially-trapping side effect of division by zero 14135 is carried by a separate instruction, so it is possible that all 14136 the integer instructions are hoisted out, but the marker for the 14137 side effect stays where it is. A recombination to fp operations 14138 or a call is not possible in that case. "inv20u" and "inv20l" are 14139 variants of the "inv:minlat" strategy. In the case that the 14140 inverse calculation was nor separated from the multiply, they speed 14141 up division where the dividend fits into 20 bits (plus sign where 14142 applicable), by inserting a test to skip a number of operations in 14143 this case; this test slows down the case of larger dividends. 14144 inv20u assumes the case of a such a small dividend to be unlikely, 14145 and inv20l assumes it to be likely. 14146 14147 `-mdivsi3_libfunc=NAME' 14148 Set the name of the library function used for 32 bit signed 14149 division to NAME. This only affect the name used in the call and 14150 inv:call division strategies, and the compiler will still expect 14151 the same sets of input/output/clobbered registers as if this 14152 option was not present. 14153 14154 `-mfixed-range=REGISTER-RANGE' 14155 Generate code treating the given register range as fixed registers. 14156 A fixed register is one that the register allocator can not use. 14157 This is useful when compiling kernel code. A register range is 14158 specified as two registers separated by a dash. Multiple register 14159 ranges can be specified separated by a comma. 14160 14161 `-madjust-unroll' 14162 Throttle unrolling to avoid thrashing target registers. This 14163 option only has an effect if the gcc code base supports the 14164 TARGET_ADJUST_UNROLL_MAX target hook. 14165 14166 `-mindexed-addressing' 14167 Enable the use of the indexed addressing mode for 14168 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 14169 implement 32 bit wrap-around semantics for the indexed addressing 14170 mode. The architecture allows the implementation of processors 14171 with 64 bit MMU, which the OS could use to get 32 bit addressing, 14172 but since no current hardware implementation supports this or any 14173 other way to make the indexed addressing mode safe to use in the 14174 32 bit ABI, the default is -mno-indexed-addressing. 14175 14176 `-mgettrcost=NUMBER' 14177 Set the cost assumed for the gettr instruction to NUMBER. The 14178 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 14179 14180 `-mpt-fixed' 14181 Assume pt* instructions won't trap. This will generally generate 14182 better scheduled code, but is unsafe on current hardware. The 14183 current architecture definition says that ptabs and ptrel trap 14184 when the target anded with 3 is 3. This has the unintentional 14185 effect of making it unsafe to schedule ptabs / ptrel before a 14186 branch, or hoist it out of a loop. For example, 14187 __do_global_ctors, a part of libgcc that runs constructors at 14188 program startup, calls functions in a list which is delimited by 14189 -1. With the -mpt-fixed option, the ptabs will be done before 14190 testing against -1. That means that all the constructors will be 14191 run a bit quicker, but when the loop comes to the end of the list, 14192 the program crashes because ptabs loads -1 into a target register. 14193 Since this option is unsafe for any hardware implementing the 14194 current architecture specification, the default is -mno-pt-fixed. 14195 Unless the user specifies a specific cost with `-mgettrcost', 14196 -mno-pt-fixed also implies `-mgettrcost=100'; this deters register 14197 allocation using target registers for storing ordinary integers. 14198 14199 `-minvalid-symbols' 14200 Assume symbols might be invalid. Ordinary function symbols 14201 generated by the compiler will always be valid to load with 14202 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or 14203 linker tricks it is possible to generate symbols that will cause 14204 ptabs / ptrel to trap. This option is only meaningful when 14205 `-mno-pt-fixed' is in effect. It will then prevent 14206 cross-basic-block cse, hoisting and most scheduling of symbol 14207 loads. The default is `-mno-invalid-symbols'. 14208 14209 14210 File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: SH Options, Up: Submodel Options 14211 14212 3.17.32 SPARC Options 14213 --------------------- 14214 14215 These `-m' options are supported on the SPARC: 14216 14217 `-mno-app-regs' 14218 `-mapp-regs' 14219 Specify `-mapp-regs' to generate output using the global registers 14220 2 through 4, which the SPARC SVR4 ABI reserves for applications. 14221 This is the default. 14222 14223 To be fully SVR4 ABI compliant at the cost of some performance 14224 loss, specify `-mno-app-regs'. You should compile libraries and 14225 system software with this option. 14226 14227 `-mfpu' 14228 `-mhard-float' 14229 Generate output containing floating point instructions. This is 14230 the default. 14231 14232 `-mno-fpu' 14233 `-msoft-float' 14234 Generate output containing library calls for floating point. 14235 *Warning:* the requisite libraries are not available for all SPARC 14236 targets. Normally the facilities of the machine's usual C 14237 compiler are used, but this cannot be done directly in 14238 cross-compilation. You must make your own arrangements to provide 14239 suitable library functions for cross-compilation. The embedded 14240 targets `sparc-*-aout' and `sparclite-*-*' do provide software 14241 floating point support. 14242 14243 `-msoft-float' changes the calling convention in the output file; 14244 therefore, it is only useful if you compile _all_ of a program with 14245 this option. In particular, you need to compile `libgcc.a', the 14246 library that comes with GCC, with `-msoft-float' in order for this 14247 to work. 14248 14249 `-mhard-quad-float' 14250 Generate output containing quad-word (long double) floating point 14251 instructions. 14252 14253 `-msoft-quad-float' 14254 Generate output containing library calls for quad-word (long 14255 double) floating point instructions. The functions called are 14256 those specified in the SPARC ABI. This is the default. 14257 14258 As of this writing, there are no SPARC implementations that have 14259 hardware support for the quad-word floating point instructions. 14260 They all invoke a trap handler for one of these instructions, and 14261 then the trap handler emulates the effect of the instruction. 14262 Because of the trap handler overhead, this is much slower than 14263 calling the ABI library routines. Thus the `-msoft-quad-float' 14264 option is the default. 14265 14266 `-mno-unaligned-doubles' 14267 `-munaligned-doubles' 14268 Assume that doubles have 8 byte alignment. This is the default. 14269 14270 With `-munaligned-doubles', GCC assumes that doubles have 8 byte 14271 alignment only if they are contained in another type, or if they 14272 have an absolute address. Otherwise, it assumes they have 4 byte 14273 alignment. Specifying this option avoids some rare compatibility 14274 problems with code generated by other compilers. It is not the 14275 default because it results in a performance loss, especially for 14276 floating point code. 14277 14278 `-mno-faster-structs' 14279 `-mfaster-structs' 14280 With `-mfaster-structs', the compiler assumes that structures 14281 should have 8 byte alignment. This enables the use of pairs of 14282 `ldd' and `std' instructions for copies in structure assignment, 14283 in place of twice as many `ld' and `st' pairs. However, the use 14284 of this changed alignment directly violates the SPARC ABI. Thus, 14285 it's intended only for use on targets where the developer 14286 acknowledges that their resulting code will not be directly in 14287 line with the rules of the ABI. 14288 14289 `-mimpure-text' 14290 `-mimpure-text', used in addition to `-shared', tells the compiler 14291 to not pass `-z text' to the linker when linking a shared object. 14292 Using this option, you can link position-dependent code into a 14293 shared object. 14294 14295 `-mimpure-text' suppresses the "relocations remain against 14296 allocatable but non-writable sections" linker error message. 14297 However, the necessary relocations will trigger copy-on-write, and 14298 the shared object is not actually shared across processes. 14299 Instead of using `-mimpure-text', you should compile all source 14300 code with `-fpic' or `-fPIC'. 14301 14302 This option is only available on SunOS and Solaris. 14303 14304 `-mcpu=CPU_TYPE' 14305 Set the instruction set, register set, and instruction scheduling 14306 parameters for machine type CPU_TYPE. Supported values for 14307 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite', 14308 `f930', `f934', `hypersparc', `sparclite86x', `sparclet', 14309 `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and 14310 `niagara2'. 14311 14312 Default instruction scheduling parameters are used for values that 14313 select an architecture and not an implementation. These are `v7', 14314 `v8', `sparclite', `sparclet', `v9'. 14315 14316 Here is a list of each supported architecture and their supported 14317 implementations. 14318 14319 v7: cypress 14320 v8: supersparc, hypersparc 14321 sparclite: f930, f934, sparclite86x 14322 sparclet: tsc701 14323 v9: ultrasparc, ultrasparc3, niagara, niagara2 14324 14325 By default (unless configured otherwise), GCC generates code for 14326 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 14327 the compiler additionally optimizes it for the Cypress CY7C602 14328 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 14329 also appropriate for the older SPARCStation 1, 2, IPX etc. 14330 14331 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 14332 architecture. The only difference from V7 code is that the 14333 compiler emits the integer multiply and integer divide 14334 instructions which exist in SPARC-V8 but not in SPARC-V7. With 14335 `-mcpu=supersparc', the compiler additionally optimizes it for the 14336 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 14337 series. 14338 14339 With `-mcpu=sparclite', GCC generates code for the SPARClite 14340 variant of the SPARC architecture. This adds the integer 14341 multiply, integer divide step and scan (`ffs') instructions which 14342 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 14343 compiler additionally optimizes it for the Fujitsu MB86930 chip, 14344 which is the original SPARClite, with no FPU. With `-mcpu=f934', 14345 the compiler additionally optimizes it for the Fujitsu MB86934 14346 chip, which is the more recent SPARClite with FPU. 14347 14348 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 14349 of the SPARC architecture. This adds the integer multiply, 14350 multiply/accumulate, integer divide step and scan (`ffs') 14351 instructions which exist in SPARClet but not in SPARC-V7. With 14352 `-mcpu=tsc701', the compiler additionally optimizes it for the 14353 TEMIC SPARClet chip. 14354 14355 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 14356 architecture. This adds 64-bit integer and floating-point move 14357 instructions, 3 additional floating-point condition code registers 14358 and conditional move instructions. With `-mcpu=ultrasparc', the 14359 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 14360 chips. With `-mcpu=ultrasparc3', the compiler additionally 14361 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 14362 chips. With `-mcpu=niagara', the compiler additionally optimizes 14363 it for Sun UltraSPARC T1 chips. With `-mcpu=niagara2', the 14364 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 14365 14366 `-mtune=CPU_TYPE' 14367 Set the instruction scheduling parameters for machine type 14368 CPU_TYPE, but do not set the instruction set or register set that 14369 the option `-mcpu=CPU_TYPE' would. 14370 14371 The same values for `-mcpu=CPU_TYPE' can be used for 14372 `-mtune=CPU_TYPE', but the only useful values are those that 14373 select a particular cpu implementation. Those are `cypress', 14374 `supersparc', `hypersparc', `f930', `f934', `sparclite86x', 14375 `tsc701', `ultrasparc', `ultrasparc3', `niagara', and `niagara2'. 14376 14377 `-mv8plus' 14378 `-mno-v8plus' 14379 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 14380 difference from the V8 ABI is that the global and out registers are 14381 considered 64-bit wide. This is enabled by default on Solaris in 14382 32-bit mode for all SPARC-V9 processors. 14383 14384 `-mvis' 14385 `-mno-vis' 14386 With `-mvis', GCC generates code that takes advantage of the 14387 UltraSPARC Visual Instruction Set extensions. The default is 14388 `-mno-vis'. 14389 14390 These `-m' options are supported in addition to the above on SPARC-V9 14391 processors in 64-bit environments: 14392 14393 `-mlittle-endian' 14394 Generate code for a processor running in little-endian mode. It 14395 is only available for a few configurations and most notably not on 14396 Solaris and Linux. 14397 14398 `-m32' 14399 `-m64' 14400 Generate code for a 32-bit or 64-bit environment. The 32-bit 14401 environment sets int, long and pointer to 32 bits. The 64-bit 14402 environment sets int to 32 bits and long and pointer to 64 bits. 14403 14404 `-mcmodel=medlow' 14405 Generate code for the Medium/Low code model: 64-bit addresses, 14406 programs must be linked in the low 32 bits of memory. Programs 14407 can be statically or dynamically linked. 14408 14409 `-mcmodel=medmid' 14410 Generate code for the Medium/Middle code model: 64-bit addresses, 14411 programs must be linked in the low 44 bits of memory, the text and 14412 data segments must be less than 2GB in size and the data segment 14413 must be located within 2GB of the text segment. 14414 14415 `-mcmodel=medany' 14416 Generate code for the Medium/Anywhere code model: 64-bit 14417 addresses, programs may be linked anywhere in memory, the text and 14418 data segments must be less than 2GB in size and the data segment 14419 must be located within 2GB of the text segment. 14420 14421 `-mcmodel=embmedany' 14422 Generate code for the Medium/Anywhere code model for embedded 14423 systems: 64-bit addresses, the text and data segments must be less 14424 than 2GB in size, both starting anywhere in memory (determined at 14425 link time). The global register %g4 points to the base of the 14426 data segment. Programs are statically linked and PIC is not 14427 supported. 14428 14429 `-mstack-bias' 14430 `-mno-stack-bias' 14431 With `-mstack-bias', GCC assumes that the stack pointer, and frame 14432 pointer if present, are offset by -2047 which must be added back 14433 when making stack frame references. This is the default in 64-bit 14434 mode. Otherwise, assume no such offset is present. 14435 14436 These switches are supported in addition to the above on Solaris: 14437 14438 `-threads' 14439 Add support for multithreading using the Solaris threads library. 14440 This option sets flags for both the preprocessor and linker. This 14441 option does not affect the thread safety of object code produced 14442 by the compiler or that of libraries supplied with it. 14443 14444 `-pthreads' 14445 Add support for multithreading using the POSIX threads library. 14446 This option sets flags for both the preprocessor and linker. This 14447 option does not affect the thread safety of object code produced 14448 by the compiler or that of libraries supplied with it. 14449 14450 `-pthread' 14451 This is a synonym for `-pthreads'. 14452 14453 14454 File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 14455 14456 3.17.33 SPU Options 14457 ------------------- 14458 14459 These `-m' options are supported on the SPU: 14460 14461 `-mwarn-reloc' 14462 `-merror-reloc' 14463 The loader for SPU does not handle dynamic relocations. By 14464 default, GCC will give an error when it generates code that 14465 requires a dynamic relocation. `-mno-error-reloc' disables the 14466 error, `-mwarn-reloc' will generate a warning instead. 14467 14468 `-msafe-dma' 14469 `-munsafe-dma' 14470 Instructions which initiate or test completion of DMA must not be 14471 reordered with respect to loads and stores of the memory which is 14472 being accessed. Users typically address this problem using the 14473 volatile keyword, but that can lead to inefficient code in places 14474 where the memory is known to not change. Rather than mark the 14475 memory as volatile we treat the DMA instructions as potentially 14476 effecting all memory. With `-munsafe-dma' users must use the 14477 volatile keyword to protect memory accesses. 14478 14479 `-mbranch-hints' 14480 By default, GCC will generate a branch hint instruction to avoid 14481 pipeline stalls for always taken or probably taken branches. A 14482 hint will not be generated closer than 8 instructions away from 14483 its branch. There is little reason to disable them, except for 14484 debugging purposes, or to make an object a little bit smaller. 14485 14486 `-msmall-mem' 14487 `-mlarge-mem' 14488 By default, GCC generates code assuming that addresses are never 14489 larger than 18 bits. With `-mlarge-mem' code is generated that 14490 assumes a full 32 bit address. 14491 14492 `-mstdmain' 14493 By default, GCC links against startup code that assumes the 14494 SPU-style main function interface (which has an unconventional 14495 parameter list). With `-mstdmain', GCC will link your program 14496 against startup code that assumes a C99-style interface to `main', 14497 including a local copy of `argv' strings. 14498 14499 `-mfixed-range=REGISTER-RANGE' 14500 Generate code treating the given register range as fixed registers. 14501 A fixed register is one that the register allocator can not use. 14502 This is useful when compiling kernel code. A register range is 14503 specified as two registers separated by a dash. Multiple register 14504 ranges can be specified separated by a comma. 14505 14506 `-mdual-nops' 14507 `-mdual-nops=N' 14508 By default, GCC will insert nops to increase dual issue when it 14509 expects it to increase performance. N can be a value from 0 to 14510 10. A smaller N will insert fewer nops. 10 is the default, 0 is 14511 the same as `-mno-dual-nops'. Disabled with `-Os'. 14512 14513 `-mhint-max-nops=N' 14514 Maximum number of nops to insert for a branch hint. A branch hint 14515 must be at least 8 instructions away from the branch it is 14516 effecting. GCC will insert up to N nops to enforce this, 14517 otherwise it will not generate the branch hint. 14518 14519 `-mhint-max-distance=N' 14520 The encoding of the branch hint instruction limits the hint to be 14521 within 256 instructions of the branch it is effecting. By 14522 default, GCC makes sure it is within 125. 14523 14524 `-msafe-hints' 14525 Work around a hardware bug which causes the SPU to stall 14526 indefinitely. By default, GCC will insert the `hbrp' instruction 14527 to make sure this stall won't happen. 14528 14529 14530 14531 File: gcc.info, Node: System V Options, Next: V850 Options, Prev: SPU Options, Up: Submodel Options 14532 14533 3.17.34 Options for System V 14534 ---------------------------- 14535 14536 These additional options are available on System V Release 4 for 14537 compatibility with other compilers on those systems: 14538 14539 `-G' 14540 Create a shared object. It is recommended that `-symbolic' or 14541 `-shared' be used instead. 14542 14543 `-Qy' 14544 Identify the versions of each tool used by the compiler, in a 14545 `.ident' assembler directive in the output. 14546 14547 `-Qn' 14548 Refrain from adding `.ident' directives to the output file (this is 14549 the default). 14550 14551 `-YP,DIRS' 14552 Search the directories DIRS, and no others, for libraries 14553 specified with `-l'. 14554 14555 `-Ym,DIR' 14556 Look in the directory DIR to find the M4 preprocessor. The 14557 assembler uses this option. 14558 14559 14560 File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: System V Options, Up: Submodel Options 14561 14562 3.17.35 V850 Options 14563 -------------------- 14564 14565 These `-m' options are defined for V850 implementations: 14566 14567 `-mlong-calls' 14568 `-mno-long-calls' 14569 Treat all calls as being far away (near). If calls are assumed to 14570 be far away, the compiler will always load the functions address 14571 up into a register, and call indirect through the pointer. 14572 14573 `-mno-ep' 14574 `-mep' 14575 Do not optimize (do optimize) basic blocks that use the same index 14576 pointer 4 or more times to copy pointer into the `ep' register, and 14577 use the shorter `sld' and `sst' instructions. The `-mep' option 14578 is on by default if you optimize. 14579 14580 `-mno-prolog-function' 14581 `-mprolog-function' 14582 Do not use (do use) external functions to save and restore 14583 registers at the prologue and epilogue of a function. The 14584 external functions are slower, but use less code space if more 14585 than one function saves the same number of registers. The 14586 `-mprolog-function' option is on by default if you optimize. 14587 14588 `-mspace' 14589 Try to make the code as small as possible. At present, this just 14590 turns on the `-mep' and `-mprolog-function' options. 14591 14592 `-mtda=N' 14593 Put static or global variables whose size is N bytes or less into 14594 the tiny data area that register `ep' points to. The tiny data 14595 area can hold up to 256 bytes in total (128 bytes for byte 14596 references). 14597 14598 `-msda=N' 14599 Put static or global variables whose size is N bytes or less into 14600 the small data area that register `gp' points to. The small data 14601 area can hold up to 64 kilobytes. 14602 14603 `-mzda=N' 14604 Put static or global variables whose size is N bytes or less into 14605 the first 32 kilobytes of memory. 14606 14607 `-mv850' 14608 Specify that the target processor is the V850. 14609 14610 `-mbig-switch' 14611 Generate code suitable for big switch tables. Use this option 14612 only if the assembler/linker complain about out of range branches 14613 within a switch table. 14614 14615 `-mapp-regs' 14616 This option will cause r2 and r5 to be used in the code generated 14617 by the compiler. This setting is the default. 14618 14619 `-mno-app-regs' 14620 This option will cause r2 and r5 to be treated as fixed registers. 14621 14622 `-mv850e1' 14623 Specify that the target processor is the V850E1. The preprocessor 14624 constants `__v850e1__' and `__v850e__' will be defined if this 14625 option is used. 14626 14627 `-mv850e' 14628 Specify that the target processor is the V850E. The preprocessor 14629 constant `__v850e__' will be defined if this option is used. 14630 14631 If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then 14632 a default target processor will be chosen and the relevant 14633 `__v850*__' preprocessor constant will be defined. 14634 14635 The preprocessor constants `__v850' and `__v851__' are always 14636 defined, regardless of which processor variant is the target. 14637 14638 `-mdisable-callt' 14639 This option will suppress generation of the CALLT instruction for 14640 the v850e and v850e1 flavors of the v850 architecture. The 14641 default is `-mno-disable-callt' which allows the CALLT instruction 14642 to be used. 14643 14644 14645 14646 File: gcc.info, Node: VAX Options, Next: VxWorks Options, Prev: V850 Options, Up: Submodel Options 14647 14648 3.17.36 VAX Options 14649 ------------------- 14650 14651 These `-m' options are defined for the VAX: 14652 14653 `-munix' 14654 Do not output certain jump instructions (`aobleq' and so on) that 14655 the Unix assembler for the VAX cannot handle across long ranges. 14656 14657 `-mgnu' 14658 Do output those jump instructions, on the assumption that you will 14659 assemble with the GNU assembler. 14660 14661 `-mg' 14662 Output code for g-format floating point numbers instead of 14663 d-format. 14664 14665 14666 File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VAX Options, Up: Submodel Options 14667 14668 3.17.37 VxWorks Options 14669 ----------------------- 14670 14671 The options in this section are defined for all VxWorks targets. 14672 Options specific to the target hardware are listed with the other 14673 options for that target. 14674 14675 `-mrtp' 14676 GCC can generate code for both VxWorks kernels and real time 14677 processes (RTPs). This option switches from the former to the 14678 latter. It also defines the preprocessor macro `__RTP__'. 14679 14680 `-non-static' 14681 Link an RTP executable against shared libraries rather than static 14682 libraries. The options `-static' and `-shared' can also be used 14683 for RTPs (*note Link Options::); `-static' is the default. 14684 14685 `-Bstatic' 14686 `-Bdynamic' 14687 These options are passed down to the linker. They are defined for 14688 compatibility with Diab. 14689 14690 `-Xbind-lazy' 14691 Enable lazy binding of function calls. This option is equivalent 14692 to `-Wl,-z,now' and is defined for compatibility with Diab. 14693 14694 `-Xbind-now' 14695 Disable lazy binding of function calls. This option is the 14696 default and is defined for compatibility with Diab. 14697 14698 14699 File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options 14700 14701 3.17.38 x86-64 Options 14702 ---------------------- 14703 14704 These are listed under *Note i386 and x86-64 Options::. 14705 14706 14707 File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options 14708 14709 3.17.39 i386 and x86-64 Windows Options 14710 --------------------------------------- 14711 14712 These additional options are available for Windows targets: 14713 14714 `-mconsole' 14715 This option is available for Cygwin and MinGW targets. It 14716 specifies that a console application is to be generated, by 14717 instructing the linker to set the PE header subsystem type 14718 required for console applications. This is the default behaviour 14719 for Cygwin and MinGW targets. 14720 14721 `-mcygwin' 14722 This option is available for Cygwin targets. It specifies that 14723 the Cygwin internal interface is to be used for predefined 14724 preprocessor macros, C runtime libraries and related linker paths 14725 and options. For Cygwin targets this is the default behaviour. 14726 This option is deprecated and will be removed in a future release. 14727 14728 `-mno-cygwin' 14729 This option is available for Cygwin targets. It specifies that 14730 the MinGW internal interface is to be used instead of Cygwin's, by 14731 setting MinGW-related predefined macros and linker paths and 14732 default library options. This option is deprecated and will be 14733 removed in a future release. 14734 14735 `-mdll' 14736 This option is available for Cygwin and MinGW targets. It 14737 specifies that a DLL - a dynamic link library - is to be 14738 generated, enabling the selection of the required runtime startup 14739 object and entry point. 14740 14741 `-mnop-fun-dllimport' 14742 This option is available for Cygwin and MinGW targets. It 14743 specifies that the dllimport attribute should be ignored. 14744 14745 `-mthread' 14746 This option is available for MinGW targets. It specifies that 14747 MinGW-specific thread support is to be used. 14748 14749 `-mwin32' 14750 This option is available for Cygwin and MinGW targets. It 14751 specifies that the typical Windows pre-defined macros are to be 14752 set in the pre-processor, but does not influence the choice of 14753 runtime library/startup code. 14754 14755 `-mwindows' 14756 This option is available for Cygwin and MinGW targets. It 14757 specifies that a GUI application is to be generated by instructing 14758 the linker to set the PE header subsystem type appropriately. 14759 14760 See also under *Note i386 and x86-64 Options:: for standard options. 14761 14762 14763 File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 14764 14765 3.17.40 Xstormy16 Options 14766 ------------------------- 14767 14768 These options are defined for Xstormy16: 14769 14770 `-msim' 14771 Choose startup files and linker script suitable for the simulator. 14772 14773 14774 File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 14775 14776 3.17.41 Xtensa Options 14777 ---------------------- 14778 14779 These options are supported for Xtensa targets: 14780 14781 `-mconst16' 14782 `-mno-const16' 14783 Enable or disable use of `CONST16' instructions for loading 14784 constant values. The `CONST16' instruction is currently not a 14785 standard option from Tensilica. When enabled, `CONST16' 14786 instructions are always used in place of the standard `L32R' 14787 instructions. The use of `CONST16' is enabled by default only if 14788 the `L32R' instruction is not available. 14789 14790 `-mfused-madd' 14791 `-mno-fused-madd' 14792 Enable or disable use of fused multiply/add and multiply/subtract 14793 instructions in the floating-point option. This has no effect if 14794 the floating-point option is not also enabled. Disabling fused 14795 multiply/add and multiply/subtract instructions forces the 14796 compiler to use separate instructions for the multiply and 14797 add/subtract operations. This may be desirable in some cases 14798 where strict IEEE 754-compliant results are required: the fused 14799 multiply add/subtract instructions do not round the intermediate 14800 result, thereby producing results with _more_ bits of precision 14801 than specified by the IEEE standard. Disabling fused multiply 14802 add/subtract instructions also ensures that the program output is 14803 not sensitive to the compiler's ability to combine multiply and 14804 add/subtract operations. 14805 14806 `-mserialize-volatile' 14807 `-mno-serialize-volatile' 14808 When this option is enabled, GCC inserts `MEMW' instructions before 14809 `volatile' memory references to guarantee sequential consistency. 14810 The default is `-mserialize-volatile'. Use 14811 `-mno-serialize-volatile' to omit the `MEMW' instructions. 14812 14813 `-mtext-section-literals' 14814 `-mno-text-section-literals' 14815 Control the treatment of literal pools. The default is 14816 `-mno-text-section-literals', which places literals in a separate 14817 section in the output file. This allows the literal pool to be 14818 placed in a data RAM/ROM, and it also allows the linker to combine 14819 literal pools from separate object files to remove redundant 14820 literals and improve code size. With `-mtext-section-literals', 14821 the literals are interspersed in the text section in order to keep 14822 them as close as possible to their references. This may be 14823 necessary for large assembly files. 14824 14825 `-mtarget-align' 14826 `-mno-target-align' 14827 When this option is enabled, GCC instructs the assembler to 14828 automatically align instructions to reduce branch penalties at the 14829 expense of some code density. The assembler attempts to widen 14830 density instructions to align branch targets and the instructions 14831 following call instructions. If there are not enough preceding 14832 safe density instructions to align a target, no widening will be 14833 performed. The default is `-mtarget-align'. These options do not 14834 affect the treatment of auto-aligned instructions like `LOOP', 14835 which the assembler will always align, either by widening density 14836 instructions or by inserting no-op instructions. 14837 14838 `-mlongcalls' 14839 `-mno-longcalls' 14840 When this option is enabled, GCC instructs the assembler to 14841 translate direct calls to indirect calls unless it can determine 14842 that the target of a direct call is in the range allowed by the 14843 call instruction. This translation typically occurs for calls to 14844 functions in other source files. Specifically, the assembler 14845 translates a direct `CALL' instruction into an `L32R' followed by 14846 a `CALLX' instruction. The default is `-mno-longcalls'. This 14847 option should be used in programs where the call target can 14848 potentially be out of range. This option is implemented in the 14849 assembler, not the compiler, so the assembly code generated by GCC 14850 will still show direct call instructions--look at the disassembled 14851 object code to see the actual instructions. Note that the 14852 assembler will use an indirect call for every cross-file call, not 14853 just those that really will be out of range. 14854 14855 14856 File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 14857 14858 3.17.42 zSeries Options 14859 ----------------------- 14860 14861 These are listed under *Note S/390 and zSeries Options::. 14862 14863 14864 File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 14865 14866 3.18 Options for Code Generation Conventions 14867 ============================================ 14868 14869 These machine-independent options control the interface conventions 14870 used in code generation. 14871 14872 Most of them have both positive and negative forms; the negative form 14873 of `-ffoo' would be `-fno-foo'. In the table below, only one of the 14874 forms is listed--the one which is not the default. You can figure out 14875 the other form by either removing `no-' or adding it. 14876 14877 `-fbounds-check' 14878 For front-ends that support it, generate additional code to check 14879 that indices used to access arrays are within the declared range. 14880 This is currently only supported by the Java and Fortran 14881 front-ends, where this option defaults to true and false 14882 respectively. 14883 14884 `-ftrapv' 14885 This option generates traps for signed overflow on addition, 14886 subtraction, multiplication operations. 14887 14888 `-fwrapv' 14889 This option instructs the compiler to assume that signed arithmetic 14890 overflow of addition, subtraction and multiplication wraps around 14891 using twos-complement representation. This flag enables some 14892 optimizations and disables others. This option is enabled by 14893 default for the Java front-end, as required by the Java language 14894 specification. 14895 14896 `-fexceptions' 14897 Enable exception handling. Generates extra code needed to 14898 propagate exceptions. For some targets, this implies GCC will 14899 generate frame unwind information for all functions, which can 14900 produce significant data size overhead, although it does not 14901 affect execution. If you do not specify this option, GCC will 14902 enable it by default for languages like C++ which normally require 14903 exception handling, and disable it for languages like C that do 14904 not normally require it. However, you may need to enable this 14905 option when compiling C code that needs to interoperate properly 14906 with exception handlers written in C++. You may also wish to 14907 disable this option if you are compiling older C++ programs that 14908 don't use exception handling. 14909 14910 `-fnon-call-exceptions' 14911 Generate code that allows trapping instructions to throw 14912 exceptions. Note that this requires platform-specific runtime 14913 support that does not exist everywhere. Moreover, it only allows 14914 _trapping_ instructions to throw exceptions, i.e. memory 14915 references or floating point instructions. It does not allow 14916 exceptions to be thrown from arbitrary signal handlers such as 14917 `SIGALRM'. 14918 14919 `-funwind-tables' 14920 Similar to `-fexceptions', except that it will just generate any 14921 needed static data, but will not affect the generated code in any 14922 other way. You will normally not enable this option; instead, a 14923 language processor that needs this handling would enable it on 14924 your behalf. 14925 14926 `-fasynchronous-unwind-tables' 14927 Generate unwind table in dwarf2 format, if supported by target 14928 machine. The table is exact at each instruction boundary, so it 14929 can be used for stack unwinding from asynchronous events (such as 14930 debugger or garbage collector). 14931 14932 `-fpcc-struct-return' 14933 Return "short" `struct' and `union' values in memory like longer 14934 ones, rather than in registers. This convention is less 14935 efficient, but it has the advantage of allowing intercallability 14936 between GCC-compiled files and files compiled with other 14937 compilers, particularly the Portable C Compiler (pcc). 14938 14939 The precise convention for returning structures in memory depends 14940 on the target configuration macros. 14941 14942 Short structures and unions are those whose size and alignment 14943 match that of some integer type. 14944 14945 *Warning:* code compiled with the `-fpcc-struct-return' switch is 14946 not binary compatible with code compiled with the 14947 `-freg-struct-return' switch. Use it to conform to a non-default 14948 application binary interface. 14949 14950 `-freg-struct-return' 14951 Return `struct' and `union' values in registers when possible. 14952 This is more efficient for small structures than 14953 `-fpcc-struct-return'. 14954 14955 If you specify neither `-fpcc-struct-return' nor 14956 `-freg-struct-return', GCC defaults to whichever convention is 14957 standard for the target. If there is no standard convention, GCC 14958 defaults to `-fpcc-struct-return', except on targets where GCC is 14959 the principal compiler. In those cases, we can choose the 14960 standard, and we chose the more efficient register return 14961 alternative. 14962 14963 *Warning:* code compiled with the `-freg-struct-return' switch is 14964 not binary compatible with code compiled with the 14965 `-fpcc-struct-return' switch. Use it to conform to a non-default 14966 application binary interface. 14967 14968 `-fshort-enums' 14969 Allocate to an `enum' type only as many bytes as it needs for the 14970 declared range of possible values. Specifically, the `enum' type 14971 will be equivalent to the smallest integer type which has enough 14972 room. 14973 14974 *Warning:* the `-fshort-enums' switch causes GCC to generate code 14975 that is not binary compatible with code generated without that 14976 switch. Use it to conform to a non-default application binary 14977 interface. 14978 14979 `-fshort-double' 14980 Use the same size for `double' as for `float'. 14981 14982 *Warning:* the `-fshort-double' switch causes GCC to generate code 14983 that is not binary compatible with code generated without that 14984 switch. Use it to conform to a non-default application binary 14985 interface. 14986 14987 `-fshort-wchar' 14988 Override the underlying type for `wchar_t' to be `short unsigned 14989 int' instead of the default for the target. This option is useful 14990 for building programs to run under WINE. 14991 14992 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 14993 that is not binary compatible with code generated without that 14994 switch. Use it to conform to a non-default application binary 14995 interface. 14996 14997 `-fno-common' 14998 In C code, controls the placement of uninitialized global 14999 variables. Unix C compilers have traditionally permitted multiple 15000 definitions of such variables in different compilation units by 15001 placing the variables in a common block. This is the behavior 15002 specified by `-fcommon', and is the default for GCC on most 15003 targets. On the other hand, this behavior is not required by ISO 15004 C, and on some targets may carry a speed or code size penalty on 15005 variable references. The `-fno-common' option specifies that the 15006 compiler should place uninitialized global variables in the data 15007 section of the object file, rather than generating them as common 15008 blocks. This has the effect that if the same variable is declared 15009 (without `extern') in two different compilations, you will get a 15010 multiple-definition error when you link them. In this case, you 15011 must compile with `-fcommon' instead. Compiling with 15012 `-fno-common' is useful on targets for which it provides better 15013 performance, or if you wish to verify that the program will work 15014 on other systems which always treat uninitialized variable 15015 declarations this way. 15016 15017 `-fno-ident' 15018 Ignore the `#ident' directive. 15019 15020 `-finhibit-size-directive' 15021 Don't output a `.size' assembler directive, or anything else that 15022 would cause trouble if the function is split in the middle, and the 15023 two halves are placed at locations far apart in memory. This 15024 option is used when compiling `crtstuff.c'; you should not need to 15025 use it for anything else. 15026 15027 `-fverbose-asm' 15028 Put extra commentary information in the generated assembly code to 15029 make it more readable. This option is generally only of use to 15030 those who actually need to read the generated assembly code 15031 (perhaps while debugging the compiler itself). 15032 15033 `-fno-verbose-asm', the default, causes the extra information to 15034 be omitted and is useful when comparing two assembler files. 15035 15036 `-frecord-gcc-switches' 15037 This switch causes the command line that was used to invoke the 15038 compiler to be recorded into the object file that is being created. 15039 This switch is only implemented on some targets and the exact 15040 format of the recording is target and binary file format 15041 dependent, but it usually takes the form of a section containing 15042 ASCII text. This switch is related to the `-fverbose-asm' switch, 15043 but that switch only records information in the assembler output 15044 file as comments, so it never reaches the object file. 15045 15046 `-fpic' 15047 Generate position-independent code (PIC) suitable for use in a 15048 shared library, if supported for the target machine. Such code 15049 accesses all constant addresses through a global offset table 15050 (GOT). The dynamic loader resolves the GOT entries when the 15051 program starts (the dynamic loader is not part of GCC; it is part 15052 of the operating system). If the GOT size for the linked 15053 executable exceeds a machine-specific maximum size, you get an 15054 error message from the linker indicating that `-fpic' does not 15055 work; in that case, recompile with `-fPIC' instead. (These 15056 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 15057 386 has no such limit.) 15058 15059 Position-independent code requires special support, and therefore 15060 works only on certain machines. For the 386, GCC supports PIC for 15061 System V but not for the Sun 386i. Code generated for the IBM 15062 RS/6000 is always position-independent. 15063 15064 When this flag is set, the macros `__pic__' and `__PIC__' are 15065 defined to 1. 15066 15067 `-fPIC' 15068 If supported for the target machine, emit position-independent 15069 code, suitable for dynamic linking and avoiding any limit on the 15070 size of the global offset table. This option makes a difference 15071 on the m68k, PowerPC and SPARC. 15072 15073 Position-independent code requires special support, and therefore 15074 works only on certain machines. 15075 15076 When this flag is set, the macros `__pic__' and `__PIC__' are 15077 defined to 2. 15078 15079 `-fpie' 15080 `-fPIE' 15081 These options are similar to `-fpic' and `-fPIC', but generated 15082 position independent code can be only linked into executables. 15083 Usually these options are used when `-pie' GCC option will be used 15084 during linking. 15085 15086 `-fpie' and `-fPIE' both define the macros `__pie__' and 15087 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for 15088 `-fPIE'. 15089 15090 `-fno-jump-tables' 15091 Do not use jump tables for switch statements even where it would be 15092 more efficient than other code generation strategies. This option 15093 is of use in conjunction with `-fpic' or `-fPIC' for building code 15094 which forms part of a dynamic linker and cannot reference the 15095 address of a jump table. On some targets, jump tables do not 15096 require a GOT and this option is not needed. 15097 15098 `-ffixed-REG' 15099 Treat the register named REG as a fixed register; generated code 15100 should never refer to it (except perhaps as a stack pointer, frame 15101 pointer or in some other fixed role). 15102 15103 REG must be the name of a register. The register names accepted 15104 are machine-specific and are defined in the `REGISTER_NAMES' macro 15105 in the machine description macro file. 15106 15107 This flag does not have a negative form, because it specifies a 15108 three-way choice. 15109 15110 `-fcall-used-REG' 15111 Treat the register named REG as an allocable register that is 15112 clobbered by function calls. It may be allocated for temporaries 15113 or variables that do not live across a call. Functions compiled 15114 this way will not save and restore the register REG. 15115 15116 It is an error to used this flag with the frame pointer or stack 15117 pointer. Use of this flag for other registers that have fixed 15118 pervasive roles in the machine's execution model will produce 15119 disastrous results. 15120 15121 This flag does not have a negative form, because it specifies a 15122 three-way choice. 15123 15124 `-fcall-saved-REG' 15125 Treat the register named REG as an allocable register saved by 15126 functions. It may be allocated even for temporaries or variables 15127 that live across a call. Functions compiled this way will save 15128 and restore the register REG if they use it. 15129 15130 It is an error to used this flag with the frame pointer or stack 15131 pointer. Use of this flag for other registers that have fixed 15132 pervasive roles in the machine's execution model will produce 15133 disastrous results. 15134 15135 A different sort of disaster will result from the use of this flag 15136 for a register in which function values may be returned. 15137 15138 This flag does not have a negative form, because it specifies a 15139 three-way choice. 15140 15141 `-fpack-struct[=N]' 15142 Without a value specified, pack all structure members together 15143 without holes. When a value is specified (which must be a small 15144 power of two), pack structure members according to this value, 15145 representing the maximum alignment (that is, objects with default 15146 alignment requirements larger than this will be output potentially 15147 unaligned at the next fitting location. 15148 15149 *Warning:* the `-fpack-struct' switch causes GCC to generate code 15150 that is not binary compatible with code generated without that 15151 switch. Additionally, it makes the code suboptimal. Use it to 15152 conform to a non-default application binary interface. 15153 15154 `-finstrument-functions' 15155 Generate instrumentation calls for entry and exit to functions. 15156 Just after function entry and just before function exit, the 15157 following profiling functions will be called with the address of 15158 the current function and its call site. (On some platforms, 15159 `__builtin_return_address' does not work beyond the current 15160 function, so the call site information may not be available to the 15161 profiling functions otherwise.) 15162 15163 void __cyg_profile_func_enter (void *this_fn, 15164 void *call_site); 15165 void __cyg_profile_func_exit (void *this_fn, 15166 void *call_site); 15167 15168 The first argument is the address of the start of the current 15169 function, which may be looked up exactly in the symbol table. 15170 15171 This instrumentation is also done for functions expanded inline in 15172 other functions. The profiling calls will indicate where, 15173 conceptually, the inline function is entered and exited. This 15174 means that addressable versions of such functions must be 15175 available. If all your uses of a function are expanded inline, 15176 this may mean an additional expansion of code size. If you use 15177 `extern inline' in your C code, an addressable version of such 15178 functions must be provided. (This is normally the case anyways, 15179 but if you get lucky and the optimizer always expands the 15180 functions inline, you might have gotten away without providing 15181 static copies.) 15182 15183 A function may be given the attribute `no_instrument_function', in 15184 which case this instrumentation will not be done. This can be 15185 used, for example, for the profiling functions listed above, 15186 high-priority interrupt routines, and any functions from which the 15187 profiling functions cannot safely be called (perhaps signal 15188 handlers, if the profiling routines generate output or allocate 15189 memory). 15190 15191 `-finstrument-functions-exclude-file-list=FILE,FILE,...' 15192 Set the list of functions that are excluded from instrumentation 15193 (see the description of `-finstrument-functions'). If the file 15194 that contains a function definition matches with one of FILE, then 15195 that function is not instrumented. The match is done on 15196 substrings: if the FILE parameter is a substring of the file name, 15197 it is considered to be a match. 15198 15199 For example, 15200 `-finstrument-functions-exclude-file-list=/bits/stl,include/sys' 15201 will exclude any inline function defined in files whose pathnames 15202 contain `/bits/stl' or `include/sys'. 15203 15204 If, for some reason, you want to include letter `','' in one of 15205 SYM, write `'\,''. For example, 15206 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 15207 single quote surrounding the option). 15208 15209 `-finstrument-functions-exclude-function-list=SYM,SYM,...' 15210 This is similar to `-finstrument-functions-exclude-file-list', but 15211 this option sets the list of function names to be excluded from 15212 instrumentation. The function name to be matched is its 15213 user-visible name, such as `vector<int> blah(const vector<int> 15214 &)', not the internal mangled name (e.g., 15215 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 15216 the SYM parameter is a substring of the function name, it is 15217 considered to be a match. 15218 15219 `-fstack-check' 15220 Generate code to verify that you do not go beyond the boundary of 15221 the stack. You should specify this flag if you are running in an 15222 environment with multiple threads, but only rarely need to specify 15223 it in a single-threaded environment since stack overflow is 15224 automatically detected on nearly all systems if there is only one 15225 stack. 15226 15227 Note that this switch does not actually cause checking to be done; 15228 the operating system or the language runtime must do that. The 15229 switch causes generation of code to ensure that they see the stack 15230 being extended. 15231 15232 You can additionally specify a string parameter: `no' means no 15233 checking, `generic' means force the use of old-style checking, 15234 `specific' means use the best checking method and is equivalent to 15235 bare `-fstack-check'. 15236 15237 Old-style checking is a generic mechanism that requires no specific 15238 target support in the compiler but comes with the following 15239 drawbacks: 15240 15241 1. Modified allocation strategy for large objects: they will 15242 always be allocated dynamically if their size exceeds a fixed 15243 threshold. 15244 15245 2. Fixed limit on the size of the static frame of functions: 15246 when it is topped by a particular function, stack checking is 15247 not reliable and a warning is issued by the compiler. 15248 15249 3. Inefficiency: because of both the modified allocation 15250 strategy and the generic implementation, the performances of 15251 the code are hampered. 15252 15253 Note that old-style stack checking is also the fallback method for 15254 `specific' if no target support has been added in the compiler. 15255 15256 `-fstack-limit-register=REG' 15257 `-fstack-limit-symbol=SYM' 15258 `-fno-stack-limit' 15259 Generate code to ensure that the stack does not grow beyond a 15260 certain value, either the value of a register or the address of a 15261 symbol. If the stack would grow beyond the value, a signal is 15262 raised. For most targets, the signal is raised before the stack 15263 overruns the boundary, so it is possible to catch the signal 15264 without taking special precautions. 15265 15266 For instance, if the stack starts at absolute address `0x80000000' 15267 and grows downwards, you can use the flags 15268 `-fstack-limit-symbol=__stack_limit' and 15269 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 15270 of 128KB. Note that this may only work with the GNU linker. 15271 15272 `-fargument-alias' 15273 `-fargument-noalias' 15274 `-fargument-noalias-global' 15275 `-fargument-noalias-anything' 15276 Specify the possible relationships among parameters and between 15277 parameters and global data. 15278 15279 `-fargument-alias' specifies that arguments (parameters) may alias 15280 each other and may alias global storage. 15281 `-fargument-noalias' specifies that arguments do not alias each 15282 other, but may alias global storage. 15283 `-fargument-noalias-global' specifies that arguments do not alias 15284 each other and do not alias global storage. 15285 `-fargument-noalias-anything' specifies that arguments do not 15286 alias any other storage. 15287 15288 Each language will automatically use whatever option is required by 15289 the language standard. You should not need to use these options 15290 yourself. 15291 15292 `-fleading-underscore' 15293 This option and its counterpart, `-fno-leading-underscore', 15294 forcibly change the way C symbols are represented in the object 15295 file. One use is to help link with legacy assembly code. 15296 15297 *Warning:* the `-fleading-underscore' switch causes GCC to 15298 generate code that is not binary compatible with code generated 15299 without that switch. Use it to conform to a non-default 15300 application binary interface. Not all targets provide complete 15301 support for this switch. 15302 15303 `-ftls-model=MODEL' 15304 Alter the thread-local storage model to be used (*note 15305 Thread-Local::). The MODEL argument should be one of 15306 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 15307 15308 The default without `-fpic' is `initial-exec'; with `-fpic' the 15309 default is `global-dynamic'. 15310 15311 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 15312 Set the default ELF image symbol visibility to the specified 15313 option--all symbols will be marked with this unless overridden 15314 within the code. Using this feature can very substantially 15315 improve linking and load times of shared object libraries, produce 15316 more optimized code, provide near-perfect API export and prevent 15317 symbol clashes. It is *strongly* recommended that you use this in 15318 any shared objects you distribute. 15319 15320 Despite the nomenclature, `default' always means public ie; 15321 available to be linked against from outside the shared object. 15322 `protected' and `internal' are pretty useless in real-world usage 15323 so the only other commonly used option will be `hidden'. The 15324 default if `-fvisibility' isn't specified is `default', i.e., make 15325 every symbol public--this causes the same behavior as previous 15326 versions of GCC. 15327 15328 A good explanation of the benefits offered by ensuring ELF symbols 15329 have the correct visibility is given by "How To Write Shared 15330 Libraries" by Ulrich Drepper (which can be found at 15331 `http://people.redhat.com/~drepper/')--however a superior solution 15332 made possible by this option to marking things hidden when the 15333 default is public is to make the default hidden and mark things 15334 public. This is the norm with DLL's on Windows and with 15335 `-fvisibility=hidden' and `__attribute__ 15336 ((visibility("default")))' instead of `__declspec(dllexport)' you 15337 get almost identical semantics with identical syntax. This is a 15338 great boon to those working with cross-platform projects. 15339 15340 For those adding visibility support to existing code, you may find 15341 `#pragma GCC visibility' of use. This works by you enclosing the 15342 declarations you wish to set visibility for with (for example) 15343 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 15344 pop'. Bear in mind that symbol visibility should be viewed *as 15345 part of the API interface contract* and thus all new code should 15346 always specify visibility when it is not the default ie; 15347 declarations only for use within the local DSO should *always* be 15348 marked explicitly as hidden as so to avoid PLT indirection 15349 overheads--making this abundantly clear also aids readability and 15350 self-documentation of the code. Note that due to ISO C++ 15351 specification requirements, operator new and operator delete must 15352 always be of default visibility. 15353 15354 Be aware that headers from outside your project, in particular 15355 system headers and headers from any other library you use, may not 15356 be expecting to be compiled with visibility other than the 15357 default. You may need to explicitly say `#pragma GCC visibility 15358 push(default)' before including any such headers. 15359 15360 `extern' declarations are not affected by `-fvisibility', so a lot 15361 of code can be recompiled with `-fvisibility=hidden' with no 15362 modifications. However, this means that calls to `extern' 15363 functions with no explicit visibility will use the PLT, so it is 15364 more effective to use `__attribute ((visibility))' and/or `#pragma 15365 GCC visibility' to tell the compiler which `extern' declarations 15366 should be treated as hidden. 15367 15368 Note that `-fvisibility' does affect C++ vague linkage entities. 15369 This means that, for instance, an exception class that will be 15370 thrown between DSOs must be explicitly marked with default 15371 visibility so that the `type_info' nodes will be unified between 15372 the DSOs. 15373 15374 An overview of these techniques, their benefits and how to use them 15375 is at `http://gcc.gnu.org/wiki/Visibility'. 15376 15377 15378 15379 File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 15380 15381 3.19 Environment Variables Affecting GCC 15382 ======================================== 15383 15384 This section describes several environment variables that affect how GCC 15385 operates. Some of them work by specifying directories or prefixes to 15386 use when searching for various kinds of files. Some are used to 15387 specify other aspects of the compilation environment. 15388 15389 Note that you can also specify places to search using options such as 15390 `-B', `-I' and `-L' (*note Directory Options::). These take precedence 15391 over places specified using environment variables, which in turn take 15392 precedence over those specified by the configuration of GCC. *Note 15393 Controlling the Compilation Driver `gcc': (gccint)Driver. 15394 15395 `LANG' 15396 `LC_CTYPE' 15397 `LC_MESSAGES' 15398 `LC_ALL' 15399 These environment variables control the way that GCC uses 15400 localization information that allow GCC to work with different 15401 national conventions. GCC inspects the locale categories 15402 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 15403 These locale categories can be set to any value supported by your 15404 installation. A typical value is `en_GB.UTF-8' for English in the 15405 United Kingdom encoded in UTF-8. 15406 15407 The `LC_CTYPE' environment variable specifies character 15408 classification. GCC uses it to determine the character boundaries 15409 in a string; this is needed for some multibyte encodings that 15410 contain quote and escape characters that would otherwise be 15411 interpreted as a string end or escape. 15412 15413 The `LC_MESSAGES' environment variable specifies the language to 15414 use in diagnostic messages. 15415 15416 If the `LC_ALL' environment variable is set, it overrides the value 15417 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 15418 `LC_MESSAGES' default to the value of the `LANG' environment 15419 variable. If none of these variables are set, GCC defaults to 15420 traditional C English behavior. 15421 15422 `TMPDIR' 15423 If `TMPDIR' is set, it specifies the directory to use for temporary 15424 files. GCC uses temporary files to hold the output of one stage of 15425 compilation which is to be used as input to the next stage: for 15426 example, the output of the preprocessor, which is the input to the 15427 compiler proper. 15428 15429 `GCC_EXEC_PREFIX' 15430 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 15431 names of the subprograms executed by the compiler. No slash is 15432 added when this prefix is combined with the name of a subprogram, 15433 but you can specify a prefix that ends with a slash if you wish. 15434 15435 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an 15436 appropriate prefix to use based on the pathname it was invoked 15437 with. 15438 15439 If GCC cannot find the subprogram using the specified prefix, it 15440 tries looking in the usual places for the subprogram. 15441 15442 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 15443 PREFIX is the prefix to the installed compiler. In many cases 15444 PREFIX is the value of `prefix' when you ran the `configure' 15445 script. 15446 15447 Other prefixes specified with `-B' take precedence over this 15448 prefix. 15449 15450 This prefix is also used for finding files such as `crt0.o' that 15451 are used for linking. 15452 15453 In addition, the prefix is used in an unusual way in finding the 15454 directories to search for header files. For each of the standard 15455 directories whose name normally begins with `/usr/local/lib/gcc' 15456 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 15457 replacing that beginning with the specified prefix to produce an 15458 alternate directory name. Thus, with `-Bfoo/', GCC will search 15459 `foo/bar' where it would normally search `/usr/local/lib/bar'. 15460 These alternate directories are searched first; the standard 15461 directories come next. If a standard directory begins with the 15462 configured PREFIX then the value of PREFIX is replaced by 15463 `GCC_EXEC_PREFIX' when looking for header files. 15464 15465 `COMPILER_PATH' 15466 The value of `COMPILER_PATH' is a colon-separated list of 15467 directories, much like `PATH'. GCC tries the directories thus 15468 specified when searching for subprograms, if it can't find the 15469 subprograms using `GCC_EXEC_PREFIX'. 15470 15471 `LIBRARY_PATH' 15472 The value of `LIBRARY_PATH' is a colon-separated list of 15473 directories, much like `PATH'. When configured as a native 15474 compiler, GCC tries the directories thus specified when searching 15475 for special linker files, if it can't find them using 15476 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 15477 when searching for ordinary libraries for the `-l' option (but 15478 directories specified with `-L' come first). 15479 15480 `LANG' 15481 This variable is used to pass locale information to the compiler. 15482 One way in which this information is used is to determine the 15483 character set to be used when character literals, string literals 15484 and comments are parsed in C and C++. When the compiler is 15485 configured to allow multibyte characters, the following values for 15486 `LANG' are recognized: 15487 15488 `C-JIS' 15489 Recognize JIS characters. 15490 15491 `C-SJIS' 15492 Recognize SJIS characters. 15493 15494 `C-EUCJP' 15495 Recognize EUCJP characters. 15496 15497 If `LANG' is not defined, or if it has some other value, then the 15498 compiler will use mblen and mbtowc as defined by the default 15499 locale to recognize and translate multibyte characters. 15500 15501 Some additional environments variables affect the behavior of the 15502 preprocessor. 15503 15504 `CPATH' 15505 `C_INCLUDE_PATH' 15506 `CPLUS_INCLUDE_PATH' 15507 `OBJC_INCLUDE_PATH' 15508 Each variable's value is a list of directories separated by a 15509 special character, much like `PATH', in which to look for header 15510 files. The special character, `PATH_SEPARATOR', is 15511 target-dependent and determined at GCC build time. For Microsoft 15512 Windows-based targets it is a semicolon, and for almost all other 15513 targets it is a colon. 15514 15515 `CPATH' specifies a list of directories to be searched as if 15516 specified with `-I', but after any paths given with `-I' options 15517 on the command line. This environment variable is used regardless 15518 of which language is being preprocessed. 15519 15520 The remaining environment variables apply only when preprocessing 15521 the particular language indicated. Each specifies a list of 15522 directories to be searched as if specified with `-isystem', but 15523 after any paths given with `-isystem' options on the command line. 15524 15525 In all these variables, an empty element instructs the compiler to 15526 search its current working directory. Empty elements can appear 15527 at the beginning or end of a path. For instance, if the value of 15528 `CPATH' is `:/special/include', that has the same effect as 15529 `-I. -I/special/include'. 15530 15531 `DEPENDENCIES_OUTPUT' 15532 If this variable is set, its value specifies how to output 15533 dependencies for Make based on the non-system header files 15534 processed by the compiler. System header files are ignored in the 15535 dependency output. 15536 15537 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 15538 which case the Make rules are written to that file, guessing the 15539 target name from the source file name. Or the value can have the 15540 form `FILE TARGET', in which case the rules are written to file 15541 FILE using TARGET as the target name. 15542 15543 In other words, this environment variable is equivalent to 15544 combining the options `-MM' and `-MF' (*note Preprocessor 15545 Options::), with an optional `-MT' switch too. 15546 15547 `SUNPRO_DEPENDENCIES' 15548 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 15549 except that system header files are not ignored, so it implies 15550 `-M' rather than `-MM'. However, the dependence on the main input 15551 file is omitted. *Note Preprocessor Options::. 15552 15553 15554 File: gcc.info, Node: Precompiled Headers, Next: Running Protoize, Prev: Environment Variables, Up: Invoking GCC 15555 15556 3.20 Using Precompiled Headers 15557 ============================== 15558 15559 Often large projects have many header files that are included in every 15560 source file. The time the compiler takes to process these header files 15561 over and over again can account for nearly all of the time required to 15562 build the project. To make builds faster, GCC allows users to 15563 `precompile' a header file; then, if builds can use the precompiled 15564 header file they will be much faster. 15565 15566 To create a precompiled header file, simply compile it as you would any 15567 other file, if necessary using the `-x' option to make the driver treat 15568 it as a C or C++ header file. You will probably want to use a tool 15569 like `make' to keep the precompiled header up-to-date when the headers 15570 it contains change. 15571 15572 A precompiled header file will be searched for when `#include' is seen 15573 in the compilation. As it searches for the included file (*note Search 15574 Path: (cpp)Search Path.) the compiler looks for a precompiled header in 15575 each directory just before it looks for the include file in that 15576 directory. The name searched for is the name specified in the 15577 `#include' with `.gch' appended. If the precompiled header file can't 15578 be used, it is ignored. 15579 15580 For instance, if you have `#include "all.h"', and you have `all.h.gch' 15581 in the same directory as `all.h', then the precompiled header file will 15582 be used if possible, and the original header will be used otherwise. 15583 15584 Alternatively, you might decide to put the precompiled header file in a 15585 directory and use `-I' to ensure that directory is searched before (or 15586 instead of) the directory containing the original header. Then, if you 15587 want to check that the precompiled header file is always used, you can 15588 put a file of the same name as the original header in this directory 15589 containing an `#error' command. 15590 15591 This also works with `-include'. So yet another way to use 15592 precompiled headers, good for projects not designed with precompiled 15593 header files in mind, is to simply take most of the header files used by 15594 a project, include them from another header file, precompile that header 15595 file, and `-include' the precompiled header. If the header files have 15596 guards against multiple inclusion, they will be skipped because they've 15597 already been included (in the precompiled header). 15598 15599 If you need to precompile the same header file for different 15600 languages, targets, or compiler options, you can instead make a 15601 _directory_ named like `all.h.gch', and put each precompiled header in 15602 the directory, perhaps using `-o'. It doesn't matter what you call the 15603 files in the directory, every precompiled header in the directory will 15604 be considered. The first precompiled header encountered in the 15605 directory that is valid for this compilation will be used; they're 15606 searched in no particular order. 15607 15608 There are many other possibilities, limited only by your imagination, 15609 good sense, and the constraints of your build system. 15610 15611 A precompiled header file can be used only when these conditions apply: 15612 15613 * Only one precompiled header can be used in a particular 15614 compilation. 15615 15616 * A precompiled header can't be used once the first C token is seen. 15617 You can have preprocessor directives before a precompiled header; 15618 you can even include a precompiled header from inside another 15619 header, so long as there are no C tokens before the `#include'. 15620 15621 * The precompiled header file must be produced for the same language 15622 as the current compilation. You can't use a C precompiled header 15623 for a C++ compilation. 15624 15625 * The precompiled header file must have been produced by the same 15626 compiler binary as the current compilation is using. 15627 15628 * Any macros defined before the precompiled header is included must 15629 either be defined in the same way as when the precompiled header 15630 was generated, or must not affect the precompiled header, which 15631 usually means that they don't appear in the precompiled header at 15632 all. 15633 15634 The `-D' option is one way to define a macro before a precompiled 15635 header is included; using a `#define' can also do it. There are 15636 also some options that define macros implicitly, like `-O' and 15637 `-Wdeprecated'; the same rule applies to macros defined this way. 15638 15639 * If debugging information is output when using the precompiled 15640 header, using `-g' or similar, the same kind of debugging 15641 information must have been output when building the precompiled 15642 header. However, a precompiled header built using `-g' can be 15643 used in a compilation when no debugging information is being 15644 output. 15645 15646 * The same `-m' options must generally be used when building and 15647 using the precompiled header. *Note Submodel Options::, for any 15648 cases where this rule is relaxed. 15649 15650 * Each of the following options must be the same when building and 15651 using the precompiled header: 15652 15653 -fexceptions 15654 15655 * Some other command-line options starting with `-f', `-p', or `-O' 15656 must be defined in the same way as when the precompiled header was 15657 generated. At present, it's not clear which options are safe to 15658 change and which are not; the safest choice is to use exactly the 15659 same options when generating and using the precompiled header. 15660 The following are known to be safe: 15661 15662 -fmessage-length= -fpreprocessed -fsched-interblock 15663 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 15664 -fsched-verbose=<number> -fschedule-insns -fvisibility= 15665 -pedantic-errors 15666 15667 15668 For all of these except the last, the compiler will automatically 15669 ignore the precompiled header if the conditions aren't met. If you 15670 find an option combination that doesn't work and doesn't cause the 15671 precompiled header to be ignored, please consider filing a bug report, 15672 see *Note Bugs::. 15673 15674 If you do use differing options when generating and using the 15675 precompiled header, the actual behavior will be a mixture of the 15676 behavior for the options. For instance, if you use `-g' to generate 15677 the precompiled header but not when using it, you may or may not get 15678 debugging information for routines in the precompiled header. 15679 15680 15681 File: gcc.info, Node: Running Protoize, Prev: Precompiled Headers, Up: Invoking GCC 15682 15683 3.21 Running Protoize 15684 ===================== 15685 15686 The program `protoize' is an optional part of GCC. You can use it to 15687 add prototypes to a program, thus converting the program to ISO C in 15688 one respect. The companion program `unprotoize' does the reverse: it 15689 removes argument types from any prototypes that are found. 15690 15691 When you run these programs, you must specify a set of source files as 15692 command line arguments. The conversion programs start out by compiling 15693 these files to see what functions they define. The information gathered 15694 about a file FOO is saved in a file named `FOO.X'. 15695 15696 After scanning comes actual conversion. The specified files are all 15697 eligible to be converted; any files they include (whether sources or 15698 just headers) are eligible as well. 15699 15700 But not all the eligible files are converted. By default, `protoize' 15701 and `unprotoize' convert only source and header files in the current 15702 directory. You can specify additional directories whose files should 15703 be converted with the `-d DIRECTORY' option. You can also specify 15704 particular files to exclude with the `-x FILE' option. A file is 15705 converted if it is eligible, its directory name matches one of the 15706 specified directory names, and its name within the directory has not 15707 been excluded. 15708 15709 Basic conversion with `protoize' consists of rewriting most function 15710 definitions and function declarations to specify the types of the 15711 arguments. The only ones not rewritten are those for varargs functions. 15712 15713 `protoize' optionally inserts prototype declarations at the beginning 15714 of the source file, to make them available for any calls that precede 15715 the function's definition. Or it can insert prototype declarations 15716 with block scope in the blocks where undeclared functions are called. 15717 15718 Basic conversion with `unprotoize' consists of rewriting most function 15719 declarations to remove any argument types, and rewriting function 15720 definitions to the old-style pre-ISO form. 15721 15722 Both conversion programs print a warning for any function declaration 15723 or definition that they can't convert. You can suppress these warnings 15724 with `-q'. 15725 15726 The output from `protoize' or `unprotoize' replaces the original 15727 source file. The original file is renamed to a name ending with 15728 `.save' (for DOS, the saved filename ends in `.sav' without the 15729 original `.c' suffix). If the `.save' (`.sav' for DOS) file already 15730 exists, then the source file is simply discarded. 15731 15732 `protoize' and `unprotoize' both depend on GCC itself to scan the 15733 program and collect information about the functions it uses. So 15734 neither of these programs will work until GCC is installed. 15735 15736 Here is a table of the options you can use with `protoize' and 15737 `unprotoize'. Each option works with both programs unless otherwise 15738 stated. 15739 15740 `-B DIRECTORY' 15741 Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the 15742 usual directory (normally `/usr/local/lib'). This file contains 15743 prototype information about standard system functions. This option 15744 applies only to `protoize'. 15745 15746 `-c COMPILATION-OPTIONS' 15747 Use COMPILATION-OPTIONS as the options when running `gcc' to 15748 produce the `.X' files. The special option `-aux-info' is always 15749 passed in addition, to tell `gcc' to write a `.X' file. 15750 15751 Note that the compilation options must be given as a single 15752 argument to `protoize' or `unprotoize'. If you want to specify 15753 several `gcc' options, you must quote the entire set of 15754 compilation options to make them a single word in the shell. 15755 15756 There are certain `gcc' arguments that you cannot use, because they 15757 would produce the wrong kind of output. These include `-g', `-O', 15758 `-c', `-S', and `-o' If you include these in the 15759 COMPILATION-OPTIONS, they are ignored. 15760 15761 `-C' 15762 Rename files to end in `.C' (`.cc' for DOS-based file systems) 15763 instead of `.c'. This is convenient if you are converting a C 15764 program to C++. This option applies only to `protoize'. 15765 15766 `-g' 15767 Add explicit global declarations. This means inserting explicit 15768 declarations at the beginning of each source file for each function 15769 that is called in the file and was not declared. These 15770 declarations precede the first function definition that contains a 15771 call to an undeclared function. This option applies only to 15772 `protoize'. 15773 15774 `-i STRING' 15775 Indent old-style parameter declarations with the string STRING. 15776 This option applies only to `protoize'. 15777 15778 `unprotoize' converts prototyped function definitions to old-style 15779 function definitions, where the arguments are declared between the 15780 argument list and the initial `{'. By default, `unprotoize' uses 15781 five spaces as the indentation. If you want to indent with just 15782 one space instead, use `-i " "'. 15783 15784 `-k' 15785 Keep the `.X' files. Normally, they are deleted after conversion 15786 is finished. 15787 15788 `-l' 15789 Add explicit local declarations. `protoize' with `-l' inserts a 15790 prototype declaration for each function in each block which calls 15791 the function without any declaration. This option applies only to 15792 `protoize'. 15793 15794 `-n' 15795 Make no real changes. This mode just prints information about the 15796 conversions that would have been done without `-n'. 15797 15798 `-N' 15799 Make no `.save' files. The original files are simply deleted. 15800 Use this option with caution. 15801 15802 `-p PROGRAM' 15803 Use the program PROGRAM as the compiler. Normally, the name `gcc' 15804 is used. 15805 15806 `-q' 15807 Work quietly. Most warnings are suppressed. 15808 15809 `-v' 15810 Print the version number, just like `-v' for `gcc'. 15811 15812 If you need special compiler options to compile one of your program's 15813 source files, then you should generate that file's `.X' file specially, 15814 by running `gcc' on that source file with the appropriate options and 15815 the option `-aux-info'. Then run `protoize' on the entire set of 15816 files. `protoize' will use the existing `.X' file because it is newer 15817 than the source file. For example: 15818 15819 gcc -Dfoo=bar file1.c -aux-info file1.X 15820 protoize *.c 15821 15822 You need to include the special files along with the rest in the 15823 `protoize' command, even though their `.X' files already exist, because 15824 otherwise they won't get converted. 15825 15826 *Note Protoize Caveats::, for more information on how to use 15827 `protoize' successfully. 15828 15829 15830 File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top 15831 15832 4 C Implementation-defined behavior 15833 *********************************** 15834 15835 A conforming implementation of ISO C is required to document its choice 15836 of behavior in each of the areas that are designated "implementation 15837 defined". The following lists all such areas, along with the section 15838 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 15839 Some areas are only implementation-defined in one version of the 15840 standard. 15841 15842 Some choices depend on the externally determined ABI for the platform 15843 (including standard character encodings) which GCC follows; these are 15844 listed as "determined by ABI" below. *Note Binary Compatibility: 15845 Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 15846 are documented in the preprocessor manual. *Note 15847 Implementation-defined behavior: (cpp)Implementation-defined behavior. 15848 Some choices are made by the library and operating system (or other 15849 environment when compiling for a freestanding environment); refer to 15850 their documentation for details. 15851 15852 * Menu: 15853 15854 * Translation implementation:: 15855 * Environment implementation:: 15856 * Identifiers implementation:: 15857 * Characters implementation:: 15858 * Integers implementation:: 15859 * Floating point implementation:: 15860 * Arrays and pointers implementation:: 15861 * Hints implementation:: 15862 * Structures unions enumerations and bit-fields implementation:: 15863 * Qualifiers implementation:: 15864 * Declarators implementation:: 15865 * Statements implementation:: 15866 * Preprocessing directives implementation:: 15867 * Library functions implementation:: 15868 * Architecture implementation:: 15869 * Locale-specific behavior implementation:: 15870 15871 15872 File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 15873 15874 4.1 Translation 15875 =============== 15876 15877 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 15878 5.1.1.3).' 15879 15880 Diagnostics consist of all the output sent to stderr by GCC. 15881 15882 * `Whether each nonempty sequence of white-space characters other 15883 than new-line is retained or replaced by one space character in 15884 translation phase 3 (C90 and C99 5.1.1.2).' 15885 15886 *Note Implementation-defined behavior: (cpp)Implementation-defined 15887 behavior. 15888 15889 15890 15891 File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 15892 15893 4.2 Environment 15894 =============== 15895 15896 The behavior of most of these points are dependent on the implementation 15897 of the C library, and are not defined by GCC itself. 15898 15899 * `The mapping between physical source file multibyte characters and 15900 the source character set in translation phase 1 (C90 and C99 15901 5.1.1.2).' 15902 15903 *Note Implementation-defined behavior: (cpp)Implementation-defined 15904 behavior. 15905 15906 15907 15908 File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 15909 15910 4.3 Identifiers 15911 =============== 15912 15913 * `Which additional multibyte characters may appear in identifiers 15914 and their correspondence to universal character names (C99 6.4.2).' 15915 15916 *Note Implementation-defined behavior: (cpp)Implementation-defined 15917 behavior. 15918 15919 * `The number of significant initial characters in an identifier 15920 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 15921 15922 For internal names, all characters are significant. For external 15923 names, the number of significant characters are defined by the 15924 linker; for almost all targets, all characters are significant. 15925 15926 * `Whether case distinctions are significant in an identifier with 15927 external linkage (C90 6.1.2).' 15928 15929 This is a property of the linker. C99 requires that case 15930 distinctions are always significant in identifiers with external 15931 linkage and systems without this property are not supported by GCC. 15932 15933 15934 15935 File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 15936 15937 4.4 Characters 15938 ============== 15939 15940 * `The number of bits in a byte (C90 3.4, C99 3.6).' 15941 15942 Determined by ABI. 15943 15944 * `The values of the members of the execution character set (C90 and 15945 C99 5.2.1).' 15946 15947 Determined by ABI. 15948 15949 * `The unique value of the member of the execution character set 15950 produced for each of the standard alphabetic escape sequences (C90 15951 and C99 5.2.2).' 15952 15953 Determined by ABI. 15954 15955 * `The value of a `char' object into which has been stored any 15956 character other than a member of the basic execution character set 15957 (C90 6.1.2.5, C99 6.2.5).' 15958 15959 Determined by ABI. 15960 15961 * `Which of `signed char' or `unsigned char' has the same range, 15962 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 15963 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 15964 15965 Determined by ABI. The options `-funsigned-char' and 15966 `-fsigned-char' change the default. *Note Options Controlling C 15967 Dialect: C Dialect Options. 15968 15969 * `The mapping of members of the source character set (in character 15970 constants and string literals) to members of the execution 15971 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 15972 15973 Determined by ABI. 15974 15975 * `The value of an integer character constant containing more than 15976 one character or containing a character or escape sequence that 15977 does not map to a single-byte execution character (C90 6.1.3.4, 15978 C99 6.4.4.4).' 15979 15980 *Note Implementation-defined behavior: (cpp)Implementation-defined 15981 behavior. 15982 15983 * `The value of a wide character constant containing more than one 15984 multibyte character, or containing a multibyte character or escape 15985 sequence not represented in the extended execution character set 15986 (C90 6.1.3.4, C99 6.4.4.4).' 15987 15988 *Note Implementation-defined behavior: (cpp)Implementation-defined 15989 behavior. 15990 15991 * `The current locale used to convert a wide character constant 15992 consisting of a single multibyte character that maps to a member 15993 of the extended execution character set into a corresponding wide 15994 character code (C90 6.1.3.4, C99 6.4.4.4).' 15995 15996 *Note Implementation-defined behavior: (cpp)Implementation-defined 15997 behavior. 15998 15999 * `The current locale used to convert a wide string literal into 16000 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 16001 16002 *Note Implementation-defined behavior: (cpp)Implementation-defined 16003 behavior. 16004 16005 * `The value of a string literal containing a multibyte character or 16006 escape sequence not represented in the execution character set 16007 (C90 6.1.4, C99 6.4.5).' 16008 16009 *Note Implementation-defined behavior: (cpp)Implementation-defined 16010 behavior. 16011 16012 16013 File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 16014 16015 4.5 Integers 16016 ============ 16017 16018 * `Any extended integer types that exist in the implementation (C99 16019 6.2.5).' 16020 16021 GCC does not support any extended integer types. 16022 16023 * `Whether signed integer types are represented using sign and 16024 magnitude, two's complement, or one's complement, and whether the 16025 extraordinary value is a trap representation or an ordinary value 16026 (C99 6.2.6.2).' 16027 16028 GCC supports only two's complement integer types, and all bit 16029 patterns are ordinary values. 16030 16031 * `The rank of any extended integer type relative to another extended 16032 integer type with the same precision (C99 6.3.1.1).' 16033 16034 GCC does not support any extended integer types. 16035 16036 * `The result of, or the signal raised by, converting an integer to a 16037 signed integer type when the value cannot be represented in an 16038 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 16039 16040 For conversion to a type of width N, the value is reduced modulo 16041 2^N to be within range of the type; no signal is raised. 16042 16043 * `The results of some bitwise operations on signed integers (C90 16044 6.3, C99 6.5).' 16045 16046 Bitwise operators act on the representation of the value including 16047 both the sign and value bits, where the sign bit is considered 16048 immediately above the highest-value value bit. Signed `>>' acts 16049 on negative numbers by sign extension. 16050 16051 GCC does not use the latitude given in C99 only to treat certain 16052 aspects of signed `<<' as undefined, but this is subject to change. 16053 16054 * `The sign of the remainder on integer division (C90 6.3.5).' 16055 16056 GCC always follows the C99 requirement that the result of division 16057 is truncated towards zero. 16058 16059 16060 16061 File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 16062 16063 4.6 Floating point 16064 ================== 16065 16066 * `The accuracy of the floating-point operations and of the library 16067 functions in `<math.h>' and `<complex.h>' that return 16068 floating-point results (C90 and C99 5.2.4.2.2).' 16069 16070 The accuracy is unknown. 16071 16072 * `The rounding behaviors characterized by non-standard values of 16073 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 16074 16075 GCC does not use such values. 16076 16077 * `The evaluation methods characterized by non-standard negative 16078 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 16079 16080 GCC does not use such values. 16081 16082 * `The direction of rounding when an integer is converted to a 16083 floating-point number that cannot exactly represent the original 16084 value (C90 6.2.1.3, C99 6.3.1.4).' 16085 16086 C99 Annex F is followed. 16087 16088 * `The direction of rounding when a floating-point number is 16089 converted to a narrower floating-point number (C90 6.2.1.4, C99 16090 6.3.1.5).' 16091 16092 C99 Annex F is followed. 16093 16094 * `How the nearest representable value or the larger or smaller 16095 representable value immediately adjacent to the nearest 16096 representable value is chosen for certain floating constants (C90 16097 6.1.3.1, C99 6.4.4.2).' 16098 16099 C99 Annex F is followed. 16100 16101 * `Whether and how floating expressions are contracted when not 16102 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 16103 16104 Expressions are currently only contracted if 16105 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 16106 subject to change. 16107 16108 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 16109 16110 This pragma is not implemented, but the default is to "off" unless 16111 `-frounding-math' is used in which case it is "on". 16112 16113 * `Additional floating-point exceptions, rounding modes, 16114 environments, and classifications, and their macro names (C99 7.6, 16115 C99 7.12).' 16116 16117 This is dependent on the implementation of the C library, and is 16118 not defined by GCC itself. 16119 16120 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 16121 16122 This pragma is not implemented. Expressions are currently only 16123 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 16124 used. This is subject to change. 16125 16126 * `Whether the "inexact" floating-point exception can be raised when 16127 the rounded result actually does equal the mathematical result in 16128 an IEC 60559 conformant implementation (C99 F.9).' 16129 16130 This is dependent on the implementation of the C library, and is 16131 not defined by GCC itself. 16132 16133 * `Whether the "underflow" (and "inexact") floating-point exception 16134 can be raised when a result is tiny but not inexact in an IEC 16135 60559 conformant implementation (C99 F.9).' 16136 16137 This is dependent on the implementation of the C library, and is 16138 not defined by GCC itself. 16139 16140 16141 16142 File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 16143 16144 4.7 Arrays and pointers 16145 ======================= 16146 16147 * `The result of converting a pointer to an integer or vice versa 16148 (C90 6.3.4, C99 6.3.2.3).' 16149 16150 A cast from pointer to integer discards most-significant bits if 16151 the pointer representation is larger than the integer type, 16152 sign-extends(1) if the pointer representation is smaller than the 16153 integer type, otherwise the bits are unchanged. 16154 16155 A cast from integer to pointer discards most-significant bits if 16156 the pointer representation is smaller than the integer type, 16157 extends according to the signedness of the integer type if the 16158 pointer representation is larger than the integer type, otherwise 16159 the bits are unchanged. 16160 16161 When casting from pointer to integer and back again, the resulting 16162 pointer must reference the same object as the original pointer, 16163 otherwise the behavior is undefined. That is, one may not use 16164 integer arithmetic to avoid the undefined behavior of pointer 16165 arithmetic as proscribed in C99 6.5.6/8. 16166 16167 * `The size of the result of subtracting two pointers to elements of 16168 the same array (C90 6.3.6, C99 6.5.6).' 16169 16170 The value is as specified in the standard and the type is 16171 determined by the ABI. 16172 16173 16174 ---------- Footnotes ---------- 16175 16176 (1) Future versions of GCC may zero-extend, or use a target-defined 16177 `ptr_extend' pattern. Do not rely on sign extension. 16178 16179 16180 File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 16181 16182 4.8 Hints 16183 ========= 16184 16185 * `The extent to which suggestions made by using the `register' 16186 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 16187 16188 The `register' specifier affects code generation only in these 16189 ways: 16190 16191 * When used as part of the register variable extension, see 16192 *Note Explicit Reg Vars::. 16193 16194 * When `-O0' is in use, the compiler allocates distinct stack 16195 memory for all variables that do not have the `register' 16196 storage-class specifier; if `register' is specified, the 16197 variable may have a shorter lifespan than the code would 16198 indicate and may never be placed in memory. 16199 16200 * On some rare x86 targets, `setjmp' doesn't save the registers 16201 in all circumstances. In those cases, GCC doesn't allocate 16202 any variables in registers unless they are marked `register'. 16203 16204 16205 * `The extent to which suggestions made by using the inline function 16206 specifier are effective (C99 6.7.4).' 16207 16208 GCC will not inline any functions if the `-fno-inline' option is 16209 used or if `-O0' is used. Otherwise, GCC may still be unable to 16210 inline a function for many reasons; the `-Winline' option may be 16211 used to determine if a function has not been inlined and why not. 16212 16213 16214 16215 File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 16216 16217 4.9 Structures, unions, enumerations, and bit-fields 16218 ==================================================== 16219 16220 * `A member of a union object is accessed using a member of a 16221 different type (C90 6.3.2.3).' 16222 16223 The relevant bytes of the representation of the object are treated 16224 as an object of the type used for the access. *Note 16225 Type-punning::. This may be a trap representation. 16226 16227 * `Whether a "plain" `int' bit-field is treated as a `signed int' 16228 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 16229 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 16230 16231 By default it is treated as `signed int' but this may be changed 16232 by the `-funsigned-bitfields' option. 16233 16234 * `Allowable bit-field types other than `_Bool', `signed int', and 16235 `unsigned int' (C99 6.7.2.1).' 16236 16237 No other types are permitted in strictly conforming mode. 16238 16239 * `Whether a bit-field can straddle a storage-unit boundary (C90 16240 6.5.2.1, C99 6.7.2.1).' 16241 16242 Determined by ABI. 16243 16244 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 16245 C99 6.7.2.1).' 16246 16247 Determined by ABI. 16248 16249 * `The alignment of non-bit-field members of structures (C90 16250 6.5.2.1, C99 6.7.2.1).' 16251 16252 Determined by ABI. 16253 16254 * `The integer type compatible with each enumerated type (C90 16255 6.5.2.2, C99 6.7.2.2).' 16256 16257 Normally, the type is `unsigned int' if there are no negative 16258 values in the enumeration, otherwise `int'. If `-fshort-enums' is 16259 specified, then if there are negative values it is the first of 16260 `signed char', `short' and `int' that can represent all the 16261 values, otherwise it is the first of `unsigned char', `unsigned 16262 short' and `unsigned int' that can represent all the values. 16263 16264 On some targets, `-fshort-enums' is the default; this is 16265 determined by the ABI. 16266 16267 16268 16269 File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 16270 16271 4.10 Qualifiers 16272 =============== 16273 16274 * `What constitutes an access to an object that has 16275 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 16276 16277 Such an object is normally accessed by pointers and used for 16278 accessing hardware. In most expressions, it is intuitively 16279 obvious what is a read and what is a write. For example 16280 16281 volatile int *dst = SOMEVALUE; 16282 volatile int *src = SOMEOTHERVALUE; 16283 *dst = *src; 16284 16285 will cause a read of the volatile object pointed to by SRC and 16286 store the value into the volatile object pointed to by DST. There 16287 is no guarantee that these reads and writes are atomic, especially 16288 for objects larger than `int'. 16289 16290 However, if the volatile storage is not being modified, and the 16291 value of the volatile storage is not used, then the situation is 16292 less obvious. For example 16293 16294 volatile int *src = SOMEVALUE; 16295 *src; 16296 16297 According to the C standard, such an expression is an rvalue whose 16298 type is the unqualified version of its original type, i.e. `int'. 16299 Whether GCC interprets this as a read of the volatile object being 16300 pointed to or only as a request to evaluate the expression for its 16301 side-effects depends on this type. 16302 16303 If it is a scalar type, or on most targets an aggregate type whose 16304 only member object is of a scalar type, or a union type whose 16305 member objects are of scalar types, the expression is interpreted 16306 by GCC as a read of the volatile object; in the other cases, the 16307 expression is only evaluated for its side-effects. 16308 16309 16310 16311 File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 16312 16313 4.11 Declarators 16314 ================ 16315 16316 * `The maximum number of declarators that may modify an arithmetic, 16317 structure or union type (C90 6.5.4).' 16318 16319 GCC is only limited by available memory. 16320 16321 16322 16323 File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 16324 16325 4.12 Statements 16326 =============== 16327 16328 * `The maximum number of `case' values in a `switch' statement (C90 16329 6.6.4.2).' 16330 16331 GCC is only limited by available memory. 16332 16333 16334 16335 File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 16336 16337 4.13 Preprocessing directives 16338 ============================= 16339 16340 *Note Implementation-defined behavior: (cpp)Implementation-defined 16341 behavior, for details of these aspects of implementation-defined 16342 behavior. 16343 16344 * `How sequences in both forms of header names are mapped to headers 16345 or external source file names (C90 6.1.7, C99 6.4.7).' 16346 16347 * `Whether the value of a character constant in a constant expression 16348 that controls conditional inclusion matches the value of the same 16349 character constant in the execution character set (C90 6.8.1, C99 16350 6.10.1).' 16351 16352 * `Whether the value of a single-character character constant in a 16353 constant expression that controls conditional inclusion may have a 16354 negative value (C90 6.8.1, C99 6.10.1).' 16355 16356 * `The places that are searched for an included `<>' delimited 16357 header, and how the places are specified or the header is 16358 identified (C90 6.8.2, C99 6.10.2).' 16359 16360 * `How the named source file is searched for in an included `""' 16361 delimited header (C90 6.8.2, C99 6.10.2).' 16362 16363 * `The method by which preprocessing tokens (possibly resulting from 16364 macro expansion) in a `#include' directive are combined into a 16365 header name (C90 6.8.2, C99 6.10.2).' 16366 16367 * `The nesting limit for `#include' processing (C90 6.8.2, C99 16368 6.10.2).' 16369 16370 * `Whether the `#' operator inserts a `\' character before the `\' 16371 character that begins a universal character name in a character 16372 constant or string literal (C99 6.10.3.2).' 16373 16374 * `The behavior on each recognized non-`STDC #pragma' directive (C90 16375 6.8.6, C99 6.10.6).' 16376 16377 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 16378 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 16379 details of target-specific pragmas. 16380 16381 * `The definitions for `__DATE__' and `__TIME__' when respectively, 16382 the date and time of translation are not available (C90 6.8.8, C99 16383 6.10.8).' 16384 16385 16386 16387 File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 16388 16389 4.14 Library functions 16390 ====================== 16391 16392 The behavior of most of these points are dependent on the implementation 16393 of the C library, and are not defined by GCC itself. 16394 16395 * `The null pointer constant to which the macro `NULL' expands (C90 16396 7.1.6, C99 7.17).' 16397 16398 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 16399 provide the other headers which define `NULL' and some library 16400 implementations may use other definitions in those headers. 16401 16402 16403 16404 File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 16405 16406 4.15 Architecture 16407 ================= 16408 16409 * `The values or expressions assigned to the macros specified in the 16410 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 16411 5.2.4.2, C99 7.18.2, C99 7.18.3).' 16412 16413 Determined by ABI. 16414 16415 * `The number, order, and encoding of bytes in any object (when not 16416 explicitly specified in this International Standard) (C99 16417 6.2.6.1).' 16418 16419 Determined by ABI. 16420 16421 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 16422 C99 6.5.3.4).' 16423 16424 Determined by ABI. 16425 16426 16427 16428 File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 16429 16430 4.16 Locale-specific behavior 16431 ============================= 16432 16433 The behavior of these points are dependent on the implementation of the 16434 C library, and are not defined by GCC itself. 16435 16436 16437 File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C Implementation, Up: Top 16438 16439 5 Extensions to the C Language Family 16440 ************************************* 16441 16442 GNU C provides several language features not found in ISO standard C. 16443 (The `-pedantic' option directs GCC to print a warning message if any 16444 of these features is used.) To test for the availability of these 16445 features in conditional compilation, check for a predefined macro 16446 `__GNUC__', which is always defined under GCC. 16447 16448 These extensions are available in C and Objective-C. Most of them are 16449 also available in C++. *Note Extensions to the C++ Language: C++ 16450 Extensions, for extensions that apply _only_ to C++. 16451 16452 Some features that are in ISO C99 but not C89 or C++ are also, as 16453 extensions, accepted by GCC in C89 mode and in C++. 16454 16455 * Menu: 16456 16457 * Statement Exprs:: Putting statements and declarations inside expressions. 16458 * Local Labels:: Labels local to a block. 16459 * Labels as Values:: Getting pointers to labels, and computed gotos. 16460 * Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 16461 * Constructing Calls:: Dispatching a call to another function. 16462 * Typeof:: `typeof': referring to the type of an expression. 16463 * Conditionals:: Omitting the middle operand of a `?:' expression. 16464 * Long Long:: Double-word integers---`long long int'. 16465 * Complex:: Data types for complex numbers. 16466 * Floating Types:: Additional Floating Types. 16467 * Decimal Float:: Decimal Floating Types. 16468 * Hex Floats:: Hexadecimal floating-point constants. 16469 * Fixed-Point:: Fixed-Point Types. 16470 * Zero Length:: Zero-length arrays. 16471 * Variable Length:: Arrays whose length is computed at run time. 16472 * Empty Structures:: Structures with no members. 16473 * Variadic Macros:: Macros with a variable number of arguments. 16474 * Escaped Newlines:: Slightly looser rules for escaped newlines. 16475 * Subscripting:: Any array can be subscripted, even if not an lvalue. 16476 * Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 16477 * Initializers:: Non-constant initializers. 16478 * Compound Literals:: Compound literals give structures, unions 16479 or arrays as values. 16480 * Designated Inits:: Labeling elements of initializers. 16481 * Cast to Union:: Casting to union type from any member of the union. 16482 * Case Ranges:: `case 1 ... 9' and such. 16483 * Mixed Declarations:: Mixing declarations and code. 16484 * Function Attributes:: Declaring that functions have no side effects, 16485 or that they can never return. 16486 * Attribute Syntax:: Formal syntax for attributes. 16487 * Function Prototypes:: Prototype declarations and old-style definitions. 16488 * C++ Comments:: C++ comments are recognized. 16489 * Dollar Signs:: Dollar sign is allowed in identifiers. 16490 * Character Escapes:: `\e' stands for the character <ESC>. 16491 * Variable Attributes:: Specifying attributes of variables. 16492 * Type Attributes:: Specifying attributes of types. 16493 * Alignment:: Inquiring about the alignment of a type or variable. 16494 * Inline:: Defining inline functions (as fast as macros). 16495 * Extended Asm:: Assembler instructions with C expressions as operands. 16496 (With them you can define ``built-in'' functions.) 16497 * Constraints:: Constraints for asm operands 16498 * Asm Labels:: Specifying the assembler name to use for a C symbol. 16499 * Explicit Reg Vars:: Defining variables residing in specified registers. 16500 * Alternate Keywords:: `__const__', `__asm__', etc., for header files. 16501 * Incomplete Enums:: `enum foo;', with details to follow. 16502 * Function Names:: Printable strings which are the name of the current 16503 function. 16504 * Return Address:: Getting the return or frame address of a function. 16505 * Vector Extensions:: Using vector instructions through built-in functions. 16506 * Offsetof:: Special syntax for implementing `offsetof'. 16507 * Atomic Builtins:: Built-in functions for atomic memory access. 16508 * Object Size Checking:: Built-in functions for limited buffer overflow 16509 checking. 16510 * Other Builtins:: Other built-in functions. 16511 * Target Builtins:: Built-in functions specific to particular targets. 16512 * Target Format Checks:: Format checks specific to particular targets. 16513 * Pragmas:: Pragmas accepted by GCC. 16514 * Unnamed Fields:: Unnamed struct/union fields within structs/unions. 16515 * Thread-Local:: Per-thread variables. 16516 * Binary constants:: Binary constants using the `0b' prefix. 16517 16518 16519 File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 16520 16521 5.1 Statements and Declarations in Expressions 16522 ============================================== 16523 16524 A compound statement enclosed in parentheses may appear as an expression 16525 in GNU C. This allows you to use loops, switches, and local variables 16526 within an expression. 16527 16528 Recall that a compound statement is a sequence of statements surrounded 16529 by braces; in this construct, parentheses go around the braces. For 16530 example: 16531 16532 ({ int y = foo (); int z; 16533 if (y > 0) z = y; 16534 else z = - y; 16535 z; }) 16536 16537 is a valid (though slightly more complex than necessary) expression for 16538 the absolute value of `foo ()'. 16539 16540 The last thing in the compound statement should be an expression 16541 followed by a semicolon; the value of this subexpression serves as the 16542 value of the entire construct. (If you use some other kind of statement 16543 last within the braces, the construct has type `void', and thus 16544 effectively no value.) 16545 16546 This feature is especially useful in making macro definitions "safe" 16547 (so that they evaluate each operand exactly once). For example, the 16548 "maximum" function is commonly defined as a macro in standard C as 16549 follows: 16550 16551 #define max(a,b) ((a) > (b) ? (a) : (b)) 16552 16553 But this definition computes either A or B twice, with bad results if 16554 the operand has side effects. In GNU C, if you know the type of the 16555 operands (here taken as `int'), you can define the macro safely as 16556 follows: 16557 16558 #define maxint(a,b) \ 16559 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 16560 16561 Embedded statements are not allowed in constant expressions, such as 16562 the value of an enumeration constant, the width of a bit-field, or the 16563 initial value of a static variable. 16564 16565 If you don't know the type of the operand, you can still do this, but 16566 you must use `typeof' (*note Typeof::). 16567 16568 In G++, the result value of a statement expression undergoes array and 16569 function pointer decay, and is returned by value to the enclosing 16570 expression. For instance, if `A' is a class, then 16571 16572 A a; 16573 16574 ({a;}).Foo () 16575 16576 will construct a temporary `A' object to hold the result of the 16577 statement expression, and that will be used to invoke `Foo'. Therefore 16578 the `this' pointer observed by `Foo' will not be the address of `a'. 16579 16580 Any temporaries created within a statement within a statement 16581 expression will be destroyed at the statement's end. This makes 16582 statement expressions inside macros slightly different from function 16583 calls. In the latter case temporaries introduced during argument 16584 evaluation will be destroyed at the end of the statement that includes 16585 the function call. In the statement expression case they will be 16586 destroyed during the statement expression. For instance, 16587 16588 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 16589 template<typename T> T function(T a) { T b = a; return b + 3; } 16590 16591 void foo () 16592 { 16593 macro (X ()); 16594 function (X ()); 16595 } 16596 16597 will have different places where temporaries are destroyed. For the 16598 `macro' case, the temporary `X' will be destroyed just after the 16599 initialization of `b'. In the `function' case that temporary will be 16600 destroyed when the function returns. 16601 16602 These considerations mean that it is probably a bad idea to use 16603 statement-expressions of this form in header files that are designed to 16604 work with C++. (Note that some versions of the GNU C Library contained 16605 header files using statement-expression that lead to precisely this 16606 bug.) 16607 16608 Jumping into a statement expression with `goto' or using a `switch' 16609 statement outside the statement expression with a `case' or `default' 16610 label inside the statement expression is not permitted. Jumping into a 16611 statement expression with a computed `goto' (*note Labels as Values::) 16612 yields undefined behavior. Jumping out of a statement expression is 16613 permitted, but if the statement expression is part of a larger 16614 expression then it is unspecified which other subexpressions of that 16615 expression have been evaluated except where the language definition 16616 requires certain subexpressions to be evaluated before or after the 16617 statement expression. In any case, as with a function call the 16618 evaluation of a statement expression is not interleaved with the 16619 evaluation of other parts of the containing expression. For example, 16620 16621 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 16622 16623 will call `foo' and `bar1' and will not call `baz' but may or may not 16624 call `bar2'. If `bar2' is called, it will be called after `foo' and 16625 before `bar1' 16626 16627 16628 File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 16629 16630 5.2 Locally Declared Labels 16631 =========================== 16632 16633 GCC allows you to declare "local labels" in any nested block scope. A 16634 local label is just like an ordinary label, but you can only reference 16635 it (with a `goto' statement, or by taking its address) within the block 16636 in which it was declared. 16637 16638 A local label declaration looks like this: 16639 16640 __label__ LABEL; 16641 16642 or 16643 16644 __label__ LABEL1, LABEL2, /* ... */; 16645 16646 Local label declarations must come at the beginning of the block, 16647 before any ordinary declarations or statements. 16648 16649 The label declaration defines the label _name_, but does not define 16650 the label itself. You must do this in the usual way, with `LABEL:', 16651 within the statements of the statement expression. 16652 16653 The local label feature is useful for complex macros. If a macro 16654 contains nested loops, a `goto' can be useful for breaking out of them. 16655 However, an ordinary label whose scope is the whole function cannot be 16656 used: if the macro can be expanded several times in one function, the 16657 label will be multiply defined in that function. A local label avoids 16658 this problem. For example: 16659 16660 #define SEARCH(value, array, target) \ 16661 do { \ 16662 __label__ found; \ 16663 typeof (target) _SEARCH_target = (target); \ 16664 typeof (*(array)) *_SEARCH_array = (array); \ 16665 int i, j; \ 16666 int value; \ 16667 for (i = 0; i < max; i++) \ 16668 for (j = 0; j < max; j++) \ 16669 if (_SEARCH_array[i][j] == _SEARCH_target) \ 16670 { (value) = i; goto found; } \ 16671 (value) = -1; \ 16672 found:; \ 16673 } while (0) 16674 16675 This could also be written using a statement-expression: 16676 16677 #define SEARCH(array, target) \ 16678 ({ \ 16679 __label__ found; \ 16680 typeof (target) _SEARCH_target = (target); \ 16681 typeof (*(array)) *_SEARCH_array = (array); \ 16682 int i, j; \ 16683 int value; \ 16684 for (i = 0; i < max; i++) \ 16685 for (j = 0; j < max; j++) \ 16686 if (_SEARCH_array[i][j] == _SEARCH_target) \ 16687 { value = i; goto found; } \ 16688 value = -1; \ 16689 found: \ 16690 value; \ 16691 }) 16692 16693 Local label declarations also make the labels they declare visible to 16694 nested functions, if there are any. *Note Nested Functions::, for 16695 details. 16696 16697 16698 File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 16699 16700 5.3 Labels as Values 16701 ==================== 16702 16703 You can get the address of a label defined in the current function (or 16704 a containing function) with the unary operator `&&'. The value has 16705 type `void *'. This value is a constant and can be used wherever a 16706 constant of that type is valid. For example: 16707 16708 void *ptr; 16709 /* ... */ 16710 ptr = &&foo; 16711 16712 To use these values, you need to be able to jump to one. This is done 16713 with the computed goto statement(1), `goto *EXP;'. For example, 16714 16715 goto *ptr; 16716 16717 Any expression of type `void *' is allowed. 16718 16719 One way of using these constants is in initializing a static array that 16720 will serve as a jump table: 16721 16722 static void *array[] = { &&foo, &&bar, &&hack }; 16723 16724 Then you can select a label with indexing, like this: 16725 16726 goto *array[i]; 16727 16728 Note that this does not check whether the subscript is in bounds--array 16729 indexing in C never does that. 16730 16731 Such an array of label values serves a purpose much like that of the 16732 `switch' statement. The `switch' statement is cleaner, so use that 16733 rather than an array unless the problem does not fit a `switch' 16734 statement very well. 16735 16736 Another use of label values is in an interpreter for threaded code. 16737 The labels within the interpreter function can be stored in the 16738 threaded code for super-fast dispatching. 16739 16740 You may not use this mechanism to jump to code in a different function. 16741 If you do that, totally unpredictable things will happen. The best way 16742 to avoid this is to store the label address only in automatic variables 16743 and never pass it as an argument. 16744 16745 An alternate way to write the above example is 16746 16747 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 16748 &&hack - &&foo }; 16749 goto *(&&foo + array[i]); 16750 16751 This is more friendly to code living in shared libraries, as it reduces 16752 the number of dynamic relocations that are needed, and by consequence, 16753 allows the data to be read-only. 16754 16755 The `&&foo' expressions for the same label might have different values 16756 if the containing function is inlined or cloned. If a program relies on 16757 them being always the same, `__attribute__((__noinline__))' should be 16758 used to prevent inlining. If `&&foo' is used in a static variable 16759 initializer, inlining is forbidden. 16760 16761 ---------- Footnotes ---------- 16762 16763 (1) The analogous feature in Fortran is called an assigned goto, but 16764 that name seems inappropriate in C, where one can do more than simply 16765 store label addresses in label variables. 16766 16767 16768 File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 16769 16770 5.4 Nested Functions 16771 ==================== 16772 16773 A "nested function" is a function defined inside another function. 16774 (Nested functions are not supported for GNU C++.) The nested function's 16775 name is local to the block where it is defined. For example, here we 16776 define a nested function named `square', and call it twice: 16777 16778 foo (double a, double b) 16779 { 16780 double square (double z) { return z * z; } 16781 16782 return square (a) + square (b); 16783 } 16784 16785 The nested function can access all the variables of the containing 16786 function that are visible at the point of its definition. This is 16787 called "lexical scoping". For example, here we show a nested function 16788 which uses an inherited variable named `offset': 16789 16790 bar (int *array, int offset, int size) 16791 { 16792 int access (int *array, int index) 16793 { return array[index + offset]; } 16794 int i; 16795 /* ... */ 16796 for (i = 0; i < size; i++) 16797 /* ... */ access (array, i) /* ... */ 16798 } 16799 16800 Nested function definitions are permitted within functions in the 16801 places where variable definitions are allowed; that is, in any block, 16802 mixed with the other declarations and statements in the block. 16803 16804 It is possible to call the nested function from outside the scope of 16805 its name by storing its address or passing the address to another 16806 function: 16807 16808 hack (int *array, int size) 16809 { 16810 void store (int index, int value) 16811 { array[index] = value; } 16812 16813 intermediate (store, size); 16814 } 16815 16816 Here, the function `intermediate' receives the address of `store' as 16817 an argument. If `intermediate' calls `store', the arguments given to 16818 `store' are used to store into `array'. But this technique works only 16819 so long as the containing function (`hack', in this example) does not 16820 exit. 16821 16822 If you try to call the nested function through its address after the 16823 containing function has exited, all hell will break loose. If you try 16824 to call it after a containing scope level has exited, and if it refers 16825 to some of the variables that are no longer in scope, you may be lucky, 16826 but it's not wise to take the risk. If, however, the nested function 16827 does not refer to anything that has gone out of scope, you should be 16828 safe. 16829 16830 GCC implements taking the address of a nested function using a 16831 technique called "trampolines". A paper describing them is available as 16832 16833 `http://people.debian.org/~aaronl/Usenix88-lexic.pdf'. 16834 16835 A nested function can jump to a label inherited from a containing 16836 function, provided the label was explicitly declared in the containing 16837 function (*note Local Labels::). Such a jump returns instantly to the 16838 containing function, exiting the nested function which did the `goto' 16839 and any intermediate functions as well. Here is an example: 16840 16841 bar (int *array, int offset, int size) 16842 { 16843 __label__ failure; 16844 int access (int *array, int index) 16845 { 16846 if (index > size) 16847 goto failure; 16848 return array[index + offset]; 16849 } 16850 int i; 16851 /* ... */ 16852 for (i = 0; i < size; i++) 16853 /* ... */ access (array, i) /* ... */ 16854 /* ... */ 16855 return 0; 16856 16857 /* Control comes here from `access' 16858 if it detects an error. */ 16859 failure: 16860 return -1; 16861 } 16862 16863 A nested function always has no linkage. Declaring one with `extern' 16864 or `static' is erroneous. If you need to declare the nested function 16865 before its definition, use `auto' (which is otherwise meaningless for 16866 function declarations). 16867 16868 bar (int *array, int offset, int size) 16869 { 16870 __label__ failure; 16871 auto int access (int *, int); 16872 /* ... */ 16873 int access (int *array, int index) 16874 { 16875 if (index > size) 16876 goto failure; 16877 return array[index + offset]; 16878 } 16879 /* ... */ 16880 } 16881 16882 16883 File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 16884 16885 5.5 Constructing Function Calls 16886 =============================== 16887 16888 Using the built-in functions described below, you can record the 16889 arguments a function received, and call another function with the same 16890 arguments, without knowing the number or types of the arguments. 16891 16892 You can also record the return value of that function call, and later 16893 return that value, without knowing what data type the function tried to 16894 return (as long as your caller expects that data type). 16895 16896 However, these built-in functions may interact badly with some 16897 sophisticated features or other extensions of the language. It is, 16898 therefore, not recommended to use them outside very simple functions 16899 acting as mere forwarders for their arguments. 16900 16901 -- Built-in Function: void * __builtin_apply_args () 16902 This built-in function returns a pointer to data describing how to 16903 perform a call with the same arguments as were passed to the 16904 current function. 16905 16906 The function saves the arg pointer register, structure value 16907 address, and all registers that might be used to pass arguments to 16908 a function into a block of memory allocated on the stack. Then it 16909 returns the address of that block. 16910 16911 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 16912 *ARGUMENTS, size_t SIZE) 16913 This built-in function invokes FUNCTION with a copy of the 16914 parameters described by ARGUMENTS and SIZE. 16915 16916 The value of ARGUMENTS should be the value returned by 16917 `__builtin_apply_args'. The argument SIZE specifies the size of 16918 the stack argument data, in bytes. 16919 16920 This function returns a pointer to data describing how to return 16921 whatever value was returned by FUNCTION. The data is saved in a 16922 block of memory allocated on the stack. 16923 16924 It is not always simple to compute the proper value for SIZE. The 16925 value is used by `__builtin_apply' to compute the amount of data 16926 that should be pushed on the stack and copied from the incoming 16927 argument area. 16928 16929 -- Built-in Function: void __builtin_return (void *RESULT) 16930 This built-in function returns the value described by RESULT from 16931 the containing function. You should specify, for RESULT, a value 16932 returned by `__builtin_apply'. 16933 16934 -- Built-in Function: __builtin_va_arg_pack () 16935 This built-in function represents all anonymous arguments of an 16936 inline function. It can be used only in inline functions which 16937 will be always inlined, never compiled as a separate function, 16938 such as those using `__attribute__ ((__always_inline__))' or 16939 `__attribute__ ((__gnu_inline__))' extern inline functions. It 16940 must be only passed as last argument to some other function with 16941 variable arguments. This is useful for writing small wrapper 16942 inlines for variable argument functions, when using preprocessor 16943 macros is undesirable. For example: 16944 extern int myprintf (FILE *f, const char *format, ...); 16945 extern inline __attribute__ ((__gnu_inline__)) int 16946 myprintf (FILE *f, const char *format, ...) 16947 { 16948 int r = fprintf (f, "myprintf: "); 16949 if (r < 0) 16950 return r; 16951 int s = fprintf (f, format, __builtin_va_arg_pack ()); 16952 if (s < 0) 16953 return s; 16954 return r + s; 16955 } 16956 16957 -- Built-in Function: __builtin_va_arg_pack_len () 16958 This built-in function returns the number of anonymous arguments of 16959 an inline function. It can be used only in inline functions which 16960 will be always inlined, never compiled as a separate function, such 16961 as those using `__attribute__ ((__always_inline__))' or 16962 `__attribute__ ((__gnu_inline__))' extern inline functions. For 16963 example following will do link or runtime checking of open 16964 arguments for optimized code: 16965 #ifdef __OPTIMIZE__ 16966 extern inline __attribute__((__gnu_inline__)) int 16967 myopen (const char *path, int oflag, ...) 16968 { 16969 if (__builtin_va_arg_pack_len () > 1) 16970 warn_open_too_many_arguments (); 16971 16972 if (__builtin_constant_p (oflag)) 16973 { 16974 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 16975 { 16976 warn_open_missing_mode (); 16977 return __open_2 (path, oflag); 16978 } 16979 return open (path, oflag, __builtin_va_arg_pack ()); 16980 } 16981 16982 if (__builtin_va_arg_pack_len () < 1) 16983 return __open_2 (path, oflag); 16984 16985 return open (path, oflag, __builtin_va_arg_pack ()); 16986 } 16987 #endif 16988 16989 16990 File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 16991 16992 5.6 Referring to a Type with `typeof' 16993 ===================================== 16994 16995 Another way to refer to the type of an expression is with `typeof'. 16996 The syntax of using of this keyword looks like `sizeof', but the 16997 construct acts semantically like a type name defined with `typedef'. 16998 16999 There are two ways of writing the argument to `typeof': with an 17000 expression or with a type. Here is an example with an expression: 17001 17002 typeof (x[0](1)) 17003 17004 This assumes that `x' is an array of pointers to functions; the type 17005 described is that of the values of the functions. 17006 17007 Here is an example with a typename as the argument: 17008 17009 typeof (int *) 17010 17011 Here the type described is that of pointers to `int'. 17012 17013 If you are writing a header file that must work when included in ISO C 17014 programs, write `__typeof__' instead of `typeof'. *Note Alternate 17015 Keywords::. 17016 17017 A `typeof'-construct can be used anywhere a typedef name could be 17018 used. For example, you can use it in a declaration, in a cast, or 17019 inside of `sizeof' or `typeof'. 17020 17021 `typeof' is often useful in conjunction with the 17022 statements-within-expressions feature. Here is how the two together can 17023 be used to define a safe "maximum" macro that operates on any 17024 arithmetic type and evaluates each of its arguments exactly once: 17025 17026 #define max(a,b) \ 17027 ({ typeof (a) _a = (a); \ 17028 typeof (b) _b = (b); \ 17029 _a > _b ? _a : _b; }) 17030 17031 The reason for using names that start with underscores for the local 17032 variables is to avoid conflicts with variable names that occur within 17033 the expressions that are substituted for `a' and `b'. Eventually we 17034 hope to design a new form of declaration syntax that allows you to 17035 declare variables whose scopes start only after their initializers; 17036 this will be a more reliable way to prevent such conflicts. 17037 17038 Some more examples of the use of `typeof': 17039 17040 * This declares `y' with the type of what `x' points to. 17041 17042 typeof (*x) y; 17043 17044 * This declares `y' as an array of such values. 17045 17046 typeof (*x) y[4]; 17047 17048 * This declares `y' as an array of pointers to characters: 17049 17050 typeof (typeof (char *)[4]) y; 17051 17052 It is equivalent to the following traditional C declaration: 17053 17054 char *y[4]; 17055 17056 To see the meaning of the declaration using `typeof', and why it 17057 might be a useful way to write, rewrite it with these macros: 17058 17059 #define pointer(T) typeof(T *) 17060 #define array(T, N) typeof(T [N]) 17061 17062 Now the declaration can be rewritten this way: 17063 17064 array (pointer (char), 4) y; 17065 17066 Thus, `array (pointer (char), 4)' is the type of arrays of 4 17067 pointers to `char'. 17068 17069 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 17070 limited extension which permitted one to write 17071 17072 typedef T = EXPR; 17073 17074 with the effect of declaring T to have the type of the expression EXPR. 17075 This extension does not work with GCC 3 (versions between 3.0 and 3.2 17076 will crash; 3.2.1 and later give an error). Code which relies on it 17077 should be rewritten to use `typeof': 17078 17079 typedef typeof(EXPR) T; 17080 17081 This will work with all versions of GCC. 17082 17083 17084 File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Typeof, Up: C Extensions 17085 17086 5.7 Conditionals with Omitted Operands 17087 ====================================== 17088 17089 The middle operand in a conditional expression may be omitted. Then if 17090 the first operand is nonzero, its value is the value of the conditional 17091 expression. 17092 17093 Therefore, the expression 17094 17095 x ? : y 17096 17097 has the value of `x' if that is nonzero; otherwise, the value of `y'. 17098 17099 This example is perfectly equivalent to 17100 17101 x ? x : y 17102 17103 In this simple case, the ability to omit the middle operand is not 17104 especially useful. When it becomes useful is when the first operand 17105 does, or may (if it is a macro argument), contain a side effect. Then 17106 repeating the operand in the middle would perform the side effect 17107 twice. Omitting the middle operand uses the value already computed 17108 without the undesirable effects of recomputing it. 17109 17110 17111 File: gcc.info, Node: Long Long, Next: Complex, Prev: Conditionals, Up: C Extensions 17112 17113 5.8 Double-Word Integers 17114 ======================== 17115 17116 ISO C99 supports data types for integers that are at least 64 bits wide, 17117 and as an extension GCC supports them in C89 mode and in C++. Simply 17118 write `long long int' for a signed integer, or `unsigned long long int' 17119 for an unsigned integer. To make an integer constant of type `long 17120 long int', add the suffix `LL' to the integer. To make an integer 17121 constant of type `unsigned long long int', add the suffix `ULL' to the 17122 integer. 17123 17124 You can use these types in arithmetic like any other integer types. 17125 Addition, subtraction, and bitwise boolean operations on these types 17126 are open-coded on all types of machines. Multiplication is open-coded 17127 if the machine supports fullword-to-doubleword a widening multiply 17128 instruction. Division and shifts are open-coded only on machines that 17129 provide special support. The operations that are not open-coded use 17130 special library routines that come with GCC. 17131 17132 There may be pitfalls when you use `long long' types for function 17133 arguments, unless you declare function prototypes. If a function 17134 expects type `int' for its argument, and you pass a value of type `long 17135 long int', confusion will result because the caller and the subroutine 17136 will disagree about the number of bytes for the argument. Likewise, if 17137 the function expects `long long int' and you pass `int'. The best way 17138 to avoid such problems is to use prototypes. 17139 17140 17141 File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions 17142 17143 5.9 Complex Numbers 17144 =================== 17145 17146 ISO C99 supports complex floating data types, and as an extension GCC 17147 supports them in C89 mode and in C++, and supports complex integer data 17148 types which are not part of ISO C99. You can declare complex types 17149 using the keyword `_Complex'. As an extension, the older GNU keyword 17150 `__complex__' is also supported. 17151 17152 For example, `_Complex double x;' declares `x' as a variable whose 17153 real part and imaginary part are both of type `double'. `_Complex 17154 short int y;' declares `y' to have real and imaginary parts of type 17155 `short int'; this is not likely to be useful, but it shows that the set 17156 of complex types is complete. 17157 17158 To write a constant with a complex data type, use the suffix `i' or 17159 `j' (either one; they are equivalent). For example, `2.5fi' has type 17160 `_Complex float' and `3i' has type `_Complex int'. Such a constant 17161 always has a pure imaginary value, but you can form any complex value 17162 you like by adding one to a real constant. This is a GNU extension; if 17163 you have an ISO C99 conforming C library (such as GNU libc), and want 17164 to construct complex constants of floating type, you should include 17165 `<complex.h>' and use the macros `I' or `_Complex_I' instead. 17166 17167 To extract the real part of a complex-valued expression EXP, write 17168 `__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 17169 part. This is a GNU extension; for values of floating type, you should 17170 use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 17171 `cimag' and `cimagl', declared in `<complex.h>' and also provided as 17172 built-in functions by GCC. 17173 17174 The operator `~' performs complex conjugation when used on a value 17175 with a complex type. This is a GNU extension; for values of floating 17176 type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 17177 declared in `<complex.h>' and also provided as built-in functions by 17178 GCC. 17179 17180 GCC can allocate complex automatic variables in a noncontiguous 17181 fashion; it's even possible for the real part to be in a register while 17182 the imaginary part is on the stack (or vice-versa). Only the DWARF2 17183 debug info format can represent this, so use of DWARF2 is recommended. 17184 If you are using the stabs debug info format, GCC describes a 17185 noncontiguous complex variable as if it were two separate variables of 17186 noncomplex type. If the variable's actual name is `foo', the two 17187 fictitious variables are named `foo$real' and `foo$imag'. You can 17188 examine and set these two fictitious variables with your debugger. 17189 17190 17191 File: gcc.info, Node: Floating Types, Next: Decimal Float, Prev: Complex, Up: C Extensions 17192 17193 5.10 Additional Floating Types 17194 ============================== 17195 17196 As an extension, the GNU C compiler supports additional floating types, 17197 `__float80' and `__float128' to support 80bit (`XFmode') and 128 bit 17198 (`TFmode') floating types. Support for additional types includes the 17199 arithmetic operators: add, subtract, multiply, divide; unary arithmetic 17200 operators; relational operators; equality operators; and conversions to 17201 and from integer and other floating types. Use a suffix `w' or `W' in 17202 a literal constant of type `__float80' and `q' or `Q' for `_float128'. 17203 You can declare complex types using the corresponding internal complex 17204 type, `XCmode' for `__float80' type and `TCmode' for `__float128' type: 17205 17206 typedef _Complex float __attribute__((mode(TC))) _Complex128; 17207 typedef _Complex float __attribute__((mode(XC))) _Complex80; 17208 17209 Not all targets support additional floating point types. `__float80' 17210 is supported on i386, x86_64 and ia64 targets and target `__float128' 17211 is supported on x86_64 and ia64 targets. 17212 17213 17214 File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Floating Types, Up: C Extensions 17215 17216 5.11 Decimal Floating Types 17217 =========================== 17218 17219 As an extension, the GNU C compiler supports decimal floating types as 17220 defined in the N1312 draft of ISO/IEC WDTR24732. Support for decimal 17221 floating types in GCC will evolve as the draft technical report changes. 17222 Calling conventions for any target might also change. Not all targets 17223 support decimal floating types. 17224 17225 The decimal floating types are `_Decimal32', `_Decimal64', and 17226 `_Decimal128'. They use a radix of ten, unlike the floating types 17227 `float', `double', and `long double' whose radix is not specified by 17228 the C standard but is usually two. 17229 17230 Support for decimal floating types includes the arithmetic operators 17231 add, subtract, multiply, divide; unary arithmetic operators; relational 17232 operators; equality operators; and conversions to and from integer and 17233 other floating types. Use a suffix `df' or `DF' in a literal constant 17234 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 17235 for `_Decimal128'. 17236 17237 GCC support of decimal float as specified by the draft technical report 17238 is incomplete: 17239 17240 * Pragma `FLOAT_CONST_DECIMAL64' is not supported, nor is the `d' 17241 suffix for literal constants of type `double'. 17242 17243 * When the value of a decimal floating type cannot be represented in 17244 the integer type to which it is being converted, the result is 17245 undefined rather than the result value specified by the draft 17246 technical report. 17247 17248 * GCC does not provide the C library functionality associated with 17249 `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which 17250 must come from a separate C library implementation. Because of 17251 this the GNU C compiler does not define macro `__STDC_DEC_FP__' to 17252 indicate that the implementation conforms to the technical report. 17253 17254 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 17255 the DWARF2 debug information format. 17256 17257 17258 File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 17259 17260 5.12 Hex Floats 17261 =============== 17262 17263 ISO C99 supports floating-point numbers written not only in the usual 17264 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 17265 written in hexadecimal format. As a GNU extension, GCC supports this 17266 in C89 mode (except in some cases when strictly conforming) and in C++. 17267 In that format the `0x' hex introducer and the `p' or `P' exponent 17268 field are mandatory. The exponent is a decimal number that indicates 17269 the power of 2 by which the significant part will be multiplied. Thus 17270 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 17271 is the same as `1.55e1'. 17272 17273 Unlike for floating-point numbers in the decimal notation the exponent 17274 is always required in the hexadecimal notation. Otherwise the compiler 17275 would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 17276 could mean `1.0f' or `1.9375' since `f' is also the extension for 17277 floating-point constants of type `float'. 17278 17279 17280 File: gcc.info, Node: Fixed-Point, Next: Zero Length, Prev: Hex Floats, Up: C Extensions 17281 17282 5.13 Fixed-Point Types 17283 ====================== 17284 17285 As an extension, the GNU C compiler supports fixed-point types as 17286 defined in the N1169 draft of ISO/IEC DTR 18037. Support for 17287 fixed-point types in GCC will evolve as the draft technical report 17288 changes. Calling conventions for any target might also change. Not 17289 all targets support fixed-point types. 17290 17291 The fixed-point types are `short _Fract', `_Fract', `long _Fract', 17292 `long long _Fract', `unsigned short _Fract', `unsigned _Fract', 17293 `unsigned long _Fract', `unsigned long long _Fract', `_Sat short 17294 _Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract', 17295 `_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned 17296 long _Fract', `_Sat unsigned long long _Fract', `short _Accum', 17297 `_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum', 17298 `unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum', 17299 `_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long 17300 _Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat 17301 unsigned long _Accum', `_Sat unsigned long long _Accum'. 17302 17303 Fixed-point data values contain fractional and optional integral parts. 17304 The format of fixed-point data varies and depends on the target machine. 17305 17306 Support for fixed-point types includes: 17307 * prefix and postfix increment and decrement operators (`++', `--') 17308 17309 * unary arithmetic operators (`+', `-', `!') 17310 17311 * binary arithmetic operators (`+', `-', `*', `/') 17312 17313 * binary shift operators (`<<', `>>') 17314 17315 * relational operators (`<', `<=', `>=', `>') 17316 17317 * equality operators (`==', `!=') 17318 17319 * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=') 17320 17321 * conversions to and from integer, floating-point, or fixed-point 17322 types 17323 17324 Use a suffix in a fixed-point literal constant: 17325 * `hr' or `HR' for `short _Fract' and `_Sat short _Fract' 17326 17327 * `r' or `R' for `_Fract' and `_Sat _Fract' 17328 17329 * `lr' or `LR' for `long _Fract' and `_Sat long _Fract' 17330 17331 * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract' 17332 17333 * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned 17334 short _Fract' 17335 17336 * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract' 17337 17338 * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long 17339 _Fract' 17340 17341 * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat 17342 unsigned long long _Fract' 17343 17344 * `hk' or `HK' for `short _Accum' and `_Sat short _Accum' 17345 17346 * `k' or `K' for `_Accum' and `_Sat _Accum' 17347 17348 * `lk' or `LK' for `long _Accum' and `_Sat long _Accum' 17349 17350 * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum' 17351 17352 * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned 17353 short _Accum' 17354 17355 * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum' 17356 17357 * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long 17358 _Accum' 17359 17360 * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat 17361 unsigned long long _Accum' 17362 17363 GCC support of fixed-point types as specified by the draft technical 17364 report is incomplete: 17365 17366 * Pragmas to control overflow and rounding behaviors are not 17367 implemented. 17368 17369 Fixed-point types are supported by the DWARF2 debug information format. 17370 17371 17372 File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Fixed-Point, Up: C Extensions 17373 17374 5.14 Arrays of Length Zero 17375 ========================== 17376 17377 Zero-length arrays are allowed in GNU C. They are very useful as the 17378 last element of a structure which is really a header for a 17379 variable-length object: 17380 17381 struct line { 17382 int length; 17383 char contents[0]; 17384 }; 17385 17386 struct line *thisline = (struct line *) 17387 malloc (sizeof (struct line) + this_length); 17388 thisline->length = this_length; 17389 17390 In ISO C90, you would have to give `contents' a length of 1, which 17391 means either you waste space or complicate the argument to `malloc'. 17392 17393 In ISO C99, you would use a "flexible array member", which is slightly 17394 different in syntax and semantics: 17395 17396 * Flexible array members are written as `contents[]' without the `0'. 17397 17398 * Flexible array members have incomplete type, and so the `sizeof' 17399 operator may not be applied. As a quirk of the original 17400 implementation of zero-length arrays, `sizeof' evaluates to zero. 17401 17402 * Flexible array members may only appear as the last member of a 17403 `struct' that is otherwise non-empty. 17404 17405 * A structure containing a flexible array member, or a union 17406 containing such a structure (possibly recursively), may not be a 17407 member of a structure or an element of an array. (However, these 17408 uses are permitted by GCC as extensions.) 17409 17410 GCC versions before 3.0 allowed zero-length arrays to be statically 17411 initialized, as if they were flexible arrays. In addition to those 17412 cases that were useful, it also allowed initializations in situations 17413 that would corrupt later data. Non-empty initialization of zero-length 17414 arrays is now treated like any case where there are more initializer 17415 elements than the array holds, in that a suitable warning about "excess 17416 elements in array" is given, and the excess elements (all of them, in 17417 this case) are ignored. 17418 17419 Instead GCC allows static initialization of flexible array members. 17420 This is equivalent to defining a new structure containing the original 17421 structure followed by an array of sufficient size to contain the data. 17422 I.e. in the following, `f1' is constructed as if it were declared like 17423 `f2'. 17424 17425 struct f1 { 17426 int x; int y[]; 17427 } f1 = { 1, { 2, 3, 4 } }; 17428 17429 struct f2 { 17430 struct f1 f1; int data[3]; 17431 } f2 = { { 1 }, { 2, 3, 4 } }; 17432 17433 The convenience of this extension is that `f1' has the desired type, 17434 eliminating the need to consistently refer to `f2.f1'. 17435 17436 This has symmetry with normal static arrays, in that an array of 17437 unknown size is also written with `[]'. 17438 17439 Of course, this extension only makes sense if the extra data comes at 17440 the end of a top-level object, as otherwise we would be overwriting 17441 data at subsequent offsets. To avoid undue complication and confusion 17442 with initialization of deeply nested arrays, we simply disallow any 17443 non-empty initialization except when the structure is the top-level 17444 object. For example: 17445 17446 struct foo { int x; int y[]; }; 17447 struct bar { struct foo z; }; 17448 17449 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 17450 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 17451 struct bar c = { { 1, { } } }; // Valid. 17452 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 17453 17454 17455 File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions 17456 17457 5.15 Structures With No Members 17458 =============================== 17459 17460 GCC permits a C structure to have no members: 17461 17462 struct empty { 17463 }; 17464 17465 The structure will have size zero. In C++, empty structures are part 17466 of the language. G++ treats empty structures as if they had a single 17467 member of type `char'. 17468 17469 17470 File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions 17471 17472 5.16 Arrays of Variable Length 17473 ============================== 17474 17475 Variable-length automatic arrays are allowed in ISO C99, and as an 17476 extension GCC accepts them in C89 mode and in C++. (However, GCC's 17477 implementation of variable-length arrays does not yet conform in detail 17478 to the ISO C99 standard.) These arrays are declared like any other 17479 automatic arrays, but with a length that is not a constant expression. 17480 The storage is allocated at the point of declaration and deallocated 17481 when the brace-level is exited. For example: 17482 17483 FILE * 17484 concat_fopen (char *s1, char *s2, char *mode) 17485 { 17486 char str[strlen (s1) + strlen (s2) + 1]; 17487 strcpy (str, s1); 17488 strcat (str, s2); 17489 return fopen (str, mode); 17490 } 17491 17492 Jumping or breaking out of the scope of the array name deallocates the 17493 storage. Jumping into the scope is not allowed; you get an error 17494 message for it. 17495 17496 You can use the function `alloca' to get an effect much like 17497 variable-length arrays. The function `alloca' is available in many 17498 other C implementations (but not in all). On the other hand, 17499 variable-length arrays are more elegant. 17500 17501 There are other differences between these two methods. Space allocated 17502 with `alloca' exists until the containing _function_ returns. The 17503 space for a variable-length array is deallocated as soon as the array 17504 name's scope ends. (If you use both variable-length arrays and 17505 `alloca' in the same function, deallocation of a variable-length array 17506 will also deallocate anything more recently allocated with `alloca'.) 17507 17508 You can also use variable-length arrays as arguments to functions: 17509 17510 struct entry 17511 tester (int len, char data[len][len]) 17512 { 17513 /* ... */ 17514 } 17515 17516 The length of an array is computed once when the storage is allocated 17517 and is remembered for the scope of the array in case you access it with 17518 `sizeof'. 17519 17520 If you want to pass the array first and the length afterward, you can 17521 use a forward declaration in the parameter list--another GNU extension. 17522 17523 struct entry 17524 tester (int len; char data[len][len], int len) 17525 { 17526 /* ... */ 17527 } 17528 17529 The `int len' before the semicolon is a "parameter forward 17530 declaration", and it serves the purpose of making the name `len' known 17531 when the declaration of `data' is parsed. 17532 17533 You can write any number of such parameter forward declarations in the 17534 parameter list. They can be separated by commas or semicolons, but the 17535 last one must end with a semicolon, which is followed by the "real" 17536 parameter declarations. Each forward declaration must match a "real" 17537 declaration in parameter name and data type. ISO C99 does not support 17538 parameter forward declarations. 17539 17540 17541 File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions 17542 17543 5.17 Macros with a Variable Number of Arguments. 17544 ================================================ 17545 17546 In the ISO C standard of 1999, a macro can be declared to accept a 17547 variable number of arguments much as a function can. The syntax for 17548 defining the macro is similar to that of a function. Here is an 17549 example: 17550 17551 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 17552 17553 Here `...' is a "variable argument". In the invocation of such a 17554 macro, it represents the zero or more tokens until the closing 17555 parenthesis that ends the invocation, including any commas. This set of 17556 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 17557 it appears. See the CPP manual for more information. 17558 17559 GCC has long supported variadic macros, and used a different syntax 17560 that allowed you to give a name to the variable arguments just like any 17561 other argument. Here is an example: 17562 17563 #define debug(format, args...) fprintf (stderr, format, args) 17564 17565 This is in all ways equivalent to the ISO C example above, but arguably 17566 more readable and descriptive. 17567 17568 GNU CPP has two further variadic macro extensions, and permits them to 17569 be used with either of the above forms of macro definition. 17570 17571 In standard C, you are not allowed to leave the variable argument out 17572 entirely; but you are allowed to pass an empty argument. For example, 17573 this invocation is invalid in ISO C, because there is no comma after 17574 the string: 17575 17576 debug ("A message") 17577 17578 GNU CPP permits you to completely omit the variable arguments in this 17579 way. In the above examples, the compiler would complain, though since 17580 the expansion of the macro still has the extra comma after the format 17581 string. 17582 17583 To help solve this problem, CPP behaves specially for variable 17584 arguments used with the token paste operator, `##'. If instead you 17585 write 17586 17587 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 17588 17589 and if the variable arguments are omitted or empty, the `##' operator 17590 causes the preprocessor to remove the comma before it. If you do 17591 provide some variable arguments in your macro invocation, GNU CPP does 17592 not complain about the paste operation and instead places the variable 17593 arguments after the comma. Just like any other pasted macro argument, 17594 these arguments are not macro expanded. 17595 17596 17597 File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 17598 17599 5.18 Slightly Looser Rules for Escaped Newlines 17600 =============================================== 17601 17602 Recently, the preprocessor has relaxed its treatment of escaped 17603 newlines. Previously, the newline had to immediately follow a 17604 backslash. The current implementation allows whitespace in the form of 17605 spaces, horizontal and vertical tabs, and form feeds between the 17606 backslash and the subsequent newline. The preprocessor issues a 17607 warning, but treats it as a valid escaped newline and combines the two 17608 lines to form a single logical line. This works within comments and 17609 tokens, as well as between tokens. Comments are _not_ treated as 17610 whitespace for the purposes of this relaxation, since they have not yet 17611 been replaced with spaces. 17612 17613 17614 File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 17615 17616 5.19 Non-Lvalue Arrays May Have Subscripts 17617 ========================================== 17618 17619 In ISO C99, arrays that are not lvalues still decay to pointers, and 17620 may be subscripted, although they may not be modified or used after the 17621 next sequence point and the unary `&' operator may not be applied to 17622 them. As an extension, GCC allows such arrays to be subscripted in C89 17623 mode, though otherwise they do not decay to pointers outside C99 mode. 17624 For example, this is valid in GNU C though not valid in C89: 17625 17626 struct foo {int a[4];}; 17627 17628 struct foo f(); 17629 17630 bar (int index) 17631 { 17632 return f().a[index]; 17633 } 17634 17635 17636 File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 17637 17638 5.20 Arithmetic on `void'- and Function-Pointers 17639 ================================================ 17640 17641 In GNU C, addition and subtraction operations are supported on pointers 17642 to `void' and on pointers to functions. This is done by treating the 17643 size of a `void' or of a function as 1. 17644 17645 A consequence of this is that `sizeof' is also allowed on `void' and 17646 on function types, and returns 1. 17647 17648 The option `-Wpointer-arith' requests a warning if these extensions 17649 are used. 17650 17651 17652 File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 17653 17654 5.21 Non-Constant Initializers 17655 ============================== 17656 17657 As in standard C++ and ISO C99, the elements of an aggregate 17658 initializer for an automatic variable are not required to be constant 17659 expressions in GNU C. Here is an example of an initializer with 17660 run-time varying elements: 17661 17662 foo (float f, float g) 17663 { 17664 float beat_freqs[2] = { f-g, f+g }; 17665 /* ... */ 17666 } 17667 17668 17669 File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 17670 17671 5.22 Compound Literals 17672 ====================== 17673 17674 ISO C99 supports compound literals. A compound literal looks like a 17675 cast containing an initializer. Its value is an object of the type 17676 specified in the cast, containing the elements specified in the 17677 initializer; it is an lvalue. As an extension, GCC supports compound 17678 literals in C89 mode and in C++. 17679 17680 Usually, the specified type is a structure. Assume that `struct foo' 17681 and `structure' are declared as shown: 17682 17683 struct foo {int a; char b[2];} structure; 17684 17685 Here is an example of constructing a `struct foo' with a compound 17686 literal: 17687 17688 structure = ((struct foo) {x + y, 'a', 0}); 17689 17690 This is equivalent to writing the following: 17691 17692 { 17693 struct foo temp = {x + y, 'a', 0}; 17694 structure = temp; 17695 } 17696 17697 You can also construct an array. If all the elements of the compound 17698 literal are (made up of) simple constant expressions, suitable for use 17699 in initializers of objects of static storage duration, then the compound 17700 literal can be coerced to a pointer to its first element and used in 17701 such an initializer, as shown here: 17702 17703 char **foo = (char *[]) { "x", "y", "z" }; 17704 17705 Compound literals for scalar types and union types are is also 17706 allowed, but then the compound literal is equivalent to a cast. 17707 17708 As a GNU extension, GCC allows initialization of objects with static 17709 storage duration by compound literals (which is not possible in ISO 17710 C99, because the initializer is not a constant). It is handled as if 17711 the object was initialized only with the bracket enclosed list if the 17712 types of the compound literal and the object match. The initializer 17713 list of the compound literal must be constant. If the object being 17714 initialized has array type of unknown size, the size is determined by 17715 compound literal size. 17716 17717 static struct foo x = (struct foo) {1, 'a', 'b'}; 17718 static int y[] = (int []) {1, 2, 3}; 17719 static int z[] = (int [3]) {1}; 17720 17721 The above lines are equivalent to the following: 17722 static struct foo x = {1, 'a', 'b'}; 17723 static int y[] = {1, 2, 3}; 17724 static int z[] = {1, 0, 0}; 17725 17726 17727 File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions 17728 17729 5.23 Designated Initializers 17730 ============================ 17731 17732 Standard C89 requires the elements of an initializer to appear in a 17733 fixed order, the same as the order of the elements in the array or 17734 structure being initialized. 17735 17736 In ISO C99 you can give the elements in any order, specifying the array 17737 indices or structure field names they apply to, and GNU C allows this as 17738 an extension in C89 mode as well. This extension is not implemented in 17739 GNU C++. 17740 17741 To specify an array index, write `[INDEX] =' before the element value. 17742 For example, 17743 17744 int a[6] = { [4] = 29, [2] = 15 }; 17745 17746 is equivalent to 17747 17748 int a[6] = { 0, 0, 15, 0, 29, 0 }; 17749 17750 The index values must be constant expressions, even if the array being 17751 initialized is automatic. 17752 17753 An alternative syntax for this which has been obsolete since GCC 2.5 17754 but GCC still accepts is to write `[INDEX]' before the element value, 17755 with no `='. 17756 17757 To initialize a range of elements to the same value, write `[FIRST ... 17758 LAST] = VALUE'. This is a GNU extension. For example, 17759 17760 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 17761 17762 If the value in it has side-effects, the side-effects will happen only 17763 once, not for each initialized field by the range initializer. 17764 17765 Note that the length of the array is the highest value specified plus 17766 one. 17767 17768 In a structure initializer, specify the name of a field to initialize 17769 with `.FIELDNAME =' before the element value. For example, given the 17770 following structure, 17771 17772 struct point { int x, y; }; 17773 17774 the following initialization 17775 17776 struct point p = { .y = yvalue, .x = xvalue }; 17777 17778 is equivalent to 17779 17780 struct point p = { xvalue, yvalue }; 17781 17782 Another syntax which has the same meaning, obsolete since GCC 2.5, is 17783 `FIELDNAME:', as shown here: 17784 17785 struct point p = { y: yvalue, x: xvalue }; 17786 17787 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 17788 also use a designator (or the obsolete colon syntax) when initializing 17789 a union, to specify which element of the union should be used. For 17790 example, 17791 17792 union foo { int i; double d; }; 17793 17794 union foo f = { .d = 4 }; 17795 17796 will convert 4 to a `double' to store it in the union using the second 17797 element. By contrast, casting 4 to type `union foo' would store it 17798 into the union as the integer `i', since it is an integer. (*Note Cast 17799 to Union::.) 17800 17801 You can combine this technique of naming elements with ordinary C 17802 initialization of successive elements. Each initializer element that 17803 does not have a designator applies to the next consecutive element of 17804 the array or structure. For example, 17805 17806 int a[6] = { [1] = v1, v2, [4] = v4 }; 17807 17808 is equivalent to 17809 17810 int a[6] = { 0, v1, v2, 0, v4, 0 }; 17811 17812 Labeling the elements of an array initializer is especially useful 17813 when the indices are characters or belong to an `enum' type. For 17814 example: 17815 17816 int whitespace[256] 17817 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 17818 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 17819 17820 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 17821 before an `=' to specify a nested subobject to initialize; the list is 17822 taken relative to the subobject corresponding to the closest 17823 surrounding brace pair. For example, with the `struct point' 17824 declaration above: 17825 17826 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 17827 17828 If the same field is initialized multiple times, it will have value from 17829 the last initialization. If any such overridden initialization has 17830 side-effect, it is unspecified whether the side-effect happens or not. 17831 Currently, GCC will discard them and issue a warning. 17832 17833 17834 File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions 17835 17836 5.24 Case Ranges 17837 ================ 17838 17839 You can specify a range of consecutive values in a single `case' label, 17840 like this: 17841 17842 case LOW ... HIGH: 17843 17844 This has the same effect as the proper number of individual `case' 17845 labels, one for each integer value from LOW to HIGH, inclusive. 17846 17847 This feature is especially useful for ranges of ASCII character codes: 17848 17849 case 'A' ... 'Z': 17850 17851 *Be careful:* Write spaces around the `...', for otherwise it may be 17852 parsed wrong when you use it with integer values. For example, write 17853 this: 17854 17855 case 1 ... 5: 17856 17857 rather than this: 17858 17859 case 1...5: 17860 17861 17862 File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions 17863 17864 5.25 Cast to a Union Type 17865 ========================= 17866 17867 A cast to union type is similar to other casts, except that the type 17868 specified is a union type. You can specify the type either with `union 17869 TAG' or with a typedef name. A cast to union is actually a constructor 17870 though, not a cast, and hence does not yield an lvalue like normal 17871 casts. (*Note Compound Literals::.) 17872 17873 The types that may be cast to the union type are those of the members 17874 of the union. Thus, given the following union and variables: 17875 17876 union foo { int i; double d; }; 17877 int x; 17878 double y; 17879 17880 both `x' and `y' can be cast to type `union foo'. 17881 17882 Using the cast as the right-hand side of an assignment to a variable of 17883 union type is equivalent to storing in a member of the union: 17884 17885 union foo u; 17886 /* ... */ 17887 u = (union foo) x == u.i = x 17888 u = (union foo) y == u.d = y 17889 17890 You can also use the union cast as a function argument: 17891 17892 void hack (union foo); 17893 /* ... */ 17894 hack ((union foo) x); 17895 17896 17897 File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions 17898 17899 5.26 Mixed Declarations and Code 17900 ================================ 17901 17902 ISO C99 and ISO C++ allow declarations and code to be freely mixed 17903 within compound statements. As an extension, GCC also allows this in 17904 C89 mode. For example, you could do: 17905 17906 int i; 17907 /* ... */ 17908 i++; 17909 int j = i + 2; 17910 17911 Each identifier is visible from where it is declared until the end of 17912 the enclosing block. 17913 17914 17915 File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 17916 17917 5.27 Declaring Attributes of Functions 17918 ====================================== 17919 17920 In GNU C, you declare certain things about functions called in your 17921 program which help the compiler optimize function calls and check your 17922 code more carefully. 17923 17924 The keyword `__attribute__' allows you to specify special attributes 17925 when making a declaration. This keyword is followed by an attribute 17926 specification inside double parentheses. The following attributes are 17927 currently defined for functions on all targets: `aligned', 17928 `alloc_size', `noreturn', `returns_twice', `noinline', `always_inline', 17929 `flatten', `pure', `const', `nothrow', `sentinel', `format', 17930 `format_arg', `no_instrument_function', `section', `constructor', 17931 `destructor', `used', `unused', `deprecated', `weak', `malloc', 17932 `alias', `warn_unused_result', `nonnull', `gnu_inline', 17933 `externally_visible', `hot', `cold', `artificial', `error' and 17934 `warning'. Several other attributes are defined for functions on 17935 particular target systems. Other attributes, including `section' are 17936 supported for variables declarations (*note Variable Attributes::) and 17937 for types (*note Type Attributes::). 17938 17939 You may also specify attributes with `__' preceding and following each 17940 keyword. This allows you to use them in header files without being 17941 concerned about a possible macro of the same name. For example, you 17942 may use `__noreturn__' instead of `noreturn'. 17943 17944 *Note Attribute Syntax::, for details of the exact syntax for using 17945 attributes. 17946 17947 `alias ("TARGET")' 17948 The `alias' attribute causes the declaration to be emitted as an 17949 alias for another symbol, which must be specified. For instance, 17950 17951 void __f () { /* Do something. */; } 17952 void f () __attribute__ ((weak, alias ("__f"))); 17953 17954 defines `f' to be a weak alias for `__f'. In C++, the mangled 17955 name for the target must be used. It is an error if `__f' is not 17956 defined in the same translation unit. 17957 17958 Not all target machines support this attribute. 17959 17960 `aligned (ALIGNMENT)' 17961 This attribute specifies a minimum alignment for the function, 17962 measured in bytes. 17963 17964 You cannot use this attribute to decrease the alignment of a 17965 function, only to increase it. However, when you explicitly 17966 specify a function alignment this will override the effect of the 17967 `-falign-functions' (*note Optimize Options::) option for this 17968 function. 17969 17970 Note that the effectiveness of `aligned' attributes may be limited 17971 by inherent limitations in your linker. On many systems, the 17972 linker is only able to arrange for functions to be aligned up to a 17973 certain maximum alignment. (For some linkers, the maximum 17974 supported alignment may be very very small.) See your linker 17975 documentation for further information. 17976 17977 The `aligned' attribute can also be used for variables and fields 17978 (*note Variable Attributes::.) 17979 17980 `alloc_size' 17981 The `alloc_size' attribute is used to tell the compiler that the 17982 function return value points to memory, where the size is given by 17983 one or two of the functions parameters. GCC uses this information 17984 to improve the correctness of `__builtin_object_size'. 17985 17986 The function parameter(s) denoting the allocated size are 17987 specified by one or two integer arguments supplied to the 17988 attribute. The allocated size is either the value of the single 17989 function argument specified or the product of the two function 17990 arguments specified. Argument numbering starts at one. 17991 17992 For instance, 17993 17994 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 17995 void my_realloc(void*, size_t) __attribute__((alloc_size(2))) 17996 17997 declares that my_calloc will return memory of the size given by 17998 the product of parameter 1 and 2 and that my_realloc will return 17999 memory of the size given by parameter 2. 18000 18001 `always_inline' 18002 Generally, functions are not inlined unless optimization is 18003 specified. For functions declared inline, this attribute inlines 18004 the function even if no optimization level was specified. 18005 18006 `gnu_inline' 18007 This attribute should be used with a function which is also 18008 declared with the `inline' keyword. It directs GCC to treat the 18009 function as if it were defined in gnu89 mode even when compiling 18010 in C99 or gnu99 mode. 18011 18012 If the function is declared `extern', then this definition of the 18013 function is used only for inlining. In no case is the function 18014 compiled as a standalone function, not even if you take its address 18015 explicitly. Such an address becomes an external reference, as if 18016 you had only declared the function, and had not defined it. This 18017 has almost the effect of a macro. The way to use this is to put a 18018 function definition in a header file with this attribute, and put 18019 another copy of the function, without `extern', in a library file. 18020 The definition in the header file will cause most calls to the 18021 function to be inlined. If any uses of the function remain, they 18022 will refer to the single copy in the library. Note that the two 18023 definitions of the functions need not be precisely the same, 18024 although if they do not have the same effect your program may 18025 behave oddly. 18026 18027 In C, if the function is neither `extern' nor `static', then the 18028 function is compiled as a standalone function, as well as being 18029 inlined where possible. 18030 18031 This is how GCC traditionally handled functions declared `inline'. 18032 Since ISO C99 specifies a different semantics for `inline', this 18033 function attribute is provided as a transition measure and as a 18034 useful feature in its own right. This attribute is available in 18035 GCC 4.1.3 and later. It is available if either of the 18036 preprocessor macros `__GNUC_GNU_INLINE__' or 18037 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 18038 As Fast As a Macro: Inline. 18039 18040 In C++, this attribute does not depend on `extern' in any way, but 18041 it still requires the `inline' keyword to enable its special 18042 behavior. 18043 18044 `artificial' 18045 This attribute is useful for small inline wrappers which if 18046 possible should appear during debugging as a unit, depending on 18047 the debug info format it will either mean marking the function as 18048 artificial or using the caller location for all instructions 18049 within the inlined body. 18050 18051 `flatten' 18052 Generally, inlining into a function is limited. For a function 18053 marked with this attribute, every call inside this function will 18054 be inlined, if possible. Whether the function itself is 18055 considered for inlining depends on its size and the current 18056 inlining parameters. 18057 18058 `error ("MESSAGE")' 18059 If this attribute is used on a function declaration and a call to 18060 such a function is not eliminated through dead code elimination or 18061 other optimizations, an error which will include MESSAGE will be 18062 diagnosed. This is useful for compile time checking, especially 18063 together with `__builtin_constant_p' and inline functions where 18064 checking the inline function arguments is not possible through 18065 `extern char [(condition) ? 1 : -1];' tricks. While it is 18066 possible to leave the function undefined and thus invoke a link 18067 failure, when using this attribute the problem will be diagnosed 18068 earlier and with exact location of the call even in presence of 18069 inline functions or when not emitting debugging information. 18070 18071 `warning ("MESSAGE")' 18072 If this attribute is used on a function declaration and a call to 18073 such a function is not eliminated through dead code elimination or 18074 other optimizations, a warning which will include MESSAGE will be 18075 diagnosed. This is useful for compile time checking, especially 18076 together with `__builtin_constant_p' and inline functions. While 18077 it is possible to define the function with a message in 18078 `.gnu.warning*' section, when using this attribute the problem 18079 will be diagnosed earlier and with exact location of the call even 18080 in presence of inline functions or when not emitting debugging 18081 information. 18082 18083 `cdecl' 18084 On the Intel 386, the `cdecl' attribute causes the compiler to 18085 assume that the calling function will pop off the stack space used 18086 to pass arguments. This is useful to override the effects of the 18087 `-mrtd' switch. 18088 18089 `const' 18090 Many functions do not examine any values except their arguments, 18091 and have no effects except the return value. Basically this is 18092 just slightly more strict class than the `pure' attribute below, 18093 since function is not allowed to read global memory. 18094 18095 Note that a function that has pointer arguments and examines the 18096 data pointed to must _not_ be declared `const'. Likewise, a 18097 function that calls a non-`const' function usually must not be 18098 `const'. It does not make sense for a `const' function to return 18099 `void'. 18100 18101 The attribute `const' is not implemented in GCC versions earlier 18102 than 2.5. An alternative way to declare that a function has no 18103 side effects, which works in the current version and in some older 18104 versions, is as follows: 18105 18106 typedef int intfn (); 18107 18108 extern const intfn square; 18109 18110 This approach does not work in GNU C++ from 2.6.0 on, since the 18111 language specifies that the `const' must be attached to the return 18112 value. 18113 18114 `constructor' 18115 `destructor' 18116 `constructor (PRIORITY)' 18117 `destructor (PRIORITY)' 18118 The `constructor' attribute causes the function to be called 18119 automatically before execution enters `main ()'. Similarly, the 18120 `destructor' attribute causes the function to be called 18121 automatically after `main ()' has completed or `exit ()' has been 18122 called. Functions with these attributes are useful for 18123 initializing data that will be used implicitly during the 18124 execution of the program. 18125 18126 You may provide an optional integer priority to control the order 18127 in which constructor and destructor functions are run. A 18128 constructor with a smaller priority number runs before a 18129 constructor with a larger priority number; the opposite 18130 relationship holds for destructors. So, if you have a constructor 18131 that allocates a resource and a destructor that deallocates the 18132 same resource, both functions typically have the same priority. 18133 The priorities for constructor and destructor functions are the 18134 same as those specified for namespace-scope C++ objects (*note C++ 18135 Attributes::). 18136 18137 These attributes are not currently implemented for Objective-C. 18138 18139 `deprecated' 18140 The `deprecated' attribute results in a warning if the function is 18141 used anywhere in the source file. This is useful when identifying 18142 functions that are expected to be removed in a future version of a 18143 program. The warning also includes the location of the declaration 18144 of the deprecated function, to enable users to easily find further 18145 information about why the function is deprecated, or what they 18146 should do instead. Note that the warnings only occurs for uses: 18147 18148 int old_fn () __attribute__ ((deprecated)); 18149 int old_fn (); 18150 int (*fn_ptr)() = old_fn; 18151 18152 results in a warning on line 3 but not line 2. 18153 18154 The `deprecated' attribute can also be used for variables and 18155 types (*note Variable Attributes::, *note Type Attributes::.) 18156 18157 `dllexport' 18158 On Microsoft Windows targets and Symbian OS targets the 18159 `dllexport' attribute causes the compiler to provide a global 18160 pointer to a pointer in a DLL, so that it can be referenced with 18161 the `dllimport' attribute. On Microsoft Windows targets, the 18162 pointer name is formed by combining `_imp__' and the function or 18163 variable name. 18164 18165 You can use `__declspec(dllexport)' as a synonym for 18166 `__attribute__ ((dllexport))' for compatibility with other 18167 compilers. 18168 18169 On systems that support the `visibility' attribute, this attribute 18170 also implies "default" visibility. It is an error to explicitly 18171 specify any other visibility. 18172 18173 Currently, the `dllexport' attribute is ignored for inlined 18174 functions, unless the `-fkeep-inline-functions' flag has been 18175 used. The attribute is also ignored for undefined symbols. 18176 18177 When applied to C++ classes, the attribute marks defined 18178 non-inlined member functions and static data members as exports. 18179 Static consts initialized in-class are not marked unless they are 18180 also defined out-of-class. 18181 18182 For Microsoft Windows targets there are alternative methods for 18183 including the symbol in the DLL's export table such as using a 18184 `.def' file with an `EXPORTS' section or, with GNU ld, using the 18185 `--export-all' linker flag. 18186 18187 `dllimport' 18188 On Microsoft Windows and Symbian OS targets, the `dllimport' 18189 attribute causes the compiler to reference a function or variable 18190 via a global pointer to a pointer that is set up by the DLL 18191 exporting the symbol. The attribute implies `extern'. On 18192 Microsoft Windows targets, the pointer name is formed by combining 18193 `_imp__' and the function or variable name. 18194 18195 You can use `__declspec(dllimport)' as a synonym for 18196 `__attribute__ ((dllimport))' for compatibility with other 18197 compilers. 18198 18199 On systems that support the `visibility' attribute, this attribute 18200 also implies "default" visibility. It is an error to explicitly 18201 specify any other visibility. 18202 18203 Currently, the attribute is ignored for inlined functions. If the 18204 attribute is applied to a symbol _definition_, an error is 18205 reported. If a symbol previously declared `dllimport' is later 18206 defined, the attribute is ignored in subsequent references, and a 18207 warning is emitted. The attribute is also overridden by a 18208 subsequent declaration as `dllexport'. 18209 18210 When applied to C++ classes, the attribute marks non-inlined 18211 member functions and static data members as imports. However, the 18212 attribute is ignored for virtual methods to allow creation of 18213 vtables using thunks. 18214 18215 On the SH Symbian OS target the `dllimport' attribute also has 18216 another affect--it can cause the vtable and run-time type 18217 information for a class to be exported. This happens when the 18218 class has a dllimport'ed constructor or a non-inline, non-pure 18219 virtual function and, for either of those two conditions, the 18220 class also has a inline constructor or destructor and has a key 18221 function that is defined in the current translation unit. 18222 18223 For Microsoft Windows based targets the use of the `dllimport' 18224 attribute on functions is not necessary, but provides a small 18225 performance benefit by eliminating a thunk in the DLL. The use of 18226 the `dllimport' attribute on imported variables was required on 18227 older versions of the GNU linker, but can now be avoided by 18228 passing the `--enable-auto-import' switch to the GNU linker. As 18229 with functions, using the attribute for a variable eliminates a 18230 thunk in the DLL. 18231 18232 One drawback to using this attribute is that a pointer to a 18233 _variable_ marked as `dllimport' cannot be used as a constant 18234 address. However, a pointer to a _function_ with the `dllimport' 18235 attribute can be used as a constant initializer; in this case, the 18236 address of a stub function in the import lib is referenced. On 18237 Microsoft Windows targets, the attribute can be disabled for 18238 functions by setting the `-mnop-fun-dllimport' flag. 18239 18240 `eightbit_data' 18241 Use this attribute on the H8/300, H8/300H, and H8S to indicate 18242 that the specified variable should be placed into the eight bit 18243 data section. The compiler will generate more efficient code for 18244 certain operations on data in the eight bit data area. Note the 18245 eight bit data area is limited to 256 bytes of data. 18246 18247 You must use GAS and GLD from GNU binutils version 2.7 or later for 18248 this attribute to work correctly. 18249 18250 `exception_handler' 18251 Use this attribute on the Blackfin to indicate that the specified 18252 function is an exception handler. The compiler will generate 18253 function entry and exit sequences suitable for use in an exception 18254 handler when this attribute is present. 18255 18256 `externally_visible' 18257 This attribute, attached to a global variable or function, 18258 nullifies the effect of the `-fwhole-program' command-line option, 18259 so the object remains visible outside the current compilation unit. 18260 18261 `far' 18262 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 18263 use a calling convention that takes care of switching memory banks 18264 when entering and leaving a function. This calling convention is 18265 also the default when using the `-mlong-calls' option. 18266 18267 On 68HC12 the compiler will use the `call' and `rtc' instructions 18268 to call and return from a function. 18269 18270 On 68HC11 the compiler will generate a sequence of instructions to 18271 invoke a board-specific routine to switch the memory bank and call 18272 the real function. The board-specific routine simulates a `call'. 18273 At the end of a function, it will jump to a board-specific routine 18274 instead of using `rts'. The board-specific return routine 18275 simulates the `rtc'. 18276 18277 `fastcall' 18278 On the Intel 386, the `fastcall' attribute causes the compiler to 18279 pass the first argument (if of integral type) in the register ECX 18280 and the second argument (if of integral type) in the register EDX. 18281 Subsequent and other typed arguments are passed on the stack. 18282 The called function will pop the arguments off the stack. If the 18283 number of arguments is variable all arguments are pushed on the 18284 stack. 18285 18286 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 18287 The `format' attribute specifies that a function takes `printf', 18288 `scanf', `strftime' or `strfmon' style arguments which should be 18289 type-checked against a format string. For example, the 18290 declaration: 18291 18292 extern int 18293 my_printf (void *my_object, const char *my_format, ...) 18294 __attribute__ ((format (printf, 2, 3))); 18295 18296 causes the compiler to check the arguments in calls to `my_printf' 18297 for consistency with the `printf' style format string argument 18298 `my_format'. 18299 18300 The parameter ARCHETYPE determines how the format string is 18301 interpreted, and should be `printf', `scanf', `strftime', 18302 `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'. (You can 18303 also use `__printf__', `__scanf__', `__strftime__' or 18304 `__strfmon__'.) On MinGW targets, `ms_printf', `ms_scanf', and 18305 `ms_strftime' are also present. ARCHTYPE values such as `printf' 18306 refer to the formats accepted by the system's C run-time library, 18307 while `gnu_' values always refer to the formats accepted by the 18308 GNU C Library. On Microsoft Windows targets, `ms_' values refer 18309 to the formats accepted by the `msvcrt.dll' library. The 18310 parameter STRING-INDEX specifies which argument is the format 18311 string argument (starting from 1), while FIRST-TO-CHECK is the 18312 number of the first argument to check against the format string. 18313 For functions where the arguments are not available to be checked 18314 (such as `vprintf'), specify the third parameter as zero. In this 18315 case the compiler only checks the format string for consistency. 18316 For `strftime' formats, the third parameter is required to be zero. 18317 Since non-static C++ methods have an implicit `this' argument, the 18318 arguments of such methods should be counted from two, not one, when 18319 giving values for STRING-INDEX and FIRST-TO-CHECK. 18320 18321 In the example above, the format string (`my_format') is the second 18322 argument of the function `my_print', and the arguments to check 18323 start with the third argument, so the correct parameters for the 18324 format attribute are 2 and 3. 18325 18326 The `format' attribute allows you to identify your own functions 18327 which take format strings as arguments, so that GCC can check the 18328 calls to these functions for errors. The compiler always (unless 18329 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 18330 standard library functions `printf', `fprintf', `sprintf', 18331 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 18332 `vsprintf' whenever such warnings are requested (using 18333 `-Wformat'), so there is no need to modify the header file 18334 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 18335 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 18336 strictly conforming C standard modes, the X/Open function 18337 `strfmon' is also checked as are `printf_unlocked' and 18338 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 18339 Dialect Options. 18340 18341 The target may provide additional types of format checks. *Note 18342 Format Checks Specific to Particular Target Machines: Target 18343 Format Checks. 18344 18345 `format_arg (STRING-INDEX)' 18346 The `format_arg' attribute specifies that a function takes a format 18347 string for a `printf', `scanf', `strftime' or `strfmon' style 18348 function and modifies it (for example, to translate it into 18349 another language), so the result can be passed to a `printf', 18350 `scanf', `strftime' or `strfmon' style function (with the 18351 remaining arguments to the format function the same as they would 18352 have been for the unmodified string). For example, the 18353 declaration: 18354 18355 extern char * 18356 my_dgettext (char *my_domain, const char *my_format) 18357 __attribute__ ((format_arg (2))); 18358 18359 causes the compiler to check the arguments in calls to a `printf', 18360 `scanf', `strftime' or `strfmon' type function, whose format 18361 string argument is a call to the `my_dgettext' function, for 18362 consistency with the format string argument `my_format'. If the 18363 `format_arg' attribute had not been specified, all the compiler 18364 could tell in such calls to format functions would be that the 18365 format string argument is not constant; this would generate a 18366 warning when `-Wformat-nonliteral' is used, but the calls could 18367 not be checked without the attribute. 18368 18369 The parameter STRING-INDEX specifies which argument is the format 18370 string argument (starting from one). Since non-static C++ methods 18371 have an implicit `this' argument, the arguments of such methods 18372 should be counted from two. 18373 18374 The `format-arg' attribute allows you to identify your own 18375 functions which modify format strings, so that GCC can check the 18376 calls to `printf', `scanf', `strftime' or `strfmon' type function 18377 whose operands are a call to one of your own function. The 18378 compiler always treats `gettext', `dgettext', and `dcgettext' in 18379 this manner except when strict ISO C support is requested by 18380 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 18381 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 18382 Dialect Options. 18383 18384 `function_vector' 18385 Use this attribute on the H8/300, H8/300H, and H8S to indicate 18386 that the specified function should be called through the function 18387 vector. Calling a function through the function vector will 18388 reduce code size, however; the function vector has a limited size 18389 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 18390 and H8S) and shares space with the interrupt vector. 18391 18392 In SH2A target, this attribute declares a function to be called 18393 using the TBR relative addressing mode. The argument to this 18394 attribute is the entry number of the same function in a vector 18395 table containing all the TBR relative addressable functions. For 18396 the successful jump, register TBR should contain the start address 18397 of this TBR relative vector table. In the startup routine of the 18398 user application, user needs to care of this TBR register 18399 initialization. The TBR relative vector table can have at max 256 18400 function entries. The jumps to these functions will be generated 18401 using a SH2A specific, non delayed branch instruction JSR/N 18402 @(disp8,TBR). You must use GAS and GLD from GNU binutils version 18403 2.7 or later for this attribute to work correctly. 18404 18405 Please refer the example of M16C target, to see the use of this 18406 attribute while declaring a function, 18407 18408 In an application, for a function being called once, this 18409 attribute will save at least 8 bytes of code; and if other 18410 successive calls are being made to the same function, it will save 18411 2 bytes of code per each of these calls. 18412 18413 On M16C/M32C targets, the `function_vector' attribute declares a 18414 special page subroutine call function. Use of this attribute 18415 reduces the code size by 2 bytes for each call generated to the 18416 subroutine. The argument to the attribute is the vector number 18417 entry from the special page vector table which contains the 16 18418 low-order bits of the subroutine's entry address. Each vector 18419 table has special page number (18 to 255) which are used in `jsrs' 18420 instruction. Jump addresses of the routines are generated by 18421 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 18422 M32C targets), to the 2 byte addresses set in the vector table. 18423 Therefore you need to ensure that all the special page vector 18424 routines should get mapped within the address range 0x0F0000 to 18425 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 18426 18427 In the following example 2 bytes will be saved for each call to 18428 function `foo'. 18429 18430 void foo (void) __attribute__((function_vector(0x18))); 18431 void foo (void) 18432 { 18433 } 18434 18435 void bar (void) 18436 { 18437 foo(); 18438 } 18439 18440 If functions are defined in one file and are called in another 18441 file, then be sure to write this declaration in both files. 18442 18443 This attribute is ignored for R8C target. 18444 18445 `interrupt' 18446 Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, and 18447 Xstormy16 ports to indicate that the specified function is an 18448 interrupt handler. The compiler will generate function entry and 18449 exit sequences suitable for use in an interrupt handler when this 18450 attribute is present. 18451 18452 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 18453 and SH processors can be specified via the `interrupt_handler' 18454 attribute. 18455 18456 Note, on the AVR, interrupts will be enabled inside the function. 18457 18458 Note, for the ARM, you can specify the kind of interrupt to be 18459 handled by adding an optional parameter to the interrupt attribute 18460 like this: 18461 18462 void f () __attribute__ ((interrupt ("IRQ"))); 18463 18464 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT 18465 and UNDEF. 18466 18467 On ARMv7-M the interrupt type is ignored, and the attribute means 18468 the function may be called with a word aligned stack pointer. 18469 18470 `interrupt_handler' 18471 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 18472 and SH to indicate that the specified function is an interrupt 18473 handler. The compiler will generate function entry and exit 18474 sequences suitable for use in an interrupt handler when this 18475 attribute is present. 18476 18477 `interrupt_thread' 18478 Use this attribute on fido, a subarchitecture of the m68k, to 18479 indicate that the specified function is an interrupt handler that 18480 is designed to run as a thread. The compiler omits generate 18481 prologue/epilogue sequences and replaces the return instruction 18482 with a `sleep' instruction. This attribute is available only on 18483 fido. 18484 18485 `isr' 18486 Use this attribute on ARM to write Interrupt Service Routines. 18487 This is an alias to the `interrupt' attribute above. 18488 18489 `kspisusp' 18490 When used together with `interrupt_handler', `exception_handler' 18491 or `nmi_handler', code will be generated to load the stack pointer 18492 from the USP register in the function prologue. 18493 18494 `l1_text' 18495 This attribute specifies a function to be placed into L1 18496 Instruction SRAM. The function will be put into a specific section 18497 named `.l1.text'. With `-mfdpic', function calls with a such 18498 function as the callee or caller will use inlined PLT. 18499 18500 `long_call/short_call' 18501 This attribute specifies how a particular function is called on 18502 ARM. Both attributes override the `-mlong-calls' (*note ARM 18503 Options::) command line switch and `#pragma long_calls' settings. 18504 The `long_call' attribute indicates that the function might be far 18505 away from the call site and require a different (more expensive) 18506 calling sequence. The `short_call' attribute always places the 18507 offset to the function from the call site into the `BL' 18508 instruction directly. 18509 18510 `longcall/shortcall' 18511 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 18512 indicates that the function might be far away from the call site 18513 and require a different (more expensive) calling sequence. The 18514 `shortcall' attribute indicates that the function is always close 18515 enough for the shorter calling sequence to be used. These 18516 attributes override both the `-mlongcall' switch and, on the 18517 RS/6000 and PowerPC, the `#pragma longcall' setting. 18518 18519 *Note RS/6000 and PowerPC Options::, for more information on 18520 whether long calls are necessary. 18521 18522 `long_call/near/far' 18523 These attributes specify how a particular function is called on 18524 MIPS. The attributes override the `-mlong-calls' (*note MIPS 18525 Options::) command-line switch. The `long_call' and `far' 18526 attributes are synonyms, and cause the compiler to always call the 18527 function by first loading its address into a register, and then 18528 using the contents of that register. The `near' attribute has the 18529 opposite effect; it specifies that non-PIC calls should be made 18530 using the more efficient `jal' instruction. 18531 18532 `malloc' 18533 The `malloc' attribute is used to tell the compiler that a function 18534 may be treated as if any non-`NULL' pointer it returns cannot 18535 alias any other pointer valid when the function returns. This 18536 will often improve optimization. Standard functions with this 18537 property include `malloc' and `calloc'. `realloc'-like functions 18538 have this property as long as the old pointer is never referred to 18539 (including comparing it to the new pointer) after the function 18540 returns a non-`NULL' value. 18541 18542 `mips16/nomips16' 18543 On MIPS targets, you can use the `mips16' and `nomips16' function 18544 attributes to locally select or turn off MIPS16 code generation. 18545 A function with the `mips16' attribute is emitted as MIPS16 code, 18546 while MIPS16 code generation is disabled for functions with the 18547 `nomips16' attribute. These attributes override the `-mips16' and 18548 `-mno-mips16' options on the command line (*note MIPS Options::). 18549 18550 When compiling files containing mixed MIPS16 and non-MIPS16 code, 18551 the preprocessor symbol `__mips16' reflects the setting on the 18552 command line, not that within individual functions. Mixed MIPS16 18553 and non-MIPS16 code may interact badly with some GCC extensions 18554 such as `__builtin_apply' (*note Constructing Calls::). 18555 18556 `model (MODEL-NAME)' 18557 On the M32R/D, use this attribute to set the addressability of an 18558 object, and of the code generated for a function. The identifier 18559 MODEL-NAME is one of `small', `medium', or `large', representing 18560 each of the code models. 18561 18562 Small model objects live in the lower 16MB of memory (so that their 18563 addresses can be loaded with the `ld24' instruction), and are 18564 callable with the `bl' instruction. 18565 18566 Medium model objects may live anywhere in the 32-bit address space 18567 (the compiler will generate `seth/add3' instructions to load their 18568 addresses), and are callable with the `bl' instruction. 18569 18570 Large model objects may live anywhere in the 32-bit address space 18571 (the compiler will generate `seth/add3' instructions to load their 18572 addresses), and may not be reachable with the `bl' instruction 18573 (the compiler will generate the much slower `seth/add3/jl' 18574 instruction sequence). 18575 18576 On IA-64, use this attribute to set the addressability of an 18577 object. At present, the only supported identifier for MODEL-NAME 18578 is `small', indicating addressability via "small" (22-bit) 18579 addresses (so that their addresses can be loaded with the `addl' 18580 instruction). Caveat: such addressing is by definition not 18581 position independent and hence this attribute must not be used for 18582 objects defined by shared libraries. 18583 18584 `ms_abi/sysv_abi' 18585 On 64-bit x86_64-*-* targets, you can use an ABI attribute to 18586 indicate which calling convention should be used for a function. 18587 The `ms_abi' attribute tells the compiler to use the Microsoft 18588 ABI, while the `sysv_abi' attribute tells the compiler to use the 18589 ABI used on GNU/Linux and other systems. The default is to use 18590 the Microsoft ABI when targeting Windows. On all other systems, 18591 the default is the AMD ABI. 18592 18593 Note, This feature is currently sorried out for Windows targets 18594 trying to 18595 18596 `naked' 18597 Use this attribute on the ARM, AVR, IP2K and SPU ports to indicate 18598 that the specified function does not need prologue/epilogue 18599 sequences generated by the compiler. It is up to the programmer 18600 to provide these sequences. The only statements that can be safely 18601 included in naked functions are `asm' statements that do not have 18602 operands. All other statements, including declarations of local 18603 variables, `if' statements, and so forth, should be avoided. 18604 Naked functions should be used to implement the body of an 18605 assembly function, while allowing the compiler to construct the 18606 requisite function declaration for the assembler. 18607 18608 `near' 18609 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 18610 use the normal calling convention based on `jsr' and `rts'. This 18611 attribute can be used to cancel the effect of the `-mlong-calls' 18612 option. 18613 18614 `nesting' 18615 Use this attribute together with `interrupt_handler', 18616 `exception_handler' or `nmi_handler' to indicate that the function 18617 entry code should enable nested interrupts or exceptions. 18618 18619 `nmi_handler' 18620 Use this attribute on the Blackfin to indicate that the specified 18621 function is an NMI handler. The compiler will generate function 18622 entry and exit sequences suitable for use in an NMI handler when 18623 this attribute is present. 18624 18625 `no_instrument_function' 18626 If `-finstrument-functions' is given, profiling function calls will 18627 be generated at entry and exit of most user-compiled functions. 18628 Functions with this attribute will not be so instrumented. 18629 18630 `noinline' 18631 This function attribute prevents a function from being considered 18632 for inlining. If the function does not have side-effects, there 18633 are optimizations other than inlining that causes function calls 18634 to be optimized away, although the function call is live. To keep 18635 such calls from being optimized away, put 18636 asm (""); 18637 (*note Extended Asm::) in the called function, to serve as a 18638 special side-effect. 18639 18640 `nonnull (ARG-INDEX, ...)' 18641 The `nonnull' attribute specifies that some function parameters 18642 should be non-null pointers. For instance, the declaration: 18643 18644 extern void * 18645 my_memcpy (void *dest, const void *src, size_t len) 18646 __attribute__((nonnull (1, 2))); 18647 18648 causes the compiler to check that, in calls to `my_memcpy', 18649 arguments DEST and SRC are non-null. If the compiler determines 18650 that a null pointer is passed in an argument slot marked as 18651 non-null, and the `-Wnonnull' option is enabled, a warning is 18652 issued. The compiler may also choose to make optimizations based 18653 on the knowledge that certain function arguments will not be null. 18654 18655 If no argument index list is given to the `nonnull' attribute, all 18656 pointer arguments are marked as non-null. To illustrate, the 18657 following declaration is equivalent to the previous example: 18658 18659 extern void * 18660 my_memcpy (void *dest, const void *src, size_t len) 18661 __attribute__((nonnull)); 18662 18663 `noreturn' 18664 A few standard library functions, such as `abort' and `exit', 18665 cannot return. GCC knows this automatically. Some programs define 18666 their own functions that never return. You can declare them 18667 `noreturn' to tell the compiler this fact. For example, 18668 18669 void fatal () __attribute__ ((noreturn)); 18670 18671 void 18672 fatal (/* ... */) 18673 { 18674 /* ... */ /* Print error message. */ /* ... */ 18675 exit (1); 18676 } 18677 18678 The `noreturn' keyword tells the compiler to assume that `fatal' 18679 cannot return. It can then optimize without regard to what would 18680 happen if `fatal' ever did return. This makes slightly better 18681 code. More importantly, it helps avoid spurious warnings of 18682 uninitialized variables. 18683 18684 The `noreturn' keyword does not affect the exceptional path when 18685 that applies: a `noreturn'-marked function may still return to the 18686 caller by throwing an exception or calling `longjmp'. 18687 18688 Do not assume that registers saved by the calling function are 18689 restored before calling the `noreturn' function. 18690 18691 It does not make sense for a `noreturn' function to have a return 18692 type other than `void'. 18693 18694 The attribute `noreturn' is not implemented in GCC versions 18695 earlier than 2.5. An alternative way to declare that a function 18696 does not return, which works in the current version and in some 18697 older versions, is as follows: 18698 18699 typedef void voidfn (); 18700 18701 volatile voidfn fatal; 18702 18703 This approach does not work in GNU C++. 18704 18705 `nothrow' 18706 The `nothrow' attribute is used to inform the compiler that a 18707 function cannot throw an exception. For example, most functions in 18708 the standard C library can be guaranteed not to throw an exception 18709 with the notable exceptions of `qsort' and `bsearch' that take 18710 function pointer arguments. The `nothrow' attribute is not 18711 implemented in GCC versions earlier than 3.3. 18712 18713 `optimize' 18714 The `optimize' attribute is used to specify that a function is to 18715 be compiled with different optimization options than specified on 18716 the command line. Arguments can either be numbers or strings. 18717 Numbers are assumed to be an optimization level. Strings that 18718 begin with `O' are assumed to be an optimization option, while 18719 other options are assumed to be used with a `-f' prefix. You can 18720 also use the `#pragma GCC optimize' pragma to set the optimization 18721 options that affect more than one function. *Note Function 18722 Specific Option Pragmas::, for details about the `#pragma GCC 18723 optimize' pragma. 18724 18725 This can be used for instance to have frequently executed functions 18726 compiled with more aggressive optimization options that produce 18727 faster and larger code, while other functions can be called with 18728 less aggressive options. 18729 18730 `pure' 18731 Many functions have no effects except the return value and their 18732 return value depends only on the parameters and/or global 18733 variables. Such a function can be subject to common subexpression 18734 elimination and loop optimization just as an arithmetic operator 18735 would be. These functions should be declared with the attribute 18736 `pure'. For example, 18737 18738 int square (int) __attribute__ ((pure)); 18739 18740 says that the hypothetical function `square' is safe to call fewer 18741 times than the program says. 18742 18743 Some of common examples of pure functions are `strlen' or `memcmp'. 18744 Interesting non-pure functions are functions with infinite loops 18745 or those depending on volatile memory or other system resource, 18746 that may change between two consecutive calls (such as `feof' in a 18747 multithreading environment). 18748 18749 The attribute `pure' is not implemented in GCC versions earlier 18750 than 2.96. 18751 18752 `hot' 18753 The `hot' attribute is used to inform the compiler that a function 18754 is a hot spot of the compiled program. The function is optimized 18755 more aggressively and on many target it is placed into special 18756 subsection of the text section so all hot functions appears close 18757 together improving locality. 18758 18759 When profile feedback is available, via `-fprofile-use', hot 18760 functions are automatically detected and this attribute is ignored. 18761 18762 The `hot' attribute is not implemented in GCC versions earlier 18763 than 4.3. 18764 18765 `cold' 18766 The `cold' attribute is used to inform the compiler that a 18767 function is unlikely executed. The function is optimized for size 18768 rather than speed and on many targets it is placed into special 18769 subsection of the text section so all cold functions appears close 18770 together improving code locality of non-cold parts of program. 18771 The paths leading to call of cold functions within code are marked 18772 as unlikely by the branch prediction mechanism. It is thus useful 18773 to mark functions used to handle unlikely conditions, such as 18774 `perror', as cold to improve optimization of hot functions that do 18775 call marked functions in rare occasions. 18776 18777 When profile feedback is available, via `-fprofile-use', hot 18778 functions are automatically detected and this attribute is ignored. 18779 18780 The `cold' attribute is not implemented in GCC versions earlier 18781 than 4.3. 18782 18783 `regparm (NUMBER)' 18784 On the Intel 386, the `regparm' attribute causes the compiler to 18785 pass arguments number one to NUMBER if they are of integral type 18786 in registers EAX, EDX, and ECX instead of on the stack. Functions 18787 that take a variable number of arguments will continue to be 18788 passed all of their arguments on the stack. 18789 18790 Beware that on some ELF systems this attribute is unsuitable for 18791 global functions in shared libraries with lazy binding (which is 18792 the default). Lazy binding will send the first call via resolving 18793 code in the loader, which might assume EAX, EDX and ECX can be 18794 clobbered, as per the standard calling conventions. Solaris 8 is 18795 affected by this. GNU systems with GLIBC 2.1 or higher, and 18796 FreeBSD, are believed to be safe since the loaders there save EAX, 18797 EDX and ECX. (Lazy binding can be disabled with the linker or the 18798 loader if desired, to avoid the problem.) 18799 18800 `sseregparm' 18801 On the Intel 386 with SSE support, the `sseregparm' attribute 18802 causes the compiler to pass up to 3 floating point arguments in 18803 SSE registers instead of on the stack. Functions that take a 18804 variable number of arguments will continue to pass all of their 18805 floating point arguments on the stack. 18806 18807 `force_align_arg_pointer' 18808 On the Intel x86, the `force_align_arg_pointer' attribute may be 18809 applied to individual function definitions, generating an alternate 18810 prologue and epilogue that realigns the runtime stack if necessary. 18811 This supports mixing legacy codes that run with a 4-byte aligned 18812 stack with modern codes that keep a 16-byte stack for SSE 18813 compatibility. 18814 18815 `resbank' 18816 On the SH2A target, this attribute enables the high-speed register 18817 saving and restoration using a register bank for 18818 `interrupt_handler' routines. Saving to the bank is performed 18819 automatically after the CPU accepts an interrupt that uses a 18820 register bank. 18821 18822 The nineteen 32-bit registers comprising general register R0 to 18823 R14, control register GBR, and system registers MACH, MACL, and PR 18824 and the vector table address offset are saved into a register 18825 bank. Register banks are stacked in first-in last-out (FILO) 18826 sequence. Restoration from the bank is executed by issuing a 18827 RESBANK instruction. 18828 18829 `returns_twice' 18830 The `returns_twice' attribute tells the compiler that a function 18831 may return more than one time. The compiler will ensure that all 18832 registers are dead before calling such a function and will emit a 18833 warning about the variables that may be clobbered after the second 18834 return from the function. Examples of such functions are `setjmp' 18835 and `vfork'. The `longjmp'-like counterpart of such function, if 18836 any, might need to be marked with the `noreturn' attribute. 18837 18838 `saveall' 18839 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 18840 indicate that all registers except the stack pointer should be 18841 saved in the prologue regardless of whether they are used or not. 18842 18843 `section ("SECTION-NAME")' 18844 Normally, the compiler places the code it generates in the `text' 18845 section. Sometimes, however, you need additional sections, or you 18846 need certain particular functions to appear in special sections. 18847 The `section' attribute specifies that a function lives in a 18848 particular section. For example, the declaration: 18849 18850 extern void foobar (void) __attribute__ ((section ("bar"))); 18851 18852 puts the function `foobar' in the `bar' section. 18853 18854 Some file formats do not support arbitrary sections so the 18855 `section' attribute is not available on all platforms. If you 18856 need to map the entire contents of a module to a particular 18857 section, consider using the facilities of the linker instead. 18858 18859 `sentinel' 18860 This function attribute ensures that a parameter in a function 18861 call is an explicit `NULL'. The attribute is only valid on 18862 variadic functions. By default, the sentinel is located at 18863 position zero, the last parameter of the function call. If an 18864 optional integer position argument P is supplied to the attribute, 18865 the sentinel must be located at position P counting backwards from 18866 the end of the argument list. 18867 18868 __attribute__ ((sentinel)) 18869 is equivalent to 18870 __attribute__ ((sentinel(0))) 18871 18872 The attribute is automatically set with a position of 0 for the 18873 built-in functions `execl' and `execlp'. The built-in function 18874 `execle' has the attribute set with a position of 1. 18875 18876 A valid `NULL' in this context is defined as zero with any pointer 18877 type. If your system defines the `NULL' macro with an integer type 18878 then you need to add an explicit cast. GCC replaces `stddef.h' 18879 with a copy that redefines NULL appropriately. 18880 18881 The warnings for missing or incorrect sentinels are enabled with 18882 `-Wformat'. 18883 18884 `short_call' 18885 See long_call/short_call. 18886 18887 `shortcall' 18888 See longcall/shortcall. 18889 18890 `signal' 18891 Use this attribute on the AVR to indicate that the specified 18892 function is a signal handler. The compiler will generate function 18893 entry and exit sequences suitable for use in a signal handler when 18894 this attribute is present. Interrupts will be disabled inside the 18895 function. 18896 18897 `sp_switch' 18898 Use this attribute on the SH to indicate an `interrupt_handler' 18899 function should switch to an alternate stack. It expects a string 18900 argument that names a global variable holding the address of the 18901 alternate stack. 18902 18903 void *alt_stack; 18904 void f () __attribute__ ((interrupt_handler, 18905 sp_switch ("alt_stack"))); 18906 18907 `stdcall' 18908 On the Intel 386, the `stdcall' attribute causes the compiler to 18909 assume that the called function will pop off the stack space used 18910 to pass arguments, unless it takes a variable number of arguments. 18911 18912 `syscall_linkage' 18913 This attribute is used to modify the IA64 calling convention by 18914 marking all input registers as live at all function exits. This 18915 makes it possible to restart a system call after an interrupt 18916 without having to save/restore the input registers. This also 18917 prevents kernel data from leaking into application code. 18918 18919 `target' 18920 The `target' attribute is used to specify that a function is to be 18921 compiled with different target options than specified on the 18922 command line. This can be used for instance to have functions 18923 compiled with a different ISA (instruction set architecture) than 18924 the default. You can also use the `#pragma GCC target' pragma to 18925 set more than one function to be compiled with specific target 18926 options. *Note Function Specific Option Pragmas::, for details 18927 about the `#pragma GCC target' pragma. 18928 18929 For instance on a 386, you could compile one function with 18930 `target("sse4.1,arch=core2")' and another with 18931 `target("sse4a,arch=amdfam10")' that would be equivalent to 18932 compiling the first function with `-msse4.1' and `-march=core2' 18933 options, and the second function with `-msse4a' and 18934 `-march=amdfam10' options. It is up to the user to make sure that 18935 a function is only invoked on a machine that supports the 18936 particular ISA it was compiled for (for example by using `cpuid' 18937 on 386 to determine what feature bits and architecture family are 18938 used). 18939 18940 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 18941 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 18942 18943 On the 386, the following options are allowed: 18944 18945 `abm' 18946 `no-abm' 18947 Enable/disable the generation of the advanced bit 18948 instructions. 18949 18950 `aes' 18951 `no-aes' 18952 Enable/disable the generation of the AES instructions. 18953 18954 `mmx' 18955 `no-mmx' 18956 Enable/disable the generation of the MMX instructions. 18957 18958 `pclmul' 18959 `no-pclmul' 18960 Enable/disable the generation of the PCLMUL instructions. 18961 18962 `popcnt' 18963 `no-popcnt' 18964 Enable/disable the generation of the POPCNT instruction. 18965 18966 `sse' 18967 `no-sse' 18968 Enable/disable the generation of the SSE instructions. 18969 18970 `sse2' 18971 `no-sse2' 18972 Enable/disable the generation of the SSE2 instructions. 18973 18974 `sse3' 18975 `no-sse3' 18976 Enable/disable the generation of the SSE3 instructions. 18977 18978 `sse4' 18979 `no-sse4' 18980 Enable/disable the generation of the SSE4 instructions (both 18981 SSE4.1 and SSE4.2). 18982 18983 `sse4.1' 18984 `no-sse4.1' 18985 Enable/disable the generation of the sse4.1 instructions. 18986 18987 `sse4.2' 18988 `no-sse4.2' 18989 Enable/disable the generation of the sse4.2 instructions. 18990 18991 `sse4a' 18992 `no-sse4a' 18993 Enable/disable the generation of the SSE4A instructions. 18994 18995 `sse5' 18996 `no-sse5' 18997 Enable/disable the generation of the SSE5 instructions. 18998 18999 `ssse3' 19000 `no-ssse3' 19001 Enable/disable the generation of the SSSE3 instructions. 19002 19003 `cld' 19004 `no-cld' 19005 Enable/disable the generation of the CLD before string moves. 19006 19007 `fancy-math-387' 19008 `no-fancy-math-387' 19009 Enable/disable the generation of the `sin', `cos', and `sqrt' 19010 instructions on the 387 floating point unit. 19011 19012 `fused-madd' 19013 `no-fused-madd' 19014 Enable/disable the generation of the fused multiply/add 19015 instructions. 19016 19017 `ieee-fp' 19018 `no-ieee-fp' 19019 Enable/disable the generation of floating point that depends 19020 on IEEE arithmetic. 19021 19022 `inline-all-stringops' 19023 `no-inline-all-stringops' 19024 Enable/disable inlining of string operations. 19025 19026 `inline-stringops-dynamically' 19027 `no-inline-stringops-dynamically' 19028 Enable/disable the generation of the inline code to do small 19029 string operations and calling the library routines for large 19030 operations. 19031 19032 `align-stringops' 19033 `no-align-stringops' 19034 Do/do not align destination of inlined string operations. 19035 19036 `recip' 19037 `no-recip' 19038 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 19039 RSQRTPS instructions followed an additional Newton-Raphson 19040 step instead of doing a floating point division. 19041 19042 `arch=ARCH' 19043 Specify the architecture to generate code for in compiling 19044 the function. 19045 19046 `tune=TUNE' 19047 Specify the architecture to tune for in compiling the 19048 function. 19049 19050 `fpmath=FPMATH' 19051 Specify which floating point unit to use. The 19052 `target("fpmath=sse,387")' option must be specified as 19053 `target("fpmath=sse+387")' because the comma would separate 19054 different options. 19055 19056 On the 386, you can use either multiple strings to specify multiple 19057 options, or you can separate the option with a comma (`,'). 19058 19059 On the 386, the inliner will not inline a function that has 19060 different target options than the caller, unless the callee has a 19061 subset of the target options of the caller. For example a 19062 function declared with `target("sse5")' can inline a function with 19063 `target("sse2")', since `-msse5' implies `-msse2'. 19064 19065 The `target' attribute is not implemented in GCC versions earlier 19066 than 4.4, and at present only the 386 uses it. 19067 19068 `tiny_data' 19069 Use this attribute on the H8/300H and H8S to indicate that the 19070 specified variable should be placed into the tiny data section. 19071 The compiler will generate more efficient code for loads and stores 19072 on data in the tiny data section. Note the tiny data area is 19073 limited to slightly under 32kbytes of data. 19074 19075 `trap_exit' 19076 Use this attribute on the SH for an `interrupt_handler' to return 19077 using `trapa' instead of `rte'. This attribute expects an integer 19078 argument specifying the trap number to be used. 19079 19080 `unused' 19081 This attribute, attached to a function, means that the function is 19082 meant to be possibly unused. GCC will not produce a warning for 19083 this function. 19084 19085 `used' 19086 This attribute, attached to a function, means that code must be 19087 emitted for the function even if it appears that the function is 19088 not referenced. This is useful, for example, when the function is 19089 referenced only in inline assembly. 19090 19091 `version_id' 19092 This IA64 HP-UX attribute, attached to a global variable or 19093 function, renames a symbol to contain a version string, thus 19094 allowing for function level versioning. HP-UX system header files 19095 may use version level functioning for some system calls. 19096 19097 extern int foo () __attribute__((version_id ("20040821"))); 19098 19099 Calls to FOO will be mapped to calls to FOO{20040821}. 19100 19101 `visibility ("VISIBILITY_TYPE")' 19102 This attribute affects the linkage of the declaration to which it 19103 is attached. There are four supported VISIBILITY_TYPE values: 19104 default, hidden, protected or internal visibility. 19105 19106 void __attribute__ ((visibility ("protected"))) 19107 f () { /* Do something. */; } 19108 int i __attribute__ ((visibility ("hidden"))); 19109 19110 The possible values of VISIBILITY_TYPE correspond to the 19111 visibility settings in the ELF gABI. 19112 19113 "default" 19114 Default visibility is the normal case for the object file 19115 format. This value is available for the visibility attribute 19116 to override other options that may change the assumed 19117 visibility of entities. 19118 19119 On ELF, default visibility means that the declaration is 19120 visible to other modules and, in shared libraries, means that 19121 the declared entity may be overridden. 19122 19123 On Darwin, default visibility means that the declaration is 19124 visible to other modules. 19125 19126 Default visibility corresponds to "external linkage" in the 19127 language. 19128 19129 "hidden" 19130 Hidden visibility indicates that the entity declared will 19131 have a new form of linkage, which we'll call "hidden 19132 linkage". Two declarations of an object with hidden linkage 19133 refer to the same object if they are in the same shared 19134 object. 19135 19136 "internal" 19137 Internal visibility is like hidden visibility, but with 19138 additional processor specific semantics. Unless otherwise 19139 specified by the psABI, GCC defines internal visibility to 19140 mean that a function is _never_ called from another module. 19141 Compare this with hidden functions which, while they cannot 19142 be referenced directly by other modules, can be referenced 19143 indirectly via function pointers. By indicating that a 19144 function cannot be called from outside the module, GCC may 19145 for instance omit the load of a PIC register since it is known 19146 that the calling function loaded the correct value. 19147 19148 "protected" 19149 Protected visibility is like default visibility except that it 19150 indicates that references within the defining module will 19151 bind to the definition in that module. That is, the declared 19152 entity cannot be overridden by another module. 19153 19154 19155 All visibilities are supported on many, but not all, ELF targets 19156 (supported when the assembler supports the `.visibility' 19157 pseudo-op). Default visibility is supported everywhere. Hidden 19158 visibility is supported on Darwin targets. 19159 19160 The visibility attribute should be applied only to declarations 19161 which would otherwise have external linkage. The attribute should 19162 be applied consistently, so that the same entity should not be 19163 declared with different settings of the attribute. 19164 19165 In C++, the visibility attribute applies to types as well as 19166 functions and objects, because in C++ types have linkage. A class 19167 must not have greater visibility than its non-static data member 19168 types and bases, and class members default to the visibility of 19169 their class. Also, a declaration without explicit visibility is 19170 limited to the visibility of its type. 19171 19172 In C++, you can mark member functions and static member variables 19173 of a class with the visibility attribute. This is useful if you 19174 know a particular method or static member variable should only be 19175 used from one shared object; then you can mark it hidden while the 19176 rest of the class has default visibility. Care must be taken to 19177 avoid breaking the One Definition Rule; for example, it is usually 19178 not useful to mark an inline method as hidden without marking the 19179 whole class as hidden. 19180 19181 A C++ namespace declaration can also have the visibility attribute. 19182 This attribute applies only to the particular namespace body, not 19183 to other definitions of the same namespace; it is equivalent to 19184 using `#pragma GCC visibility' before and after the namespace 19185 definition (*note Visibility Pragmas::). 19186 19187 In C++, if a template argument has limited visibility, this 19188 restriction is implicitly propagated to the template instantiation. 19189 Otherwise, template instantiations and specializations default to 19190 the visibility of their template. 19191 19192 If both the template and enclosing class have explicit visibility, 19193 the visibility from the template is used. 19194 19195 `warn_unused_result' 19196 The `warn_unused_result' attribute causes a warning to be emitted 19197 if a caller of the function with this attribute does not use its 19198 return value. This is useful for functions where not checking the 19199 result is either a security problem or always a bug, such as 19200 `realloc'. 19201 19202 int fn () __attribute__ ((warn_unused_result)); 19203 int foo () 19204 { 19205 if (fn () < 0) return -1; 19206 fn (); 19207 return 0; 19208 } 19209 19210 results in warning on line 5. 19211 19212 `weak' 19213 The `weak' attribute causes the declaration to be emitted as a weak 19214 symbol rather than a global. This is primarily useful in defining 19215 library functions which can be overridden in user code, though it 19216 can also be used with non-function declarations. Weak symbols are 19217 supported for ELF targets, and also for a.out targets when using 19218 the GNU assembler and linker. 19219 19220 `weakref' 19221 `weakref ("TARGET")' 19222 The `weakref' attribute marks a declaration as a weak reference. 19223 Without arguments, it should be accompanied by an `alias' attribute 19224 naming the target symbol. Optionally, the TARGET may be given as 19225 an argument to `weakref' itself. In either case, `weakref' 19226 implicitly marks the declaration as `weak'. Without a TARGET, 19227 given as an argument to `weakref' or to `alias', `weakref' is 19228 equivalent to `weak'. 19229 19230 static int x() __attribute__ ((weakref ("y"))); 19231 /* is equivalent to... */ 19232 static int x() __attribute__ ((weak, weakref, alias ("y"))); 19233 /* and to... */ 19234 static int x() __attribute__ ((weakref)); 19235 static int x() __attribute__ ((alias ("y"))); 19236 19237 A weak reference is an alias that does not by itself require a 19238 definition to be given for the target symbol. If the target 19239 symbol is only referenced through weak references, then the 19240 becomes a `weak' undefined symbol. If it is directly referenced, 19241 however, then such strong references prevail, and a definition 19242 will be required for the symbol, not necessarily in the same 19243 translation unit. 19244 19245 The effect is equivalent to moving all references to the alias to a 19246 separate translation unit, renaming the alias to the aliased 19247 symbol, declaring it as weak, compiling the two separate 19248 translation units and performing a reloadable link on them. 19249 19250 At present, a declaration to which `weakref' is attached can only 19251 be `static'. 19252 19253 19254 You can specify multiple attributes in a declaration by separating them 19255 by commas within the double parentheses or by immediately following an 19256 attribute declaration with another attribute declaration. 19257 19258 Some people object to the `__attribute__' feature, suggesting that ISO 19259 C's `#pragma' should be used instead. At the time `__attribute__' was 19260 designed, there were two reasons for not doing this. 19261 19262 1. It is impossible to generate `#pragma' commands from a macro. 19263 19264 2. There is no telling what the same `#pragma' might mean in another 19265 compiler. 19266 19267 These two reasons applied to almost any application that might have 19268 been proposed for `#pragma'. It was basically a mistake to use 19269 `#pragma' for _anything_. 19270 19271 The ISO C99 standard includes `_Pragma', which now allows pragmas to 19272 be generated from macros. In addition, a `#pragma GCC' namespace is 19273 now in use for GCC-specific pragmas. However, it has been found 19274 convenient to use `__attribute__' to achieve a natural attachment of 19275 attributes to their corresponding declarations, whereas `#pragma GCC' 19276 is of use for constructs that do not naturally form part of the 19277 grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other 19278 Directives. 19279 19280 19281 File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 19282 19283 5.28 Attribute Syntax 19284 ===================== 19285 19286 This section describes the syntax with which `__attribute__' may be 19287 used, and the constructs to which attribute specifiers bind, for the C 19288 language. Some details may vary for C++ and Objective-C. Because of 19289 infelicities in the grammar for attributes, some forms described here 19290 may not be successfully parsed in all cases. 19291 19292 There are some problems with the semantics of attributes in C++. For 19293 example, there are no manglings for attributes, although they may affect 19294 code generation, so problems may arise when attributed types are used in 19295 conjunction with templates or overloading. Similarly, `typeid' does 19296 not distinguish between types with different attributes. Support for 19297 attributes in C++ may be restricted in future to attributes on 19298 declarations only, but not on nested declarators. 19299 19300 *Note Function Attributes::, for details of the semantics of attributes 19301 applying to functions. *Note Variable Attributes::, for details of the 19302 semantics of attributes applying to variables. *Note Type Attributes::, 19303 for details of the semantics of attributes applying to structure, union 19304 and enumerated types. 19305 19306 An "attribute specifier" is of the form `__attribute__ 19307 ((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 19308 comma-separated sequence of "attributes", where each attribute is one 19309 of the following: 19310 19311 * Empty. Empty attributes are ignored. 19312 19313 * A word (which may be an identifier such as `unused', or a reserved 19314 word such as `const'). 19315 19316 * A word, followed by, in parentheses, parameters for the attribute. 19317 These parameters take one of the following forms: 19318 19319 * An identifier. For example, `mode' attributes use this form. 19320 19321 * An identifier followed by a comma and a non-empty 19322 comma-separated list of expressions. For example, `format' 19323 attributes use this form. 19324 19325 * A possibly empty comma-separated list of expressions. For 19326 example, `format_arg' attributes use this form with the list 19327 being a single integer constant expression, and `alias' 19328 attributes use this form with the list being a single string 19329 constant. 19330 19331 An "attribute specifier list" is a sequence of one or more attribute 19332 specifiers, not separated by any other tokens. 19333 19334 In GNU C, an attribute specifier list may appear after the colon 19335 following a label, other than a `case' or `default' label. The only 19336 attribute it makes sense to use after a label is `unused'. This 19337 feature is intended for code generated by programs which contains labels 19338 that may be unused but which is compiled with `-Wall'. It would not 19339 normally be appropriate to use in it human-written code, though it 19340 could be useful in cases where the code that jumps to the label is 19341 contained within an `#ifdef' conditional. GNU C++ does not permit such 19342 placement of attribute lists, as it is permissible for a declaration, 19343 which could begin with an attribute list, to be labelled in C++. 19344 Declarations cannot be labelled in C90 or C99, so the ambiguity does 19345 not arise there. 19346 19347 An attribute specifier list may appear as part of a `struct', `union' 19348 or `enum' specifier. It may go either immediately after the `struct', 19349 `union' or `enum' keyword, or after the closing brace. The former 19350 syntax is preferred. Where attribute specifiers follow the closing 19351 brace, they are considered to relate to the structure, union or 19352 enumerated type defined, not to any enclosing declaration the type 19353 specifier appears in, and the type defined is not complete until after 19354 the attribute specifiers. 19355 19356 Otherwise, an attribute specifier appears as part of a declaration, 19357 counting declarations of unnamed parameters and type names, and relates 19358 to that declaration (which may be nested in another declaration, for 19359 example in the case of a parameter declaration), or to a particular 19360 declarator within a declaration. Where an attribute specifier is 19361 applied to a parameter declared as a function or an array, it should 19362 apply to the function or array rather than the pointer to which the 19363 parameter is implicitly converted, but this is not yet correctly 19364 implemented. 19365 19366 Any list of specifiers and qualifiers at the start of a declaration may 19367 contain attribute specifiers, whether or not such a list may in that 19368 context contain storage class specifiers. (Some attributes, however, 19369 are essentially in the nature of storage class specifiers, and only make 19370 sense where storage class specifiers may be used; for example, 19371 `section'.) There is one necessary limitation to this syntax: the 19372 first old-style parameter declaration in a function definition cannot 19373 begin with an attribute specifier, because such an attribute applies to 19374 the function instead by syntax described below (which, however, is not 19375 yet implemented in this case). In some other cases, attribute 19376 specifiers are permitted by this grammar but not yet supported by the 19377 compiler. All attribute specifiers in this place relate to the 19378 declaration as a whole. In the obsolescent usage where a type of `int' 19379 is implied by the absence of type specifiers, such a list of specifiers 19380 and qualifiers may be an attribute specifier list with no other 19381 specifiers or qualifiers. 19382 19383 At present, the first parameter in a function prototype must have some 19384 type specifier which is not an attribute specifier; this resolves an 19385 ambiguity in the interpretation of `void f(int (__attribute__((foo)) 19386 x))', but is subject to change. At present, if the parentheses of a 19387 function declarator contain only attributes then those attributes are 19388 ignored, rather than yielding an error or warning or implying a single 19389 parameter of type int, but this is subject to change. 19390 19391 An attribute specifier list may appear immediately before a declarator 19392 (other than the first) in a comma-separated list of declarators in a 19393 declaration of more than one identifier using a single list of 19394 specifiers and qualifiers. Such attribute specifiers apply only to the 19395 identifier before whose declarator they appear. For example, in 19396 19397 __attribute__((noreturn)) void d0 (void), 19398 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 19399 d2 (void) 19400 19401 the `noreturn' attribute applies to all the functions declared; the 19402 `format' attribute only applies to `d1'. 19403 19404 An attribute specifier list may appear immediately before the comma, 19405 `=' or semicolon terminating the declaration of an identifier other 19406 than a function definition. Such attribute specifiers apply to the 19407 declared object or function. Where an assembler name for an object or 19408 function is specified (*note Asm Labels::), the attribute must follow 19409 the `asm' specification. 19410 19411 An attribute specifier list may, in future, be permitted to appear 19412 after the declarator in a function definition (before any old-style 19413 parameter declarations or the function body). 19414 19415 Attribute specifiers may be mixed with type qualifiers appearing inside 19416 the `[]' of a parameter array declarator, in the C99 construct by which 19417 such qualifiers are applied to the pointer to which the array is 19418 implicitly converted. Such attribute specifiers apply to the pointer, 19419 not to the array, but at present this is not implemented and they are 19420 ignored. 19421 19422 An attribute specifier list may appear at the start of a nested 19423 declarator. At present, there are some limitations in this usage: the 19424 attributes correctly apply to the declarator, but for most individual 19425 attributes the semantics this implies are not implemented. When 19426 attribute specifiers follow the `*' of a pointer declarator, they may 19427 be mixed with any type qualifiers present. The following describes the 19428 formal semantics of this syntax. It will make the most sense if you 19429 are familiar with the formal specification of declarators in the ISO C 19430 standard. 19431 19432 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 19433 where `T' contains declaration specifiers that specify a type TYPE 19434 (such as `int') and `D1' is a declarator that contains an identifier 19435 IDENT. The type specified for IDENT for derived declarators whose type 19436 does not include an attribute specifier is as in the ISO C standard. 19437 19438 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 19439 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 19440 TYPE" for IDENT, then `T D1' specifies the type 19441 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 19442 19443 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 19444 D', and the declaration `T D' specifies the type 19445 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 19446 the type "DERIVED-DECLARATOR-TYPE-LIST 19447 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 19448 19449 For example, 19450 19451 void (__attribute__((noreturn)) ****f) (void); 19452 19453 specifies the type "pointer to pointer to pointer to pointer to 19454 non-returning function returning `void'". As another example, 19455 19456 char *__attribute__((aligned(8))) *f; 19457 19458 specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 19459 again that this does not work with most attributes; for example, the 19460 usage of `aligned' and `noreturn' attributes given above is not yet 19461 supported. 19462 19463 For compatibility with existing code written for compiler versions that 19464 did not implement attributes on nested declarators, some laxity is 19465 allowed in the placing of attributes. If an attribute that only applies 19466 to types is applied to a declaration, it will be treated as applying to 19467 the type of that declaration. If an attribute that only applies to 19468 declarations is applied to the type of a declaration, it will be treated 19469 as applying to that declaration; and, for compatibility with code 19470 placing the attributes immediately before the identifier declared, such 19471 an attribute applied to a function return type will be treated as 19472 applying to the function type, and such an attribute applied to an array 19473 element type will be treated as applying to the array type. If an 19474 attribute that only applies to function types is applied to a 19475 pointer-to-function type, it will be treated as applying to the pointer 19476 target type; if such an attribute is applied to a function return type 19477 that is not a pointer-to-function type, it will be treated as applying 19478 to the function type. 19479 19480 19481 File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 19482 19483 5.29 Prototypes and Old-Style Function Definitions 19484 ================================================== 19485 19486 GNU C extends ISO C to allow a function prototype to override a later 19487 old-style non-prototype definition. Consider the following example: 19488 19489 /* Use prototypes unless the compiler is old-fashioned. */ 19490 #ifdef __STDC__ 19491 #define P(x) x 19492 #else 19493 #define P(x) () 19494 #endif 19495 19496 /* Prototype function declaration. */ 19497 int isroot P((uid_t)); 19498 19499 /* Old-style function definition. */ 19500 int 19501 isroot (x) /* ??? lossage here ??? */ 19502 uid_t x; 19503 { 19504 return x == 0; 19505 } 19506 19507 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 19508 this example, because subword arguments in old-style non-prototype 19509 definitions are promoted. Therefore in this example the function 19510 definition's argument is really an `int', which does not match the 19511 prototype argument type of `short'. 19512 19513 This restriction of ISO C makes it hard to write code that is portable 19514 to traditional C compilers, because the programmer does not know 19515 whether the `uid_t' type is `short', `int', or `long'. Therefore, in 19516 cases like these GNU C allows a prototype to override a later old-style 19517 definition. More precisely, in GNU C, a function prototype argument 19518 type overrides the argument type specified by a later old-style 19519 definition if the former type is the same as the latter type before 19520 promotion. Thus in GNU C the above example is equivalent to the 19521 following: 19522 19523 int isroot (uid_t); 19524 19525 int 19526 isroot (uid_t x) 19527 { 19528 return x == 0; 19529 } 19530 19531 GNU C++ does not support old-style function definitions, so this 19532 extension is irrelevant. 19533 19534 19535 File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 19536 19537 5.30 C++ Style Comments 19538 ======================= 19539 19540 In GNU C, you may use C++ style comments, which start with `//' and 19541 continue until the end of the line. Many other C implementations allow 19542 such comments, and they are included in the 1999 C standard. However, 19543 C++ style comments are not recognized if you specify an `-std' option 19544 specifying a version of ISO C before C99, or `-ansi' (equivalent to 19545 `-std=c89'). 19546 19547 19548 File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 19549 19550 5.31 Dollar Signs in Identifier Names 19551 ===================================== 19552 19553 In GNU C, you may normally use dollar signs in identifier names. This 19554 is because many traditional C implementations allow such identifiers. 19555 However, dollar signs in identifiers are not supported on a few target 19556 machines, typically because the target assembler does not allow them. 19557 19558 19559 File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 19560 19561 5.32 The Character <ESC> in Constants 19562 ===================================== 19563 19564 You can use the sequence `\e' in a string or character constant to 19565 stand for the ASCII character <ESC>. 19566 19567 19568 File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 19569 19570 5.33 Inquiring on Alignment of Types or Variables 19571 ================================================= 19572 19573 The keyword `__alignof__' allows you to inquire about how an object is 19574 aligned, or the minimum alignment usually required by a type. Its 19575 syntax is just like `sizeof'. 19576 19577 For example, if the target machine requires a `double' value to be 19578 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 19579 is true on many RISC machines. On more traditional machine designs, 19580 `__alignof__ (double)' is 4 or even 2. 19581 19582 Some machines never actually require alignment; they allow reference 19583 to any data type even at an odd address. For these machines, 19584 `__alignof__' reports the smallest alignment that GCC will give the 19585 data type, usually as mandated by the target ABI. 19586 19587 If the operand of `__alignof__' is an lvalue rather than a type, its 19588 value is the required alignment for its type, taking into account any 19589 minimum alignment specified with GCC's `__attribute__' extension (*note 19590 Variable Attributes::). For example, after this declaration: 19591 19592 struct foo { int x; char y; } foo1; 19593 19594 the value of `__alignof__ (foo1.y)' is 1, even though its actual 19595 alignment is probably 2 or 4, the same as `__alignof__ (int)'. 19596 19597 It is an error to ask for the alignment of an incomplete type. 19598 19599 19600 File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 19601 19602 5.34 Specifying Attributes of Variables 19603 ======================================= 19604 19605 The keyword `__attribute__' allows you to specify special attributes of 19606 variables or structure fields. This keyword is followed by an 19607 attribute specification inside double parentheses. Some attributes are 19608 currently defined generically for variables. Other attributes are 19609 defined for variables on particular target systems. Other attributes 19610 are available for functions (*note Function Attributes::) and for types 19611 (*note Type Attributes::). Other front ends might define more 19612 attributes (*note Extensions to the C++ Language: C++ Extensions.). 19613 19614 You may also specify attributes with `__' preceding and following each 19615 keyword. This allows you to use them in header files without being 19616 concerned about a possible macro of the same name. For example, you 19617 may use `__aligned__' instead of `aligned'. 19618 19619 *Note Attribute Syntax::, for details of the exact syntax for using 19620 attributes. 19621 19622 `aligned (ALIGNMENT)' 19623 This attribute specifies a minimum alignment for the variable or 19624 structure field, measured in bytes. For example, the declaration: 19625 19626 int x __attribute__ ((aligned (16))) = 0; 19627 19628 causes the compiler to allocate the global variable `x' on a 19629 16-byte boundary. On a 68040, this could be used in conjunction 19630 with an `asm' expression to access the `move16' instruction which 19631 requires 16-byte aligned operands. 19632 19633 You can also specify the alignment of structure fields. For 19634 example, to create a double-word aligned `int' pair, you could 19635 write: 19636 19637 struct foo { int x[2] __attribute__ ((aligned (8))); }; 19638 19639 This is an alternative to creating a union with a `double' member 19640 that forces the union to be double-word aligned. 19641 19642 As in the preceding examples, you can explicitly specify the 19643 alignment (in bytes) that you wish the compiler to use for a given 19644 variable or structure field. Alternatively, you can leave out the 19645 alignment factor and just ask the compiler to align a variable or 19646 field to the default alignment for the target architecture you are 19647 compiling for. The default alignment is sufficient for all scalar 19648 types, but may not be enough for all vector types on a target 19649 which supports vector operations. The default alignment is fixed 19650 for a particular target ABI. 19651 19652 Gcc also provides a target specific macro `__BIGGEST_ALIGNMENT__', 19653 which is the largest alignment ever used for any data type on the 19654 target machine you are compiling for. For example, you could 19655 write: 19656 19657 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 19658 19659 The compiler automatically sets the alignment for the declared 19660 variable or field to `__BIGGEST_ALIGNMENT__'. Doing this can 19661 often make copy operations more efficient, because the compiler can 19662 use whatever instructions copy the biggest chunks of memory when 19663 performing copies to or from the variables or fields that you have 19664 aligned this way. Note that the value of `__BIGGEST_ALIGNMENT__' 19665 may change depending on command line options. 19666 19667 When used on a struct, or struct member, the `aligned' attribute 19668 can only increase the alignment; in order to decrease it, the 19669 `packed' attribute must be specified as well. When used as part 19670 of a typedef, the `aligned' attribute can both increase and 19671 decrease alignment, and specifying the `packed' attribute will 19672 generate a warning. 19673 19674 Note that the effectiveness of `aligned' attributes may be limited 19675 by inherent limitations in your linker. On many systems, the 19676 linker is only able to arrange for variables to be aligned up to a 19677 certain maximum alignment. (For some linkers, the maximum 19678 supported alignment may be very very small.) If your linker is 19679 only able to align variables up to a maximum of 8 byte alignment, 19680 then specifying `aligned(16)' in an `__attribute__' will still 19681 only provide you with 8 byte alignment. See your linker 19682 documentation for further information. 19683 19684 The `aligned' attribute can also be used for functions (*note 19685 Function Attributes::.) 19686 19687 `cleanup (CLEANUP_FUNCTION)' 19688 The `cleanup' attribute runs a function when the variable goes out 19689 of scope. This attribute can only be applied to auto function 19690 scope variables; it may not be applied to parameters or variables 19691 with static storage duration. The function must take one 19692 parameter, a pointer to a type compatible with the variable. The 19693 return value of the function (if any) is ignored. 19694 19695 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run 19696 during the stack unwinding that happens during the processing of 19697 the exception. Note that the `cleanup' attribute does not allow 19698 the exception to be caught, only to perform an action. It is 19699 undefined what happens if CLEANUP_FUNCTION does not return 19700 normally. 19701 19702 `common' 19703 `nocommon' 19704 The `common' attribute requests GCC to place a variable in 19705 "common" storage. The `nocommon' attribute requests the 19706 opposite--to allocate space for it directly. 19707 19708 These attributes override the default chosen by the `-fno-common' 19709 and `-fcommon' flags respectively. 19710 19711 `deprecated' 19712 The `deprecated' attribute results in a warning if the variable is 19713 used anywhere in the source file. This is useful when identifying 19714 variables that are expected to be removed in a future version of a 19715 program. The warning also includes the location of the declaration 19716 of the deprecated variable, to enable users to easily find further 19717 information about why the variable is deprecated, or what they 19718 should do instead. Note that the warning only occurs for uses: 19719 19720 extern int old_var __attribute__ ((deprecated)); 19721 extern int old_var; 19722 int new_fn () { return old_var; } 19723 19724 results in a warning on line 3 but not line 2. 19725 19726 The `deprecated' attribute can also be used for functions and 19727 types (*note Function Attributes::, *note Type Attributes::.) 19728 19729 `mode (MODE)' 19730 This attribute specifies the data type for the 19731 declaration--whichever type corresponds to the mode MODE. This in 19732 effect lets you request an integer or floating point type 19733 according to its width. 19734 19735 You may also specify a mode of `byte' or `__byte__' to indicate 19736 the mode corresponding to a one-byte integer, `word' or `__word__' 19737 for the mode of a one-word integer, and `pointer' or `__pointer__' 19738 for the mode used to represent pointers. 19739 19740 `packed' 19741 The `packed' attribute specifies that a variable or structure field 19742 should have the smallest possible alignment--one byte for a 19743 variable, and one bit for a field, unless you specify a larger 19744 value with the `aligned' attribute. 19745 19746 Here is a structure in which the field `x' is packed, so that it 19747 immediately follows `a': 19748 19749 struct foo 19750 { 19751 char a; 19752 int x[2] __attribute__ ((packed)); 19753 }; 19754 19755 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' 19756 attribute on bit-fields of type `char'. This has been fixed in 19757 GCC 4.4 but the change can lead to differences in the structure 19758 layout. See the documentation of `-Wpacked-bitfield-compat' for 19759 more information. 19760 19761 `section ("SECTION-NAME")' 19762 Normally, the compiler places the objects it generates in sections 19763 like `data' and `bss'. Sometimes, however, you need additional 19764 sections, or you need certain particular variables to appear in 19765 special sections, for example to map to special hardware. The 19766 `section' attribute specifies that a variable (or function) lives 19767 in a particular section. For example, this small program uses 19768 several specific section names: 19769 19770 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 19771 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 19772 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 19773 int init_data __attribute__ ((section ("INITDATA"))); 19774 19775 main() 19776 { 19777 /* Initialize stack pointer */ 19778 init_sp (stack + sizeof (stack)); 19779 19780 /* Initialize initialized data */ 19781 memcpy (&init_data, &data, &edata - &data); 19782 19783 /* Turn on the serial ports */ 19784 init_duart (&a); 19785 init_duart (&b); 19786 } 19787 19788 Use the `section' attribute with _global_ variables and not 19789 _local_ variables, as shown in the example. 19790 19791 You may use the `section' attribute with initialized or 19792 uninitialized global variables but the linker requires each object 19793 be defined once, with the exception that uninitialized variables 19794 tentatively go in the `common' (or `bss') section and can be 19795 multiply "defined". Using the `section' attribute will change 19796 what section the variable goes into and may cause the linker to 19797 issue an error if an uninitialized variable has multiple 19798 definitions. You can force a variable to be initialized with the 19799 `-fno-common' flag or the `nocommon' attribute. 19800 19801 Some file formats do not support arbitrary sections so the 19802 `section' attribute is not available on all platforms. If you 19803 need to map the entire contents of a module to a particular 19804 section, consider using the facilities of the linker instead. 19805 19806 `shared' 19807 On Microsoft Windows, in addition to putting variable definitions 19808 in a named section, the section can also be shared among all 19809 running copies of an executable or DLL. For example, this small 19810 program defines shared data by putting it in a named section 19811 `shared' and marking the section shareable: 19812 19813 int foo __attribute__((section ("shared"), shared)) = 0; 19814 19815 int 19816 main() 19817 { 19818 /* Read and write foo. All running 19819 copies see the same value. */ 19820 return 0; 19821 } 19822 19823 You may only use the `shared' attribute along with `section' 19824 attribute with a fully initialized global definition because of 19825 the way linkers work. See `section' attribute for more 19826 information. 19827 19828 The `shared' attribute is only available on Microsoft Windows. 19829 19830 `tls_model ("TLS_MODEL")' 19831 The `tls_model' attribute sets thread-local storage model (*note 19832 Thread-Local::) of a particular `__thread' variable, overriding 19833 `-ftls-model=' command line switch on a per-variable basis. The 19834 TLS_MODEL argument should be one of `global-dynamic', 19835 `local-dynamic', `initial-exec' or `local-exec'. 19836 19837 Not all targets support this attribute. 19838 19839 `unused' 19840 This attribute, attached to a variable, means that the variable is 19841 meant to be possibly unused. GCC will not produce a warning for 19842 this variable. 19843 19844 `used' 19845 This attribute, attached to a variable, means that the variable 19846 must be emitted even if it appears that the variable is not 19847 referenced. 19848 19849 `vector_size (BYTES)' 19850 This attribute specifies the vector size for the variable, 19851 measured in bytes. For example, the declaration: 19852 19853 int foo __attribute__ ((vector_size (16))); 19854 19855 causes the compiler to set the mode for `foo', to be 16 bytes, 19856 divided into `int' sized units. Assuming a 32-bit int (a vector of 19857 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI. 19858 19859 This attribute is only applicable to integral and float scalars, 19860 although arrays, pointers, and function return values are allowed 19861 in conjunction with this construct. 19862 19863 Aggregates with this attribute are invalid, even if they are of 19864 the same size as a corresponding scalar. For example, the 19865 declaration: 19866 19867 struct S { int a; }; 19868 struct S __attribute__ ((vector_size (16))) foo; 19869 19870 is invalid even if the size of the structure is the same as the 19871 size of the `int'. 19872 19873 `selectany' 19874 The `selectany' attribute causes an initialized global variable to 19875 have link-once semantics. When multiple definitions of the 19876 variable are encountered by the linker, the first is selected and 19877 the remainder are discarded. Following usage by the Microsoft 19878 compiler, the linker is told _not_ to warn about size or content 19879 differences of the multiple definitions. 19880 19881 Although the primary usage of this attribute is for POD types, the 19882 attribute can also be applied to global C++ objects that are 19883 initialized by a constructor. In this case, the static 19884 initialization and destruction code for the object is emitted in 19885 each translation defining the object, but the calls to the 19886 constructor and destructor are protected by a link-once guard 19887 variable. 19888 19889 The `selectany' attribute is only available on Microsoft Windows 19890 targets. You can use `__declspec (selectany)' as a synonym for 19891 `__attribute__ ((selectany))' for compatibility with other 19892 compilers. 19893 19894 `weak' 19895 The `weak' attribute is described in *Note Function Attributes::. 19896 19897 `dllimport' 19898 The `dllimport' attribute is described in *Note Function 19899 Attributes::. 19900 19901 `dllexport' 19902 The `dllexport' attribute is described in *Note Function 19903 Attributes::. 19904 19905 19906 5.34.1 Blackfin Variable Attributes 19907 ----------------------------------- 19908 19909 Three attributes are currently defined for the Blackfin. 19910 19911 `l1_data' 19912 19913 `l1_data_A' 19914 19915 `l1_data_B' 19916 Use these attributes on the Blackfin to place the variable into L1 19917 Data SRAM. Variables with `l1_data' attribute will be put into 19918 the specific section named `.l1.data'. Those with `l1_data_A' 19919 attribute will be put into the specific section named 19920 `.l1.data.A'. Those with `l1_data_B' attribute will be put into 19921 the specific section named `.l1.data.B'. 19922 19923 5.34.2 M32R/D Variable Attributes 19924 --------------------------------- 19925 19926 One attribute is currently defined for the M32R/D. 19927 19928 `model (MODEL-NAME)' 19929 Use this attribute on the M32R/D to set the addressability of an 19930 object. The identifier MODEL-NAME is one of `small', `medium', or 19931 `large', representing each of the code models. 19932 19933 Small model objects live in the lower 16MB of memory (so that their 19934 addresses can be loaded with the `ld24' instruction). 19935 19936 Medium and large model objects may live anywhere in the 32-bit 19937 address space (the compiler will generate `seth/add3' instructions 19938 to load their addresses). 19939 19940 5.34.3 i386 Variable Attributes 19941 ------------------------------- 19942 19943 Two attributes are currently defined for i386 configurations: 19944 `ms_struct' and `gcc_struct' 19945 19946 `ms_struct' 19947 `gcc_struct' 19948 If `packed' is used on a structure, or if bit-fields are used it 19949 may be that the Microsoft ABI packs them differently than GCC 19950 would normally pack them. Particularly when moving packed data 19951 between functions compiled with GCC and the native Microsoft 19952 compiler (either via function call or as data in a file), it may 19953 be necessary to access either format. 19954 19955 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 19956 Windows X86 compilers to match the native Microsoft compiler. 19957 19958 The Microsoft structure layout algorithm is fairly simple with the 19959 exception of the bitfield packing: 19960 19961 The padding and alignment of members of structures and whether a 19962 bit field can straddle a storage-unit boundary 19963 19964 1. Structure members are stored sequentially in the order in 19965 which they are declared: the first member has the lowest 19966 memory address and the last member the highest. 19967 19968 2. Every data object has an alignment-requirement. The 19969 alignment-requirement for all data except structures, unions, 19970 and arrays is either the size of the object or the current 19971 packing size (specified with either the aligned attribute or 19972 the pack pragma), whichever is less. For structures, unions, 19973 and arrays, the alignment-requirement is the largest 19974 alignment-requirement of its members. Every object is 19975 allocated an offset so that: 19976 19977 offset % alignment-requirement == 0 19978 19979 3. Adjacent bit fields are packed into the same 1-, 2-, or 19980 4-byte allocation unit if the integral types are the same 19981 size and if the next bit field fits into the current 19982 allocation unit without crossing the boundary imposed by the 19983 common alignment requirements of the bit fields. 19984 19985 Handling of zero-length bitfields: 19986 19987 MSVC interprets zero-length bitfields in the following ways: 19988 19989 1. If a zero-length bitfield is inserted between two bitfields 19990 that would normally be coalesced, the bitfields will not be 19991 coalesced. 19992 19993 For example: 19994 19995 struct 19996 { 19997 unsigned long bf_1 : 12; 19998 unsigned long : 0; 19999 unsigned long bf_2 : 12; 20000 } t1; 20001 20002 The size of `t1' would be 8 bytes with the zero-length 20003 bitfield. If the zero-length bitfield were removed, `t1''s 20004 size would be 4 bytes. 20005 20006 2. If a zero-length bitfield is inserted after a bitfield, 20007 `foo', and the alignment of the zero-length bitfield is 20008 greater than the member that follows it, `bar', `bar' will be 20009 aligned as the type of the zero-length bitfield. 20010 20011 For example: 20012 20013 struct 20014 { 20015 char foo : 4; 20016 short : 0; 20017 char bar; 20018 } t2; 20019 20020 struct 20021 { 20022 char foo : 4; 20023 short : 0; 20024 double bar; 20025 } t3; 20026 20027 For `t2', `bar' will be placed at offset 2, rather than 20028 offset 1. Accordingly, the size of `t2' will be 4. For 20029 `t3', the zero-length bitfield will not affect the alignment 20030 of `bar' or, as a result, the size of the structure. 20031 20032 Taking this into account, it is important to note the 20033 following: 20034 20035 1. If a zero-length bitfield follows a normal bitfield, the 20036 type of the zero-length bitfield may affect the 20037 alignment of the structure as whole. For example, `t2' 20038 has a size of 4 bytes, since the zero-length bitfield 20039 follows a normal bitfield, and is of type short. 20040 20041 2. Even if a zero-length bitfield is not followed by a 20042 normal bitfield, it may still affect the alignment of 20043 the structure: 20044 20045 struct 20046 { 20047 char foo : 6; 20048 long : 0; 20049 } t4; 20050 20051 Here, `t4' will take up 4 bytes. 20052 20053 3. Zero-length bitfields following non-bitfield members are 20054 ignored: 20055 20056 struct 20057 { 20058 char foo; 20059 long : 0; 20060 char bar; 20061 } t5; 20062 20063 Here, `t5' will take up 2 bytes. 20064 20065 5.34.4 PowerPC Variable Attributes 20066 ---------------------------------- 20067 20068 Three attributes currently are defined for PowerPC configurations: 20069 `altivec', `ms_struct' and `gcc_struct'. 20070 20071 For full documentation of the struct attributes please see the 20072 documentation in *Note i386 Variable Attributes::. 20073 20074 For documentation of `altivec' attribute please see the documentation 20075 in *Note PowerPC Type Attributes::. 20076 20077 5.34.5 SPU Variable Attributes 20078 ------------------------------ 20079 20080 The SPU supports the `spu_vector' attribute for variables. For 20081 documentation of this attribute please see the documentation in *Note 20082 SPU Type Attributes::. 20083 20084 5.34.6 Xstormy16 Variable Attributes 20085 ------------------------------------ 20086 20087 One attribute is currently defined for xstormy16 configurations: 20088 `below100'. 20089 20090 `below100' 20091 If a variable has the `below100' attribute (`BELOW100' is allowed 20092 also), GCC will place the variable in the first 0x100 bytes of 20093 memory and use special opcodes to access it. Such variables will 20094 be placed in either the `.bss_below100' section or the 20095 `.data_below100' section. 20096 20097 20098 5.34.7 AVR Variable Attributes 20099 ------------------------------ 20100 20101 `progmem' 20102 The `progmem' attribute is used on the AVR to place data in the 20103 Program Memory address space. The AVR is a Harvard Architecture 20104 processor and data normally resides in the Data Memory address 20105 space. 20106 20107 20108 File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 20109 20110 5.35 Specifying Attributes of Types 20111 =================================== 20112 20113 The keyword `__attribute__' allows you to specify special attributes of 20114 `struct' and `union' types when you define such types. This keyword is 20115 followed by an attribute specification inside double parentheses. 20116 Seven attributes are currently defined for types: `aligned', `packed', 20117 `transparent_union', `unused', `deprecated', `visibility', and 20118 `may_alias'. Other attributes are defined for functions (*note 20119 Function Attributes::) and for variables (*note Variable Attributes::). 20120 20121 You may also specify any one of these attributes with `__' preceding 20122 and following its keyword. This allows you to use these attributes in 20123 header files without being concerned about a possible macro of the same 20124 name. For example, you may use `__aligned__' instead of `aligned'. 20125 20126 You may specify type attributes in an enum, struct or union type 20127 declaration or definition, or for other types in a `typedef' 20128 declaration. 20129 20130 For an enum, struct or union type, you may specify attributes either 20131 between the enum, struct or union tag and the name of the type, or just 20132 past the closing curly brace of the _definition_. The former syntax is 20133 preferred. 20134 20135 *Note Attribute Syntax::, for details of the exact syntax for using 20136 attributes. 20137 20138 `aligned (ALIGNMENT)' 20139 This attribute specifies a minimum alignment (in bytes) for 20140 variables of the specified type. For example, the declarations: 20141 20142 struct S { short f[3]; } __attribute__ ((aligned (8))); 20143 typedef int more_aligned_int __attribute__ ((aligned (8))); 20144 20145 force the compiler to insure (as far as it can) that each variable 20146 whose type is `struct S' or `more_aligned_int' will be allocated 20147 and aligned _at least_ on a 8-byte boundary. On a SPARC, having 20148 all variables of type `struct S' aligned to 8-byte boundaries 20149 allows the compiler to use the `ldd' and `std' (doubleword load and 20150 store) instructions when copying one variable of type `struct S' to 20151 another, thus improving run-time efficiency. 20152 20153 Note that the alignment of any given `struct' or `union' type is 20154 required by the ISO C standard to be at least a perfect multiple of 20155 the lowest common multiple of the alignments of all of the members 20156 of the `struct' or `union' in question. This means that you _can_ 20157 effectively adjust the alignment of a `struct' or `union' type by 20158 attaching an `aligned' attribute to any one of the members of such 20159 a type, but the notation illustrated in the example above is a 20160 more obvious, intuitive, and readable way to request the compiler 20161 to adjust the alignment of an entire `struct' or `union' type. 20162 20163 As in the preceding example, you can explicitly specify the 20164 alignment (in bytes) that you wish the compiler to use for a given 20165 `struct' or `union' type. Alternatively, you can leave out the 20166 alignment factor and just ask the compiler to align a type to the 20167 maximum useful alignment for the target machine you are compiling 20168 for. For example, you could write: 20169 20170 struct S { short f[3]; } __attribute__ ((aligned)); 20171 20172 Whenever you leave out the alignment factor in an `aligned' 20173 attribute specification, the compiler automatically sets the 20174 alignment for the type to the largest alignment which is ever used 20175 for any data type on the target machine you are compiling for. 20176 Doing this can often make copy operations more efficient, because 20177 the compiler can use whatever instructions copy the biggest chunks 20178 of memory when performing copies to or from the variables which 20179 have types that you have aligned this way. 20180 20181 In the example above, if the size of each `short' is 2 bytes, then 20182 the size of the entire `struct S' type is 6 bytes. The smallest 20183 power of two which is greater than or equal to that is 8, so the 20184 compiler sets the alignment for the entire `struct S' type to 8 20185 bytes. 20186 20187 Note that although you can ask the compiler to select a 20188 time-efficient alignment for a given type and then declare only 20189 individual stand-alone objects of that type, the compiler's 20190 ability to select a time-efficient alignment is primarily useful 20191 only when you plan to create arrays of variables having the 20192 relevant (efficiently aligned) type. If you declare or use arrays 20193 of variables of an efficiently-aligned type, then it is likely 20194 that your program will also be doing pointer arithmetic (or 20195 subscripting, which amounts to the same thing) on pointers to the 20196 relevant type, and the code that the compiler generates for these 20197 pointer arithmetic operations will often be more efficient for 20198 efficiently-aligned types than for other types. 20199 20200 The `aligned' attribute can only increase the alignment; but you 20201 can decrease it by specifying `packed' as well. See below. 20202 20203 Note that the effectiveness of `aligned' attributes may be limited 20204 by inherent limitations in your linker. On many systems, the 20205 linker is only able to arrange for variables to be aligned up to a 20206 certain maximum alignment. (For some linkers, the maximum 20207 supported alignment may be very very small.) If your linker is 20208 only able to align variables up to a maximum of 8 byte alignment, 20209 then specifying `aligned(16)' in an `__attribute__' will still 20210 only provide you with 8 byte alignment. See your linker 20211 documentation for further information. 20212 20213 `packed' 20214 This attribute, attached to `struct' or `union' type definition, 20215 specifies that each member (other than zero-width bitfields) of 20216 the structure or union is placed to minimize the memory required. 20217 When attached to an `enum' definition, it indicates that the 20218 smallest integral type should be used. 20219 20220 Specifying this attribute for `struct' and `union' types is 20221 equivalent to specifying the `packed' attribute on each of the 20222 structure or union members. Specifying the `-fshort-enums' flag 20223 on the line is equivalent to specifying the `packed' attribute on 20224 all `enum' definitions. 20225 20226 In the following example `struct my_packed_struct''s members are 20227 packed closely together, but the internal layout of its `s' member 20228 is not packed--to do that, `struct my_unpacked_struct' would need 20229 to be packed too. 20230 20231 struct my_unpacked_struct 20232 { 20233 char c; 20234 int i; 20235 }; 20236 20237 struct __attribute__ ((__packed__)) my_packed_struct 20238 { 20239 char c; 20240 int i; 20241 struct my_unpacked_struct s; 20242 }; 20243 20244 You may only specify this attribute on the definition of a `enum', 20245 `struct' or `union', not on a `typedef' which does not also define 20246 the enumerated type, structure or union. 20247 20248 `transparent_union' 20249 This attribute, attached to a `union' type definition, indicates 20250 that any function parameter having that union type causes calls to 20251 that function to be treated in a special way. 20252 20253 First, the argument corresponding to a transparent union type can 20254 be of any type in the union; no cast is required. Also, if the 20255 union contains a pointer type, the corresponding argument can be a 20256 null pointer constant or a void pointer expression; and if the 20257 union contains a void pointer type, the corresponding argument can 20258 be any pointer expression. If the union member type is a pointer, 20259 qualifiers like `const' on the referenced type must be respected, 20260 just as with normal pointer conversions. 20261 20262 Second, the argument is passed to the function using the calling 20263 conventions of the first member of the transparent union, not the 20264 calling conventions of the union itself. All members of the union 20265 must have the same machine representation; this is necessary for 20266 this argument passing to work properly. 20267 20268 Transparent unions are designed for library functions that have 20269 multiple interfaces for compatibility reasons. For example, 20270 suppose the `wait' function must accept either a value of type 20271 `int *' to comply with Posix, or a value of type `union wait *' to 20272 comply with the 4.1BSD interface. If `wait''s parameter were 20273 `void *', `wait' would accept both kinds of arguments, but it 20274 would also accept any other pointer type and this would make 20275 argument type checking less useful. Instead, `<sys/wait.h>' might 20276 define the interface as follows: 20277 20278 typedef union __attribute__ ((__transparent_union__)) 20279 { 20280 int *__ip; 20281 union wait *__up; 20282 } wait_status_ptr_t; 20283 20284 pid_t wait (wait_status_ptr_t); 20285 20286 This interface allows either `int *' or `union wait *' arguments 20287 to be passed, using the `int *' calling convention. The program 20288 can call `wait' with arguments of either type: 20289 20290 int w1 () { int w; return wait (&w); } 20291 int w2 () { union wait w; return wait (&w); } 20292 20293 With this interface, `wait''s implementation might look like this: 20294 20295 pid_t wait (wait_status_ptr_t p) 20296 { 20297 return waitpid (-1, p.__ip, 0); 20298 } 20299 20300 `unused' 20301 When attached to a type (including a `union' or a `struct'), this 20302 attribute means that variables of that type are meant to appear 20303 possibly unused. GCC will not produce a warning for any variables 20304 of that type, even if the variable appears to do nothing. This is 20305 often the case with lock or thread classes, which are usually 20306 defined and then not referenced, but contain constructors and 20307 destructors that have nontrivial bookkeeping functions. 20308 20309 `deprecated' 20310 The `deprecated' attribute results in a warning if the type is 20311 used anywhere in the source file. This is useful when identifying 20312 types that are expected to be removed in a future version of a 20313 program. If possible, the warning also includes the location of 20314 the declaration of the deprecated type, to enable users to easily 20315 find further information about why the type is deprecated, or what 20316 they should do instead. Note that the warnings only occur for 20317 uses and then only if the type is being applied to an identifier 20318 that itself is not being declared as deprecated. 20319 20320 typedef int T1 __attribute__ ((deprecated)); 20321 T1 x; 20322 typedef T1 T2; 20323 T2 y; 20324 typedef T1 T3 __attribute__ ((deprecated)); 20325 T3 z __attribute__ ((deprecated)); 20326 20327 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 20328 warning is issued for line 4 because T2 is not explicitly 20329 deprecated. Line 5 has no warning because T3 is explicitly 20330 deprecated. Similarly for line 6. 20331 20332 The `deprecated' attribute can also be used for functions and 20333 variables (*note Function Attributes::, *note Variable 20334 Attributes::.) 20335 20336 `may_alias' 20337 Accesses through pointers to types with this attribute are not 20338 subject to type-based alias analysis, but are instead assumed to 20339 be able to alias any other type of objects. In the context of 20340 6.5/7 an lvalue expression dereferencing such a pointer is treated 20341 like having a character type. See `-fstrict-aliasing' for more 20342 information on aliasing issues. This extension exists to support 20343 some vector APIs, in which pointers to one vector type are 20344 permitted to alias pointers to a different vector type. 20345 20346 Note that an object of a type with this attribute does not have any 20347 special semantics. 20348 20349 Example of use: 20350 20351 typedef short __attribute__((__may_alias__)) short_a; 20352 20353 int 20354 main (void) 20355 { 20356 int a = 0x12345678; 20357 short_a *b = (short_a *) &a; 20358 20359 b[1] = 0; 20360 20361 if (a == 0x12345678) 20362 abort(); 20363 20364 exit(0); 20365 } 20366 20367 If you replaced `short_a' with `short' in the variable 20368 declaration, the above program would abort when compiled with 20369 `-fstrict-aliasing', which is on by default at `-O2' or above in 20370 recent GCC versions. 20371 20372 `visibility' 20373 In C++, attribute visibility (*note Function Attributes::) can 20374 also be applied to class, struct, union and enum types. Unlike 20375 other type attributes, the attribute must appear between the 20376 initial keyword and the name of the type; it cannot appear after 20377 the body of the type. 20378 20379 Note that the type visibility is applied to vague linkage entities 20380 associated with the class (vtable, typeinfo node, etc.). In 20381 particular, if a class is thrown as an exception in one shared 20382 object and caught in another, the class must have default 20383 visibility. Otherwise the two shared objects will be unable to 20384 use the same typeinfo node and exception handling will break. 20385 20386 20387 5.35.1 ARM Type Attributes 20388 -------------------------- 20389 20390 On those ARM targets that support `dllimport' (such as Symbian OS), you 20391 can use the `notshared' attribute to indicate that the virtual table 20392 and other similar data for a class should not be exported from a DLL. 20393 For example: 20394 20395 class __declspec(notshared) C { 20396 public: 20397 __declspec(dllimport) C(); 20398 virtual void f(); 20399 } 20400 20401 __declspec(dllexport) 20402 C::C() {} 20403 20404 In this code, `C::C' is exported from the current DLL, but the virtual 20405 table for `C' is not exported. (You can use `__attribute__' instead of 20406 `__declspec' if you prefer, but most Symbian OS code uses `__declspec'.) 20407 20408 5.35.2 i386 Type Attributes 20409 --------------------------- 20410 20411 Two attributes are currently defined for i386 configurations: 20412 `ms_struct' and `gcc_struct'. 20413 20414 `ms_struct' 20415 `gcc_struct' 20416 If `packed' is used on a structure, or if bit-fields are used it 20417 may be that the Microsoft ABI packs them differently than GCC 20418 would normally pack them. Particularly when moving packed data 20419 between functions compiled with GCC and the native Microsoft 20420 compiler (either via function call or as data in a file), it may 20421 be necessary to access either format. 20422 20423 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 20424 Windows X86 compilers to match the native Microsoft compiler. 20425 20426 To specify multiple attributes, separate them by commas within the 20427 double parentheses: for example, `__attribute__ ((aligned (16), 20428 packed))'. 20429 20430 5.35.3 PowerPC Type Attributes 20431 ------------------------------ 20432 20433 Three attributes currently are defined for PowerPC configurations: 20434 `altivec', `ms_struct' and `gcc_struct'. 20435 20436 For full documentation of the `ms_struct' and `gcc_struct' attributes 20437 please see the documentation in *Note i386 Type Attributes::. 20438 20439 The `altivec' attribute allows one to declare AltiVec vector data 20440 types supported by the AltiVec Programming Interface Manual. The 20441 attribute requires an argument to specify one of three vector types: 20442 `vector__', `pixel__' (always followed by unsigned short), and `bool__' 20443 (always followed by unsigned). 20444 20445 __attribute__((altivec(vector__))) 20446 __attribute__((altivec(pixel__))) unsigned short 20447 __attribute__((altivec(bool__))) unsigned 20448 20449 These attributes mainly are intended to support the `__vector', 20450 `__pixel', and `__bool' AltiVec keywords. 20451 20452 5.35.4 SPU Type Attributes 20453 -------------------------- 20454 20455 The SPU supports the `spu_vector' attribute for types. This attribute 20456 allows one to declare vector data types supported by the 20457 Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 20458 to support the `__vector' keyword. 20459 20460 20461 File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: C Extensions 20462 20463 5.36 An Inline Function is As Fast As a Macro 20464 ============================================= 20465 20466 By declaring a function inline, you can direct GCC to make calls to 20467 that function faster. One way GCC can achieve this is to integrate 20468 that function's code into the code for its callers. This makes 20469 execution faster by eliminating the function-call overhead; in 20470 addition, if any of the actual argument values are constant, their 20471 known values may permit simplifications at compile time so that not all 20472 of the inline function's code needs to be included. The effect on code 20473 size is less predictable; object code may be larger or smaller with 20474 function inlining, depending on the particular case. You can also 20475 direct GCC to try to integrate all "simple enough" functions into their 20476 callers with the option `-finline-functions'. 20477 20478 GCC implements three different semantics of declaring a function 20479 inline. One is available with `-std=gnu89' or `-fgnu89-inline' or when 20480 `gnu_inline' attribute is present on all inline declarations, another 20481 when `-std=c99' or `-std=gnu99' (without `-fgnu89-inline'), and the 20482 third is used when compiling C++. 20483 20484 To declare a function inline, use the `inline' keyword in its 20485 declaration, like this: 20486 20487 static inline int 20488 inc (int *a) 20489 { 20490 (*a)++; 20491 } 20492 20493 If you are writing a header file to be included in ISO C89 programs, 20494 write `__inline__' instead of `inline'. *Note Alternate Keywords::. 20495 20496 The three types of inlining behave similarly in two important cases: 20497 when the `inline' keyword is used on a `static' function, like the 20498 example above, and when a function is first declared without using the 20499 `inline' keyword and then is defined with `inline', like this: 20500 20501 extern int inc (int *a); 20502 inline int 20503 inc (int *a) 20504 { 20505 (*a)++; 20506 } 20507 20508 In both of these common cases, the program behaves the same as if you 20509 had not used the `inline' keyword, except for its speed. 20510 20511 When a function is both inline and `static', if all calls to the 20512 function are integrated into the caller, and the function's address is 20513 never used, then the function's own assembler code is never referenced. 20514 In this case, GCC does not actually output assembler code for the 20515 function, unless you specify the option `-fkeep-inline-functions'. 20516 Some calls cannot be integrated for various reasons (in particular, 20517 calls that precede the function's definition cannot be integrated, and 20518 neither can recursive calls within the definition). If there is a 20519 nonintegrated call, then the function is compiled to assembler code as 20520 usual. The function must also be compiled as usual if the program 20521 refers to its address, because that can't be inlined. 20522 20523 Note that certain usages in a function definition can make it 20524 unsuitable for inline substitution. Among these usages are: use of 20525 varargs, use of alloca, use of variable sized data types (*note 20526 Variable Length::), use of computed goto (*note Labels as Values::), 20527 use of nonlocal goto, and nested functions (*note Nested Functions::). 20528 Using `-Winline' will warn when a function marked `inline' could not be 20529 substituted, and will give the reason for the failure. 20530 20531 As required by ISO C++, GCC considers member functions defined within 20532 the body of a class to be marked inline even if they are not explicitly 20533 declared with the `inline' keyword. You can override this with 20534 `-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 20535 Dialect Options. 20536 20537 GCC does not inline any functions when not optimizing unless you 20538 specify the `always_inline' attribute for the function, like this: 20539 20540 /* Prototype. */ 20541 inline void foo (const char) __attribute__((always_inline)); 20542 20543 The remainder of this section is specific to GNU C89 inlining. 20544 20545 When an inline function is not `static', then the compiler must assume 20546 that there may be calls from other source files; since a global symbol 20547 can be defined only once in any program, the function must not be 20548 defined in the other source files, so the calls therein cannot be 20549 integrated. Therefore, a non-`static' inline function is always 20550 compiled on its own in the usual fashion. 20551 20552 If you specify both `inline' and `extern' in the function definition, 20553 then the definition is used only for inlining. In no case is the 20554 function compiled on its own, not even if you refer to its address 20555 explicitly. Such an address becomes an external reference, as if you 20556 had only declared the function, and had not defined it. 20557 20558 This combination of `inline' and `extern' has almost the effect of a 20559 macro. The way to use it is to put a function definition in a header 20560 file with these keywords, and put another copy of the definition 20561 (lacking `inline' and `extern') in a library file. The definition in 20562 the header file will cause most calls to the function to be inlined. 20563 If any uses of the function remain, they will refer to the single copy 20564 in the library. 20565 20566 20567 File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Inline, Up: C Extensions 20568 20569 5.37 Assembler Instructions with C Expression Operands 20570 ====================================================== 20571 20572 In an assembler instruction using `asm', you can specify the operands 20573 of the instruction using C expressions. This means you need not guess 20574 which registers or memory locations will contain the data you want to 20575 use. 20576 20577 You must specify an assembler instruction template much like what 20578 appears in a machine description, plus an operand constraint string for 20579 each operand. 20580 20581 For example, here is how to use the 68881's `fsinx' instruction: 20582 20583 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 20584 20585 Here `angle' is the C expression for the input operand while `result' 20586 is that of the output operand. Each has `"f"' as its operand 20587 constraint, saying that a floating point register is required. The `=' 20588 in `=f' indicates that the operand is an output; all output operands' 20589 constraints must use `='. The constraints use the same language used 20590 in the machine description (*note Constraints::). 20591 20592 Each operand is described by an operand-constraint string followed by 20593 the C expression in parentheses. A colon separates the assembler 20594 template from the first output operand and another separates the last 20595 output operand from the first input, if any. Commas separate the 20596 operands within each group. The total number of operands is currently 20597 limited to 30; this limitation may be lifted in some future version of 20598 GCC. 20599 20600 If there are no output operands but there are input operands, you must 20601 place two consecutive colons surrounding the place where the output 20602 operands would go. 20603 20604 As of GCC version 3.1, it is also possible to specify input and output 20605 operands using symbolic names which can be referenced within the 20606 assembler code. These names are specified inside square brackets 20607 preceding the constraint string, and can be referenced inside the 20608 assembler code using `%[NAME]' instead of a percentage sign followed by 20609 the operand number. Using named operands the above example could look 20610 like: 20611 20612 asm ("fsinx %[angle],%[output]" 20613 : [output] "=f" (result) 20614 : [angle] "f" (angle)); 20615 20616 Note that the symbolic operand names have no relation whatsoever to 20617 other C identifiers. You may use any name you like, even those of 20618 existing C symbols, but you must ensure that no two operands within the 20619 same assembler construct use the same symbolic name. 20620 20621 Output operand expressions must be lvalues; the compiler can check 20622 this. The input operands need not be lvalues. The compiler cannot 20623 check whether the operands have data types that are reasonable for the 20624 instruction being executed. It does not parse the assembler instruction 20625 template and does not know what it means or even whether it is valid 20626 assembler input. The extended `asm' feature is most often used for 20627 machine instructions the compiler itself does not know exist. If the 20628 output expression cannot be directly addressed (for example, it is a 20629 bit-field), your constraint must allow a register. In that case, GCC 20630 will use the register as the output of the `asm', and then store that 20631 register into the output. 20632 20633 The ordinary output operands must be write-only; GCC will assume that 20634 the values in these operands before the instruction are dead and need 20635 not be generated. Extended asm supports input-output or read-write 20636 operands. Use the constraint character `+' to indicate such an operand 20637 and list it with the output operands. You should only use read-write 20638 operands when the constraints for the operand (or the operand in which 20639 only some of the bits are to be changed) allow a register. 20640 20641 You may, as an alternative, logically split its function into two 20642 separate operands, one input operand and one write-only output operand. 20643 The connection between them is expressed by constraints which say they 20644 need to be in the same location when the instruction executes. You can 20645 use the same C expression for both operands, or different expressions. 20646 For example, here we write the (fictitious) `combine' instruction with 20647 `bar' as its read-only source operand and `foo' as its read-write 20648 destination: 20649 20650 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 20651 20652 The constraint `"0"' for operand 1 says that it must occupy the same 20653 location as operand 0. A number in constraint is allowed only in an 20654 input operand and it must refer to an output operand. 20655 20656 Only a number in the constraint can guarantee that one operand will be 20657 in the same place as another. The mere fact that `foo' is the value of 20658 both operands is not enough to guarantee that they will be in the same 20659 place in the generated assembler code. The following would not work 20660 reliably: 20661 20662 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 20663 20664 Various optimizations or reloading could cause operands 0 and 1 to be 20665 in different registers; GCC knows no reason not to do so. For example, 20666 the compiler might find a copy of the value of `foo' in one register and 20667 use it for operand 1, but generate the output operand 0 in a different 20668 register (copying it afterward to `foo''s own address). Of course, 20669 since the register for operand 1 is not even mentioned in the assembler 20670 code, the result will not work, but GCC can't tell that. 20671 20672 As of GCC version 3.1, one may write `[NAME]' instead of the operand 20673 number for a matching constraint. For example: 20674 20675 asm ("cmoveq %1,%2,%[result]" 20676 : [result] "=r"(result) 20677 : "r" (test), "r"(new), "[result]"(old)); 20678 20679 Sometimes you need to make an `asm' operand be a specific register, 20680 but there's no matching constraint letter for that register _by 20681 itself_. To force the operand into that register, use a local variable 20682 for the operand and specify the register in the variable declaration. 20683 *Note Explicit Reg Vars::. Then for the `asm' operand, use any 20684 register constraint letter that matches the register: 20685 20686 register int *p1 asm ("r0") = ...; 20687 register int *p2 asm ("r1") = ...; 20688 register int *result asm ("r0"); 20689 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 20690 20691 In the above example, beware that a register that is call-clobbered by 20692 the target ABI will be overwritten by any function call in the 20693 assignment, including library calls for arithmetic operators. Also a 20694 register may be clobbered when generating some operations, like 20695 variable shift, memory copy or memory move on x86. Assuming it is a 20696 call-clobbered register, this may happen to `r0' above by the 20697 assignment to `p2'. If you have to use such a register, use temporary 20698 variables for expressions between the register assignment and use: 20699 20700 int t1 = ...; 20701 register int *p1 asm ("r0") = ...; 20702 register int *p2 asm ("r1") = t1; 20703 register int *result asm ("r0"); 20704 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 20705 20706 Some instructions clobber specific hard registers. To describe this, 20707 write a third colon after the input operands, followed by the names of 20708 the clobbered hard registers (given as strings). Here is a realistic 20709 example for the VAX: 20710 20711 asm volatile ("movc3 %0,%1,%2" 20712 : /* no outputs */ 20713 : "g" (from), "g" (to), "g" (count) 20714 : "r0", "r1", "r2", "r3", "r4", "r5"); 20715 20716 You may not write a clobber description in a way that overlaps with an 20717 input or output operand. For example, you may not have an operand 20718 describing a register class with one member if you mention that register 20719 in the clobber list. Variables declared to live in specific registers 20720 (*note Explicit Reg Vars::), and used as asm input or output operands 20721 must have no part mentioned in the clobber description. There is no 20722 way for you to specify that an input operand is modified without also 20723 specifying it as an output operand. Note that if all the output 20724 operands you specify are for this purpose (and hence unused), you will 20725 then also need to specify `volatile' for the `asm' construct, as 20726 described below, to prevent GCC from deleting the `asm' statement as 20727 unused. 20728 20729 If you refer to a particular hardware register from the assembler code, 20730 you will probably have to list the register after the third colon to 20731 tell the compiler the register's value is modified. In some assemblers, 20732 the register names begin with `%'; to produce one `%' in the assembler 20733 code, you must write `%%' in the input. 20734 20735 If your assembler instruction can alter the condition code register, 20736 add `cc' to the list of clobbered registers. GCC on some machines 20737 represents the condition codes as a specific hardware register; `cc' 20738 serves to name this register. On other machines, the condition code is 20739 handled differently, and specifying `cc' has no effect. But it is 20740 valid no matter what the machine. 20741 20742 If your assembler instructions access memory in an unpredictable 20743 fashion, add `memory' to the list of clobbered registers. This will 20744 cause GCC to not keep memory values cached in registers across the 20745 assembler instruction and not optimize stores or loads to that memory. 20746 You will also want to add the `volatile' keyword if the memory affected 20747 is not listed in the inputs or outputs of the `asm', as the `memory' 20748 clobber does not count as a side-effect of the `asm'. If you know how 20749 large the accessed memory is, you can add it as input or output but if 20750 this is not known, you should add `memory'. As an example, if you 20751 access ten bytes of a string, you can use a memory input like: 20752 20753 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 20754 20755 Note that in the following example the memory input is necessary, 20756 otherwise GCC might optimize the store to `x' away: 20757 int foo () 20758 { 20759 int x = 42; 20760 int *y = &x; 20761 int result; 20762 asm ("magic stuff accessing an 'int' pointed to by '%1'" 20763 "=&d" (r) : "a" (y), "m" (*y)); 20764 return result; 20765 } 20766 20767 You can put multiple assembler instructions together in a single `asm' 20768 template, separated by the characters normally used in assembly code 20769 for the system. A combination that works in most places is a newline 20770 to break the line, plus a tab character to move to the instruction field 20771 (written as `\n\t'). Sometimes semicolons can be used, if the 20772 assembler allows semicolons as a line-breaking character. Note that 20773 some assembler dialects use semicolons to start a comment. The input 20774 operands are guaranteed not to use any of the clobbered registers, and 20775 neither will the output operands' addresses, so you can read and write 20776 the clobbered registers as many times as you like. Here is an example 20777 of multiple instructions in a template; it assumes the subroutine 20778 `_foo' accepts arguments in registers 9 and 10: 20779 20780 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 20781 : /* no outputs */ 20782 : "g" (from), "g" (to) 20783 : "r9", "r10"); 20784 20785 Unless an output operand has the `&' constraint modifier, GCC may 20786 allocate it in the same register as an unrelated input operand, on the 20787 assumption the inputs are consumed before the outputs are produced. 20788 This assumption may be false if the assembler code actually consists of 20789 more than one instruction. In such a case, use `&' for each output 20790 operand that may not overlap an input. *Note Modifiers::. 20791 20792 If you want to test the condition code produced by an assembler 20793 instruction, you must include a branch and a label in the `asm' 20794 construct, as follows: 20795 20796 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 20797 : "g" (result) 20798 : "g" (input)); 20799 20800 This assumes your assembler supports local labels, as the GNU assembler 20801 and most Unix assemblers do. 20802 20803 Speaking of labels, jumps from one `asm' to another are not supported. 20804 The compiler's optimizers do not know about these jumps, and therefore 20805 they cannot take account of them when deciding how to optimize. 20806 20807 Usually the most convenient way to use these `asm' instructions is to 20808 encapsulate them in macros that look like functions. For example, 20809 20810 #define sin(x) \ 20811 ({ double __value, __arg = (x); \ 20812 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 20813 __value; }) 20814 20815 Here the variable `__arg' is used to make sure that the instruction 20816 operates on a proper `double' value, and to accept only those arguments 20817 `x' which can convert automatically to a `double'. 20818 20819 Another way to make sure the instruction operates on the correct data 20820 type is to use a cast in the `asm'. This is different from using a 20821 variable `__arg' in that it converts more different types. For 20822 example, if the desired type were `int', casting the argument to `int' 20823 would accept a pointer with no complaint, while assigning the argument 20824 to an `int' variable named `__arg' would warn about using a pointer 20825 unless the caller explicitly casts it. 20826 20827 If an `asm' has output operands, GCC assumes for optimization purposes 20828 the instruction has no side effects except to change the output 20829 operands. This does not mean instructions with a side effect cannot be 20830 used, but you must be careful, because the compiler may eliminate them 20831 if the output operands aren't used, or move them out of loops, or 20832 replace two with one if they constitute a common subexpression. Also, 20833 if your instruction does have a side effect on a variable that otherwise 20834 appears not to change, the old value of the variable may be reused later 20835 if it happens to be found in a register. 20836 20837 You can prevent an `asm' instruction from being deleted by writing the 20838 keyword `volatile' after the `asm'. For example: 20839 20840 #define get_and_set_priority(new) \ 20841 ({ int __old; \ 20842 asm volatile ("get_and_set_priority %0, %1" \ 20843 : "=g" (__old) : "g" (new)); \ 20844 __old; }) 20845 20846 The `volatile' keyword indicates that the instruction has important 20847 side-effects. GCC will not delete a volatile `asm' if it is reachable. 20848 (The instruction can still be deleted if GCC can prove that 20849 control-flow will never reach the location of the instruction.) Note 20850 that even a volatile `asm' instruction can be moved relative to other 20851 code, including across jump instructions. For example, on many targets 20852 there is a system register which can be set to control the rounding 20853 mode of floating point operations. You might try setting it with a 20854 volatile `asm', like this PowerPC example: 20855 20856 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 20857 sum = x + y; 20858 20859 This will not work reliably, as the compiler may move the addition back 20860 before the volatile `asm'. To make it work you need to add an 20861 artificial dependency to the `asm' referencing a variable in the code 20862 you don't want moved, for example: 20863 20864 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 20865 sum = x + y; 20866 20867 Similarly, you can't expect a sequence of volatile `asm' instructions 20868 to remain perfectly consecutive. If you want consecutive output, use a 20869 single `asm'. Also, GCC will perform some optimizations across a 20870 volatile `asm' instruction; GCC does not "forget everything" when it 20871 encounters a volatile `asm' instruction the way some other compilers do. 20872 20873 An `asm' instruction without any output operands will be treated 20874 identically to a volatile `asm' instruction. 20875 20876 It is a natural idea to look for a way to give access to the condition 20877 code left by the assembler instruction. However, when we attempted to 20878 implement this, we found no way to make it work reliably. The problem 20879 is that output operands might need reloading, which would result in 20880 additional following "store" instructions. On most machines, these 20881 instructions would alter the condition code before there was time to 20882 test it. This problem doesn't arise for ordinary "test" and "compare" 20883 instructions because they don't have any output operands. 20884 20885 For reasons similar to those described above, it is not possible to 20886 give an assembler instruction access to the condition code left by 20887 previous instructions. 20888 20889 If you are writing a header file that should be includable in ISO C 20890 programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 20891 20892 5.37.1 Size of an `asm' 20893 ----------------------- 20894 20895 Some targets require that GCC track the size of each instruction used in 20896 order to generate correct code. Because the final length of an `asm' 20897 is only known by the assembler, GCC must make an estimate as to how big 20898 it will be. The estimate is formed by counting the number of 20899 statements in the pattern of the `asm' and multiplying that by the 20900 length of the longest instruction on that processor. Statements in the 20901 `asm' are identified by newline characters and whatever statement 20902 separator characters are supported by the assembler; on most processors 20903 this is the ``;'' character. 20904 20905 Normally, GCC's estimate is perfectly adequate to ensure that correct 20906 code is generated, but it is possible to confuse the compiler if you use 20907 pseudo instructions or assembler macros that expand into multiple real 20908 instructions or if you use assembler directives that expand to more 20909 space in the object file than would be needed for a single instruction. 20910 If this happens then the assembler will produce a diagnostic saying that 20911 a label is unreachable. 20912 20913 5.37.2 i386 floating point asm operands 20914 --------------------------------------- 20915 20916 There are several rules on the usage of stack-like regs in asm_operands 20917 insns. These rules apply only to the operands that are stack-like regs: 20918 20919 1. Given a set of input regs that die in an asm_operands, it is 20920 necessary to know which are implicitly popped by the asm, and 20921 which must be explicitly popped by gcc. 20922 20923 An input reg that is implicitly popped by the asm must be 20924 explicitly clobbered, unless it is constrained to match an output 20925 operand. 20926 20927 2. For any input reg that is implicitly popped by an asm, it is 20928 necessary to know how to adjust the stack to compensate for the 20929 pop. If any non-popped input is closer to the top of the 20930 reg-stack than the implicitly popped reg, it would not be possible 20931 to know what the stack looked like--it's not clear how the rest of 20932 the stack "slides up". 20933 20934 All implicitly popped input regs must be closer to the top of the 20935 reg-stack than any input that is not implicitly popped. 20936 20937 It is possible that if an input dies in an insn, reload might use 20938 the input reg for an output reload. Consider this example: 20939 20940 asm ("foo" : "=t" (a) : "f" (b)); 20941 20942 This asm says that input B is not popped by the asm, and that the 20943 asm pushes a result onto the reg-stack, i.e., the stack is one 20944 deeper after the asm than it was before. But, it is possible that 20945 reload will think that it can use the same reg for both the input 20946 and the output, if input B dies in this insn. 20947 20948 If any input operand uses the `f' constraint, all output reg 20949 constraints must use the `&' earlyclobber. 20950 20951 The asm above would be written as 20952 20953 asm ("foo" : "=&t" (a) : "f" (b)); 20954 20955 3. Some operands need to be in particular places on the stack. All 20956 output operands fall in this category--there is no other way to 20957 know which regs the outputs appear in unless the user indicates 20958 this in the constraints. 20959 20960 Output operands must specifically indicate which reg an output 20961 appears in after an asm. `=f' is not allowed: the operand 20962 constraints must select a class with a single reg. 20963 20964 4. Output operands may not be "inserted" between existing stack regs. 20965 Since no 387 opcode uses a read/write operand, all output operands 20966 are dead before the asm_operands, and are pushed by the 20967 asm_operands. It makes no sense to push anywhere but the top of 20968 the reg-stack. 20969 20970 Output operands must start at the top of the reg-stack: output 20971 operands may not "skip" a reg. 20972 20973 5. Some asm statements may need extra stack space for internal 20974 calculations. This can be guaranteed by clobbering stack registers 20975 unrelated to the inputs and outputs. 20976 20977 20978 Here are a couple of reasonable asms to want to write. This asm takes 20979 one input, which is internally popped, and produces two outputs. 20980 20981 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 20982 20983 This asm takes two inputs, which are popped by the `fyl2xp1' opcode, 20984 and replaces them with one output. The user must code the `st(1)' 20985 clobber for reg-stack.c to know that `fyl2xp1' pops both inputs. 20986 20987 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 20988 20989 20990 File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 20991 20992 5.38 Constraints for `asm' Operands 20993 =================================== 20994 20995 Here are specific details on what constraint letters you can use with 20996 `asm' operands. Constraints can say whether an operand may be in a 20997 register, and which kinds of register; whether the operand can be a 20998 memory reference, and which kinds of address; whether the operand may 20999 be an immediate constant, and which possible values it may have. 21000 Constraints can also require two operands to match. 21001 21002 * Menu: 21003 21004 * Simple Constraints:: Basic use of constraints. 21005 * Multi-Alternative:: When an insn has two alternative constraint-patterns. 21006 * Modifiers:: More precise control over effects of constraints. 21007 * Machine Constraints:: Special constraints for some particular machines. 21008 21009 21010 File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 21011 21012 5.38.1 Simple Constraints 21013 ------------------------- 21014 21015 The simplest kind of constraint is a string full of letters, each of 21016 which describes one kind of operand that is permitted. Here are the 21017 letters that are allowed: 21018 21019 whitespace 21020 Whitespace characters are ignored and can be inserted at any 21021 position except the first. This enables each alternative for 21022 different operands to be visually aligned in the machine 21023 description even if they have different number of constraints and 21024 modifiers. 21025 21026 `m' 21027 A memory operand is allowed, with any kind of address that the 21028 machine supports in general. Note that the letter used for the 21029 general memory constraint can be re-defined by a back end using 21030 the `TARGET_MEM_CONSTRAINT' macro. 21031 21032 `o' 21033 A memory operand is allowed, but only if the address is 21034 "offsettable". This means that adding a small integer (actually, 21035 the width in bytes of the operand, as determined by its machine 21036 mode) may be added to the address and the result is also a valid 21037 memory address. 21038 21039 For example, an address which is constant is offsettable; so is an 21040 address that is the sum of a register and a constant (as long as a 21041 slightly larger constant is also within the range of 21042 address-offsets supported by the machine); but an autoincrement or 21043 autodecrement address is not offsettable. More complicated 21044 indirect/indexed addresses may or may not be offsettable depending 21045 on the other addressing modes that the machine supports. 21046 21047 Note that in an output operand which can be matched by another 21048 operand, the constraint letter `o' is valid only when accompanied 21049 by both `<' (if the target machine has predecrement addressing) 21050 and `>' (if the target machine has preincrement addressing). 21051 21052 `V' 21053 A memory operand that is not offsettable. In other words, 21054 anything that would fit the `m' constraint but not the `o' 21055 constraint. 21056 21057 `<' 21058 A memory operand with autodecrement addressing (either 21059 predecrement or postdecrement) is allowed. 21060 21061 `>' 21062 A memory operand with autoincrement addressing (either 21063 preincrement or postincrement) is allowed. 21064 21065 `r' 21066 A register operand is allowed provided that it is in a general 21067 register. 21068 21069 `i' 21070 An immediate integer operand (one with constant value) is allowed. 21071 This includes symbolic constants whose values will be known only at 21072 assembly time or later. 21073 21074 `n' 21075 An immediate integer operand with a known numeric value is allowed. 21076 Many systems cannot support assembly-time constants for operands 21077 less than a word wide. Constraints for these operands should use 21078 `n' rather than `i'. 21079 21080 `I', `J', `K', ... `P' 21081 Other letters in the range `I' through `P' may be defined in a 21082 machine-dependent fashion to permit immediate integer operands with 21083 explicit integer values in specified ranges. For example, on the 21084 68000, `I' is defined to stand for the range of values 1 to 8. 21085 This is the range permitted as a shift count in the shift 21086 instructions. 21087 21088 `E' 21089 An immediate floating operand (expression code `const_double') is 21090 allowed, but only if the target floating point format is the same 21091 as that of the host machine (on which the compiler is running). 21092 21093 `F' 21094 An immediate floating operand (expression code `const_double' or 21095 `const_vector') is allowed. 21096 21097 `G', `H' 21098 `G' and `H' may be defined in a machine-dependent fashion to 21099 permit immediate floating operands in particular ranges of values. 21100 21101 `s' 21102 An immediate integer operand whose value is not an explicit 21103 integer is allowed. 21104 21105 This might appear strange; if an insn allows a constant operand 21106 with a value not known at compile time, it certainly must allow 21107 any known value. So why use `s' instead of `i'? Sometimes it 21108 allows better code to be generated. 21109 21110 For example, on the 68000 in a fullword instruction it is possible 21111 to use an immediate operand; but if the immediate value is between 21112 -128 and 127, better code results from loading the value into a 21113 register and using the register. This is because the load into 21114 the register can be done with a `moveq' instruction. We arrange 21115 for this to happen by defining the letter `K' to mean "any integer 21116 outside the range -128 to 127", and then specifying `Ks' in the 21117 operand constraints. 21118 21119 `g' 21120 Any register, memory or immediate integer operand is allowed, 21121 except for registers that are not general registers. 21122 21123 `X' 21124 Any operand whatsoever is allowed. 21125 21126 `0', `1', `2', ... `9' 21127 An operand that matches the specified operand number is allowed. 21128 If a digit is used together with letters within the same 21129 alternative, the digit should come last. 21130 21131 This number is allowed to be more than a single digit. If multiple 21132 digits are encountered consecutively, they are interpreted as a 21133 single decimal integer. There is scant chance for ambiguity, 21134 since to-date it has never been desirable that `10' be interpreted 21135 as matching either operand 1 _or_ operand 0. Should this be 21136 desired, one can use multiple alternatives instead. 21137 21138 This is called a "matching constraint" and what it really means is 21139 that the assembler has only a single operand that fills two roles 21140 which `asm' distinguishes. For example, an add instruction uses 21141 two input operands and an output operand, but on most CISC 21142 machines an add instruction really has only two operands, one of 21143 them an input-output operand: 21144 21145 addl #35,r12 21146 21147 Matching constraints are used in these circumstances. More 21148 precisely, the two operands that match must include one input-only 21149 operand and one output-only operand. Moreover, the digit must be a 21150 smaller number than the number of the operand that uses it in the 21151 constraint. 21152 21153 `p' 21154 An operand that is a valid memory address is allowed. This is for 21155 "load address" and "push address" instructions. 21156 21157 `p' in the constraint must be accompanied by `address_operand' as 21158 the predicate in the `match_operand'. This predicate interprets 21159 the mode specified in the `match_operand' as the mode of the memory 21160 reference for which the address would be valid. 21161 21162 OTHER-LETTERS 21163 Other letters can be defined in machine-dependent fashion to stand 21164 for particular classes of registers or other arbitrary operand 21165 types. `d', `a' and `f' are defined on the 68000/68020 to stand 21166 for data, address and floating point registers. 21167 21168 21169 File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 21170 21171 5.38.2 Multiple Alternative Constraints 21172 --------------------------------------- 21173 21174 Sometimes a single instruction has multiple alternative sets of possible 21175 operands. For example, on the 68000, a logical-or instruction can 21176 combine register or an immediate value into memory, or it can combine 21177 any kind of operand into a register; but it cannot combine one memory 21178 location into another. 21179 21180 These constraints are represented as multiple alternatives. An 21181 alternative can be described by a series of letters for each operand. 21182 The overall constraint for an operand is made from the letters for this 21183 operand from the first alternative, a comma, the letters for this 21184 operand from the second alternative, a comma, and so on until the last 21185 alternative. 21186 21187 If all the operands fit any one alternative, the instruction is valid. 21188 Otherwise, for each alternative, the compiler counts how many 21189 instructions must be added to copy the operands so that that 21190 alternative applies. The alternative requiring the least copying is 21191 chosen. If two alternatives need the same amount of copying, the one 21192 that comes first is chosen. These choices can be altered with the `?' 21193 and `!' characters: 21194 21195 `?' 21196 Disparage slightly the alternative that the `?' appears in, as a 21197 choice when no alternative applies exactly. The compiler regards 21198 this alternative as one unit more costly for each `?' that appears 21199 in it. 21200 21201 `!' 21202 Disparage severely the alternative that the `!' appears in. This 21203 alternative can still be used if it fits without reloading, but if 21204 reloading is needed, some other alternative will be used. 21205 21206 21207 File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 21208 21209 5.38.3 Constraint Modifier Characters 21210 ------------------------------------- 21211 21212 Here are constraint modifier characters. 21213 21214 `=' 21215 Means that this operand is write-only for this instruction: the 21216 previous value is discarded and replaced by output data. 21217 21218 `+' 21219 Means that this operand is both read and written by the 21220 instruction. 21221 21222 When the compiler fixes up the operands to satisfy the constraints, 21223 it needs to know which operands are inputs to the instruction and 21224 which are outputs from it. `=' identifies an output; `+' 21225 identifies an operand that is both input and output; all other 21226 operands are assumed to be input only. 21227 21228 If you specify `=' or `+' in a constraint, you put it in the first 21229 character of the constraint string. 21230 21231 `&' 21232 Means (in a particular alternative) that this operand is an 21233 "earlyclobber" operand, which is modified before the instruction is 21234 finished using the input operands. Therefore, this operand may 21235 not lie in a register that is used as an input operand or as part 21236 of any memory address. 21237 21238 `&' applies only to the alternative in which it is written. In 21239 constraints with multiple alternatives, sometimes one alternative 21240 requires `&' while others do not. See, for example, the `movdf' 21241 insn of the 68000. 21242 21243 An input operand can be tied to an earlyclobber operand if its only 21244 use as an input occurs before the early result is written. Adding 21245 alternatives of this form often allows GCC to produce better code 21246 when only some of the inputs can be affected by the earlyclobber. 21247 See, for example, the `mulsi3' insn of the ARM. 21248 21249 `&' does not obviate the need to write `='. 21250 21251 `%' 21252 Declares the instruction to be commutative for this operand and the 21253 following operand. This means that the compiler may interchange 21254 the two operands if that is the cheapest way to make all operands 21255 fit the constraints. GCC can only handle one commutative pair in 21256 an asm; if you use more, the compiler may fail. Note that you 21257 need not use the modifier if the two alternatives are strictly 21258 identical; this would only waste time in the reload pass. The 21259 modifier is not operational after register allocation, so the 21260 result of `define_peephole2' and `define_split's performed after 21261 reload cannot rely on `%' to make the intended insn match. 21262 21263 `#' 21264 Says that all following characters, up to the next comma, are to be 21265 ignored as a constraint. They are significant only for choosing 21266 register preferences. 21267 21268 `*' 21269 Says that the following character should be ignored when choosing 21270 register preferences. `*' has no effect on the meaning of the 21271 constraint as a constraint, and no effect on reloading. 21272 21273 21274 21275 File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 21276 21277 5.38.4 Constraints for Particular Machines 21278 ------------------------------------------ 21279 21280 Whenever possible, you should use the general-purpose constraint letters 21281 in `asm' arguments, since they will convey meaning more readily to 21282 people reading your code. Failing that, use the constraint letters 21283 that usually have very similar meanings across architectures. The most 21284 commonly used constraints are `m' and `r' (for memory and 21285 general-purpose registers respectively; *note Simple Constraints::), and 21286 `I', usually the letter indicating the most common immediate-constant 21287 format. 21288 21289 Each architecture defines additional constraints. These constraints 21290 are used by the compiler itself for instruction generation, as well as 21291 for `asm' statements; therefore, some of the constraints are not 21292 particularly useful for `asm'. Here is a summary of some of the 21293 machine-dependent constraints available on some particular machines; it 21294 includes both constraints that are useful for `asm' and constraints 21295 that aren't. The compiler source file mentioned in the table heading 21296 for each architecture is the definitive reference for the meanings of 21297 that architecture's constraints. 21298 21299 _ARM family--`config/arm/arm.h'_ 21300 21301 `f' 21302 Floating-point register 21303 21304 `w' 21305 VFP floating-point register 21306 21307 `F' 21308 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 21309 4.0, 5.0 or 10.0 21310 21311 `G' 21312 Floating-point constant that would satisfy the constraint `F' 21313 if it were negated 21314 21315 `I' 21316 Integer that is valid as an immediate operand in a data 21317 processing instruction. That is, an integer in the range 0 21318 to 255 rotated by a multiple of 2 21319 21320 `J' 21321 Integer in the range -4095 to 4095 21322 21323 `K' 21324 Integer that satisfies constraint `I' when inverted (ones 21325 complement) 21326 21327 `L' 21328 Integer that satisfies constraint `I' when negated (twos 21329 complement) 21330 21331 `M' 21332 Integer in the range 0 to 32 21333 21334 `Q' 21335 A memory reference where the exact address is in a single 21336 register (``m'' is preferable for `asm' statements) 21337 21338 `R' 21339 An item in the constant pool 21340 21341 `S' 21342 A symbol in the text segment of the current file 21343 21344 `Uv' 21345 A memory reference suitable for VFP load/store insns 21346 (reg+constant offset) 21347 21348 `Uy' 21349 A memory reference suitable for iWMMXt load/store 21350 instructions. 21351 21352 `Uq' 21353 A memory reference suitable for the ARMv4 ldrsb instruction. 21354 21355 _AVR family--`config/avr/constraints.md'_ 21356 21357 `l' 21358 Registers from r0 to r15 21359 21360 `a' 21361 Registers from r16 to r23 21362 21363 `d' 21364 Registers from r16 to r31 21365 21366 `w' 21367 Registers from r24 to r31. These registers can be used in 21368 `adiw' command 21369 21370 `e' 21371 Pointer register (r26-r31) 21372 21373 `b' 21374 Base pointer register (r28-r31) 21375 21376 `q' 21377 Stack pointer register (SPH:SPL) 21378 21379 `t' 21380 Temporary register r0 21381 21382 `x' 21383 Register pair X (r27:r26) 21384 21385 `y' 21386 Register pair Y (r29:r28) 21387 21388 `z' 21389 Register pair Z (r31:r30) 21390 21391 `I' 21392 Constant greater than -1, less than 64 21393 21394 `J' 21395 Constant greater than -64, less than 1 21396 21397 `K' 21398 Constant integer 2 21399 21400 `L' 21401 Constant integer 0 21402 21403 `M' 21404 Constant that fits in 8 bits 21405 21406 `N' 21407 Constant integer -1 21408 21409 `O' 21410 Constant integer 8, 16, or 24 21411 21412 `P' 21413 Constant integer 1 21414 21415 `G' 21416 A floating point constant 0.0 21417 21418 `R' 21419 Integer constant in the range -6 ... 5. 21420 21421 `Q' 21422 A memory address based on Y or Z pointer with displacement. 21423 21424 _CRX Architecture--`config/crx/crx.h'_ 21425 21426 `b' 21427 Registers from r0 to r14 (registers without stack pointer) 21428 21429 `l' 21430 Register r16 (64-bit accumulator lo register) 21431 21432 `h' 21433 Register r17 (64-bit accumulator hi register) 21434 21435 `k' 21436 Register pair r16-r17. (64-bit accumulator lo-hi pair) 21437 21438 `I' 21439 Constant that fits in 3 bits 21440 21441 `J' 21442 Constant that fits in 4 bits 21443 21444 `K' 21445 Constant that fits in 5 bits 21446 21447 `L' 21448 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 21449 21450 `G' 21451 Floating point constant that is legal for store immediate 21452 21453 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 21454 21455 `a' 21456 General register 1 21457 21458 `f' 21459 Floating point register 21460 21461 `q' 21462 Shift amount register 21463 21464 `x' 21465 Floating point register (deprecated) 21466 21467 `y' 21468 Upper floating point register (32-bit), floating point 21469 register (64-bit) 21470 21471 `Z' 21472 Any register 21473 21474 `I' 21475 Signed 11-bit integer constant 21476 21477 `J' 21478 Signed 14-bit integer constant 21479 21480 `K' 21481 Integer constant that can be deposited with a `zdepi' 21482 instruction 21483 21484 `L' 21485 Signed 5-bit integer constant 21486 21487 `M' 21488 Integer constant 0 21489 21490 `N' 21491 Integer constant that can be loaded with a `ldil' instruction 21492 21493 `O' 21494 Integer constant whose value plus one is a power of 2 21495 21496 `P' 21497 Integer constant that can be used for `and' operations in 21498 `depi' and `extru' instructions 21499 21500 `S' 21501 Integer constant 31 21502 21503 `U' 21504 Integer constant 63 21505 21506 `G' 21507 Floating-point constant 0.0 21508 21509 `A' 21510 A `lo_sum' data-linkage-table memory operand 21511 21512 `Q' 21513 A memory operand that can be used as the destination operand 21514 of an integer store instruction 21515 21516 `R' 21517 A scaled or unscaled indexed memory operand 21518 21519 `T' 21520 A memory operand for floating-point loads and stores 21521 21522 `W' 21523 A register indirect memory operand 21524 21525 _picoChip family--`picochip.h'_ 21526 21527 `k' 21528 Stack register. 21529 21530 `f' 21531 Pointer register. A register which can be used to access 21532 memory without supplying an offset. Any other register can 21533 be used to access memory, but will need a constant offset. 21534 In the case of the offset being zero, it is more efficient to 21535 use a pointer register, since this reduces code size. 21536 21537 `t' 21538 A twin register. A register which may be paired with an 21539 adjacent register to create a 32-bit register. 21540 21541 `a' 21542 Any absolute memory address (e.g., symbolic constant, symbolic 21543 constant + offset). 21544 21545 `I' 21546 4-bit signed integer. 21547 21548 `J' 21549 4-bit unsigned integer. 21550 21551 `K' 21552 8-bit signed integer. 21553 21554 `M' 21555 Any constant whose absolute value is no greater than 4-bits. 21556 21557 `N' 21558 10-bit signed integer 21559 21560 `O' 21561 16-bit signed integer. 21562 21563 21564 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 21565 21566 `b' 21567 Address base register 21568 21569 `f' 21570 Floating point register 21571 21572 `v' 21573 Vector register 21574 21575 `h' 21576 `MQ', `CTR', or `LINK' register 21577 21578 `q' 21579 `MQ' register 21580 21581 `c' 21582 `CTR' register 21583 21584 `l' 21585 `LINK' register 21586 21587 `x' 21588 `CR' register (condition register) number 0 21589 21590 `y' 21591 `CR' register (condition register) 21592 21593 `z' 21594 `FPMEM' stack memory for FPR-GPR transfers 21595 21596 `I' 21597 Signed 16-bit constant 21598 21599 `J' 21600 Unsigned 16-bit constant shifted left 16 bits (use `L' 21601 instead for `SImode' constants) 21602 21603 `K' 21604 Unsigned 16-bit constant 21605 21606 `L' 21607 Signed 16-bit constant shifted left 16 bits 21608 21609 `M' 21610 Constant larger than 31 21611 21612 `N' 21613 Exact power of 2 21614 21615 `O' 21616 Zero 21617 21618 `P' 21619 Constant whose negation is a signed 16-bit constant 21620 21621 `G' 21622 Floating point constant that can be loaded into a register 21623 with one instruction per word 21624 21625 `H' 21626 Integer/Floating point constant that can be loaded into a 21627 register using three instructions 21628 21629 `Q' 21630 Memory operand that is an offset from a register (`m' is 21631 preferable for `asm' statements) 21632 21633 `Z' 21634 Memory operand that is an indexed or indirect from a register 21635 (`m' is preferable for `asm' statements) 21636 21637 `R' 21638 AIX TOC entry 21639 21640 `a' 21641 Address operand that is an indexed or indirect from a 21642 register (`p' is preferable for `asm' statements) 21643 21644 `S' 21645 Constant suitable as a 64-bit mask operand 21646 21647 `T' 21648 Constant suitable as a 32-bit mask operand 21649 21650 `U' 21651 System V Release 4 small data area reference 21652 21653 `t' 21654 AND masks that can be performed by two rldic{l, r} 21655 instructions 21656 21657 `W' 21658 Vector constant that does not require memory 21659 21660 21661 _Intel 386--`config/i386/constraints.md'_ 21662 21663 `R' 21664 Legacy register--the eight integer registers available on all 21665 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 21666 21667 `q' 21668 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 21669 `c', and `d'; in 64-bit mode, any integer register. 21670 21671 `Q' 21672 Any register accessible as `Rh': `a', `b', `c', and `d'. 21673 21674 `a' 21675 The `a' register. 21676 21677 `b' 21678 The `b' register. 21679 21680 `c' 21681 The `c' register. 21682 21683 `d' 21684 The `d' register. 21685 21686 `S' 21687 The `si' register. 21688 21689 `D' 21690 The `di' register. 21691 21692 `A' 21693 The `a' and `d' registers, as a pair (for instructions that 21694 return half the result in one and half in the other). 21695 21696 `f' 21697 Any 80387 floating-point (stack) register. 21698 21699 `t' 21700 Top of 80387 floating-point stack (`%st(0)'). 21701 21702 `u' 21703 Second from top of 80387 floating-point stack (`%st(1)'). 21704 21705 `y' 21706 Any MMX register. 21707 21708 `x' 21709 Any SSE register. 21710 21711 `Yz' 21712 First SSE register (`%xmm0'). 21713 21714 `I' 21715 Integer constant in the range 0 ... 31, for 32-bit shifts. 21716 21717 `J' 21718 Integer constant in the range 0 ... 63, for 64-bit shifts. 21719 21720 `K' 21721 Signed 8-bit integer constant. 21722 21723 `L' 21724 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 21725 21726 `M' 21727 0, 1, 2, or 3 (shifts for the `lea' instruction). 21728 21729 `N' 21730 Unsigned 8-bit integer constant (for `in' and `out' 21731 instructions). 21732 21733 `G' 21734 Standard 80387 floating point constant. 21735 21736 `C' 21737 Standard SSE floating point constant. 21738 21739 `e' 21740 32-bit signed integer constant, or a symbolic reference known 21741 to fit that range (for immediate operands in sign-extending 21742 x86-64 instructions). 21743 21744 `Z' 21745 32-bit unsigned integer constant, or a symbolic reference 21746 known to fit that range (for immediate operands in 21747 zero-extending x86-64 instructions). 21748 21749 21750 _Intel IA-64--`config/ia64/ia64.h'_ 21751 21752 `a' 21753 General register `r0' to `r3' for `addl' instruction 21754 21755 `b' 21756 Branch register 21757 21758 `c' 21759 Predicate register (`c' as in "conditional") 21760 21761 `d' 21762 Application register residing in M-unit 21763 21764 `e' 21765 Application register residing in I-unit 21766 21767 `f' 21768 Floating-point register 21769 21770 `m' 21771 Memory operand. Remember that `m' allows postincrement and 21772 postdecrement which require printing with `%Pn' on IA-64. 21773 Use `S' to disallow postincrement and postdecrement. 21774 21775 `G' 21776 Floating-point constant 0.0 or 1.0 21777 21778 `I' 21779 14-bit signed integer constant 21780 21781 `J' 21782 22-bit signed integer constant 21783 21784 `K' 21785 8-bit signed integer constant for logical instructions 21786 21787 `L' 21788 8-bit adjusted signed integer constant for compare pseudo-ops 21789 21790 `M' 21791 6-bit unsigned integer constant for shift counts 21792 21793 `N' 21794 9-bit signed integer constant for load and store 21795 postincrements 21796 21797 `O' 21798 The constant zero 21799 21800 `P' 21801 0 or -1 for `dep' instruction 21802 21803 `Q' 21804 Non-volatile memory for floating-point loads and stores 21805 21806 `R' 21807 Integer constant in the range 1 to 4 for `shladd' instruction 21808 21809 `S' 21810 Memory operand except postincrement and postdecrement 21811 21812 _FRV--`config/frv/frv.h'_ 21813 21814 `a' 21815 Register in the class `ACC_REGS' (`acc0' to `acc7'). 21816 21817 `b' 21818 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 21819 21820 `c' 21821 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 21822 to `icc3'). 21823 21824 `d' 21825 Register in the class `GPR_REGS' (`gr0' to `gr63'). 21826 21827 `e' 21828 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 21829 registers are excluded not in the class but through the use 21830 of a machine mode larger than 4 bytes. 21831 21832 `f' 21833 Register in the class `FPR_REGS' (`fr0' to `fr63'). 21834 21835 `h' 21836 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 21837 registers are excluded not in the class but through the use 21838 of a machine mode larger than 4 bytes. 21839 21840 `l' 21841 Register in the class `LR_REG' (the `lr' register). 21842 21843 `q' 21844 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 21845 Register numbers not divisible by 4 are excluded not in the 21846 class but through the use of a machine mode larger than 8 21847 bytes. 21848 21849 `t' 21850 Register in the class `ICC_REGS' (`icc0' to `icc3'). 21851 21852 `u' 21853 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 21854 21855 `v' 21856 Register in the class `ICR_REGS' (`cc4' to `cc7'). 21857 21858 `w' 21859 Register in the class `FCR_REGS' (`cc0' to `cc3'). 21860 21861 `x' 21862 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 21863 Register numbers not divisible by 4 are excluded not in the 21864 class but through the use of a machine mode larger than 8 21865 bytes. 21866 21867 `z' 21868 Register in the class `SPR_REGS' (`lcr' and `lr'). 21869 21870 `A' 21871 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 21872 21873 `B' 21874 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 21875 21876 `C' 21877 Register in the class `CR_REGS' (`cc0' to `cc7'). 21878 21879 `G' 21880 Floating point constant zero 21881 21882 `I' 21883 6-bit signed integer constant 21884 21885 `J' 21886 10-bit signed integer constant 21887 21888 `L' 21889 16-bit signed integer constant 21890 21891 `M' 21892 16-bit unsigned integer constant 21893 21894 `N' 21895 12-bit signed integer constant that is negative--i.e. in the 21896 range of -2048 to -1 21897 21898 `O' 21899 Constant zero 21900 21901 `P' 21902 12-bit signed integer constant that is greater than 21903 zero--i.e. in the range of 1 to 2047. 21904 21905 21906 _Blackfin family--`config/bfin/constraints.md'_ 21907 21908 `a' 21909 P register 21910 21911 `d' 21912 D register 21913 21914 `z' 21915 A call clobbered P register. 21916 21917 `qN' 21918 A single register. If N is in the range 0 to 7, the 21919 corresponding D register. If it is `A', then the register P0. 21920 21921 `D' 21922 Even-numbered D register 21923 21924 `W' 21925 Odd-numbered D register 21926 21927 `e' 21928 Accumulator register. 21929 21930 `A' 21931 Even-numbered accumulator register. 21932 21933 `B' 21934 Odd-numbered accumulator register. 21935 21936 `b' 21937 I register 21938 21939 `v' 21940 B register 21941 21942 `f' 21943 M register 21944 21945 `c' 21946 Registers used for circular buffering, i.e. I, B, or L 21947 registers. 21948 21949 `C' 21950 The CC register. 21951 21952 `t' 21953 LT0 or LT1. 21954 21955 `k' 21956 LC0 or LC1. 21957 21958 `u' 21959 LB0 or LB1. 21960 21961 `x' 21962 Any D, P, B, M, I or L register. 21963 21964 `y' 21965 Additional registers typically used only in prologues and 21966 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 21967 USP. 21968 21969 `w' 21970 Any register except accumulators or CC. 21971 21972 `Ksh' 21973 Signed 16 bit integer (in the range -32768 to 32767) 21974 21975 `Kuh' 21976 Unsigned 16 bit integer (in the range 0 to 65535) 21977 21978 `Ks7' 21979 Signed 7 bit integer (in the range -64 to 63) 21980 21981 `Ku7' 21982 Unsigned 7 bit integer (in the range 0 to 127) 21983 21984 `Ku5' 21985 Unsigned 5 bit integer (in the range 0 to 31) 21986 21987 `Ks4' 21988 Signed 4 bit integer (in the range -8 to 7) 21989 21990 `Ks3' 21991 Signed 3 bit integer (in the range -3 to 4) 21992 21993 `Ku3' 21994 Unsigned 3 bit integer (in the range 0 to 7) 21995 21996 `PN' 21997 Constant N, where N is a single-digit constant in the range 0 21998 to 4. 21999 22000 `PA' 22001 An integer equal to one of the MACFLAG_XXX constants that is 22002 suitable for use with either accumulator. 22003 22004 `PB' 22005 An integer equal to one of the MACFLAG_XXX constants that is 22006 suitable for use only with accumulator A1. 22007 22008 `M1' 22009 Constant 255. 22010 22011 `M2' 22012 Constant 65535. 22013 22014 `J' 22015 An integer constant with exactly a single bit set. 22016 22017 `L' 22018 An integer constant with all bits set except exactly one. 22019 22020 `H' 22021 22022 `Q' 22023 Any SYMBOL_REF. 22024 22025 _M32C--`config/m32c/m32c.c'_ 22026 22027 `Rsp' 22028 `Rfb' 22029 `Rsb' 22030 `$sp', `$fb', `$sb'. 22031 22032 `Rcr' 22033 Any control register, when they're 16 bits wide (nothing if 22034 control registers are 24 bits wide) 22035 22036 `Rcl' 22037 Any control register, when they're 24 bits wide. 22038 22039 `R0w' 22040 `R1w' 22041 `R2w' 22042 `R3w' 22043 $r0, $r1, $r2, $r3. 22044 22045 `R02' 22046 $r0 or $r2, or $r2r0 for 32 bit values. 22047 22048 `R13' 22049 $r1 or $r3, or $r3r1 for 32 bit values. 22050 22051 `Rdi' 22052 A register that can hold a 64 bit value. 22053 22054 `Rhl' 22055 $r0 or $r1 (registers with addressable high/low bytes) 22056 22057 `R23' 22058 $r2 or $r3 22059 22060 `Raa' 22061 Address registers 22062 22063 `Raw' 22064 Address registers when they're 16 bits wide. 22065 22066 `Ral' 22067 Address registers when they're 24 bits wide. 22068 22069 `Rqi' 22070 Registers that can hold QI values. 22071 22072 `Rad' 22073 Registers that can be used with displacements ($a0, $a1, $sb). 22074 22075 `Rsi' 22076 Registers that can hold 32 bit values. 22077 22078 `Rhi' 22079 Registers that can hold 16 bit values. 22080 22081 `Rhc' 22082 Registers chat can hold 16 bit values, including all control 22083 registers. 22084 22085 `Rra' 22086 $r0 through R1, plus $a0 and $a1. 22087 22088 `Rfl' 22089 The flags register. 22090 22091 `Rmm' 22092 The memory-based pseudo-registers $mem0 through $mem15. 22093 22094 `Rpi' 22095 Registers that can hold pointers (16 bit registers for r8c, 22096 m16c; 24 bit registers for m32cm, m32c). 22097 22098 `Rpa' 22099 Matches multiple registers in a PARALLEL to form a larger 22100 register. Used to match function return values. 22101 22102 `Is3' 22103 -8 ... 7 22104 22105 `IS1' 22106 -128 ... 127 22107 22108 `IS2' 22109 -32768 ... 32767 22110 22111 `IU2' 22112 0 ... 65535 22113 22114 `In4' 22115 -8 ... -1 or 1 ... 8 22116 22117 `In5' 22118 -16 ... -1 or 1 ... 16 22119 22120 `In6' 22121 -32 ... -1 or 1 ... 32 22122 22123 `IM2' 22124 -65536 ... -1 22125 22126 `Ilb' 22127 An 8 bit value with exactly one bit set. 22128 22129 `Ilw' 22130 A 16 bit value with exactly one bit set. 22131 22132 `Sd' 22133 The common src/dest memory addressing modes. 22134 22135 `Sa' 22136 Memory addressed using $a0 or $a1. 22137 22138 `Si' 22139 Memory addressed with immediate addresses. 22140 22141 `Ss' 22142 Memory addressed using the stack pointer ($sp). 22143 22144 `Sf' 22145 Memory addressed using the frame base register ($fb). 22146 22147 `Ss' 22148 Memory addressed using the small base register ($sb). 22149 22150 `S1' 22151 $r1h 22152 22153 _MIPS--`config/mips/constraints.md'_ 22154 22155 `d' 22156 An address register. This is equivalent to `r' unless 22157 generating MIPS16 code. 22158 22159 `f' 22160 A floating-point register (if available). 22161 22162 `h' 22163 Formerly the `hi' register. This constraint is no longer 22164 supported. 22165 22166 `l' 22167 The `lo' register. Use this register to store values that are 22168 no bigger than a word. 22169 22170 `x' 22171 The concatenated `hi' and `lo' registers. Use this register 22172 to store doubleword values. 22173 22174 `c' 22175 A register suitable for use in an indirect jump. This will 22176 always be `$25' for `-mabicalls'. 22177 22178 `v' 22179 Register `$3'. Do not use this constraint in new code; it is 22180 retained only for compatibility with glibc. 22181 22182 `y' 22183 Equivalent to `r'; retained for backwards compatibility. 22184 22185 `z' 22186 A floating-point condition code register. 22187 22188 `I' 22189 A signed 16-bit constant (for arithmetic instructions). 22190 22191 `J' 22192 Integer zero. 22193 22194 `K' 22195 An unsigned 16-bit constant (for logic instructions). 22196 22197 `L' 22198 A signed 32-bit constant in which the lower 16 bits are zero. 22199 Such constants can be loaded using `lui'. 22200 22201 `M' 22202 A constant that cannot be loaded using `lui', `addiu' or 22203 `ori'. 22204 22205 `N' 22206 A constant in the range -65535 to -1 (inclusive). 22207 22208 `O' 22209 A signed 15-bit constant. 22210 22211 `P' 22212 A constant in the range 1 to 65535 (inclusive). 22213 22214 `G' 22215 Floating-point zero. 22216 22217 `R' 22218 An address that can be used in a non-macro load or store. 22219 22220 _Motorola 680x0--`config/m68k/constraints.md'_ 22221 22222 `a' 22223 Address register 22224 22225 `d' 22226 Data register 22227 22228 `f' 22229 68881 floating-point register, if available 22230 22231 `I' 22232 Integer in the range 1 to 8 22233 22234 `J' 22235 16-bit signed number 22236 22237 `K' 22238 Signed number whose magnitude is greater than 0x80 22239 22240 `L' 22241 Integer in the range -8 to -1 22242 22243 `M' 22244 Signed number whose magnitude is greater than 0x100 22245 22246 `N' 22247 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 22248 22249 `O' 22250 16 (for rotate using swap) 22251 22252 `P' 22253 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 22254 22255 `R' 22256 Numbers that mov3q can handle 22257 22258 `G' 22259 Floating point constant that is not a 68881 constant 22260 22261 `S' 22262 Operands that satisfy 'm' when -mpcrel is in effect 22263 22264 `T' 22265 Operands that satisfy 's' when -mpcrel is not in effect 22266 22267 `Q' 22268 Address register indirect addressing mode 22269 22270 `U' 22271 Register offset addressing 22272 22273 `W' 22274 const_call_operand 22275 22276 `Cs' 22277 symbol_ref or const 22278 22279 `Ci' 22280 const_int 22281 22282 `C0' 22283 const_int 0 22284 22285 `Cj' 22286 Range of signed numbers that don't fit in 16 bits 22287 22288 `Cmvq' 22289 Integers valid for mvq 22290 22291 `Capsw' 22292 Integers valid for a moveq followed by a swap 22293 22294 `Cmvz' 22295 Integers valid for mvz 22296 22297 `Cmvs' 22298 Integers valid for mvs 22299 22300 `Ap' 22301 push_operand 22302 22303 `Ac' 22304 Non-register operands allowed in clr 22305 22306 22307 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 22308 22309 `a' 22310 Register `a' 22311 22312 `b' 22313 Register `b' 22314 22315 `d' 22316 Register `d' 22317 22318 `q' 22319 An 8-bit register 22320 22321 `t' 22322 Temporary soft register _.tmp 22323 22324 `u' 22325 A soft register _.d1 to _.d31 22326 22327 `w' 22328 Stack pointer register 22329 22330 `x' 22331 Register `x' 22332 22333 `y' 22334 Register `y' 22335 22336 `z' 22337 Pseudo register `z' (replaced by `x' or `y' at the end) 22338 22339 `A' 22340 An address register: x, y or z 22341 22342 `B' 22343 An address register: x or y 22344 22345 `D' 22346 Register pair (x:d) to form a 32-bit value 22347 22348 `L' 22349 Constants in the range -65536 to 65535 22350 22351 `M' 22352 Constants whose 16-bit low part is zero 22353 22354 `N' 22355 Constant integer 1 or -1 22356 22357 `O' 22358 Constant integer 16 22359 22360 `P' 22361 Constants in the range -8 to 2 22362 22363 22364 _SPARC--`config/sparc/sparc.h'_ 22365 22366 `f' 22367 Floating-point register on the SPARC-V8 architecture and 22368 lower floating-point register on the SPARC-V9 architecture. 22369 22370 `e' 22371 Floating-point register. It is equivalent to `f' on the 22372 SPARC-V8 architecture and contains both lower and upper 22373 floating-point registers on the SPARC-V9 architecture. 22374 22375 `c' 22376 Floating-point condition code register. 22377 22378 `d' 22379 Lower floating-point register. It is only valid on the 22380 SPARC-V9 architecture when the Visual Instruction Set is 22381 available. 22382 22383 `b' 22384 Floating-point register. It is only valid on the SPARC-V9 22385 architecture when the Visual Instruction Set is available. 22386 22387 `h' 22388 64-bit global or out register for the SPARC-V8+ architecture. 22389 22390 `D' 22391 A vector constant 22392 22393 `I' 22394 Signed 13-bit constant 22395 22396 `J' 22397 Zero 22398 22399 `K' 22400 32-bit constant with the low 12 bits clear (a constant that 22401 can be loaded with the `sethi' instruction) 22402 22403 `L' 22404 A constant in the range supported by `movcc' instructions 22405 22406 `M' 22407 A constant in the range supported by `movrcc' instructions 22408 22409 `N' 22410 Same as `K', except that it verifies that bits that are not 22411 in the lower 32-bit range are all zero. Must be used instead 22412 of `K' for modes wider than `SImode' 22413 22414 `O' 22415 The constant 4096 22416 22417 `G' 22418 Floating-point zero 22419 22420 `H' 22421 Signed 13-bit constant, sign-extended to 32 or 64 bits 22422 22423 `Q' 22424 Floating-point constant whose integral representation can be 22425 moved into an integer register using a single sethi 22426 instruction 22427 22428 `R' 22429 Floating-point constant whose integral representation can be 22430 moved into an integer register using a single mov instruction 22431 22432 `S' 22433 Floating-point constant whose integral representation can be 22434 moved into an integer register using a high/lo_sum 22435 instruction sequence 22436 22437 `T' 22438 Memory address aligned to an 8-byte boundary 22439 22440 `U' 22441 Even register 22442 22443 `W' 22444 Memory address for `e' constraint registers 22445 22446 `Y' 22447 Vector zero 22448 22449 22450 _SPU--`config/spu/spu.h'_ 22451 22452 `a' 22453 An immediate which can be loaded with the il/ila/ilh/ilhu 22454 instructions. const_int is treated as a 64 bit value. 22455 22456 `c' 22457 An immediate for and/xor/or instructions. const_int is 22458 treated as a 64 bit value. 22459 22460 `d' 22461 An immediate for the `iohl' instruction. const_int is 22462 treated as a 64 bit value. 22463 22464 `f' 22465 An immediate which can be loaded with `fsmbi'. 22466 22467 `A' 22468 An immediate which can be loaded with the il/ila/ilh/ilhu 22469 instructions. const_int is treated as a 32 bit value. 22470 22471 `B' 22472 An immediate for most arithmetic instructions. const_int is 22473 treated as a 32 bit value. 22474 22475 `C' 22476 An immediate for and/xor/or instructions. const_int is 22477 treated as a 32 bit value. 22478 22479 `D' 22480 An immediate for the `iohl' instruction. const_int is 22481 treated as a 32 bit value. 22482 22483 `I' 22484 A constant in the range [-64, 63] for shift/rotate 22485 instructions. 22486 22487 `J' 22488 An unsigned 7-bit constant for conversion/nop/channel 22489 instructions. 22490 22491 `K' 22492 A signed 10-bit constant for most arithmetic instructions. 22493 22494 `M' 22495 A signed 16 bit immediate for `stop'. 22496 22497 `N' 22498 An unsigned 16-bit constant for `iohl' and `fsmbi'. 22499 22500 `O' 22501 An unsigned 7-bit constant whose 3 least significant bits are 22502 0. 22503 22504 `P' 22505 An unsigned 3-bit constant for 16-byte rotates and shifts 22506 22507 `R' 22508 Call operand, reg, for indirect calls 22509 22510 `S' 22511 Call operand, symbol, for relative calls. 22512 22513 `T' 22514 Call operand, const_int, for absolute calls. 22515 22516 `U' 22517 An immediate which can be loaded with the il/ila/ilh/ilhu 22518 instructions. const_int is sign extended to 128 bit. 22519 22520 `W' 22521 An immediate for shift and rotate instructions. const_int is 22522 treated as a 32 bit value. 22523 22524 `Y' 22525 An immediate for and/xor/or instructions. const_int is sign 22526 extended as a 128 bit. 22527 22528 `Z' 22529 An immediate for the `iohl' instruction. const_int is sign 22530 extended to 128 bit. 22531 22532 22533 _S/390 and zSeries--`config/s390/s390.h'_ 22534 22535 `a' 22536 Address register (general purpose register except r0) 22537 22538 `c' 22539 Condition code register 22540 22541 `d' 22542 Data register (arbitrary general purpose register) 22543 22544 `f' 22545 Floating-point register 22546 22547 `I' 22548 Unsigned 8-bit constant (0-255) 22549 22550 `J' 22551 Unsigned 12-bit constant (0-4095) 22552 22553 `K' 22554 Signed 16-bit constant (-32768-32767) 22555 22556 `L' 22557 Value appropriate as displacement. 22558 `(0..4095)' 22559 for short displacement 22560 22561 `(-524288..524287)' 22562 for long displacement 22563 22564 `M' 22565 Constant integer with a value of 0x7fffffff. 22566 22567 `N' 22568 Multiple letter constraint followed by 4 parameter letters. 22569 `0..9:' 22570 number of the part counting from most to least 22571 significant 22572 22573 `H,Q:' 22574 mode of the part 22575 22576 `D,S,H:' 22577 mode of the containing operand 22578 22579 `0,F:' 22580 value of the other parts (F--all bits set) 22581 The constraint matches if the specified part of a constant 22582 has a value different from its other parts. 22583 22584 `Q' 22585 Memory reference without index register and with short 22586 displacement. 22587 22588 `R' 22589 Memory reference with index register and short displacement. 22590 22591 `S' 22592 Memory reference without index register but with long 22593 displacement. 22594 22595 `T' 22596 Memory reference with index register and long displacement. 22597 22598 `U' 22599 Pointer with short displacement. 22600 22601 `W' 22602 Pointer with long displacement. 22603 22604 `Y' 22605 Shift count operand. 22606 22607 22608 _Score family--`config/score/score.h'_ 22609 22610 `d' 22611 Registers from r0 to r32. 22612 22613 `e' 22614 Registers from r0 to r16. 22615 22616 `t' 22617 r8--r11 or r22--r27 registers. 22618 22619 `h' 22620 hi register. 22621 22622 `l' 22623 lo register. 22624 22625 `x' 22626 hi + lo register. 22627 22628 `q' 22629 cnt register. 22630 22631 `y' 22632 lcb register. 22633 22634 `z' 22635 scb register. 22636 22637 `a' 22638 cnt + lcb + scb register. 22639 22640 `c' 22641 cr0--cr15 register. 22642 22643 `b' 22644 cp1 registers. 22645 22646 `f' 22647 cp2 registers. 22648 22649 `i' 22650 cp3 registers. 22651 22652 `j' 22653 cp1 + cp2 + cp3 registers. 22654 22655 `I' 22656 High 16-bit constant (32-bit constant with 16 LSBs zero). 22657 22658 `J' 22659 Unsigned 5 bit integer (in the range 0 to 31). 22660 22661 `K' 22662 Unsigned 16 bit integer (in the range 0 to 65535). 22663 22664 `L' 22665 Signed 16 bit integer (in the range -32768 to 32767). 22666 22667 `M' 22668 Unsigned 14 bit integer (in the range 0 to 16383). 22669 22670 `N' 22671 Signed 14 bit integer (in the range -8192 to 8191). 22672 22673 `Z' 22674 Any SYMBOL_REF. 22675 22676 _Xstormy16--`config/stormy16/stormy16.h'_ 22677 22678 `a' 22679 Register r0. 22680 22681 `b' 22682 Register r1. 22683 22684 `c' 22685 Register r2. 22686 22687 `d' 22688 Register r8. 22689 22690 `e' 22691 Registers r0 through r7. 22692 22693 `t' 22694 Registers r0 and r1. 22695 22696 `y' 22697 The carry register. 22698 22699 `z' 22700 Registers r8 and r9. 22701 22702 `I' 22703 A constant between 0 and 3 inclusive. 22704 22705 `J' 22706 A constant that has exactly one bit set. 22707 22708 `K' 22709 A constant that has exactly one bit clear. 22710 22711 `L' 22712 A constant between 0 and 255 inclusive. 22713 22714 `M' 22715 A constant between -255 and 0 inclusive. 22716 22717 `N' 22718 A constant between -3 and 0 inclusive. 22719 22720 `O' 22721 A constant between 1 and 4 inclusive. 22722 22723 `P' 22724 A constant between -4 and -1 inclusive. 22725 22726 `Q' 22727 A memory reference that is a stack push. 22728 22729 `R' 22730 A memory reference that is a stack pop. 22731 22732 `S' 22733 A memory reference that refers to a constant address of known 22734 value. 22735 22736 `T' 22737 The register indicated by Rx (not implemented yet). 22738 22739 `U' 22740 A constant that is not between 2 and 15 inclusive. 22741 22742 `Z' 22743 The constant 0. 22744 22745 22746 _Xtensa--`config/xtensa/constraints.md'_ 22747 22748 `a' 22749 General-purpose 32-bit register 22750 22751 `b' 22752 One-bit boolean register 22753 22754 `A' 22755 MAC16 40-bit accumulator register 22756 22757 `I' 22758 Signed 12-bit integer constant, for use in MOVI instructions 22759 22760 `J' 22761 Signed 8-bit integer constant, for use in ADDI instructions 22762 22763 `K' 22764 Integer constant valid for BccI instructions 22765 22766 `L' 22767 Unsigned constant valid for BccUI instructions 22768 22769 22770 22771 22772 File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 22773 22774 5.39 Controlling Names Used in Assembler Code 22775 ============================================= 22776 22777 You can specify the name to be used in the assembler code for a C 22778 function or variable by writing the `asm' (or `__asm__') keyword after 22779 the declarator as follows: 22780 22781 int foo asm ("myfoo") = 2; 22782 22783 This specifies that the name to be used for the variable `foo' in the 22784 assembler code should be `myfoo' rather than the usual `_foo'. 22785 22786 On systems where an underscore is normally prepended to the name of a C 22787 function or variable, this feature allows you to define names for the 22788 linker that do not start with an underscore. 22789 22790 It does not make sense to use this feature with a non-static local 22791 variable since such variables do not have assembler names. If you are 22792 trying to put the variable in a particular register, see *Note Explicit 22793 Reg Vars::. GCC presently accepts such code with a warning, but will 22794 probably be changed to issue an error, rather than a warning, in the 22795 future. 22796 22797 You cannot use `asm' in this way in a function _definition_; but you 22798 can get the same effect by writing a declaration for the function 22799 before its definition and putting `asm' there, like this: 22800 22801 extern func () asm ("FUNC"); 22802 22803 func (x, y) 22804 int x, y; 22805 /* ... */ 22806 22807 It is up to you to make sure that the assembler names you choose do not 22808 conflict with any other assembler symbols. Also, you must not use a 22809 register name; that would produce completely invalid assembler code. 22810 GCC does not as yet have the ability to store static variables in 22811 registers. Perhaps that will be added. 22812 22813 22814 File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 22815 22816 5.40 Variables in Specified Registers 22817 ===================================== 22818 22819 GNU C allows you to put a few global variables into specified hardware 22820 registers. You can also specify the register in which an ordinary 22821 register variable should be allocated. 22822 22823 * Global register variables reserve registers throughout the program. 22824 This may be useful in programs such as programming language 22825 interpreters which have a couple of global variables that are 22826 accessed very often. 22827 22828 * Local register variables in specific registers do not reserve the 22829 registers, except at the point where they are used as input or 22830 output operands in an `asm' statement and the `asm' statement 22831 itself is not deleted. The compiler's data flow analysis is 22832 capable of determining where the specified registers contain live 22833 values, and where they are available for other uses. Stores into 22834 local register variables may be deleted when they appear to be 22835 dead according to dataflow analysis. References to local register 22836 variables may be deleted or moved or simplified. 22837 22838 These local variables are sometimes convenient for use with the 22839 extended `asm' feature (*note Extended Asm::), if you want to 22840 write one output of the assembler instruction directly into a 22841 particular register. (This will work provided the register you 22842 specify fits the constraints specified for that operand in the 22843 `asm'.) 22844 22845 * Menu: 22846 22847 * Global Reg Vars:: 22848 * Local Reg Vars:: 22849 22850 22851 File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 22852 22853 5.40.1 Defining Global Register Variables 22854 ----------------------------------------- 22855 22856 You can define a global register variable in GNU C like this: 22857 22858 register int *foo asm ("a5"); 22859 22860 Here `a5' is the name of the register which should be used. Choose a 22861 register which is normally saved and restored by function calls on your 22862 machine, so that library routines will not clobber it. 22863 22864 Naturally the register name is cpu-dependent, so you would need to 22865 conditionalize your program according to cpu type. The register `a5' 22866 would be a good choice on a 68000 for a variable of pointer type. On 22867 machines with register windows, be sure to choose a "global" register 22868 that is not affected magically by the function call mechanism. 22869 22870 In addition, operating systems on one type of cpu may differ in how 22871 they name the registers; then you would need additional conditionals. 22872 For example, some 68000 operating systems call this register `%a5'. 22873 22874 Eventually there may be a way of asking the compiler to choose a 22875 register automatically, but first we need to figure out how it should 22876 choose and how to enable you to guide the choice. No solution is 22877 evident. 22878 22879 Defining a global register variable in a certain register reserves that 22880 register entirely for this use, at least within the current compilation. 22881 The register will not be allocated for any other purpose in the 22882 functions in the current compilation. The register will not be saved 22883 and restored by these functions. Stores into this register are never 22884 deleted even if they would appear to be dead, but references may be 22885 deleted or moved or simplified. 22886 22887 It is not safe to access the global register variables from signal 22888 handlers, or from more than one thread of control, because the system 22889 library routines may temporarily use the register for other things 22890 (unless you recompile them specially for the task at hand). 22891 22892 It is not safe for one function that uses a global register variable to 22893 call another such function `foo' by way of a third function `lose' that 22894 was compiled without knowledge of this variable (i.e. in a different 22895 source file in which the variable wasn't declared). This is because 22896 `lose' might save the register and put some other value there. For 22897 example, you can't expect a global register variable to be available in 22898 the comparison-function that you pass to `qsort', since `qsort' might 22899 have put something else in that register. (If you are prepared to 22900 recompile `qsort' with the same global register variable, you can solve 22901 this problem.) 22902 22903 If you want to recompile `qsort' or other source files which do not 22904 actually use your global register variable, so that they will not use 22905 that register for any other purpose, then it suffices to specify the 22906 compiler option `-ffixed-REG'. You need not actually add a global 22907 register declaration to their source code. 22908 22909 A function which can alter the value of a global register variable 22910 cannot safely be called from a function compiled without this variable, 22911 because it could clobber the value the caller expects to find there on 22912 return. Therefore, the function which is the entry point into the part 22913 of the program that uses the global register variable must explicitly 22914 save and restore the value which belongs to its caller. 22915 22916 On most machines, `longjmp' will restore to each global register 22917 variable the value it had at the time of the `setjmp'. On some 22918 machines, however, `longjmp' will not change the value of global 22919 register variables. To be portable, the function that called `setjmp' 22920 should make other arrangements to save the values of the global register 22921 variables, and to restore them in a `longjmp'. This way, the same 22922 thing will happen regardless of what `longjmp' does. 22923 22924 All global register variable declarations must precede all function 22925 definitions. If such a declaration could appear after function 22926 definitions, the declaration would be too late to prevent the register 22927 from being used for other purposes in the preceding functions. 22928 22929 Global register variables may not have initial values, because an 22930 executable file has no means to supply initial contents for a register. 22931 22932 On the SPARC, there are reports that g3 ... g7 are suitable registers, 22933 but certain library functions, such as `getwd', as well as the 22934 subroutines for division and remainder, modify g3 and g4. g1 and g2 22935 are local temporaries. 22936 22937 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 22938 course, it will not do to use more than a few of those. 22939 22940 22941 File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 22942 22943 5.40.2 Specifying Registers for Local Variables 22944 ----------------------------------------------- 22945 22946 You can define a local register variable with a specified register like 22947 this: 22948 22949 register int *foo asm ("a5"); 22950 22951 Here `a5' is the name of the register which should be used. Note that 22952 this is the same syntax used for defining global register variables, 22953 but for a local variable it would appear within a function. 22954 22955 Naturally the register name is cpu-dependent, but this is not a 22956 problem, since specific registers are most often useful with explicit 22957 assembler instructions (*note Extended Asm::). Both of these things 22958 generally require that you conditionalize your program according to cpu 22959 type. 22960 22961 In addition, operating systems on one type of cpu may differ in how 22962 they name the registers; then you would need additional conditionals. 22963 For example, some 68000 operating systems call this register `%a5'. 22964 22965 Defining such a register variable does not reserve the register; it 22966 remains available for other uses in places where flow control determines 22967 the variable's value is not live. 22968 22969 This option does not guarantee that GCC will generate code that has 22970 this variable in the register you specify at all times. You may not 22971 code an explicit reference to this register in the _assembler 22972 instruction template_ part of an `asm' statement and assume it will 22973 always refer to this variable. However, using the variable as an `asm' 22974 _operand_ guarantees that the specified register is used for the 22975 operand. 22976 22977 Stores into local register variables may be deleted when they appear 22978 to be dead according to dataflow analysis. References to local 22979 register variables may be deleted or moved or simplified. 22980 22981 As for global register variables, it's recommended that you choose a 22982 register which is normally saved and restored by function calls on your 22983 machine, so that library routines will not clobber it. A common 22984 pitfall is to initialize multiple call-clobbered registers with 22985 arbitrary expressions, where a function call or library call for an 22986 arithmetic operator will overwrite a register value from a previous 22987 assignment, for example `r0' below: 22988 register int *p1 asm ("r0") = ...; 22989 register int *p2 asm ("r1") = ...; 22990 In those cases, a solution is to use a temporary variable for each 22991 arbitrary expression. *Note Example of asm with clobbered asm reg::. 22992 22993 22994 File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 22995 22996 5.41 Alternate Keywords 22997 ======================= 22998 22999 `-ansi' and the various `-std' options disable certain keywords. This 23000 causes trouble when you want to use GNU C extensions, or a 23001 general-purpose header file that should be usable by all programs, 23002 including ISO C programs. The keywords `asm', `typeof' and `inline' 23003 are not available in programs compiled with `-ansi' or `-std' (although 23004 `inline' can be used in a program compiled with `-std=c99'). The ISO 23005 C99 keyword `restrict' is only available when `-std=gnu99' (which will 23006 eventually be the default) or `-std=c99' (or the equivalent 23007 `-std=iso9899:1999') is used. 23008 23009 The way to solve these problems is to put `__' at the beginning and 23010 end of each problematical keyword. For example, use `__asm__' instead 23011 of `asm', and `__inline__' instead of `inline'. 23012 23013 Other C compilers won't accept these alternative keywords; if you want 23014 to compile with another compiler, you can define the alternate keywords 23015 as macros to replace them with the customary keywords. It looks like 23016 this: 23017 23018 #ifndef __GNUC__ 23019 #define __asm__ asm 23020 #endif 23021 23022 `-pedantic' and other options cause warnings for many GNU C extensions. 23023 You can prevent such warnings within one expression by writing 23024 `__extension__' before the expression. `__extension__' has no effect 23025 aside from this. 23026 23027 23028 File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 23029 23030 5.42 Incomplete `enum' Types 23031 ============================ 23032 23033 You can define an `enum' tag without specifying its possible values. 23034 This results in an incomplete type, much like what you get if you write 23035 `struct foo' without describing the elements. A later declaration 23036 which does specify the possible values completes the type. 23037 23038 You can't allocate variables or storage using the type while it is 23039 incomplete. However, you can work with pointers to that type. 23040 23041 This extension may not be very useful, but it makes the handling of 23042 `enum' more consistent with the way `struct' and `union' are handled. 23043 23044 This extension is not supported by GNU C++. 23045 23046 23047 File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 23048 23049 5.43 Function Names as Strings 23050 ============================== 23051 23052 GCC provides three magic variables which hold the name of the current 23053 function, as a string. The first of these is `__func__', which is part 23054 of the C99 standard: 23055 23056 The identifier `__func__' is implicitly declared by the translator as 23057 if, immediately following the opening brace of each function 23058 definition, the declaration 23059 23060 static const char __func__[] = "function-name"; 23061 23062 appeared, where function-name is the name of the lexically-enclosing 23063 function. This name is the unadorned name of the function. 23064 23065 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 23066 recognize only this name. However, it is not standardized. For 23067 maximum portability, we recommend you use `__func__', but provide a 23068 fallback definition with the preprocessor: 23069 23070 #if __STDC_VERSION__ < 199901L 23071 # if __GNUC__ >= 2 23072 # define __func__ __FUNCTION__ 23073 # else 23074 # define __func__ "<unknown>" 23075 # endif 23076 #endif 23077 23078 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 23079 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 23080 the function as well as its bare name. For example, this program: 23081 23082 extern "C" { 23083 extern int printf (char *, ...); 23084 } 23085 23086 class a { 23087 public: 23088 void sub (int i) 23089 { 23090 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 23091 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 23092 } 23093 }; 23094 23095 int 23096 main (void) 23097 { 23098 a ax; 23099 ax.sub (0); 23100 return 0; 23101 } 23102 23103 gives this output: 23104 23105 __FUNCTION__ = sub 23106 __PRETTY_FUNCTION__ = void a::sub(int) 23107 23108 These identifiers are not preprocessor macros. In GCC 3.3 and 23109 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 23110 treated as string literals; they could be used to initialize `char' 23111 arrays, and they could be concatenated with other string literals. GCC 23112 3.4 and later treat them as variables, like `__func__'. In C++, 23113 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 23114 23115 23116 File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 23117 23118 5.44 Getting the Return or Frame Address of a Function 23119 ====================================================== 23120 23121 These functions may be used to get information about the callers of a 23122 function. 23123 23124 -- Built-in Function: void * __builtin_return_address (unsigned int 23125 LEVEL) 23126 This function returns the return address of the current function, 23127 or of one of its callers. The LEVEL argument is number of frames 23128 to scan up the call stack. A value of `0' yields the return 23129 address of the current function, a value of `1' yields the return 23130 address of the caller of the current function, and so forth. When 23131 inlining the expected behavior is that the function will return 23132 the address of the function that will be returned to. To work 23133 around this behavior use the `noinline' function attribute. 23134 23135 The LEVEL argument must be a constant integer. 23136 23137 On some machines it may be impossible to determine the return 23138 address of any function other than the current one; in such cases, 23139 or when the top of the stack has been reached, this function will 23140 return `0' or a random value. In addition, 23141 `__builtin_frame_address' may be used to determine if the top of 23142 the stack has been reached. 23143 23144 This function should only be used with a nonzero argument for 23145 debugging purposes. 23146 23147 -- Built-in Function: void * __builtin_frame_address (unsigned int 23148 LEVEL) 23149 This function is similar to `__builtin_return_address', but it 23150 returns the address of the function frame rather than the return 23151 address of the function. Calling `__builtin_frame_address' with a 23152 value of `0' yields the frame address of the current function, a 23153 value of `1' yields the frame address of the caller of the current 23154 function, and so forth. 23155 23156 The frame is the area on the stack which holds local variables and 23157 saved registers. The frame address is normally the address of the 23158 first word pushed on to the stack by the function. However, the 23159 exact definition depends upon the processor and the calling 23160 convention. If the processor has a dedicated frame pointer 23161 register, and the function has a frame, then 23162 `__builtin_frame_address' will return the value of the frame 23163 pointer register. 23164 23165 On some machines it may be impossible to determine the frame 23166 address of any function other than the current one; in such cases, 23167 or when the top of the stack has been reached, this function will 23168 return `0' if the first frame pointer is properly initialized by 23169 the startup code. 23170 23171 This function should only be used with a nonzero argument for 23172 debugging purposes. 23173 23174 23175 File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 23176 23177 5.45 Using vector instructions through built-in functions 23178 ========================================================= 23179 23180 On some targets, the instruction set contains SIMD vector instructions 23181 that operate on multiple values contained in one large register at the 23182 same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions 23183 can be used this way. 23184 23185 The first step in using these extensions is to provide the necessary 23186 data types. This should be done using an appropriate `typedef': 23187 23188 typedef int v4si __attribute__ ((vector_size (16))); 23189 23190 The `int' type specifies the base type, while the attribute specifies 23191 the vector size for the variable, measured in bytes. For example, the 23192 declaration above causes the compiler to set the mode for the `v4si' 23193 type to be 16 bytes wide and divided into `int' sized units. For a 23194 32-bit `int' this means a vector of 4 units of 4 bytes, and the 23195 corresponding mode of `foo' will be V4SI. 23196 23197 The `vector_size' attribute is only applicable to integral and float 23198 scalars, although arrays, pointers, and function return values are 23199 allowed in conjunction with this construct. 23200 23201 All the basic integer types can be used as base types, both as signed 23202 and as unsigned: `char', `short', `int', `long', `long long'. In 23203 addition, `float' and `double' can be used to build floating-point 23204 vector types. 23205 23206 Specifying a combination that is not valid for the current architecture 23207 will cause GCC to synthesize the instructions using a narrower mode. 23208 For example, if you specify a variable of type `V4SI' and your 23209 architecture does not allow for this specific SIMD type, GCC will 23210 produce code that uses 4 `SIs'. 23211 23212 The types defined in this manner can be used with a subset of normal C 23213 operations. Currently, GCC will allow using the following operators on 23214 these types: `+, -, *, /, unary minus, ^, |, &, ~'. 23215 23216 The operations behave like C++ `valarrays'. Addition is defined as 23217 the addition of the corresponding elements of the operands. For 23218 example, in the code below, each of the 4 elements in A will be added 23219 to the corresponding 4 elements in B and the resulting vector will be 23220 stored in C. 23221 23222 typedef int v4si __attribute__ ((vector_size (16))); 23223 23224 v4si a, b, c; 23225 23226 c = a + b; 23227 23228 Subtraction, multiplication, division, and the logical operations 23229 operate in a similar manner. Likewise, the result of using the unary 23230 minus or complement operators on a vector type is a vector whose 23231 elements are the negative or complemented values of the corresponding 23232 elements in the operand. 23233 23234 You can declare variables and use them in function calls and returns, 23235 as well as in assignments and some casts. You can specify a vector 23236 type as a return type for a function. Vector types can also be used as 23237 function arguments. It is possible to cast from one vector type to 23238 another, provided they are of the same size (in fact, you can also cast 23239 vectors to and from other datatypes of the same size). 23240 23241 You cannot operate between vectors of different lengths or different 23242 signedness without a cast. 23243 23244 A port that supports hardware vector operations, usually provides a set 23245 of built-in functions that can be used to operate on vectors. For 23246 example, a function to add two vectors and multiply the result by a 23247 third could look like this: 23248 23249 v4si f (v4si a, v4si b, v4si c) 23250 { 23251 v4si tmp = __builtin_addv4si (a, b); 23252 return __builtin_mulv4si (tmp, c); 23253 } 23254 23255 23256 File: gcc.info, Node: Offsetof, Next: Atomic Builtins, Prev: Vector Extensions, Up: C Extensions 23257 23258 5.46 Offsetof 23259 ============= 23260 23261 GCC implements for both C and C++ a syntactic extension to implement 23262 the `offsetof' macro. 23263 23264 primary: 23265 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 23266 23267 offsetof_member_designator: 23268 `identifier' 23269 | offsetof_member_designator "." `identifier' 23270 | offsetof_member_designator "[" `expr' "]" 23271 23272 This extension is sufficient such that 23273 23274 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 23275 23276 is a suitable definition of the `offsetof' macro. In C++, TYPE may be 23277 dependent. In either case, MEMBER may consist of a single identifier, 23278 or a sequence of member accesses and array references. 23279 23280 23281 File: gcc.info, Node: Atomic Builtins, Next: Object Size Checking, Prev: Offsetof, Up: C Extensions 23282 23283 5.47 Built-in functions for atomic memory access 23284 ================================================ 23285 23286 The following builtins are intended to be compatible with those 23287 described in the `Intel Itanium Processor-specific Application Binary 23288 Interface', section 7.4. As such, they depart from the normal GCC 23289 practice of using the "__builtin_" prefix, and further that they are 23290 overloaded such that they work on multiple types. 23291 23292 The definition given in the Intel documentation allows only for the 23293 use of the types `int', `long', `long long' as well as their unsigned 23294 counterparts. GCC will allow any integral scalar or pointer type that 23295 is 1, 2, 4 or 8 bytes in length. 23296 23297 Not all operations are supported by all target processors. If a 23298 particular operation cannot be implemented on the target processor, a 23299 warning will be generated and a call an external function will be 23300 generated. The external function will carry the same name as the 23301 builtin, with an additional suffix `_N' where N is the size of the data 23302 type. 23303 23304 In most cases, these builtins are considered a "full barrier". That 23305 is, no memory operand will be moved across the operation, either 23306 forward or backward. Further, instructions will be issued as necessary 23307 to prevent the processor from speculating loads across the operation 23308 and from queuing stores after the operation. 23309 23310 All of the routines are described in the Intel documentation to take 23311 "an optional list of variables protected by the memory barrier". It's 23312 not clear what is meant by that; it could mean that _only_ the 23313 following variables are protected, or it could mean that these variables 23314 should in addition be protected. At present GCC ignores this list and 23315 protects all variables which are globally accessible. If in the future 23316 we make some use of this list, an empty list will continue to mean all 23317 globally accessible variables. 23318 23319 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 23320 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 23321 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 23322 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 23323 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 23324 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 23325 These builtins perform the operation suggested by the name, and 23326 returns the value that had previously been in memory. That is, 23327 23328 { tmp = *ptr; *ptr OP= value; return tmp; } 23329 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 23330 23331 _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' 23332 builtin as `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & 23333 value'. 23334 23335 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 23336 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 23337 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 23338 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 23339 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 23340 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 23341 These builtins perform the operation suggested by the name, and 23342 return the new value. That is, 23343 23344 { *ptr OP= value; return *ptr; } 23345 { *ptr = ~(*ptr & value); return *ptr; } // nand 23346 23347 _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' 23348 builtin as `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & 23349 value'. 23350 23351 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 23352 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 23353 These builtins perform an atomic compare and swap. That is, if 23354 the current value of `*PTR' is OLDVAL, then write NEWVAL into 23355 `*PTR'. 23356 23357 The "bool" version returns true if the comparison is successful and 23358 NEWVAL was written. The "val" version returns the contents of 23359 `*PTR' before the operation. 23360 23361 `__sync_synchronize (...)' 23362 This builtin issues a full memory barrier. 23363 23364 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 23365 This builtin, as described by Intel, is not a traditional 23366 test-and-set operation, but rather an atomic exchange operation. 23367 It writes VALUE into `*PTR', and returns the previous contents of 23368 `*PTR'. 23369 23370 Many targets have only minimal support for such locks, and do not 23371 support a full exchange operation. In this case, a target may 23372 support reduced functionality here by which the _only_ valid value 23373 to store is the immediate constant 1. The exact value actually 23374 stored in `*PTR' is implementation defined. 23375 23376 This builtin is not a full barrier, but rather an "acquire 23377 barrier". This means that references after the builtin cannot 23378 move to (or be speculated to) before the builtin, but previous 23379 memory stores may not be globally visible yet, and previous memory 23380 loads may not yet be satisfied. 23381 23382 `void __sync_lock_release (TYPE *ptr, ...)' 23383 This builtin releases the lock acquired by 23384 `__sync_lock_test_and_set'. Normally this means writing the 23385 constant 0 to `*PTR'. 23386 23387 This builtin is not a full barrier, but rather a "release barrier". 23388 This means that all previous memory stores are globally visible, 23389 and all previous memory loads have been satisfied, but following 23390 memory reads are not prevented from being speculated to before the 23391 barrier. 23392 23393 23394 File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: Atomic Builtins, Up: C Extensions 23395 23396 5.48 Object Size Checking Builtins 23397 ================================== 23398 23399 GCC implements a limited buffer overflow protection mechanism that can 23400 prevent some buffer overflow attacks. 23401 23402 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 23403 TYPE) 23404 is a built-in construct that returns a constant number of bytes 23405 from PTR to the end of the object PTR pointer points to (if known 23406 at compile time). `__builtin_object_size' never evaluates its 23407 arguments for side-effects. If there are any side-effects in 23408 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 23409 for TYPE 2 or 3. If there are multiple objects PTR can point to 23410 and all of them are known at compile time, the returned number is 23411 the maximum of remaining byte counts in those objects if TYPE & 2 23412 is 0 and minimum if nonzero. If it is not possible to determine 23413 which objects PTR points to at compile time, 23414 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 23415 1 and `(size_t) 0' for TYPE 2 or 3. 23416 23417 TYPE is an integer constant from 0 to 3. If the least significant 23418 bit is clear, objects are whole variables, if it is set, a closest 23419 surrounding subobject is considered the object a pointer points to. 23420 The second bit determines if maximum or minimum of remaining bytes 23421 is computed. 23422 23423 struct V { char buf1[10]; int b; char buf2[10]; } var; 23424 char *p = &var.buf1[1], *q = &var.b; 23425 23426 /* Here the object p points to is var. */ 23427 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 23428 /* The subobject p points to is var.buf1. */ 23429 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 23430 /* The object q points to is var. */ 23431 assert (__builtin_object_size (q, 0) 23432 == (char *) (&var + 1) - (char *) &var.b); 23433 /* The subobject q points to is var.b. */ 23434 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 23435 23436 There are built-in functions added for many common string operation 23437 functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is 23438 provided. This built-in has an additional last argument, which is the 23439 number of bytes remaining in object the DEST argument points to or 23440 `(size_t) -1' if the size is not known. 23441 23442 The built-in functions are optimized into the normal string functions 23443 like `memcpy' if the last argument is `(size_t) -1' or if it is known 23444 at compile time that the destination object will not be overflown. If 23445 the compiler can determine at compile time the object will be always 23446 overflown, it issues a warning. 23447 23448 The intended use can be e.g. 23449 23450 #undef memcpy 23451 #define bos0(dest) __builtin_object_size (dest, 0) 23452 #define memcpy(dest, src, n) \ 23453 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 23454 23455 char *volatile p; 23456 char buf[10]; 23457 /* It is unknown what object p points to, so this is optimized 23458 into plain memcpy - no checking is possible. */ 23459 memcpy (p, "abcde", n); 23460 /* Destination is known and length too. It is known at compile 23461 time there will be no overflow. */ 23462 memcpy (&buf[5], "abcde", 5); 23463 /* Destination is known, but the length is not known at compile time. 23464 This will result in __memcpy_chk call that can check for overflow 23465 at runtime. */ 23466 memcpy (&buf[5], "abcde", n); 23467 /* Destination is known and it is known at compile time there will 23468 be overflow. There will be a warning and __memcpy_chk call that 23469 will abort the program at runtime. */ 23470 memcpy (&buf[6], "abcde", 5); 23471 23472 Such built-in functions are provided for `memcpy', `mempcpy', 23473 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 23474 `strncat'. 23475 23476 There are also checking built-in functions for formatted output 23477 functions. 23478 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 23479 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 23480 const char *fmt, ...); 23481 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 23482 va_list ap); 23483 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 23484 const char *fmt, va_list ap); 23485 23486 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 23487 functions and can contain implementation specific flags on what 23488 additional security measures the checking function might take, such as 23489 handling `%n' differently. 23490 23491 The OS argument is the object size S points to, like in the other 23492 built-in functions. There is a small difference in the behavior 23493 though, if OS is `(size_t) -1', the built-in functions are optimized 23494 into the non-checking functions only if FLAG is 0, otherwise the 23495 checking function is called with OS argument set to `(size_t) -1'. 23496 23497 In addition to this, there are checking built-in functions 23498 `__builtin___printf_chk', `__builtin___vprintf_chk', 23499 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 23500 just one additional argument, FLAG, right before format string FMT. If 23501 the compiler is able to optimize them to `fputc' etc. functions, it 23502 will, otherwise the checking function should be called and the FLAG 23503 argument passed to it. 23504 23505 23506 File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 23507 23508 5.49 Other built-in functions provided by GCC 23509 ============================================= 23510 23511 GCC provides a large number of built-in functions other than the ones 23512 mentioned above. Some of these are for internal use in the processing 23513 of exceptions or variable-length argument lists and will not be 23514 documented here because they may change from time to time; we do not 23515 recommend general use of these functions. 23516 23517 The remaining functions are provided for optimization purposes. 23518 23519 GCC includes built-in versions of many of the functions in the standard 23520 C library. The versions prefixed with `__builtin_' will always be 23521 treated as having the same meaning as the C library function even if you 23522 specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 23523 these functions are only optimized in certain cases; if they are not 23524 optimized in a particular case, a call to the library function will be 23525 emitted. 23526 23527 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the 23528 functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext', 23529 `dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl', 23530 `ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal', 23531 `gamma', `gammaf_r', `gammal_r', `gamma_r', `gettext', `index', 23532 `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', `jnf', `jnl', `jn', 23533 `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', `pow10f', `pow10l', 23534 `pow10', `printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', 23535 `signbit', `signbitf', `signbitl', `signbitd32', `signbitd64', 23536 `signbitd128', `significandf', `significandl', `significand', `sincosf', 23537 `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp', `strdup', 23538 `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l', `y0', 23539 `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as built-in 23540 functions. All these functions have corresponding versions prefixed 23541 with `__builtin_', which may be used even in strict C89 mode. 23542 23543 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 23544 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 23545 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 23546 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 23547 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 23548 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 23549 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 23550 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 23551 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 23552 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 23553 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 23554 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 23555 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 23556 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 23557 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 23558 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 23559 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 23560 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 23561 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 23562 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 23563 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 23564 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 23565 `remainderf', `remainderl', `remainder', `remquof', `remquol', 23566 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 23567 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 23568 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 23569 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 23570 functions except in strict ISO C90 mode (`-ansi' or `-std=c89'). 23571 23572 There are also built-in versions of the ISO C99 functions `acosf', 23573 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 23574 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 23575 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 23576 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 23577 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 23578 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 23579 recognized in any mode since ISO C90 reserves these names for the 23580 purpose to which ISO C99 puts them. All these functions have 23581 corresponding versions prefixed with `__builtin_'. 23582 23583 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 23584 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 23585 `iswxdigit', `towlower' and `towupper' are handled as built-in functions 23586 except in strict ISO C90 mode (`-ansi' or `-std=c89'). 23587 23588 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 23589 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 23590 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 23591 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 23592 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 23593 `log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow', 23594 `printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf', 23595 `sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', 23596 `strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk', 23597 `strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and 23598 `vsprintf' are all recognized as built-in functions unless 23599 `-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified 23600 for an individual function). All of these functions have corresponding 23601 versions prefixed with `__builtin_'. 23602 23603 GCC provides built-in versions of the ISO C99 floating point comparison 23604 macros that avoid raising exceptions for unordered operands. They have 23605 the same names as the standard macros ( `isgreater', `isgreaterequal', 23606 `isless', `islessequal', `islessgreater', and `isunordered') , with 23607 `__builtin_' prefixed. We intend for a library implementor to be able 23608 to simply `#define' each standard macro to its built-in equivalent. In 23609 the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign' 23610 and `isnormal' built-ins used with `__builtin_' prefixed. The `isinf' 23611 and `isnan' builtins appear both with and without the `__builtin_' 23612 prefix. 23613 23614 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 23615 You can use the built-in function `__builtin_types_compatible_p' to 23616 determine whether two types are the same. 23617 23618 This built-in function returns 1 if the unqualified versions of the 23619 types TYPE1 and TYPE2 (which are types, not expressions) are 23620 compatible, 0 otherwise. The result of this built-in function can 23621 be used in integer constant expressions. 23622 23623 This built-in function ignores top level qualifiers (e.g., `const', 23624 `volatile'). For example, `int' is equivalent to `const int'. 23625 23626 The type `int[]' and `int[5]' are compatible. On the other hand, 23627 `int' and `char *' are not compatible, even if the size of their 23628 types, on the particular architecture are the same. Also, the 23629 amount of pointer indirection is taken into account when 23630 determining similarity. Consequently, `short *' is not similar to 23631 `short **'. Furthermore, two types that are typedefed are 23632 considered compatible if their underlying types are compatible. 23633 23634 An `enum' type is not considered to be compatible with another 23635 `enum' type even if both are compatible with the same integer 23636 type; this is what the C standard specifies. For example, `enum 23637 {foo, bar}' is not similar to `enum {hot, dog}'. 23638 23639 You would typically use this function in code whose execution 23640 varies depending on the arguments' types. For example: 23641 23642 #define foo(x) \ 23643 ({ \ 23644 typeof (x) tmp = (x); \ 23645 if (__builtin_types_compatible_p (typeof (x), long double)) \ 23646 tmp = foo_long_double (tmp); \ 23647 else if (__builtin_types_compatible_p (typeof (x), double)) \ 23648 tmp = foo_double (tmp); \ 23649 else if (__builtin_types_compatible_p (typeof (x), float)) \ 23650 tmp = foo_float (tmp); \ 23651 else \ 23652 abort (); \ 23653 tmp; \ 23654 }) 23655 23656 _Note:_ This construct is only available for C. 23657 23658 23659 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 23660 EXP2) 23661 You can use the built-in function `__builtin_choose_expr' to 23662 evaluate code depending on the value of a constant expression. 23663 This built-in function returns EXP1 if CONST_EXP, which is a 23664 constant expression that must be able to be determined at compile 23665 time, is nonzero. Otherwise it returns 0. 23666 23667 This built-in function is analogous to the `? :' operator in C, 23668 except that the expression returned has its type unaltered by 23669 promotion rules. Also, the built-in function does not evaluate 23670 the expression that was not chosen. For example, if CONST_EXP 23671 evaluates to true, EXP2 is not evaluated even if it has 23672 side-effects. 23673 23674 This built-in function can return an lvalue if the chosen argument 23675 is an lvalue. 23676 23677 If EXP1 is returned, the return type is the same as EXP1's type. 23678 Similarly, if EXP2 is returned, its return type is the same as 23679 EXP2. 23680 23681 Example: 23682 23683 #define foo(x) \ 23684 __builtin_choose_expr ( \ 23685 __builtin_types_compatible_p (typeof (x), double), \ 23686 foo_double (x), \ 23687 __builtin_choose_expr ( \ 23688 __builtin_types_compatible_p (typeof (x), float), \ 23689 foo_float (x), \ 23690 /* The void expression results in a compile-time error \ 23691 when assigning the result to something. */ \ 23692 (void)0)) 23693 23694 _Note:_ This construct is only available for C. Furthermore, the 23695 unused expression (EXP1 or EXP2 depending on the value of 23696 CONST_EXP) may still generate syntax errors. This may change in 23697 future revisions. 23698 23699 23700 -- Built-in Function: int __builtin_constant_p (EXP) 23701 You can use the built-in function `__builtin_constant_p' to 23702 determine if a value is known to be constant at compile-time and 23703 hence that GCC can perform constant-folding on expressions 23704 involving that value. The argument of the function is the value 23705 to test. The function returns the integer 1 if the argument is 23706 known to be a compile-time constant and 0 if it is not known to be 23707 a compile-time constant. A return of 0 does not indicate that the 23708 value is _not_ a constant, but merely that GCC cannot prove it is 23709 a constant with the specified value of the `-O' option. 23710 23711 You would typically use this function in an embedded application 23712 where memory was a critical resource. If you have some complex 23713 calculation, you may want it to be folded if it involves 23714 constants, but need to call a function if it does not. For 23715 example: 23716 23717 #define Scale_Value(X) \ 23718 (__builtin_constant_p (X) \ 23719 ? ((X) * SCALE + OFFSET) : Scale (X)) 23720 23721 You may use this built-in function in either a macro or an inline 23722 function. However, if you use it in an inlined function and pass 23723 an argument of the function as the argument to the built-in, GCC 23724 will never return 1 when you call the inline function with a 23725 string constant or compound literal (*note Compound Literals::) 23726 and will not return 1 when you pass a constant numeric value to 23727 the inline function unless you specify the `-O' option. 23728 23729 You may also use `__builtin_constant_p' in initializers for static 23730 data. For instance, you can write 23731 23732 static const int table[] = { 23733 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 23734 /* ... */ 23735 }; 23736 23737 This is an acceptable initializer even if EXPRESSION is not a 23738 constant expression. GCC must be more conservative about 23739 evaluating the built-in in this case, because it has no 23740 opportunity to perform optimization. 23741 23742 Previous versions of GCC did not accept this built-in in data 23743 initializers. The earliest version where it is completely safe is 23744 3.0.1. 23745 23746 -- Built-in Function: long __builtin_expect (long EXP, long C) 23747 You may use `__builtin_expect' to provide the compiler with branch 23748 prediction information. In general, you should prefer to use 23749 actual profile feedback for this (`-fprofile-arcs'), as 23750 programmers are notoriously bad at predicting how their programs 23751 actually perform. However, there are applications in which this 23752 data is hard to collect. 23753 23754 The return value is the value of EXP, which should be an integral 23755 expression. The semantics of the built-in are that it is expected 23756 that EXP == C. For example: 23757 23758 if (__builtin_expect (x, 0)) 23759 foo (); 23760 23761 would indicate that we do not expect to call `foo', since we 23762 expect `x' to be zero. Since you are limited to integral 23763 expressions for EXP, you should use constructions such as 23764 23765 if (__builtin_expect (ptr != NULL, 1)) 23766 error (); 23767 23768 when testing pointer or floating-point values. 23769 23770 -- Built-in Function: void __builtin_trap (void) 23771 This function causes the program to exit abnormally. GCC 23772 implements this function by using a target-dependent mechanism 23773 (such as intentionally executing an illegal instruction) or by 23774 calling `abort'. The mechanism used may vary from release to 23775 release so you should not rely on any particular implementation. 23776 23777 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 23778 *END) 23779 This function is used to flush the processor's instruction cache 23780 for the region of memory between BEGIN inclusive and END 23781 exclusive. Some targets require that the instruction cache be 23782 flushed, after modifying memory containing code, in order to obtain 23783 deterministic behavior. 23784 23785 If the target does not require instruction cache flushes, 23786 `__builtin___clear_cache' has no effect. Otherwise either 23787 instructions are emitted in-line to clear the instruction cache or 23788 a call to the `__clear_cache' function in libgcc is made. 23789 23790 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 23791 This function is used to minimize cache-miss latency by moving 23792 data into a cache before it is accessed. You can insert calls to 23793 `__builtin_prefetch' into code for which you know addresses of 23794 data in memory that is likely to be accessed soon. If the target 23795 supports them, data prefetch instructions will be generated. If 23796 the prefetch is done early enough before the access then the data 23797 will be in the cache by the time it is accessed. 23798 23799 The value of ADDR is the address of the memory to prefetch. There 23800 are two optional arguments, RW and LOCALITY. The value of RW is a 23801 compile-time constant one or zero; one means that the prefetch is 23802 preparing for a write to the memory address and zero, the default, 23803 means that the prefetch is preparing for a read. The value 23804 LOCALITY must be a compile-time constant integer between zero and 23805 three. A value of zero means that the data has no temporal 23806 locality, so it need not be left in the cache after the access. A 23807 value of three means that the data has a high degree of temporal 23808 locality and should be left in all levels of cache possible. 23809 Values of one and two mean, respectively, a low or moderate degree 23810 of temporal locality. The default is three. 23811 23812 for (i = 0; i < n; i++) 23813 { 23814 a[i] = a[i] + b[i]; 23815 __builtin_prefetch (&a[i+j], 1, 1); 23816 __builtin_prefetch (&b[i+j], 0, 1); 23817 /* ... */ 23818 } 23819 23820 Data prefetch does not generate faults if ADDR is invalid, but the 23821 address expression itself must be valid. For example, a prefetch 23822 of `p->next' will not fault if `p->next' is not a valid address, 23823 but evaluation will fault if `p' is not a valid address. 23824 23825 If the target does not support data prefetch, the address 23826 expression is evaluated if it includes side effects but no other 23827 code is generated and GCC does not issue a warning. 23828 23829 -- Built-in Function: double __builtin_huge_val (void) 23830 Returns a positive infinity, if supported by the floating-point 23831 format, else `DBL_MAX'. This function is suitable for 23832 implementing the ISO C macro `HUGE_VAL'. 23833 23834 -- Built-in Function: float __builtin_huge_valf (void) 23835 Similar to `__builtin_huge_val', except the return type is `float'. 23836 23837 -- Built-in Function: long double __builtin_huge_vall (void) 23838 Similar to `__builtin_huge_val', except the return type is `long 23839 double'. 23840 23841 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 23842 int, ...) 23843 This built-in implements the C99 fpclassify functionality. The 23844 first five int arguments should be the target library's notion of 23845 the possible FP classes and are used for return values. They must 23846 be constant values and they must appear in this order: `FP_NAN', 23847 `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'. The 23848 ellipsis is for exactly one floating point value to classify. GCC 23849 treats the last argument as type-generic, which means it does not 23850 do default promotion from float to double. 23851 23852 -- Built-in Function: double __builtin_inf (void) 23853 Similar to `__builtin_huge_val', except a warning is generated if 23854 the target floating-point format does not support infinities. 23855 23856 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 23857 Similar to `__builtin_inf', except the return type is `_Decimal32'. 23858 23859 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 23860 Similar to `__builtin_inf', except the return type is `_Decimal64'. 23861 23862 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 23863 Similar to `__builtin_inf', except the return type is 23864 `_Decimal128'. 23865 23866 -- Built-in Function: float __builtin_inff (void) 23867 Similar to `__builtin_inf', except the return type is `float'. 23868 This function is suitable for implementing the ISO C99 macro 23869 `INFINITY'. 23870 23871 -- Built-in Function: long double __builtin_infl (void) 23872 Similar to `__builtin_inf', except the return type is `long 23873 double'. 23874 23875 -- Built-in Function: int __builtin_isinf_sign (...) 23876 Similar to `isinf', except the return value will be negative for 23877 an argument of `-Inf'. Note while the parameter list is an 23878 ellipsis, this function only accepts exactly one floating point 23879 argument. GCC treats this parameter as type-generic, which means 23880 it does not do default promotion from float to double. 23881 23882 -- Built-in Function: double __builtin_nan (const char *str) 23883 This is an implementation of the ISO C99 function `nan'. 23884 23885 Since ISO C99 defines this function in terms of `strtod', which we 23886 do not implement, a description of the parsing is in order. The 23887 string is parsed as by `strtol'; that is, the base is recognized by 23888 leading `0' or `0x' prefixes. The number parsed is placed in the 23889 significand such that the least significant bit of the number is 23890 at the least significant bit of the significand. The number is 23891 truncated to fit the significand field provided. The significand 23892 is forced to be a quiet NaN. 23893 23894 This function, if given a string literal all of which would have 23895 been consumed by strtol, is evaluated early enough that it is 23896 considered a compile-time constant. 23897 23898 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 23899 Similar to `__builtin_nan', except the return type is `_Decimal32'. 23900 23901 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 23902 Similar to `__builtin_nan', except the return type is `_Decimal64'. 23903 23904 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 23905 Similar to `__builtin_nan', except the return type is 23906 `_Decimal128'. 23907 23908 -- Built-in Function: float __builtin_nanf (const char *str) 23909 Similar to `__builtin_nan', except the return type is `float'. 23910 23911 -- Built-in Function: long double __builtin_nanl (const char *str) 23912 Similar to `__builtin_nan', except the return type is `long 23913 double'. 23914 23915 -- Built-in Function: double __builtin_nans (const char *str) 23916 Similar to `__builtin_nan', except the significand is forced to be 23917 a signaling NaN. The `nans' function is proposed by WG14 N965. 23918 23919 -- Built-in Function: float __builtin_nansf (const char *str) 23920 Similar to `__builtin_nans', except the return type is `float'. 23921 23922 -- Built-in Function: long double __builtin_nansl (const char *str) 23923 Similar to `__builtin_nans', except the return type is `long 23924 double'. 23925 23926 -- Built-in Function: int __builtin_ffs (unsigned int x) 23927 Returns one plus the index of the least significant 1-bit of X, or 23928 if X is zero, returns zero. 23929 23930 -- Built-in Function: int __builtin_clz (unsigned int x) 23931 Returns the number of leading 0-bits in X, starting at the most 23932 significant bit position. If X is 0, the result is undefined. 23933 23934 -- Built-in Function: int __builtin_ctz (unsigned int x) 23935 Returns the number of trailing 0-bits in X, starting at the least 23936 significant bit position. If X is 0, the result is undefined. 23937 23938 -- Built-in Function: int __builtin_popcount (unsigned int x) 23939 Returns the number of 1-bits in X. 23940 23941 -- Built-in Function: int __builtin_parity (unsigned int x) 23942 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 23943 23944 -- Built-in Function: int __builtin_ffsl (unsigned long) 23945 Similar to `__builtin_ffs', except the argument type is `unsigned 23946 long'. 23947 23948 -- Built-in Function: int __builtin_clzl (unsigned long) 23949 Similar to `__builtin_clz', except the argument type is `unsigned 23950 long'. 23951 23952 -- Built-in Function: int __builtin_ctzl (unsigned long) 23953 Similar to `__builtin_ctz', except the argument type is `unsigned 23954 long'. 23955 23956 -- Built-in Function: int __builtin_popcountl (unsigned long) 23957 Similar to `__builtin_popcount', except the argument type is 23958 `unsigned long'. 23959 23960 -- Built-in Function: int __builtin_parityl (unsigned long) 23961 Similar to `__builtin_parity', except the argument type is 23962 `unsigned long'. 23963 23964 -- Built-in Function: int __builtin_ffsll (unsigned long long) 23965 Similar to `__builtin_ffs', except the argument type is `unsigned 23966 long long'. 23967 23968 -- Built-in Function: int __builtin_clzll (unsigned long long) 23969 Similar to `__builtin_clz', except the argument type is `unsigned 23970 long long'. 23971 23972 -- Built-in Function: int __builtin_ctzll (unsigned long long) 23973 Similar to `__builtin_ctz', except the argument type is `unsigned 23974 long long'. 23975 23976 -- Built-in Function: int __builtin_popcountll (unsigned long long) 23977 Similar to `__builtin_popcount', except the argument type is 23978 `unsigned long long'. 23979 23980 -- Built-in Function: int __builtin_parityll (unsigned long long) 23981 Similar to `__builtin_parity', except the argument type is 23982 `unsigned long long'. 23983 23984 -- Built-in Function: double __builtin_powi (double, int) 23985 Returns the first argument raised to the power of the second. 23986 Unlike the `pow' function no guarantees about precision and 23987 rounding are made. 23988 23989 -- Built-in Function: float __builtin_powif (float, int) 23990 Similar to `__builtin_powi', except the argument and return types 23991 are `float'. 23992 23993 -- Built-in Function: long double __builtin_powil (long double, int) 23994 Similar to `__builtin_powi', except the argument and return types 23995 are `long double'. 23996 23997 -- Built-in Function: int32_t __builtin_bswap32 (int32_t x) 23998 Returns X with the order of the bytes reversed; for example, 23999 `0xaabbccdd' becomes `0xddccbbaa'. Byte here always means exactly 24000 8 bits. 24001 24002 -- Built-in Function: int64_t __builtin_bswap64 (int64_t x) 24003 Similar to `__builtin_bswap32', except the argument and return 24004 types are 64-bit. 24005 24006 24007 File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 24008 24009 5.50 Built-in Functions Specific to Particular Target Machines 24010 ============================================================== 24011 24012 On some target machines, GCC supports many built-in functions specific 24013 to those machines. Generally these generate calls to specific machine 24014 instructions, but allow the compiler to schedule those calls. 24015 24016 * Menu: 24017 24018 * Alpha Built-in Functions:: 24019 * ARM iWMMXt Built-in Functions:: 24020 * ARM NEON Intrinsics:: 24021 * Blackfin Built-in Functions:: 24022 * FR-V Built-in Functions:: 24023 * X86 Built-in Functions:: 24024 * MIPS DSP Built-in Functions:: 24025 * MIPS Paired-Single Support:: 24026 * MIPS Loongson Built-in Functions:: 24027 * Other MIPS Built-in Functions:: 24028 * picoChip Built-in Functions:: 24029 * PowerPC AltiVec Built-in Functions:: 24030 * SPARC VIS Built-in Functions:: 24031 * SPU Built-in Functions:: 24032 24033 24034 File: gcc.info, Node: Alpha Built-in Functions, Next: ARM iWMMXt Built-in Functions, Up: Target Builtins 24035 24036 5.50.1 Alpha Built-in Functions 24037 ------------------------------- 24038 24039 These built-in functions are available for the Alpha family of 24040 processors, depending on the command-line switches used. 24041 24042 The following built-in functions are always available. They all 24043 generate the machine instruction that is part of the name. 24044 24045 long __builtin_alpha_implver (void) 24046 long __builtin_alpha_rpcc (void) 24047 long __builtin_alpha_amask (long) 24048 long __builtin_alpha_cmpbge (long, long) 24049 long __builtin_alpha_extbl (long, long) 24050 long __builtin_alpha_extwl (long, long) 24051 long __builtin_alpha_extll (long, long) 24052 long __builtin_alpha_extql (long, long) 24053 long __builtin_alpha_extwh (long, long) 24054 long __builtin_alpha_extlh (long, long) 24055 long __builtin_alpha_extqh (long, long) 24056 long __builtin_alpha_insbl (long, long) 24057 long __builtin_alpha_inswl (long, long) 24058 long __builtin_alpha_insll (long, long) 24059 long __builtin_alpha_insql (long, long) 24060 long __builtin_alpha_inswh (long, long) 24061 long __builtin_alpha_inslh (long, long) 24062 long __builtin_alpha_insqh (long, long) 24063 long __builtin_alpha_mskbl (long, long) 24064 long __builtin_alpha_mskwl (long, long) 24065 long __builtin_alpha_mskll (long, long) 24066 long __builtin_alpha_mskql (long, long) 24067 long __builtin_alpha_mskwh (long, long) 24068 long __builtin_alpha_msklh (long, long) 24069 long __builtin_alpha_mskqh (long, long) 24070 long __builtin_alpha_umulh (long, long) 24071 long __builtin_alpha_zap (long, long) 24072 long __builtin_alpha_zapnot (long, long) 24073 24074 The following built-in functions are always with `-mmax' or 24075 `-mcpu=CPU' where CPU is `pca56' or later. They all generate the 24076 machine instruction that is part of the name. 24077 24078 long __builtin_alpha_pklb (long) 24079 long __builtin_alpha_pkwb (long) 24080 long __builtin_alpha_unpkbl (long) 24081 long __builtin_alpha_unpkbw (long) 24082 long __builtin_alpha_minub8 (long, long) 24083 long __builtin_alpha_minsb8 (long, long) 24084 long __builtin_alpha_minuw4 (long, long) 24085 long __builtin_alpha_minsw4 (long, long) 24086 long __builtin_alpha_maxub8 (long, long) 24087 long __builtin_alpha_maxsb8 (long, long) 24088 long __builtin_alpha_maxuw4 (long, long) 24089 long __builtin_alpha_maxsw4 (long, long) 24090 long __builtin_alpha_perr (long, long) 24091 24092 The following built-in functions are always with `-mcix' or 24093 `-mcpu=CPU' where CPU is `ev67' or later. They all generate the 24094 machine instruction that is part of the name. 24095 24096 long __builtin_alpha_cttz (long) 24097 long __builtin_alpha_ctlz (long) 24098 long __builtin_alpha_ctpop (long) 24099 24100 The following builtins are available on systems that use the OSF/1 24101 PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but 24102 when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'. 24103 24104 void *__builtin_thread_pointer (void) 24105 void __builtin_set_thread_pointer (void *) 24106 24107 24108 File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: Alpha Built-in Functions, Up: Target Builtins 24109 24110 5.50.2 ARM iWMMXt Built-in Functions 24111 ------------------------------------ 24112 24113 These built-in functions are available for the ARM family of processors 24114 when the `-mcpu=iwmmxt' switch is used: 24115 24116 typedef int v2si __attribute__ ((vector_size (8))); 24117 typedef short v4hi __attribute__ ((vector_size (8))); 24118 typedef char v8qi __attribute__ ((vector_size (8))); 24119 24120 int __builtin_arm_getwcx (int) 24121 void __builtin_arm_setwcx (int, int) 24122 int __builtin_arm_textrmsb (v8qi, int) 24123 int __builtin_arm_textrmsh (v4hi, int) 24124 int __builtin_arm_textrmsw (v2si, int) 24125 int __builtin_arm_textrmub (v8qi, int) 24126 int __builtin_arm_textrmuh (v4hi, int) 24127 int __builtin_arm_textrmuw (v2si, int) 24128 v8qi __builtin_arm_tinsrb (v8qi, int) 24129 v4hi __builtin_arm_tinsrh (v4hi, int) 24130 v2si __builtin_arm_tinsrw (v2si, int) 24131 long long __builtin_arm_tmia (long long, int, int) 24132 long long __builtin_arm_tmiabb (long long, int, int) 24133 long long __builtin_arm_tmiabt (long long, int, int) 24134 long long __builtin_arm_tmiaph (long long, int, int) 24135 long long __builtin_arm_tmiatb (long long, int, int) 24136 long long __builtin_arm_tmiatt (long long, int, int) 24137 int __builtin_arm_tmovmskb (v8qi) 24138 int __builtin_arm_tmovmskh (v4hi) 24139 int __builtin_arm_tmovmskw (v2si) 24140 long long __builtin_arm_waccb (v8qi) 24141 long long __builtin_arm_wacch (v4hi) 24142 long long __builtin_arm_waccw (v2si) 24143 v8qi __builtin_arm_waddb (v8qi, v8qi) 24144 v8qi __builtin_arm_waddbss (v8qi, v8qi) 24145 v8qi __builtin_arm_waddbus (v8qi, v8qi) 24146 v4hi __builtin_arm_waddh (v4hi, v4hi) 24147 v4hi __builtin_arm_waddhss (v4hi, v4hi) 24148 v4hi __builtin_arm_waddhus (v4hi, v4hi) 24149 v2si __builtin_arm_waddw (v2si, v2si) 24150 v2si __builtin_arm_waddwss (v2si, v2si) 24151 v2si __builtin_arm_waddwus (v2si, v2si) 24152 v8qi __builtin_arm_walign (v8qi, v8qi, int) 24153 long long __builtin_arm_wand(long long, long long) 24154 long long __builtin_arm_wandn (long long, long long) 24155 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 24156 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 24157 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 24158 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 24159 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 24160 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 24161 v2si __builtin_arm_wcmpeqw (v2si, v2si) 24162 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 24163 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 24164 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 24165 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 24166 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 24167 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 24168 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 24169 long long __builtin_arm_wmacsz (v4hi, v4hi) 24170 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 24171 long long __builtin_arm_wmacuz (v4hi, v4hi) 24172 v4hi __builtin_arm_wmadds (v4hi, v4hi) 24173 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 24174 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 24175 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 24176 v2si __builtin_arm_wmaxsw (v2si, v2si) 24177 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 24178 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 24179 v2si __builtin_arm_wmaxuw (v2si, v2si) 24180 v8qi __builtin_arm_wminsb (v8qi, v8qi) 24181 v4hi __builtin_arm_wminsh (v4hi, v4hi) 24182 v2si __builtin_arm_wminsw (v2si, v2si) 24183 v8qi __builtin_arm_wminub (v8qi, v8qi) 24184 v4hi __builtin_arm_wminuh (v4hi, v4hi) 24185 v2si __builtin_arm_wminuw (v2si, v2si) 24186 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 24187 v4hi __builtin_arm_wmulul (v4hi, v4hi) 24188 v4hi __builtin_arm_wmulum (v4hi, v4hi) 24189 long long __builtin_arm_wor (long long, long long) 24190 v2si __builtin_arm_wpackdss (long long, long long) 24191 v2si __builtin_arm_wpackdus (long long, long long) 24192 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 24193 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 24194 v4hi __builtin_arm_wpackwss (v2si, v2si) 24195 v4hi __builtin_arm_wpackwus (v2si, v2si) 24196 long long __builtin_arm_wrord (long long, long long) 24197 long long __builtin_arm_wrordi (long long, int) 24198 v4hi __builtin_arm_wrorh (v4hi, long long) 24199 v4hi __builtin_arm_wrorhi (v4hi, int) 24200 v2si __builtin_arm_wrorw (v2si, long long) 24201 v2si __builtin_arm_wrorwi (v2si, int) 24202 v2si __builtin_arm_wsadb (v8qi, v8qi) 24203 v2si __builtin_arm_wsadbz (v8qi, v8qi) 24204 v2si __builtin_arm_wsadh (v4hi, v4hi) 24205 v2si __builtin_arm_wsadhz (v4hi, v4hi) 24206 v4hi __builtin_arm_wshufh (v4hi, int) 24207 long long __builtin_arm_wslld (long long, long long) 24208 long long __builtin_arm_wslldi (long long, int) 24209 v4hi __builtin_arm_wsllh (v4hi, long long) 24210 v4hi __builtin_arm_wsllhi (v4hi, int) 24211 v2si __builtin_arm_wsllw (v2si, long long) 24212 v2si __builtin_arm_wsllwi (v2si, int) 24213 long long __builtin_arm_wsrad (long long, long long) 24214 long long __builtin_arm_wsradi (long long, int) 24215 v4hi __builtin_arm_wsrah (v4hi, long long) 24216 v4hi __builtin_arm_wsrahi (v4hi, int) 24217 v2si __builtin_arm_wsraw (v2si, long long) 24218 v2si __builtin_arm_wsrawi (v2si, int) 24219 long long __builtin_arm_wsrld (long long, long long) 24220 long long __builtin_arm_wsrldi (long long, int) 24221 v4hi __builtin_arm_wsrlh (v4hi, long long) 24222 v4hi __builtin_arm_wsrlhi (v4hi, int) 24223 v2si __builtin_arm_wsrlw (v2si, long long) 24224 v2si __builtin_arm_wsrlwi (v2si, int) 24225 v8qi __builtin_arm_wsubb (v8qi, v8qi) 24226 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 24227 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 24228 v4hi __builtin_arm_wsubh (v4hi, v4hi) 24229 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 24230 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 24231 v2si __builtin_arm_wsubw (v2si, v2si) 24232 v2si __builtin_arm_wsubwss (v2si, v2si) 24233 v2si __builtin_arm_wsubwus (v2si, v2si) 24234 v4hi __builtin_arm_wunpckehsb (v8qi) 24235 v2si __builtin_arm_wunpckehsh (v4hi) 24236 long long __builtin_arm_wunpckehsw (v2si) 24237 v4hi __builtin_arm_wunpckehub (v8qi) 24238 v2si __builtin_arm_wunpckehuh (v4hi) 24239 long long __builtin_arm_wunpckehuw (v2si) 24240 v4hi __builtin_arm_wunpckelsb (v8qi) 24241 v2si __builtin_arm_wunpckelsh (v4hi) 24242 long long __builtin_arm_wunpckelsw (v2si) 24243 v4hi __builtin_arm_wunpckelub (v8qi) 24244 v2si __builtin_arm_wunpckeluh (v4hi) 24245 long long __builtin_arm_wunpckeluw (v2si) 24246 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 24247 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 24248 v2si __builtin_arm_wunpckihw (v2si, v2si) 24249 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 24250 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 24251 v2si __builtin_arm_wunpckilw (v2si, v2si) 24252 long long __builtin_arm_wxor (long long, long long) 24253 long long __builtin_arm_wzero () 24254 24255 24256 File: gcc.info, Node: ARM NEON Intrinsics, Next: Blackfin Built-in Functions, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 24257 24258 5.50.3 ARM NEON Intrinsics 24259 -------------------------- 24260 24261 These built-in intrinsics for the ARM Advanced SIMD extension are 24262 available when the `-mfpu=neon' switch is used: 24263 24264 5.50.3.1 Addition 24265 ................. 24266 24267 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) 24268 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 24269 24270 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) 24271 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 24272 24273 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) 24274 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 24275 24276 * int32x2_t vadd_s32 (int32x2_t, int32x2_t) 24277 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 24278 24279 * int16x4_t vadd_s16 (int16x4_t, int16x4_t) 24280 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 24281 24282 * int8x8_t vadd_s8 (int8x8_t, int8x8_t) 24283 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 24284 24285 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) 24286 _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0' 24287 24288 * int64x1_t vadd_s64 (int64x1_t, int64x1_t) 24289 _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0' 24290 24291 * float32x2_t vadd_f32 (float32x2_t, float32x2_t) 24292 _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0' 24293 24294 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) 24295 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 24296 24297 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) 24298 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 24299 24300 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) 24301 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 24302 24303 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) 24304 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 24305 24306 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) 24307 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 24308 24309 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) 24310 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 24311 24312 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) 24313 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 24314 24315 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) 24316 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 24317 24318 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) 24319 _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0' 24320 24321 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) 24322 _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0' 24323 24324 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) 24325 _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0' 24326 24327 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) 24328 _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0' 24329 24330 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) 24331 _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0' 24332 24333 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) 24334 _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0' 24335 24336 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) 24337 _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0' 24338 24339 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) 24340 _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0' 24341 24342 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) 24343 _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0' 24344 24345 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) 24346 _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0' 24347 24348 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) 24349 _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0' 24350 24351 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) 24352 _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0' 24353 24354 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) 24355 _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0' 24356 24357 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) 24358 _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0' 24359 24360 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) 24361 _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0' 24362 24363 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) 24364 _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0' 24365 24366 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) 24367 _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0' 24368 24369 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) 24370 _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0' 24371 24372 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) 24373 _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0' 24374 24375 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) 24376 _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0' 24377 24378 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) 24379 _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0' 24380 24381 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) 24382 _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0' 24383 24384 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) 24385 _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0' 24386 24387 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) 24388 _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0' 24389 24390 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) 24391 _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0' 24392 24393 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) 24394 _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0' 24395 24396 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) 24397 _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0' 24398 24399 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) 24400 _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0' 24401 24402 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) 24403 _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0' 24404 24405 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) 24406 _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0' 24407 24408 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) 24409 _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0' 24410 24411 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) 24412 _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0' 24413 24414 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) 24415 _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0' 24416 24417 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) 24418 _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0' 24419 24420 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) 24421 _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0' 24422 24423 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) 24424 _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0' 24425 24426 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) 24427 _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0' 24428 24429 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) 24430 _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0' 24431 24432 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) 24433 _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0' 24434 24435 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) 24436 _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0' 24437 24438 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) 24439 _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0' 24440 24441 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) 24442 _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0' 24443 24444 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) 24445 _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0' 24446 24447 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) 24448 _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0' 24449 24450 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) 24451 _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0' 24452 24453 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) 24454 _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0' 24455 24456 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) 24457 _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0' 24458 24459 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) 24460 _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0' 24461 24462 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) 24463 _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0' 24464 24465 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) 24466 _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0' 24467 24468 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) 24469 _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0' 24470 24471 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) 24472 _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0' 24473 24474 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) 24475 _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0' 24476 24477 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) 24478 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 24479 24480 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) 24481 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 24482 24483 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) 24484 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 24485 24486 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) 24487 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 24488 24489 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) 24490 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 24491 24492 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) 24493 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 24494 24495 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) 24496 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 24497 24498 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) 24499 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 24500 24501 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) 24502 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 24503 24504 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) 24505 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 24506 24507 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) 24508 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 24509 24510 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) 24511 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 24512 24513 5.50.3.2 Multiplication 24514 ....................... 24515 24516 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) 24517 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 24518 24519 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) 24520 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 24521 24522 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) 24523 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 24524 24525 * int32x2_t vmul_s32 (int32x2_t, int32x2_t) 24526 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 24527 24528 * int16x4_t vmul_s16 (int16x4_t, int16x4_t) 24529 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 24530 24531 * int8x8_t vmul_s8 (int8x8_t, int8x8_t) 24532 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 24533 24534 * float32x2_t vmul_f32 (float32x2_t, float32x2_t) 24535 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0' 24536 24537 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) 24538 _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0' 24539 24540 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) 24541 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 24542 24543 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) 24544 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 24545 24546 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) 24547 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 24548 24549 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) 24550 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 24551 24552 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) 24553 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 24554 24555 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) 24556 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 24557 24558 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) 24559 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0' 24560 24561 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) 24562 _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0' 24563 24564 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) 24565 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0' 24566 24567 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) 24568 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0' 24569 24570 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) 24571 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0' 24572 24573 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) 24574 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0' 24575 24576 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) 24577 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0' 24578 24579 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) 24580 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0' 24581 24582 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) 24583 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0' 24584 24585 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) 24586 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0' 24587 24588 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) 24589 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0' 24590 24591 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) 24592 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0' 24593 24594 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) 24595 _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0' 24596 24597 * int64x2_t vmull_s32 (int32x2_t, int32x2_t) 24598 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0' 24599 24600 * int32x4_t vmull_s16 (int16x4_t, int16x4_t) 24601 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0' 24602 24603 * int16x8_t vmull_s8 (int8x8_t, int8x8_t) 24604 _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0' 24605 24606 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) 24607 _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0' 24608 24609 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) 24610 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0' 24611 24612 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) 24613 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0' 24614 24615 5.50.3.3 Multiply-accumulate 24616 ............................ 24617 24618 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 24619 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 24620 24621 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 24622 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 24623 24624 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 24625 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 24626 24627 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) 24628 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 24629 24630 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) 24631 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 24632 24633 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) 24634 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 24635 24636 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) 24637 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0' 24638 24639 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 24640 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 24641 24642 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 24643 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 24644 24645 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 24646 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 24647 24648 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) 24649 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 24650 24651 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) 24652 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 24653 24654 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) 24655 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 24656 24657 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) 24658 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0' 24659 24660 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 24661 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0' 24662 24663 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 24664 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0' 24665 24666 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 24667 _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0' 24668 24669 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 24670 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0' 24671 24672 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 24673 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0' 24674 24675 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) 24676 _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0' 24677 24678 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 24679 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0' 24680 24681 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 24682 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0' 24683 24684 5.50.3.4 Multiply-subtract 24685 .......................... 24686 24687 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 24688 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 24689 24690 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 24691 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 24692 24693 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 24694 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 24695 24696 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) 24697 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 24698 24699 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) 24700 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 24701 24702 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) 24703 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 24704 24705 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) 24706 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0' 24707 24708 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 24709 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 24710 24711 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 24712 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 24713 24714 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 24715 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 24716 24717 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) 24718 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 24719 24720 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) 24721 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 24722 24723 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) 24724 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 24725 24726 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) 24727 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0' 24728 24729 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 24730 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0' 24731 24732 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 24733 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0' 24734 24735 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 24736 _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0' 24737 24738 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 24739 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0' 24740 24741 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 24742 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0' 24743 24744 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) 24745 _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0' 24746 24747 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 24748 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0' 24749 24750 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 24751 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0' 24752 24753 5.50.3.5 Subtraction 24754 .................... 24755 24756 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) 24757 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 24758 24759 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) 24760 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 24761 24762 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) 24763 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 24764 24765 * int32x2_t vsub_s32 (int32x2_t, int32x2_t) 24766 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 24767 24768 * int16x4_t vsub_s16 (int16x4_t, int16x4_t) 24769 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 24770 24771 * int8x8_t vsub_s8 (int8x8_t, int8x8_t) 24772 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 24773 24774 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) 24775 _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0' 24776 24777 * int64x1_t vsub_s64 (int64x1_t, int64x1_t) 24778 _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0' 24779 24780 * float32x2_t vsub_f32 (float32x2_t, float32x2_t) 24781 _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0' 24782 24783 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) 24784 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 24785 24786 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) 24787 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 24788 24789 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) 24790 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 24791 24792 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) 24793 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 24794 24795 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) 24796 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 24797 24798 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) 24799 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 24800 24801 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) 24802 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 24803 24804 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) 24805 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 24806 24807 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) 24808 _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0' 24809 24810 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) 24811 _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0' 24812 24813 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) 24814 _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0' 24815 24816 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) 24817 _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0' 24818 24819 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) 24820 _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0' 24821 24822 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) 24823 _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0' 24824 24825 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) 24826 _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0' 24827 24828 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) 24829 _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0' 24830 24831 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) 24832 _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0' 24833 24834 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) 24835 _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0' 24836 24837 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) 24838 _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0' 24839 24840 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) 24841 _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0' 24842 24843 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) 24844 _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0' 24845 24846 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) 24847 _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0' 24848 24849 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) 24850 _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0' 24851 24852 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) 24853 _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0' 24854 24855 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) 24856 _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0' 24857 24858 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) 24859 _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0' 24860 24861 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) 24862 _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0' 24863 24864 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) 24865 _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0' 24866 24867 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) 24868 _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0' 24869 24870 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) 24871 _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0' 24872 24873 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) 24874 _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0' 24875 24876 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) 24877 _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0' 24878 24879 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) 24880 _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0' 24881 24882 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) 24883 _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0' 24884 24885 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) 24886 _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0' 24887 24888 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) 24889 _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0' 24890 24891 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) 24892 _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0' 24893 24894 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) 24895 _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0' 24896 24897 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) 24898 _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0' 24899 24900 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) 24901 _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0' 24902 24903 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) 24904 _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0' 24905 24906 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) 24907 _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0' 24908 24909 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) 24910 _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0' 24911 24912 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) 24913 _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0' 24914 24915 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) 24916 _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0' 24917 24918 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) 24919 _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0' 24920 24921 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) 24922 _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0' 24923 24924 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) 24925 _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0' 24926 24927 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) 24928 _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0' 24929 24930 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) 24931 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 24932 24933 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) 24934 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 24935 24936 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) 24937 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 24938 24939 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) 24940 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 24941 24942 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) 24943 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 24944 24945 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) 24946 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 24947 24948 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) 24949 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 24950 24951 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) 24952 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 24953 24954 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) 24955 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 24956 24957 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) 24958 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 24959 24960 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) 24961 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 24962 24963 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) 24964 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 24965 24966 5.50.3.6 Comparison (equal-to) 24967 .............................. 24968 24969 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) 24970 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 24971 24972 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) 24973 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 24974 24975 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) 24976 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 24977 24978 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) 24979 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 24980 24981 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) 24982 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 24983 24984 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) 24985 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 24986 24987 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) 24988 _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0' 24989 24990 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) 24991 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 24992 24993 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) 24994 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 24995 24996 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) 24997 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 24998 24999 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) 25000 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 25001 25002 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) 25003 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 25004 25005 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) 25006 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 25007 25008 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) 25009 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 25010 25011 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) 25012 _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0' 25013 25014 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) 25015 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 25016 25017 5.50.3.7 Comparison (greater-than-or-equal-to) 25018 .............................................. 25019 25020 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) 25021 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 25022 25023 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) 25024 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 25025 25026 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) 25027 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 25028 25029 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) 25030 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 25031 25032 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) 25033 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 25034 25035 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) 25036 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 25037 25038 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) 25039 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 25040 25041 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) 25042 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 25043 25044 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) 25045 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 25046 25047 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) 25048 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 25049 25050 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) 25051 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 25052 25053 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) 25054 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 25055 25056 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) 25057 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 25058 25059 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) 25060 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 25061 25062 5.50.3.8 Comparison (less-than-or-equal-to) 25063 ........................................... 25064 25065 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) 25066 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 25067 25068 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) 25069 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 25070 25071 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) 25072 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 25073 25074 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) 25075 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 25076 25077 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) 25078 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 25079 25080 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) 25081 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 25082 25083 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) 25084 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 25085 25086 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) 25087 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 25088 25089 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) 25090 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 25091 25092 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) 25093 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 25094 25095 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) 25096 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 25097 25098 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) 25099 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 25100 25101 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) 25102 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 25103 25104 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) 25105 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 25106 25107 5.50.3.9 Comparison (greater-than) 25108 .................................. 25109 25110 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) 25111 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 25112 25113 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) 25114 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 25115 25116 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) 25117 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 25118 25119 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) 25120 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 25121 25122 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) 25123 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 25124 25125 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) 25126 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 25127 25128 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) 25129 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 25130 25131 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) 25132 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 25133 25134 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) 25135 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 25136 25137 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) 25138 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 25139 25140 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) 25141 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 25142 25143 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) 25144 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 25145 25146 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) 25147 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 25148 25149 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) 25150 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 25151 25152 5.50.3.10 Comparison (less-than) 25153 ................................ 25154 25155 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) 25156 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 25157 25158 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) 25159 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 25160 25161 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) 25162 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 25163 25164 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) 25165 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 25166 25167 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) 25168 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 25169 25170 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) 25171 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 25172 25173 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) 25174 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 25175 25176 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) 25177 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 25178 25179 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) 25180 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 25181 25182 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) 25183 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 25184 25185 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) 25186 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 25187 25188 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) 25189 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 25190 25191 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) 25192 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 25193 25194 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) 25195 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 25196 25197 5.50.3.11 Comparison (absolute greater-than-or-equal-to) 25198 ........................................................ 25199 25200 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) 25201 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 25202 25203 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) 25204 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 25205 25206 5.50.3.12 Comparison (absolute less-than-or-equal-to) 25207 ..................................................... 25208 25209 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) 25210 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 25211 25212 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) 25213 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 25214 25215 5.50.3.13 Comparison (absolute greater-than) 25216 ............................................ 25217 25218 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) 25219 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 25220 25221 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) 25222 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 25223 25224 5.50.3.14 Comparison (absolute less-than) 25225 ......................................... 25226 25227 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) 25228 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 25229 25230 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) 25231 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 25232 25233 5.50.3.15 Test bits 25234 ................... 25235 25236 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) 25237 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 25238 25239 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) 25240 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 25241 25242 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) 25243 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 25244 25245 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) 25246 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 25247 25248 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) 25249 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 25250 25251 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) 25252 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 25253 25254 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) 25255 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 25256 25257 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) 25258 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 25259 25260 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) 25261 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 25262 25263 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) 25264 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 25265 25266 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) 25267 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 25268 25269 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) 25270 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 25271 25272 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) 25273 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 25274 25275 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) 25276 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 25277 25278 5.50.3.16 Absolute difference 25279 ............................. 25280 25281 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) 25282 _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0' 25283 25284 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) 25285 _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0' 25286 25287 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) 25288 _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0' 25289 25290 * int32x2_t vabd_s32 (int32x2_t, int32x2_t) 25291 _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0' 25292 25293 * int16x4_t vabd_s16 (int16x4_t, int16x4_t) 25294 _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0' 25295 25296 * int8x8_t vabd_s8 (int8x8_t, int8x8_t) 25297 _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0' 25298 25299 * float32x2_t vabd_f32 (float32x2_t, float32x2_t) 25300 _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0' 25301 25302 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) 25303 _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0' 25304 25305 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) 25306 _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0' 25307 25308 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) 25309 _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0' 25310 25311 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) 25312 _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0' 25313 25314 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) 25315 _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0' 25316 25317 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) 25318 _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0' 25319 25320 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) 25321 _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0' 25322 25323 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) 25324 _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0' 25325 25326 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) 25327 _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0' 25328 25329 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) 25330 _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0' 25331 25332 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) 25333 _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0' 25334 25335 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) 25336 _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0' 25337 25338 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) 25339 _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0' 25340 25341 5.50.3.17 Absolute difference and accumulate 25342 ............................................ 25343 25344 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 25345 _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0' 25346 25347 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 25348 _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0' 25349 25350 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 25351 _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0' 25352 25353 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) 25354 _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0' 25355 25356 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) 25357 _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0' 25358 25359 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) 25360 _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0' 25361 25362 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 25363 _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0' 25364 25365 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 25366 _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0' 25367 25368 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 25369 _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0' 25370 25371 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) 25372 _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0' 25373 25374 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) 25375 _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0' 25376 25377 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) 25378 _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0' 25379 25380 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 25381 _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0' 25382 25383 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 25384 _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0' 25385 25386 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 25387 _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0' 25388 25389 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) 25390 _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0' 25391 25392 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) 25393 _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0' 25394 25395 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) 25396 _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0' 25397 25398 5.50.3.18 Maximum 25399 ................. 25400 25401 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) 25402 _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0' 25403 25404 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) 25405 _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0' 25406 25407 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) 25408 _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0' 25409 25410 * int32x2_t vmax_s32 (int32x2_t, int32x2_t) 25411 _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0' 25412 25413 * int16x4_t vmax_s16 (int16x4_t, int16x4_t) 25414 _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0' 25415 25416 * int8x8_t vmax_s8 (int8x8_t, int8x8_t) 25417 _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0' 25418 25419 * float32x2_t vmax_f32 (float32x2_t, float32x2_t) 25420 _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0' 25421 25422 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) 25423 _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0' 25424 25425 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) 25426 _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0' 25427 25428 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) 25429 _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0' 25430 25431 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) 25432 _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0' 25433 25434 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) 25435 _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0' 25436 25437 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) 25438 _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0' 25439 25440 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) 25441 _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0' 25442 25443 5.50.3.19 Minimum 25444 ................. 25445 25446 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) 25447 _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0' 25448 25449 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) 25450 _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0' 25451 25452 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) 25453 _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0' 25454 25455 * int32x2_t vmin_s32 (int32x2_t, int32x2_t) 25456 _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0' 25457 25458 * int16x4_t vmin_s16 (int16x4_t, int16x4_t) 25459 _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0' 25460 25461 * int8x8_t vmin_s8 (int8x8_t, int8x8_t) 25462 _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0' 25463 25464 * float32x2_t vmin_f32 (float32x2_t, float32x2_t) 25465 _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0' 25466 25467 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) 25468 _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0' 25469 25470 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) 25471 _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0' 25472 25473 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) 25474 _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0' 25475 25476 * int32x4_t vminq_s32 (int32x4_t, int32x4_t) 25477 _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0' 25478 25479 * int16x8_t vminq_s16 (int16x8_t, int16x8_t) 25480 _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0' 25481 25482 * int8x16_t vminq_s8 (int8x16_t, int8x16_t) 25483 _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0' 25484 25485 * float32x4_t vminq_f32 (float32x4_t, float32x4_t) 25486 _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0' 25487 25488 5.50.3.20 Pairwise add 25489 ...................... 25490 25491 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) 25492 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 25493 25494 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) 25495 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 25496 25497 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) 25498 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 25499 25500 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) 25501 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 25502 25503 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) 25504 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 25505 25506 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) 25507 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 25508 25509 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) 25510 _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0' 25511 25512 * uint64x1_t vpaddl_u32 (uint32x2_t) 25513 _Form of expected instruction(s):_ `vpaddl.u32 D0, D0' 25514 25515 * uint32x2_t vpaddl_u16 (uint16x4_t) 25516 _Form of expected instruction(s):_ `vpaddl.u16 D0, D0' 25517 25518 * uint16x4_t vpaddl_u8 (uint8x8_t) 25519 _Form of expected instruction(s):_ `vpaddl.u8 D0, D0' 25520 25521 * int64x1_t vpaddl_s32 (int32x2_t) 25522 _Form of expected instruction(s):_ `vpaddl.s32 D0, D0' 25523 25524 * int32x2_t vpaddl_s16 (int16x4_t) 25525 _Form of expected instruction(s):_ `vpaddl.s16 D0, D0' 25526 25527 * int16x4_t vpaddl_s8 (int8x8_t) 25528 _Form of expected instruction(s):_ `vpaddl.s8 D0, D0' 25529 25530 * uint64x2_t vpaddlq_u32 (uint32x4_t) 25531 _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0' 25532 25533 * uint32x4_t vpaddlq_u16 (uint16x8_t) 25534 _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0' 25535 25536 * uint16x8_t vpaddlq_u8 (uint8x16_t) 25537 _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0' 25538 25539 * int64x2_t vpaddlq_s32 (int32x4_t) 25540 _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0' 25541 25542 * int32x4_t vpaddlq_s16 (int16x8_t) 25543 _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0' 25544 25545 * int16x8_t vpaddlq_s8 (int8x16_t) 25546 _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0' 25547 25548 5.50.3.21 Pairwise add, single_opcode widen and accumulate 25549 .......................................................... 25550 25551 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) 25552 _Form of expected instruction(s):_ `vpadal.u32 D0, D0' 25553 25554 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) 25555 _Form of expected instruction(s):_ `vpadal.u16 D0, D0' 25556 25557 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) 25558 _Form of expected instruction(s):_ `vpadal.u8 D0, D0' 25559 25560 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) 25561 _Form of expected instruction(s):_ `vpadal.s32 D0, D0' 25562 25563 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) 25564 _Form of expected instruction(s):_ `vpadal.s16 D0, D0' 25565 25566 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) 25567 _Form of expected instruction(s):_ `vpadal.s8 D0, D0' 25568 25569 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) 25570 _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0' 25571 25572 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) 25573 _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0' 25574 25575 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) 25576 _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0' 25577 25578 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) 25579 _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0' 25580 25581 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) 25582 _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0' 25583 25584 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) 25585 _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0' 25586 25587 5.50.3.22 Folding maximum 25588 ......................... 25589 25590 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) 25591 _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0' 25592 25593 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) 25594 _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0' 25595 25596 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) 25597 _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0' 25598 25599 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) 25600 _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0' 25601 25602 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) 25603 _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0' 25604 25605 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) 25606 _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0' 25607 25608 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) 25609 _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0' 25610 25611 5.50.3.23 Folding minimum 25612 ......................... 25613 25614 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) 25615 _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0' 25616 25617 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) 25618 _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0' 25619 25620 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) 25621 _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0' 25622 25623 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) 25624 _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0' 25625 25626 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) 25627 _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0' 25628 25629 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) 25630 _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0' 25631 25632 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) 25633 _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0' 25634 25635 5.50.3.24 Reciprocal step 25636 ......................... 25637 25638 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) 25639 _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0' 25640 25641 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) 25642 _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0' 25643 25644 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) 25645 _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0' 25646 25647 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) 25648 _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0' 25649 25650 5.50.3.25 Vector shift left 25651 ........................... 25652 25653 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) 25654 _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0' 25655 25656 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) 25657 _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0' 25658 25659 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) 25660 _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0' 25661 25662 * int32x2_t vshl_s32 (int32x2_t, int32x2_t) 25663 _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0' 25664 25665 * int16x4_t vshl_s16 (int16x4_t, int16x4_t) 25666 _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0' 25667 25668 * int8x8_t vshl_s8 (int8x8_t, int8x8_t) 25669 _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0' 25670 25671 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) 25672 _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0' 25673 25674 * int64x1_t vshl_s64 (int64x1_t, int64x1_t) 25675 _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0' 25676 25677 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) 25678 _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0' 25679 25680 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) 25681 _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0' 25682 25683 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) 25684 _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0' 25685 25686 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) 25687 _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0' 25688 25689 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) 25690 _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0' 25691 25692 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) 25693 _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0' 25694 25695 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) 25696 _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0' 25697 25698 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) 25699 _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0' 25700 25701 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) 25702 _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0' 25703 25704 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) 25705 _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0' 25706 25707 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) 25708 _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0' 25709 25710 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) 25711 _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0' 25712 25713 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) 25714 _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0' 25715 25716 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) 25717 _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0' 25718 25719 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) 25720 _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0' 25721 25722 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) 25723 _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0' 25724 25725 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) 25726 _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0' 25727 25728 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) 25729 _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0' 25730 25731 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) 25732 _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0' 25733 25734 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) 25735 _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0' 25736 25737 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) 25738 _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0' 25739 25740 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) 25741 _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0' 25742 25743 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) 25744 _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0' 25745 25746 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) 25747 _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0' 25748 25749 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) 25750 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0' 25751 25752 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) 25753 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0' 25754 25755 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) 25756 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0' 25757 25758 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) 25759 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0' 25760 25761 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) 25762 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0' 25763 25764 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) 25765 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0' 25766 25767 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) 25768 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0' 25769 25770 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) 25771 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0' 25772 25773 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) 25774 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0' 25775 25776 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) 25777 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0' 25778 25779 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) 25780 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0' 25781 25782 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) 25783 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0' 25784 25785 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) 25786 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0' 25787 25788 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) 25789 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0' 25790 25791 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) 25792 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0' 25793 25794 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) 25795 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0' 25796 25797 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) 25798 _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0' 25799 25800 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) 25801 _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0' 25802 25803 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) 25804 _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0' 25805 25806 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) 25807 _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0' 25808 25809 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) 25810 _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0' 25811 25812 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) 25813 _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0' 25814 25815 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) 25816 _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0' 25817 25818 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) 25819 _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0' 25820 25821 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) 25822 _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0' 25823 25824 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) 25825 _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0' 25826 25827 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) 25828 _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0' 25829 25830 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) 25831 _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0' 25832 25833 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) 25834 _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0' 25835 25836 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) 25837 _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0' 25838 25839 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) 25840 _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0' 25841 25842 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) 25843 _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0' 25844 25845 5.50.3.26 Vector shift left by constant 25846 ....................................... 25847 25848 * uint32x2_t vshl_n_u32 (uint32x2_t, const int) 25849 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 25850 25851 * uint16x4_t vshl_n_u16 (uint16x4_t, const int) 25852 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 25853 25854 * uint8x8_t vshl_n_u8 (uint8x8_t, const int) 25855 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 25856 25857 * int32x2_t vshl_n_s32 (int32x2_t, const int) 25858 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 25859 25860 * int16x4_t vshl_n_s16 (int16x4_t, const int) 25861 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 25862 25863 * int8x8_t vshl_n_s8 (int8x8_t, const int) 25864 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 25865 25866 * uint64x1_t vshl_n_u64 (uint64x1_t, const int) 25867 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 25868 25869 * int64x1_t vshl_n_s64 (int64x1_t, const int) 25870 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 25871 25872 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) 25873 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 25874 25875 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) 25876 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 25877 25878 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) 25879 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 25880 25881 * int32x4_t vshlq_n_s32 (int32x4_t, const int) 25882 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 25883 25884 * int16x8_t vshlq_n_s16 (int16x8_t, const int) 25885 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 25886 25887 * int8x16_t vshlq_n_s8 (int8x16_t, const int) 25888 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 25889 25890 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) 25891 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 25892 25893 * int64x2_t vshlq_n_s64 (int64x2_t, const int) 25894 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 25895 25896 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) 25897 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0' 25898 25899 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) 25900 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0' 25901 25902 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) 25903 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0' 25904 25905 * int32x2_t vqshl_n_s32 (int32x2_t, const int) 25906 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0' 25907 25908 * int16x4_t vqshl_n_s16 (int16x4_t, const int) 25909 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0' 25910 25911 * int8x8_t vqshl_n_s8 (int8x8_t, const int) 25912 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0' 25913 25914 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) 25915 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0' 25916 25917 * int64x1_t vqshl_n_s64 (int64x1_t, const int) 25918 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0' 25919 25920 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) 25921 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0' 25922 25923 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) 25924 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0' 25925 25926 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) 25927 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0' 25928 25929 * int32x4_t vqshlq_n_s32 (int32x4_t, const int) 25930 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0' 25931 25932 * int16x8_t vqshlq_n_s16 (int16x8_t, const int) 25933 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0' 25934 25935 * int8x16_t vqshlq_n_s8 (int8x16_t, const int) 25936 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0' 25937 25938 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) 25939 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0' 25940 25941 * int64x2_t vqshlq_n_s64 (int64x2_t, const int) 25942 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0' 25943 25944 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) 25945 _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0' 25946 25947 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) 25948 _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0' 25949 25950 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) 25951 _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0' 25952 25953 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) 25954 _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0' 25955 25956 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) 25957 _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0' 25958 25959 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) 25960 _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0' 25961 25962 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) 25963 _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0' 25964 25965 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) 25966 _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0' 25967 25968 * uint64x2_t vshll_n_u32 (uint32x2_t, const int) 25969 _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0' 25970 25971 * uint32x4_t vshll_n_u16 (uint16x4_t, const int) 25972 _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0' 25973 25974 * uint16x8_t vshll_n_u8 (uint8x8_t, const int) 25975 _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0' 25976 25977 * int64x2_t vshll_n_s32 (int32x2_t, const int) 25978 _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0' 25979 25980 * int32x4_t vshll_n_s16 (int16x4_t, const int) 25981 _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0' 25982 25983 * int16x8_t vshll_n_s8 (int8x8_t, const int) 25984 _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0' 25985 25986 5.50.3.27 Vector shift right by constant 25987 ........................................ 25988 25989 * uint32x2_t vshr_n_u32 (uint32x2_t, const int) 25990 _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0' 25991 25992 * uint16x4_t vshr_n_u16 (uint16x4_t, const int) 25993 _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0' 25994 25995 * uint8x8_t vshr_n_u8 (uint8x8_t, const int) 25996 _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0' 25997 25998 * int32x2_t vshr_n_s32 (int32x2_t, const int) 25999 _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0' 26000 26001 * int16x4_t vshr_n_s16 (int16x4_t, const int) 26002 _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0' 26003 26004 * int8x8_t vshr_n_s8 (int8x8_t, const int) 26005 _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0' 26006 26007 * uint64x1_t vshr_n_u64 (uint64x1_t, const int) 26008 _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0' 26009 26010 * int64x1_t vshr_n_s64 (int64x1_t, const int) 26011 _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0' 26012 26013 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) 26014 _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0' 26015 26016 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) 26017 _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0' 26018 26019 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) 26020 _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0' 26021 26022 * int32x4_t vshrq_n_s32 (int32x4_t, const int) 26023 _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0' 26024 26025 * int16x8_t vshrq_n_s16 (int16x8_t, const int) 26026 _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0' 26027 26028 * int8x16_t vshrq_n_s8 (int8x16_t, const int) 26029 _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0' 26030 26031 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) 26032 _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0' 26033 26034 * int64x2_t vshrq_n_s64 (int64x2_t, const int) 26035 _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0' 26036 26037 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) 26038 _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0' 26039 26040 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) 26041 _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0' 26042 26043 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) 26044 _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0' 26045 26046 * int32x2_t vrshr_n_s32 (int32x2_t, const int) 26047 _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0' 26048 26049 * int16x4_t vrshr_n_s16 (int16x4_t, const int) 26050 _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0' 26051 26052 * int8x8_t vrshr_n_s8 (int8x8_t, const int) 26053 _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0' 26054 26055 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) 26056 _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0' 26057 26058 * int64x1_t vrshr_n_s64 (int64x1_t, const int) 26059 _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0' 26060 26061 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) 26062 _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0' 26063 26064 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) 26065 _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0' 26066 26067 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) 26068 _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0' 26069 26070 * int32x4_t vrshrq_n_s32 (int32x4_t, const int) 26071 _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0' 26072 26073 * int16x8_t vrshrq_n_s16 (int16x8_t, const int) 26074 _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0' 26075 26076 * int8x16_t vrshrq_n_s8 (int8x16_t, const int) 26077 _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0' 26078 26079 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) 26080 _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0' 26081 26082 * int64x2_t vrshrq_n_s64 (int64x2_t, const int) 26083 _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0' 26084 26085 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) 26086 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 26087 26088 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) 26089 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 26090 26091 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) 26092 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 26093 26094 * int32x2_t vshrn_n_s64 (int64x2_t, const int) 26095 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 26096 26097 * int16x4_t vshrn_n_s32 (int32x4_t, const int) 26098 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 26099 26100 * int8x8_t vshrn_n_s16 (int16x8_t, const int) 26101 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 26102 26103 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) 26104 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 26105 26106 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) 26107 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 26108 26109 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) 26110 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 26111 26112 * int32x2_t vrshrn_n_s64 (int64x2_t, const int) 26113 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 26114 26115 * int16x4_t vrshrn_n_s32 (int32x4_t, const int) 26116 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 26117 26118 * int8x8_t vrshrn_n_s16 (int16x8_t, const int) 26119 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 26120 26121 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) 26122 _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0' 26123 26124 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) 26125 _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0' 26126 26127 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) 26128 _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0' 26129 26130 * int32x2_t vqshrn_n_s64 (int64x2_t, const int) 26131 _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0' 26132 26133 * int16x4_t vqshrn_n_s32 (int32x4_t, const int) 26134 _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0' 26135 26136 * int8x8_t vqshrn_n_s16 (int16x8_t, const int) 26137 _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0' 26138 26139 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) 26140 _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0' 26141 26142 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) 26143 _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0' 26144 26145 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) 26146 _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0' 26147 26148 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) 26149 _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0' 26150 26151 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) 26152 _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0' 26153 26154 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) 26155 _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0' 26156 26157 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) 26158 _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0' 26159 26160 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) 26161 _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0' 26162 26163 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) 26164 _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0' 26165 26166 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) 26167 _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0' 26168 26169 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) 26170 _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0' 26171 26172 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) 26173 _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0' 26174 26175 5.50.3.28 Vector shift right by constant and accumulate 26176 ....................................................... 26177 26178 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) 26179 _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0' 26180 26181 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) 26182 _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0' 26183 26184 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) 26185 _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0' 26186 26187 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) 26188 _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0' 26189 26190 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) 26191 _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0' 26192 26193 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) 26194 _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0' 26195 26196 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) 26197 _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0' 26198 26199 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) 26200 _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0' 26201 26202 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 26203 _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0' 26204 26205 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 26206 _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0' 26207 26208 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 26209 _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0' 26210 26211 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) 26212 _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0' 26213 26214 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) 26215 _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0' 26216 26217 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) 26218 _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0' 26219 26220 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 26221 _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0' 26222 26223 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) 26224 _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0' 26225 26226 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) 26227 _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0' 26228 26229 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) 26230 _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0' 26231 26232 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) 26233 _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0' 26234 26235 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) 26236 _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0' 26237 26238 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) 26239 _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0' 26240 26241 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) 26242 _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0' 26243 26244 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) 26245 _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0' 26246 26247 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) 26248 _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0' 26249 26250 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 26251 _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0' 26252 26253 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 26254 _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0' 26255 26256 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 26257 _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0' 26258 26259 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) 26260 _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0' 26261 26262 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) 26263 _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0' 26264 26265 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) 26266 _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0' 26267 26268 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 26269 _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0' 26270 26271 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) 26272 _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0' 26273 26274 5.50.3.29 Vector shift right and insert 26275 ....................................... 26276 26277 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) 26278 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 26279 26280 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) 26281 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 26282 26283 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) 26284 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 26285 26286 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) 26287 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 26288 26289 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) 26290 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 26291 26292 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) 26293 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 26294 26295 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) 26296 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 26297 26298 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) 26299 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 26300 26301 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) 26302 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 26303 26304 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) 26305 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 26306 26307 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) 26308 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 26309 26310 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) 26311 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 26312 26313 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) 26314 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 26315 26316 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) 26317 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 26318 26319 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) 26320 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 26321 26322 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) 26323 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 26324 26325 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) 26326 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 26327 26328 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) 26329 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 26330 26331 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) 26332 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 26333 26334 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) 26335 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 26336 26337 5.50.3.30 Vector shift left and insert 26338 ...................................... 26339 26340 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) 26341 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 26342 26343 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) 26344 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 26345 26346 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) 26347 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 26348 26349 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) 26350 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 26351 26352 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) 26353 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 26354 26355 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) 26356 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 26357 26358 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) 26359 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 26360 26361 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) 26362 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 26363 26364 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) 26365 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 26366 26367 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) 26368 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 26369 26370 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) 26371 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 26372 26373 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) 26374 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 26375 26376 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) 26377 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 26378 26379 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) 26380 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 26381 26382 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) 26383 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 26384 26385 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) 26386 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 26387 26388 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) 26389 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 26390 26391 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) 26392 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 26393 26394 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) 26395 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 26396 26397 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) 26398 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 26399 26400 5.50.3.31 Absolute value 26401 ........................ 26402 26403 * float32x2_t vabs_f32 (float32x2_t) 26404 _Form of expected instruction(s):_ `vabs.f32 D0, D0' 26405 26406 * int32x2_t vabs_s32 (int32x2_t) 26407 _Form of expected instruction(s):_ `vabs.s32 D0, D0' 26408 26409 * int16x4_t vabs_s16 (int16x4_t) 26410 _Form of expected instruction(s):_ `vabs.s16 D0, D0' 26411 26412 * int8x8_t vabs_s8 (int8x8_t) 26413 _Form of expected instruction(s):_ `vabs.s8 D0, D0' 26414 26415 * float32x4_t vabsq_f32 (float32x4_t) 26416 _Form of expected instruction(s):_ `vabs.f32 Q0, Q0' 26417 26418 * int32x4_t vabsq_s32 (int32x4_t) 26419 _Form of expected instruction(s):_ `vabs.s32 Q0, Q0' 26420 26421 * int16x8_t vabsq_s16 (int16x8_t) 26422 _Form of expected instruction(s):_ `vabs.s16 Q0, Q0' 26423 26424 * int8x16_t vabsq_s8 (int8x16_t) 26425 _Form of expected instruction(s):_ `vabs.s8 Q0, Q0' 26426 26427 * int32x2_t vqabs_s32 (int32x2_t) 26428 _Form of expected instruction(s):_ `vqabs.s32 D0, D0' 26429 26430 * int16x4_t vqabs_s16 (int16x4_t) 26431 _Form of expected instruction(s):_ `vqabs.s16 D0, D0' 26432 26433 * int8x8_t vqabs_s8 (int8x8_t) 26434 _Form of expected instruction(s):_ `vqabs.s8 D0, D0' 26435 26436 * int32x4_t vqabsq_s32 (int32x4_t) 26437 _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0' 26438 26439 * int16x8_t vqabsq_s16 (int16x8_t) 26440 _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0' 26441 26442 * int8x16_t vqabsq_s8 (int8x16_t) 26443 _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0' 26444 26445 5.50.3.32 Negation 26446 .................. 26447 26448 * float32x2_t vneg_f32 (float32x2_t) 26449 _Form of expected instruction(s):_ `vneg.f32 D0, D0' 26450 26451 * int32x2_t vneg_s32 (int32x2_t) 26452 _Form of expected instruction(s):_ `vneg.s32 D0, D0' 26453 26454 * int16x4_t vneg_s16 (int16x4_t) 26455 _Form of expected instruction(s):_ `vneg.s16 D0, D0' 26456 26457 * int8x8_t vneg_s8 (int8x8_t) 26458 _Form of expected instruction(s):_ `vneg.s8 D0, D0' 26459 26460 * float32x4_t vnegq_f32 (float32x4_t) 26461 _Form of expected instruction(s):_ `vneg.f32 Q0, Q0' 26462 26463 * int32x4_t vnegq_s32 (int32x4_t) 26464 _Form of expected instruction(s):_ `vneg.s32 Q0, Q0' 26465 26466 * int16x8_t vnegq_s16 (int16x8_t) 26467 _Form of expected instruction(s):_ `vneg.s16 Q0, Q0' 26468 26469 * int8x16_t vnegq_s8 (int8x16_t) 26470 _Form of expected instruction(s):_ `vneg.s8 Q0, Q0' 26471 26472 * int32x2_t vqneg_s32 (int32x2_t) 26473 _Form of expected instruction(s):_ `vqneg.s32 D0, D0' 26474 26475 * int16x4_t vqneg_s16 (int16x4_t) 26476 _Form of expected instruction(s):_ `vqneg.s16 D0, D0' 26477 26478 * int8x8_t vqneg_s8 (int8x8_t) 26479 _Form of expected instruction(s):_ `vqneg.s8 D0, D0' 26480 26481 * int32x4_t vqnegq_s32 (int32x4_t) 26482 _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0' 26483 26484 * int16x8_t vqnegq_s16 (int16x8_t) 26485 _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0' 26486 26487 * int8x16_t vqnegq_s8 (int8x16_t) 26488 _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0' 26489 26490 5.50.3.33 Bitwise not 26491 ..................... 26492 26493 * uint32x2_t vmvn_u32 (uint32x2_t) 26494 _Form of expected instruction(s):_ `vmvn D0, D0' 26495 26496 * uint16x4_t vmvn_u16 (uint16x4_t) 26497 _Form of expected instruction(s):_ `vmvn D0, D0' 26498 26499 * uint8x8_t vmvn_u8 (uint8x8_t) 26500 _Form of expected instruction(s):_ `vmvn D0, D0' 26501 26502 * int32x2_t vmvn_s32 (int32x2_t) 26503 _Form of expected instruction(s):_ `vmvn D0, D0' 26504 26505 * int16x4_t vmvn_s16 (int16x4_t) 26506 _Form of expected instruction(s):_ `vmvn D0, D0' 26507 26508 * int8x8_t vmvn_s8 (int8x8_t) 26509 _Form of expected instruction(s):_ `vmvn D0, D0' 26510 26511 * poly8x8_t vmvn_p8 (poly8x8_t) 26512 _Form of expected instruction(s):_ `vmvn D0, D0' 26513 26514 * uint32x4_t vmvnq_u32 (uint32x4_t) 26515 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26516 26517 * uint16x8_t vmvnq_u16 (uint16x8_t) 26518 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26519 26520 * uint8x16_t vmvnq_u8 (uint8x16_t) 26521 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26522 26523 * int32x4_t vmvnq_s32 (int32x4_t) 26524 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26525 26526 * int16x8_t vmvnq_s16 (int16x8_t) 26527 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26528 26529 * int8x16_t vmvnq_s8 (int8x16_t) 26530 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26531 26532 * poly8x16_t vmvnq_p8 (poly8x16_t) 26533 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26534 26535 5.50.3.34 Count leading sign bits 26536 ................................. 26537 26538 * int32x2_t vcls_s32 (int32x2_t) 26539 _Form of expected instruction(s):_ `vcls.s32 D0, D0' 26540 26541 * int16x4_t vcls_s16 (int16x4_t) 26542 _Form of expected instruction(s):_ `vcls.s16 D0, D0' 26543 26544 * int8x8_t vcls_s8 (int8x8_t) 26545 _Form of expected instruction(s):_ `vcls.s8 D0, D0' 26546 26547 * int32x4_t vclsq_s32 (int32x4_t) 26548 _Form of expected instruction(s):_ `vcls.s32 Q0, Q0' 26549 26550 * int16x8_t vclsq_s16 (int16x8_t) 26551 _Form of expected instruction(s):_ `vcls.s16 Q0, Q0' 26552 26553 * int8x16_t vclsq_s8 (int8x16_t) 26554 _Form of expected instruction(s):_ `vcls.s8 Q0, Q0' 26555 26556 5.50.3.35 Count leading zeros 26557 ............................. 26558 26559 * uint32x2_t vclz_u32 (uint32x2_t) 26560 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 26561 26562 * uint16x4_t vclz_u16 (uint16x4_t) 26563 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 26564 26565 * uint8x8_t vclz_u8 (uint8x8_t) 26566 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 26567 26568 * int32x2_t vclz_s32 (int32x2_t) 26569 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 26570 26571 * int16x4_t vclz_s16 (int16x4_t) 26572 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 26573 26574 * int8x8_t vclz_s8 (int8x8_t) 26575 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 26576 26577 * uint32x4_t vclzq_u32 (uint32x4_t) 26578 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 26579 26580 * uint16x8_t vclzq_u16 (uint16x8_t) 26581 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 26582 26583 * uint8x16_t vclzq_u8 (uint8x16_t) 26584 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 26585 26586 * int32x4_t vclzq_s32 (int32x4_t) 26587 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 26588 26589 * int16x8_t vclzq_s16 (int16x8_t) 26590 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 26591 26592 * int8x16_t vclzq_s8 (int8x16_t) 26593 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 26594 26595 5.50.3.36 Count number of set bits 26596 .................................. 26597 26598 * uint8x8_t vcnt_u8 (uint8x8_t) 26599 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 26600 26601 * int8x8_t vcnt_s8 (int8x8_t) 26602 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 26603 26604 * poly8x8_t vcnt_p8 (poly8x8_t) 26605 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 26606 26607 * uint8x16_t vcntq_u8 (uint8x16_t) 26608 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 26609 26610 * int8x16_t vcntq_s8 (int8x16_t) 26611 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 26612 26613 * poly8x16_t vcntq_p8 (poly8x16_t) 26614 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 26615 26616 5.50.3.37 Reciprocal estimate 26617 ............................. 26618 26619 * float32x2_t vrecpe_f32 (float32x2_t) 26620 _Form of expected instruction(s):_ `vrecpe.f32 D0, D0' 26621 26622 * uint32x2_t vrecpe_u32 (uint32x2_t) 26623 _Form of expected instruction(s):_ `vrecpe.u32 D0, D0' 26624 26625 * float32x4_t vrecpeq_f32 (float32x4_t) 26626 _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0' 26627 26628 * uint32x4_t vrecpeq_u32 (uint32x4_t) 26629 _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0' 26630 26631 5.50.3.38 Reciprocal square-root estimate 26632 ......................................... 26633 26634 * float32x2_t vrsqrte_f32 (float32x2_t) 26635 _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0' 26636 26637 * uint32x2_t vrsqrte_u32 (uint32x2_t) 26638 _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0' 26639 26640 * float32x4_t vrsqrteq_f32 (float32x4_t) 26641 _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0' 26642 26643 * uint32x4_t vrsqrteq_u32 (uint32x4_t) 26644 _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0' 26645 26646 5.50.3.39 Get lanes from a vector 26647 ................................. 26648 26649 * uint32_t vget_lane_u32 (uint32x2_t, const int) 26650 _Form of expected instruction(s):_ `vmov.u32 R0, D0[0]' 26651 26652 * uint16_t vget_lane_u16 (uint16x4_t, const int) 26653 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 26654 26655 * uint8_t vget_lane_u8 (uint8x8_t, const int) 26656 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 26657 26658 * int32_t vget_lane_s32 (int32x2_t, const int) 26659 _Form of expected instruction(s):_ `vmov.s32 R0, D0[0]' 26660 26661 * int16_t vget_lane_s16 (int16x4_t, const int) 26662 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 26663 26664 * int8_t vget_lane_s8 (int8x8_t, const int) 26665 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 26666 26667 * float32_t vget_lane_f32 (float32x2_t, const int) 26668 _Form of expected instruction(s):_ `vmov.f32 R0, D0[0]' 26669 26670 * poly16_t vget_lane_p16 (poly16x4_t, const int) 26671 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 26672 26673 * poly8_t vget_lane_p8 (poly8x8_t, const int) 26674 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 26675 26676 * uint64_t vget_lane_u64 (uint64x1_t, const int) 26677 _Form of expected instruction(s):_ `vmov R0, R0, D0' 26678 26679 * int64_t vget_lane_s64 (int64x1_t, const int) 26680 _Form of expected instruction(s):_ `vmov R0, R0, D0' 26681 26682 * uint32_t vgetq_lane_u32 (uint32x4_t, const int) 26683 _Form of expected instruction(s):_ `vmov.u32 R0, D0[0]' 26684 26685 * uint16_t vgetq_lane_u16 (uint16x8_t, const int) 26686 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 26687 26688 * uint8_t vgetq_lane_u8 (uint8x16_t, const int) 26689 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 26690 26691 * int32_t vgetq_lane_s32 (int32x4_t, const int) 26692 _Form of expected instruction(s):_ `vmov.s32 R0, D0[0]' 26693 26694 * int16_t vgetq_lane_s16 (int16x8_t, const int) 26695 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 26696 26697 * int8_t vgetq_lane_s8 (int8x16_t, const int) 26698 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 26699 26700 * float32_t vgetq_lane_f32 (float32x4_t, const int) 26701 _Form of expected instruction(s):_ `vmov.f32 R0, D0[0]' 26702 26703 * poly16_t vgetq_lane_p16 (poly16x8_t, const int) 26704 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 26705 26706 * poly8_t vgetq_lane_p8 (poly8x16_t, const int) 26707 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 26708 26709 * uint64_t vgetq_lane_u64 (uint64x2_t, const int) 26710 _Form of expected instruction(s):_ `vmov R0, R0, D0' 26711 26712 * int64_t vgetq_lane_s64 (int64x2_t, const int) 26713 _Form of expected instruction(s):_ `vmov R0, R0, D0' 26714 26715 5.50.3.40 Set lanes in a vector 26716 ............................... 26717 26718 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) 26719 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 26720 26721 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) 26722 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 26723 26724 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) 26725 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 26726 26727 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) 26728 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 26729 26730 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) 26731 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 26732 26733 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) 26734 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 26735 26736 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) 26737 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 26738 26739 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) 26740 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 26741 26742 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) 26743 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 26744 26745 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) 26746 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26747 26748 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) 26749 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26750 26751 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) 26752 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 26753 26754 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) 26755 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 26756 26757 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) 26758 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 26759 26760 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) 26761 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 26762 26763 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) 26764 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 26765 26766 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) 26767 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 26768 26769 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) 26770 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 26771 26772 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) 26773 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 26774 26775 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) 26776 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 26777 26778 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) 26779 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26780 26781 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) 26782 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26783 26784 5.50.3.41 Create vector from literal bit pattern 26785 ................................................ 26786 26787 * uint32x2_t vcreate_u32 (uint64_t) 26788 26789 * uint16x4_t vcreate_u16 (uint64_t) 26790 26791 * uint8x8_t vcreate_u8 (uint64_t) 26792 26793 * int32x2_t vcreate_s32 (uint64_t) 26794 26795 * int16x4_t vcreate_s16 (uint64_t) 26796 26797 * int8x8_t vcreate_s8 (uint64_t) 26798 26799 * uint64x1_t vcreate_u64 (uint64_t) 26800 26801 * int64x1_t vcreate_s64 (uint64_t) 26802 26803 * float32x2_t vcreate_f32 (uint64_t) 26804 26805 * poly16x4_t vcreate_p16 (uint64_t) 26806 26807 * poly8x8_t vcreate_p8 (uint64_t) 26808 26809 5.50.3.42 Set all lanes to the same value 26810 ......................................... 26811 26812 * uint32x2_t vdup_n_u32 (uint32_t) 26813 _Form of expected instruction(s):_ `vdup.32 D0, R0' 26814 26815 * uint16x4_t vdup_n_u16 (uint16_t) 26816 _Form of expected instruction(s):_ `vdup.16 D0, R0' 26817 26818 * uint8x8_t vdup_n_u8 (uint8_t) 26819 _Form of expected instruction(s):_ `vdup.8 D0, R0' 26820 26821 * int32x2_t vdup_n_s32 (int32_t) 26822 _Form of expected instruction(s):_ `vdup.32 D0, R0' 26823 26824 * int16x4_t vdup_n_s16 (int16_t) 26825 _Form of expected instruction(s):_ `vdup.16 D0, R0' 26826 26827 * int8x8_t vdup_n_s8 (int8_t) 26828 _Form of expected instruction(s):_ `vdup.8 D0, R0' 26829 26830 * float32x2_t vdup_n_f32 (float32_t) 26831 _Form of expected instruction(s):_ `vdup.32 D0, R0' 26832 26833 * poly16x4_t vdup_n_p16 (poly16_t) 26834 _Form of expected instruction(s):_ `vdup.16 D0, R0' 26835 26836 * poly8x8_t vdup_n_p8 (poly8_t) 26837 _Form of expected instruction(s):_ `vdup.8 D0, R0' 26838 26839 * uint64x1_t vdup_n_u64 (uint64_t) 26840 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26841 26842 * int64x1_t vdup_n_s64 (int64_t) 26843 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26844 26845 * uint32x4_t vdupq_n_u32 (uint32_t) 26846 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 26847 26848 * uint16x8_t vdupq_n_u16 (uint16_t) 26849 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 26850 26851 * uint8x16_t vdupq_n_u8 (uint8_t) 26852 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 26853 26854 * int32x4_t vdupq_n_s32 (int32_t) 26855 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 26856 26857 * int16x8_t vdupq_n_s16 (int16_t) 26858 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 26859 26860 * int8x16_t vdupq_n_s8 (int8_t) 26861 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 26862 26863 * float32x4_t vdupq_n_f32 (float32_t) 26864 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 26865 26866 * poly16x8_t vdupq_n_p16 (poly16_t) 26867 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 26868 26869 * poly8x16_t vdupq_n_p8 (poly8_t) 26870 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 26871 26872 * uint64x2_t vdupq_n_u64 (uint64_t) 26873 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26874 26875 * int64x2_t vdupq_n_s64 (int64_t) 26876 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26877 26878 * uint32x2_t vmov_n_u32 (uint32_t) 26879 _Form of expected instruction(s):_ `vdup.32 D0, R0' 26880 26881 * uint16x4_t vmov_n_u16 (uint16_t) 26882 _Form of expected instruction(s):_ `vdup.16 D0, R0' 26883 26884 * uint8x8_t vmov_n_u8 (uint8_t) 26885 _Form of expected instruction(s):_ `vdup.8 D0, R0' 26886 26887 * int32x2_t vmov_n_s32 (int32_t) 26888 _Form of expected instruction(s):_ `vdup.32 D0, R0' 26889 26890 * int16x4_t vmov_n_s16 (int16_t) 26891 _Form of expected instruction(s):_ `vdup.16 D0, R0' 26892 26893 * int8x8_t vmov_n_s8 (int8_t) 26894 _Form of expected instruction(s):_ `vdup.8 D0, R0' 26895 26896 * float32x2_t vmov_n_f32 (float32_t) 26897 _Form of expected instruction(s):_ `vdup.32 D0, R0' 26898 26899 * poly16x4_t vmov_n_p16 (poly16_t) 26900 _Form of expected instruction(s):_ `vdup.16 D0, R0' 26901 26902 * poly8x8_t vmov_n_p8 (poly8_t) 26903 _Form of expected instruction(s):_ `vdup.8 D0, R0' 26904 26905 * uint64x1_t vmov_n_u64 (uint64_t) 26906 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26907 26908 * int64x1_t vmov_n_s64 (int64_t) 26909 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26910 26911 * uint32x4_t vmovq_n_u32 (uint32_t) 26912 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 26913 26914 * uint16x8_t vmovq_n_u16 (uint16_t) 26915 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 26916 26917 * uint8x16_t vmovq_n_u8 (uint8_t) 26918 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 26919 26920 * int32x4_t vmovq_n_s32 (int32_t) 26921 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 26922 26923 * int16x8_t vmovq_n_s16 (int16_t) 26924 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 26925 26926 * int8x16_t vmovq_n_s8 (int8_t) 26927 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 26928 26929 * float32x4_t vmovq_n_f32 (float32_t) 26930 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 26931 26932 * poly16x8_t vmovq_n_p16 (poly16_t) 26933 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 26934 26935 * poly8x16_t vmovq_n_p8 (poly8_t) 26936 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 26937 26938 * uint64x2_t vmovq_n_u64 (uint64_t) 26939 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26940 26941 * int64x2_t vmovq_n_s64 (int64_t) 26942 _Form of expected instruction(s):_ `vmov D0, R0, R0' 26943 26944 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) 26945 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 26946 26947 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) 26948 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 26949 26950 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) 26951 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 26952 26953 * int32x2_t vdup_lane_s32 (int32x2_t, const int) 26954 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 26955 26956 * int16x4_t vdup_lane_s16 (int16x4_t, const int) 26957 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 26958 26959 * int8x8_t vdup_lane_s8 (int8x8_t, const int) 26960 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 26961 26962 * float32x2_t vdup_lane_f32 (float32x2_t, const int) 26963 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 26964 26965 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) 26966 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 26967 26968 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) 26969 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 26970 26971 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) 26972 26973 * int64x1_t vdup_lane_s64 (int64x1_t, const int) 26974 26975 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) 26976 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 26977 26978 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) 26979 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 26980 26981 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) 26982 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 26983 26984 * int32x4_t vdupq_lane_s32 (int32x2_t, const int) 26985 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 26986 26987 * int16x8_t vdupq_lane_s16 (int16x4_t, const int) 26988 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 26989 26990 * int8x16_t vdupq_lane_s8 (int8x8_t, const int) 26991 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 26992 26993 * float32x4_t vdupq_lane_f32 (float32x2_t, const int) 26994 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 26995 26996 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) 26997 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 26998 26999 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) 27000 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 27001 27002 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) 27003 27004 * int64x2_t vdupq_lane_s64 (int64x1_t, const int) 27005 27006 5.50.3.43 Combining vectors 27007 ........................... 27008 27009 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) 27010 27011 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) 27012 27013 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) 27014 27015 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) 27016 27017 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 27018 27019 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) 27020 27021 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) 27022 27023 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) 27024 27025 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) 27026 27027 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) 27028 27029 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) 27030 27031 5.50.3.44 Splitting vectors 27032 ........................... 27033 27034 * uint32x2_t vget_high_u32 (uint32x4_t) 27035 27036 * uint16x4_t vget_high_u16 (uint16x8_t) 27037 27038 * uint8x8_t vget_high_u8 (uint8x16_t) 27039 27040 * int32x2_t vget_high_s32 (int32x4_t) 27041 27042 * int16x4_t vget_high_s16 (int16x8_t) 27043 27044 * int8x8_t vget_high_s8 (int8x16_t) 27045 27046 * uint64x1_t vget_high_u64 (uint64x2_t) 27047 27048 * int64x1_t vget_high_s64 (int64x2_t) 27049 27050 * float32x2_t vget_high_f32 (float32x4_t) 27051 27052 * poly16x4_t vget_high_p16 (poly16x8_t) 27053 27054 * poly8x8_t vget_high_p8 (poly8x16_t) 27055 27056 * uint32x2_t vget_low_u32 (uint32x4_t) 27057 _Form of expected instruction(s):_ `vmov D0, D0' 27058 27059 * uint16x4_t vget_low_u16 (uint16x8_t) 27060 _Form of expected instruction(s):_ `vmov D0, D0' 27061 27062 * uint8x8_t vget_low_u8 (uint8x16_t) 27063 _Form of expected instruction(s):_ `vmov D0, D0' 27064 27065 * int32x2_t vget_low_s32 (int32x4_t) 27066 _Form of expected instruction(s):_ `vmov D0, D0' 27067 27068 * int16x4_t vget_low_s16 (int16x8_t) 27069 _Form of expected instruction(s):_ `vmov D0, D0' 27070 27071 * int8x8_t vget_low_s8 (int8x16_t) 27072 _Form of expected instruction(s):_ `vmov D0, D0' 27073 27074 * uint64x1_t vget_low_u64 (uint64x2_t) 27075 _Form of expected instruction(s):_ `vmov D0, D0' 27076 27077 * int64x1_t vget_low_s64 (int64x2_t) 27078 _Form of expected instruction(s):_ `vmov D0, D0' 27079 27080 * float32x2_t vget_low_f32 (float32x4_t) 27081 _Form of expected instruction(s):_ `vmov D0, D0' 27082 27083 * poly16x4_t vget_low_p16 (poly16x8_t) 27084 _Form of expected instruction(s):_ `vmov D0, D0' 27085 27086 * poly8x8_t vget_low_p8 (poly8x16_t) 27087 _Form of expected instruction(s):_ `vmov D0, D0' 27088 27089 5.50.3.45 Conversions 27090 ..................... 27091 27092 * float32x2_t vcvt_f32_u32 (uint32x2_t) 27093 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0' 27094 27095 * float32x2_t vcvt_f32_s32 (int32x2_t) 27096 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0' 27097 27098 * uint32x2_t vcvt_u32_f32 (float32x2_t) 27099 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0' 27100 27101 * int32x2_t vcvt_s32_f32 (float32x2_t) 27102 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0' 27103 27104 * float32x4_t vcvtq_f32_u32 (uint32x4_t) 27105 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0' 27106 27107 * float32x4_t vcvtq_f32_s32 (int32x4_t) 27108 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0' 27109 27110 * uint32x4_t vcvtq_u32_f32 (float32x4_t) 27111 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0' 27112 27113 * int32x4_t vcvtq_s32_f32 (float32x4_t) 27114 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0' 27115 27116 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) 27117 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0' 27118 27119 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) 27120 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0' 27121 27122 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) 27123 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0' 27124 27125 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) 27126 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0' 27127 27128 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) 27129 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0' 27130 27131 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) 27132 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0' 27133 27134 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) 27135 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0' 27136 27137 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) 27138 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0' 27139 27140 5.50.3.46 Move, single_opcode narrowing 27141 ....................................... 27142 27143 * uint32x2_t vmovn_u64 (uint64x2_t) 27144 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 27145 27146 * uint16x4_t vmovn_u32 (uint32x4_t) 27147 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 27148 27149 * uint8x8_t vmovn_u16 (uint16x8_t) 27150 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 27151 27152 * int32x2_t vmovn_s64 (int64x2_t) 27153 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 27154 27155 * int16x4_t vmovn_s32 (int32x4_t) 27156 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 27157 27158 * int8x8_t vmovn_s16 (int16x8_t) 27159 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 27160 27161 * uint32x2_t vqmovn_u64 (uint64x2_t) 27162 _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0' 27163 27164 * uint16x4_t vqmovn_u32 (uint32x4_t) 27165 _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0' 27166 27167 * uint8x8_t vqmovn_u16 (uint16x8_t) 27168 _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0' 27169 27170 * int32x2_t vqmovn_s64 (int64x2_t) 27171 _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0' 27172 27173 * int16x4_t vqmovn_s32 (int32x4_t) 27174 _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0' 27175 27176 * int8x8_t vqmovn_s16 (int16x8_t) 27177 _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0' 27178 27179 * uint32x2_t vqmovun_s64 (int64x2_t) 27180 _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0' 27181 27182 * uint16x4_t vqmovun_s32 (int32x4_t) 27183 _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0' 27184 27185 * uint8x8_t vqmovun_s16 (int16x8_t) 27186 _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0' 27187 27188 5.50.3.47 Move, single_opcode long 27189 .................................. 27190 27191 * uint64x2_t vmovl_u32 (uint32x2_t) 27192 _Form of expected instruction(s):_ `vmovl.u32 Q0, D0' 27193 27194 * uint32x4_t vmovl_u16 (uint16x4_t) 27195 _Form of expected instruction(s):_ `vmovl.u16 Q0, D0' 27196 27197 * uint16x8_t vmovl_u8 (uint8x8_t) 27198 _Form of expected instruction(s):_ `vmovl.u8 Q0, D0' 27199 27200 * int64x2_t vmovl_s32 (int32x2_t) 27201 _Form of expected instruction(s):_ `vmovl.s32 Q0, D0' 27202 27203 * int32x4_t vmovl_s16 (int16x4_t) 27204 _Form of expected instruction(s):_ `vmovl.s16 Q0, D0' 27205 27206 * int16x8_t vmovl_s8 (int8x8_t) 27207 _Form of expected instruction(s):_ `vmovl.s8 Q0, D0' 27208 27209 5.50.3.48 Table lookup 27210 ...................... 27211 27212 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) 27213 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 27214 27215 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) 27216 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 27217 27218 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) 27219 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 27220 27221 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) 27222 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 27223 27224 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) 27225 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 27226 27227 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) 27228 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 27229 27230 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) 27231 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 27232 27233 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) 27234 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 27235 27236 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) 27237 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 27238 27239 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) 27240 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 27241 D0' 27242 27243 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) 27244 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 27245 D0' 27246 27247 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) 27248 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 27249 D0' 27250 27251 5.50.3.49 Extended table lookup 27252 ............................... 27253 27254 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) 27255 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 27256 27257 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) 27258 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 27259 27260 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 27261 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 27262 27263 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) 27264 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 27265 27266 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) 27267 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 27268 27269 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) 27270 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 27271 27272 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) 27273 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 27274 27275 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) 27276 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 27277 27278 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) 27279 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 27280 27281 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) 27282 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 27283 D0' 27284 27285 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) 27286 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 27287 D0' 27288 27289 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) 27290 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 27291 D0' 27292 27293 5.50.3.50 Multiply, lane 27294 ........................ 27295 27296 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) 27297 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 27298 27299 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) 27300 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 27301 27302 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) 27303 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 27304 27305 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) 27306 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 27307 27308 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) 27309 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 27310 27311 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) 27312 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 27313 27314 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) 27315 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 27316 27317 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) 27318 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 27319 27320 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) 27321 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 27322 27323 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) 27324 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 27325 27326 5.50.3.51 Long multiply, lane 27327 ............................. 27328 27329 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) 27330 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 27331 27332 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) 27333 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 27334 27335 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) 27336 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 27337 27338 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) 27339 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 27340 27341 5.50.3.52 Saturating doubling long multiply, lane 27342 ................................................. 27343 27344 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) 27345 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 27346 27347 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) 27348 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 27349 27350 5.50.3.53 Saturating doubling multiply high, lane 27351 ................................................. 27352 27353 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 27354 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 27355 27356 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 27357 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 27358 27359 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 27360 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 27361 27362 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 27363 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 27364 27365 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 27366 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 27367 27368 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 27369 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 27370 27371 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 27372 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 27373 27374 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 27375 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 27376 27377 5.50.3.54 Multiply-accumulate, lane 27378 ................................... 27379 27380 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 27381 const int) 27382 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 27383 27384 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 27385 const int) 27386 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 27387 27388 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 27389 const int) 27390 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 27391 27392 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 27393 int) 27394 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 27395 27396 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 27397 int) 27398 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 27399 27400 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 27401 const int) 27402 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 27403 27404 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 27405 const int) 27406 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 27407 27408 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 27409 const int) 27410 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 27411 27412 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 27413 int) 27414 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 27415 27416 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 27417 int) 27418 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 27419 27420 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 27421 const int) 27422 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 27423 27424 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 27425 const int) 27426 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 27427 27428 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 27429 int) 27430 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 27431 27432 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 27433 int) 27434 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 27435 27436 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 27437 int) 27438 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 27439 27440 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 27441 int) 27442 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 27443 27444 5.50.3.55 Multiply-subtract, lane 27445 ................................. 27446 27447 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 27448 const int) 27449 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 27450 27451 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 27452 const int) 27453 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 27454 27455 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 27456 const int) 27457 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 27458 27459 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 27460 int) 27461 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 27462 27463 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 27464 int) 27465 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 27466 27467 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 27468 const int) 27469 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 27470 27471 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 27472 const int) 27473 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 27474 27475 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 27476 const int) 27477 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 27478 27479 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 27480 int) 27481 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 27482 27483 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 27484 int) 27485 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 27486 27487 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 27488 const int) 27489 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 27490 27491 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 27492 const int) 27493 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 27494 27495 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 27496 int) 27497 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 27498 27499 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 27500 int) 27501 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 27502 27503 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 27504 int) 27505 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 27506 27507 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 27508 int) 27509 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 27510 27511 5.50.3.56 Vector multiply by scalar 27512 ................................... 27513 27514 * float32x2_t vmul_n_f32 (float32x2_t, float32_t) 27515 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 27516 27517 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) 27518 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 27519 27520 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) 27521 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 27522 27523 * int32x2_t vmul_n_s32 (int32x2_t, int32_t) 27524 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 27525 27526 * int16x4_t vmul_n_s16 (int16x4_t, int16_t) 27527 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 27528 27529 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) 27530 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 27531 27532 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) 27533 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 27534 27535 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) 27536 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 27537 27538 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) 27539 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 27540 27541 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) 27542 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 27543 27544 5.50.3.57 Vector long multiply by scalar 27545 ........................................ 27546 27547 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) 27548 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 27549 27550 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) 27551 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 27552 27553 * int64x2_t vmull_n_s32 (int32x2_t, int32_t) 27554 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 27555 27556 * int32x4_t vmull_n_s16 (int16x4_t, int16_t) 27557 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 27558 27559 5.50.3.58 Vector saturating doubling long multiply by scalar 27560 ............................................................ 27561 27562 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) 27563 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 27564 27565 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) 27566 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 27567 27568 5.50.3.59 Vector saturating doubling multiply high by scalar 27569 ............................................................ 27570 27571 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) 27572 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 27573 27574 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) 27575 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 27576 27577 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) 27578 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 27579 27580 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) 27581 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 27582 27583 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) 27584 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 27585 27586 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) 27587 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 27588 27589 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) 27590 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 27591 27592 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) 27593 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 27594 27595 5.50.3.60 Vector multiply-accumulate by scalar 27596 .............................................. 27597 27598 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) 27599 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 27600 27601 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 27602 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 27603 27604 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 27605 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 27606 27607 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) 27608 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 27609 27610 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) 27611 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 27612 27613 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) 27614 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 27615 27616 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 27617 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 27618 27619 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 27620 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 27621 27622 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) 27623 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 27624 27625 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) 27626 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 27627 27628 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 27629 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 27630 27631 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 27632 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 27633 27634 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 27635 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 27636 27637 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 27638 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 27639 27640 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 27641 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 27642 27643 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 27644 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 27645 27646 5.50.3.61 Vector multiply-subtract by scalar 27647 ............................................ 27648 27649 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) 27650 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 27651 27652 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 27653 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 27654 27655 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 27656 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 27657 27658 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) 27659 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 27660 27661 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) 27662 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 27663 27664 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) 27665 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 27666 27667 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 27668 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 27669 27670 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 27671 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 27672 27673 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) 27674 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 27675 27676 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) 27677 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 27678 27679 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 27680 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 27681 27682 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 27683 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 27684 27685 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 27686 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 27687 27688 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 27689 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 27690 27691 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 27692 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 27693 27694 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 27695 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 27696 27697 5.50.3.62 Vector extract 27698 ........................ 27699 27700 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) 27701 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 27702 27703 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) 27704 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 27705 27706 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) 27707 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 27708 27709 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) 27710 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 27711 27712 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) 27713 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 27714 27715 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) 27716 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 27717 27718 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) 27719 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 27720 27721 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) 27722 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 27723 27724 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) 27725 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 27726 27727 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) 27728 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 27729 27730 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) 27731 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 27732 27733 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) 27734 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 27735 27736 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) 27737 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 27738 27739 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) 27740 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 27741 27742 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) 27743 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 27744 27745 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) 27746 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 27747 27748 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) 27749 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 27750 27751 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) 27752 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 27753 27754 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) 27755 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 27756 27757 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) 27758 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 27759 27760 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) 27761 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 27762 27763 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) 27764 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 27765 27766 5.50.3.63 Reverse elements 27767 .......................... 27768 27769 * uint32x2_t vrev64_u32 (uint32x2_t) 27770 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 27771 27772 * uint16x4_t vrev64_u16 (uint16x4_t) 27773 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 27774 27775 * uint8x8_t vrev64_u8 (uint8x8_t) 27776 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 27777 27778 * int32x2_t vrev64_s32 (int32x2_t) 27779 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 27780 27781 * int16x4_t vrev64_s16 (int16x4_t) 27782 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 27783 27784 * int8x8_t vrev64_s8 (int8x8_t) 27785 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 27786 27787 * float32x2_t vrev64_f32 (float32x2_t) 27788 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 27789 27790 * poly16x4_t vrev64_p16 (poly16x4_t) 27791 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 27792 27793 * poly8x8_t vrev64_p8 (poly8x8_t) 27794 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 27795 27796 * uint32x4_t vrev64q_u32 (uint32x4_t) 27797 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 27798 27799 * uint16x8_t vrev64q_u16 (uint16x8_t) 27800 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 27801 27802 * uint8x16_t vrev64q_u8 (uint8x16_t) 27803 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 27804 27805 * int32x4_t vrev64q_s32 (int32x4_t) 27806 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 27807 27808 * int16x8_t vrev64q_s16 (int16x8_t) 27809 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 27810 27811 * int8x16_t vrev64q_s8 (int8x16_t) 27812 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 27813 27814 * float32x4_t vrev64q_f32 (float32x4_t) 27815 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 27816 27817 * poly16x8_t vrev64q_p16 (poly16x8_t) 27818 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 27819 27820 * poly8x16_t vrev64q_p8 (poly8x16_t) 27821 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 27822 27823 * uint16x4_t vrev32_u16 (uint16x4_t) 27824 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 27825 27826 * int16x4_t vrev32_s16 (int16x4_t) 27827 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 27828 27829 * uint8x8_t vrev32_u8 (uint8x8_t) 27830 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 27831 27832 * int8x8_t vrev32_s8 (int8x8_t) 27833 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 27834 27835 * poly16x4_t vrev32_p16 (poly16x4_t) 27836 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 27837 27838 * poly8x8_t vrev32_p8 (poly8x8_t) 27839 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 27840 27841 * uint16x8_t vrev32q_u16 (uint16x8_t) 27842 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 27843 27844 * int16x8_t vrev32q_s16 (int16x8_t) 27845 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 27846 27847 * uint8x16_t vrev32q_u8 (uint8x16_t) 27848 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 27849 27850 * int8x16_t vrev32q_s8 (int8x16_t) 27851 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 27852 27853 * poly16x8_t vrev32q_p16 (poly16x8_t) 27854 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 27855 27856 * poly8x16_t vrev32q_p8 (poly8x16_t) 27857 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 27858 27859 * uint8x8_t vrev16_u8 (uint8x8_t) 27860 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 27861 27862 * int8x8_t vrev16_s8 (int8x8_t) 27863 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 27864 27865 * poly8x8_t vrev16_p8 (poly8x8_t) 27866 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 27867 27868 * uint8x16_t vrev16q_u8 (uint8x16_t) 27869 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 27870 27871 * int8x16_t vrev16q_s8 (int8x16_t) 27872 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 27873 27874 * poly8x16_t vrev16q_p8 (poly8x16_t) 27875 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 27876 27877 5.50.3.64 Bit selection 27878 ....................... 27879 27880 * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 27881 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27882 D0, D0, D0' _or_ `vbif D0, D0, D0' 27883 27884 * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 27885 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27886 D0, D0, D0' _or_ `vbif D0, D0, D0' 27887 27888 * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 27889 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27890 D0, D0, D0' _or_ `vbif D0, D0, D0' 27891 27892 * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) 27893 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27894 D0, D0, D0' _or_ `vbif D0, D0, D0' 27895 27896 * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) 27897 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27898 D0, D0, D0' _or_ `vbif D0, D0, D0' 27899 27900 * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) 27901 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27902 D0, D0, D0' _or_ `vbif D0, D0, D0' 27903 27904 * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) 27905 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27906 D0, D0, D0' _or_ `vbif D0, D0, D0' 27907 27908 * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) 27909 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27910 D0, D0, D0' _or_ `vbif D0, D0, D0' 27911 27912 * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) 27913 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27914 D0, D0, D0' _or_ `vbif D0, D0, D0' 27915 27916 * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) 27917 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27918 D0, D0, D0' _or_ `vbif D0, D0, D0' 27919 27920 * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) 27921 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 27922 D0, D0, D0' _or_ `vbif D0, D0, D0' 27923 27924 * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 27925 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27926 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27927 27928 * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 27929 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27930 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27931 27932 * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 27933 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27934 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27935 27936 * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) 27937 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27938 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27939 27940 * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) 27941 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27942 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27943 27944 * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) 27945 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27946 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27947 27948 * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) 27949 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27950 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27951 27952 * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) 27953 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27954 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27955 27956 * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) 27957 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27958 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27959 27960 * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) 27961 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27962 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27963 27964 * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) 27965 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 27966 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 27967 27968 5.50.3.65 Transpose elements 27969 ............................ 27970 27971 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) 27972 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 27973 27974 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) 27975 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 27976 27977 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) 27978 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 27979 27980 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) 27981 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 27982 27983 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) 27984 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 27985 27986 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) 27987 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 27988 27989 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) 27990 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 27991 27992 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) 27993 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 27994 27995 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) 27996 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 27997 27998 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) 27999 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 28000 28001 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) 28002 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 28003 28004 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) 28005 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 28006 28007 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) 28008 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 28009 28010 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) 28011 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 28012 28013 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) 28014 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 28015 28016 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) 28017 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 28018 28019 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) 28020 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 28021 28022 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) 28023 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 28024 28025 5.50.3.66 Zip elements 28026 ...................... 28027 28028 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) 28029 _Form of expected instruction(s):_ `vzip.32 D0, D1' 28030 28031 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) 28032 _Form of expected instruction(s):_ `vzip.16 D0, D1' 28033 28034 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) 28035 _Form of expected instruction(s):_ `vzip.8 D0, D1' 28036 28037 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) 28038 _Form of expected instruction(s):_ `vzip.32 D0, D1' 28039 28040 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) 28041 _Form of expected instruction(s):_ `vzip.16 D0, D1' 28042 28043 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) 28044 _Form of expected instruction(s):_ `vzip.8 D0, D1' 28045 28046 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) 28047 _Form of expected instruction(s):_ `vzip.32 D0, D1' 28048 28049 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) 28050 _Form of expected instruction(s):_ `vzip.16 D0, D1' 28051 28052 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) 28053 _Form of expected instruction(s):_ `vzip.8 D0, D1' 28054 28055 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) 28056 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 28057 28058 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) 28059 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 28060 28061 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) 28062 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 28063 28064 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) 28065 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 28066 28067 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) 28068 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 28069 28070 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) 28071 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 28072 28073 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) 28074 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 28075 28076 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) 28077 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 28078 28079 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) 28080 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 28081 28082 5.50.3.67 Unzip elements 28083 ........................ 28084 28085 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) 28086 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 28087 28088 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) 28089 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 28090 28091 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) 28092 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 28093 28094 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) 28095 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 28096 28097 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) 28098 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 28099 28100 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) 28101 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 28102 28103 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) 28104 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 28105 28106 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) 28107 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 28108 28109 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) 28110 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 28111 28112 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) 28113 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 28114 28115 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) 28116 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 28117 28118 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) 28119 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 28120 28121 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) 28122 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 28123 28124 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) 28125 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 28126 28127 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) 28128 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 28129 28130 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) 28131 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 28132 28133 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) 28134 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 28135 28136 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) 28137 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 28138 28139 5.50.3.68 Element/structure loads, VLD1 variants 28140 ................................................ 28141 28142 * uint32x2_t vld1_u32 (const uint32_t *) 28143 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 28144 28145 * uint16x4_t vld1_u16 (const uint16_t *) 28146 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 28147 28148 * uint8x8_t vld1_u8 (const uint8_t *) 28149 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 28150 28151 * int32x2_t vld1_s32 (const int32_t *) 28152 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 28153 28154 * int16x4_t vld1_s16 (const int16_t *) 28155 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 28156 28157 * int8x8_t vld1_s8 (const int8_t *) 28158 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 28159 28160 * uint64x1_t vld1_u64 (const uint64_t *) 28161 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28162 28163 * int64x1_t vld1_s64 (const int64_t *) 28164 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28165 28166 * float32x2_t vld1_f32 (const float32_t *) 28167 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 28168 28169 * poly16x4_t vld1_p16 (const poly16_t *) 28170 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 28171 28172 * poly8x8_t vld1_p8 (const poly8_t *) 28173 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 28174 28175 * uint32x4_t vld1q_u32 (const uint32_t *) 28176 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 28177 28178 * uint16x8_t vld1q_u16 (const uint16_t *) 28179 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 28180 28181 * uint8x16_t vld1q_u8 (const uint8_t *) 28182 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 28183 28184 * int32x4_t vld1q_s32 (const int32_t *) 28185 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 28186 28187 * int16x8_t vld1q_s16 (const int16_t *) 28188 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 28189 28190 * int8x16_t vld1q_s8 (const int8_t *) 28191 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 28192 28193 * uint64x2_t vld1q_u64 (const uint64_t *) 28194 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28195 28196 * int64x2_t vld1q_s64 (const int64_t *) 28197 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28198 28199 * float32x4_t vld1q_f32 (const float32_t *) 28200 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 28201 28202 * poly16x8_t vld1q_p16 (const poly16_t *) 28203 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 28204 28205 * poly8x16_t vld1q_p8 (const poly8_t *) 28206 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 28207 28208 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) 28209 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28210 28211 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) 28212 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28213 28214 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) 28215 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28216 28217 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) 28218 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28219 28220 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) 28221 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28222 28223 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) 28224 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28225 28226 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const 28227 int) 28228 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28229 28230 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) 28231 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28232 28233 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) 28234 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28235 28236 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) 28237 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28238 28239 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) 28240 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28241 28242 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) 28243 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28244 28245 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) 28246 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28247 28248 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) 28249 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28250 28251 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) 28252 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28253 28254 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) 28255 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28256 28257 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) 28258 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28259 28260 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const 28261 int) 28262 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28263 28264 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) 28265 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28266 28267 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) 28268 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28269 28270 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) 28271 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28272 28273 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) 28274 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28275 28276 * uint32x2_t vld1_dup_u32 (const uint32_t *) 28277 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 28278 28279 * uint16x4_t vld1_dup_u16 (const uint16_t *) 28280 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 28281 28282 * uint8x8_t vld1_dup_u8 (const uint8_t *) 28283 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 28284 28285 * int32x2_t vld1_dup_s32 (const int32_t *) 28286 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 28287 28288 * int16x4_t vld1_dup_s16 (const int16_t *) 28289 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 28290 28291 * int8x8_t vld1_dup_s8 (const int8_t *) 28292 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 28293 28294 * float32x2_t vld1_dup_f32 (const float32_t *) 28295 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 28296 28297 * poly16x4_t vld1_dup_p16 (const poly16_t *) 28298 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 28299 28300 * poly8x8_t vld1_dup_p8 (const poly8_t *) 28301 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 28302 28303 * uint64x1_t vld1_dup_u64 (const uint64_t *) 28304 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28305 28306 * int64x1_t vld1_dup_s64 (const int64_t *) 28307 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28308 28309 * uint32x4_t vld1q_dup_u32 (const uint32_t *) 28310 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 28311 28312 * uint16x8_t vld1q_dup_u16 (const uint16_t *) 28313 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 28314 28315 * uint8x16_t vld1q_dup_u8 (const uint8_t *) 28316 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 28317 28318 * int32x4_t vld1q_dup_s32 (const int32_t *) 28319 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 28320 28321 * int16x8_t vld1q_dup_s16 (const int16_t *) 28322 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 28323 28324 * int8x16_t vld1q_dup_s8 (const int8_t *) 28325 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 28326 28327 * float32x4_t vld1q_dup_f32 (const float32_t *) 28328 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 28329 28330 * poly16x8_t vld1q_dup_p16 (const poly16_t *) 28331 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 28332 28333 * poly8x16_t vld1q_dup_p8 (const poly8_t *) 28334 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 28335 28336 * uint64x2_t vld1q_dup_u64 (const uint64_t *) 28337 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28338 28339 * int64x2_t vld1q_dup_s64 (const int64_t *) 28340 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28341 28342 5.50.3.69 Element/structure stores, VST1 variants 28343 ................................................. 28344 28345 * void vst1_u32 (uint32_t *, uint32x2_t) 28346 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 28347 28348 * void vst1_u16 (uint16_t *, uint16x4_t) 28349 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 28350 28351 * void vst1_u8 (uint8_t *, uint8x8_t) 28352 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 28353 28354 * void vst1_s32 (int32_t *, int32x2_t) 28355 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 28356 28357 * void vst1_s16 (int16_t *, int16x4_t) 28358 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 28359 28360 * void vst1_s8 (int8_t *, int8x8_t) 28361 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 28362 28363 * void vst1_u64 (uint64_t *, uint64x1_t) 28364 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28365 28366 * void vst1_s64 (int64_t *, int64x1_t) 28367 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28368 28369 * void vst1_f32 (float32_t *, float32x2_t) 28370 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 28371 28372 * void vst1_p16 (poly16_t *, poly16x4_t) 28373 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 28374 28375 * void vst1_p8 (poly8_t *, poly8x8_t) 28376 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 28377 28378 * void vst1q_u32 (uint32_t *, uint32x4_t) 28379 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 28380 28381 * void vst1q_u16 (uint16_t *, uint16x8_t) 28382 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 28383 28384 * void vst1q_u8 (uint8_t *, uint8x16_t) 28385 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 28386 28387 * void vst1q_s32 (int32_t *, int32x4_t) 28388 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 28389 28390 * void vst1q_s16 (int16_t *, int16x8_t) 28391 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 28392 28393 * void vst1q_s8 (int8_t *, int8x16_t) 28394 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 28395 28396 * void vst1q_u64 (uint64_t *, uint64x2_t) 28397 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 28398 28399 * void vst1q_s64 (int64_t *, int64x2_t) 28400 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 28401 28402 * void vst1q_f32 (float32_t *, float32x4_t) 28403 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 28404 28405 * void vst1q_p16 (poly16_t *, poly16x8_t) 28406 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 28407 28408 * void vst1q_p8 (poly8_t *, poly8x16_t) 28409 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 28410 28411 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) 28412 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28413 28414 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) 28415 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28416 28417 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) 28418 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28419 28420 * void vst1_lane_s32 (int32_t *, int32x2_t, const int) 28421 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28422 28423 * void vst1_lane_s16 (int16_t *, int16x4_t, const int) 28424 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28425 28426 * void vst1_lane_s8 (int8_t *, int8x8_t, const int) 28427 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28428 28429 * void vst1_lane_f32 (float32_t *, float32x2_t, const int) 28430 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28431 28432 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) 28433 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28434 28435 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) 28436 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28437 28438 * void vst1_lane_s64 (int64_t *, int64x1_t, const int) 28439 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28440 28441 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) 28442 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28443 28444 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) 28445 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28446 28447 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) 28448 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28449 28450 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) 28451 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28452 28453 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) 28454 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28455 28456 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) 28457 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28458 28459 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) 28460 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28461 28462 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) 28463 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28464 28465 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) 28466 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28467 28468 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) 28469 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28470 28471 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) 28472 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28473 28474 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) 28475 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28476 28477 5.50.3.70 Element/structure loads, VLD2 variants 28478 ................................................ 28479 28480 * uint32x2x2_t vld2_u32 (const uint32_t *) 28481 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28482 28483 * uint16x4x2_t vld2_u16 (const uint16_t *) 28484 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28485 28486 * uint8x8x2_t vld2_u8 (const uint8_t *) 28487 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28488 28489 * int32x2x2_t vld2_s32 (const int32_t *) 28490 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28491 28492 * int16x4x2_t vld2_s16 (const int16_t *) 28493 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28494 28495 * int8x8x2_t vld2_s8 (const int8_t *) 28496 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28497 28498 * float32x2x2_t vld2_f32 (const float32_t *) 28499 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28500 28501 * poly16x4x2_t vld2_p16 (const poly16_t *) 28502 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28503 28504 * poly8x8x2_t vld2_p8 (const poly8_t *) 28505 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28506 28507 * uint64x1x2_t vld2_u64 (const uint64_t *) 28508 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28509 28510 * int64x1x2_t vld2_s64 (const int64_t *) 28511 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28512 28513 * uint32x4x2_t vld2q_u32 (const uint32_t *) 28514 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28515 28516 * uint16x8x2_t vld2q_u16 (const uint16_t *) 28517 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28518 28519 * uint8x16x2_t vld2q_u8 (const uint8_t *) 28520 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28521 28522 * int32x4x2_t vld2q_s32 (const int32_t *) 28523 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28524 28525 * int16x8x2_t vld2q_s16 (const int16_t *) 28526 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28527 28528 * int8x16x2_t vld2q_s8 (const int8_t *) 28529 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28530 28531 * float32x4x2_t vld2q_f32 (const float32_t *) 28532 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28533 28534 * poly16x8x2_t vld2q_p16 (const poly16_t *) 28535 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28536 28537 * poly8x16x2_t vld2q_p8 (const poly8_t *) 28538 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28539 28540 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const 28541 int) 28542 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28543 28544 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const 28545 int) 28546 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28547 28548 * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) 28549 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 28550 28551 * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) 28552 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28553 28554 * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) 28555 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28556 28557 * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) 28558 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 28559 28560 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, 28561 const int) 28562 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28563 28564 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const 28565 int) 28566 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28567 28568 * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) 28569 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 28570 28571 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const 28572 int) 28573 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28574 28575 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const 28576 int) 28577 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28578 28579 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const 28580 int) 28581 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28582 28583 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const 28584 int) 28585 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28586 28587 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, 28588 const int) 28589 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28590 28591 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const 28592 int) 28593 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28594 28595 * uint32x2x2_t vld2_dup_u32 (const uint32_t *) 28596 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 28597 28598 * uint16x4x2_t vld2_dup_u16 (const uint16_t *) 28599 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 28600 28601 * uint8x8x2_t vld2_dup_u8 (const uint8_t *) 28602 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 28603 28604 * int32x2x2_t vld2_dup_s32 (const int32_t *) 28605 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 28606 28607 * int16x4x2_t vld2_dup_s16 (const int16_t *) 28608 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 28609 28610 * int8x8x2_t vld2_dup_s8 (const int8_t *) 28611 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 28612 28613 * float32x2x2_t vld2_dup_f32 (const float32_t *) 28614 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 28615 28616 * poly16x4x2_t vld2_dup_p16 (const poly16_t *) 28617 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 28618 28619 * poly8x8x2_t vld2_dup_p8 (const poly8_t *) 28620 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 28621 28622 * uint64x1x2_t vld2_dup_u64 (const uint64_t *) 28623 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28624 28625 * int64x1x2_t vld2_dup_s64 (const int64_t *) 28626 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28627 28628 5.50.3.71 Element/structure stores, VST2 variants 28629 ................................................. 28630 28631 * void vst2_u32 (uint32_t *, uint32x2x2_t) 28632 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28633 28634 * void vst2_u16 (uint16_t *, uint16x4x2_t) 28635 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28636 28637 * void vst2_u8 (uint8_t *, uint8x8x2_t) 28638 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28639 28640 * void vst2_s32 (int32_t *, int32x2x2_t) 28641 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28642 28643 * void vst2_s16 (int16_t *, int16x4x2_t) 28644 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28645 28646 * void vst2_s8 (int8_t *, int8x8x2_t) 28647 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28648 28649 * void vst2_f32 (float32_t *, float32x2x2_t) 28650 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28651 28652 * void vst2_p16 (poly16_t *, poly16x4x2_t) 28653 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28654 28655 * void vst2_p8 (poly8_t *, poly8x8x2_t) 28656 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28657 28658 * void vst2_u64 (uint64_t *, uint64x1x2_t) 28659 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 28660 28661 * void vst2_s64 (int64_t *, int64x1x2_t) 28662 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 28663 28664 * void vst2q_u32 (uint32_t *, uint32x4x2_t) 28665 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28666 28667 * void vst2q_u16 (uint16_t *, uint16x8x2_t) 28668 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28669 28670 * void vst2q_u8 (uint8_t *, uint8x16x2_t) 28671 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28672 28673 * void vst2q_s32 (int32_t *, int32x4x2_t) 28674 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28675 28676 * void vst2q_s16 (int16_t *, int16x8x2_t) 28677 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28678 28679 * void vst2q_s8 (int8_t *, int8x16x2_t) 28680 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28681 28682 * void vst2q_f32 (float32_t *, float32x4x2_t) 28683 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28684 28685 * void vst2q_p16 (poly16_t *, poly16x8x2_t) 28686 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28687 28688 * void vst2q_p8 (poly8_t *, poly8x16x2_t) 28689 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28690 28691 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) 28692 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 28693 28694 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) 28695 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 28696 28697 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) 28698 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 28699 28700 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) 28701 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 28702 28703 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) 28704 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 28705 28706 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) 28707 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 28708 28709 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) 28710 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 28711 28712 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) 28713 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 28714 28715 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) 28716 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 28717 28718 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) 28719 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 28720 28721 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) 28722 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 28723 28724 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) 28725 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 28726 28727 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) 28728 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 28729 28730 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) 28731 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 28732 28733 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) 28734 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 28735 28736 5.50.3.72 Element/structure loads, VLD3 variants 28737 ................................................ 28738 28739 * uint32x2x3_t vld3_u32 (const uint32_t *) 28740 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 28741 28742 * uint16x4x3_t vld3_u16 (const uint16_t *) 28743 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 28744 28745 * uint8x8x3_t vld3_u8 (const uint8_t *) 28746 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 28747 28748 * int32x2x3_t vld3_s32 (const int32_t *) 28749 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 28750 28751 * int16x4x3_t vld3_s16 (const int16_t *) 28752 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 28753 28754 * int8x8x3_t vld3_s8 (const int8_t *) 28755 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 28756 28757 * float32x2x3_t vld3_f32 (const float32_t *) 28758 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 28759 28760 * poly16x4x3_t vld3_p16 (const poly16_t *) 28761 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 28762 28763 * poly8x8x3_t vld3_p8 (const poly8_t *) 28764 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 28765 28766 * uint64x1x3_t vld3_u64 (const uint64_t *) 28767 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 28768 28769 * int64x1x3_t vld3_s64 (const int64_t *) 28770 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 28771 28772 * uint32x4x3_t vld3q_u32 (const uint32_t *) 28773 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 28774 28775 * uint16x8x3_t vld3q_u16 (const uint16_t *) 28776 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 28777 28778 * uint8x16x3_t vld3q_u8 (const uint8_t *) 28779 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 28780 28781 * int32x4x3_t vld3q_s32 (const int32_t *) 28782 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 28783 28784 * int16x8x3_t vld3q_s16 (const int16_t *) 28785 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 28786 28787 * int8x16x3_t vld3q_s8 (const int8_t *) 28788 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 28789 28790 * float32x4x3_t vld3q_f32 (const float32_t *) 28791 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 28792 28793 * poly16x8x3_t vld3q_p16 (const poly16_t *) 28794 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 28795 28796 * poly8x16x3_t vld3q_p8 (const poly8_t *) 28797 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 28798 28799 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const 28800 int) 28801 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 28802 [R0]' 28803 28804 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const 28805 int) 28806 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 28807 [R0]' 28808 28809 * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) 28810 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 28811 [R0]' 28812 28813 * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) 28814 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 28815 [R0]' 28816 28817 * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) 28818 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 28819 [R0]' 28820 28821 * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) 28822 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 28823 [R0]' 28824 28825 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, 28826 const int) 28827 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 28828 [R0]' 28829 28830 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const 28831 int) 28832 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 28833 [R0]' 28834 28835 * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) 28836 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 28837 [R0]' 28838 28839 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const 28840 int) 28841 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 28842 [R0]' 28843 28844 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const 28845 int) 28846 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 28847 [R0]' 28848 28849 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const 28850 int) 28851 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 28852 [R0]' 28853 28854 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const 28855 int) 28856 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 28857 [R0]' 28858 28859 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, 28860 const int) 28861 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 28862 [R0]' 28863 28864 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const 28865 int) 28866 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 28867 [R0]' 28868 28869 * uint32x2x3_t vld3_dup_u32 (const uint32_t *) 28870 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 28871 [R0]' 28872 28873 * uint16x4x3_t vld3_dup_u16 (const uint16_t *) 28874 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 28875 [R0]' 28876 28877 * uint8x8x3_t vld3_dup_u8 (const uint8_t *) 28878 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 28879 [R0]' 28880 28881 * int32x2x3_t vld3_dup_s32 (const int32_t *) 28882 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 28883 [R0]' 28884 28885 * int16x4x3_t vld3_dup_s16 (const int16_t *) 28886 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 28887 [R0]' 28888 28889 * int8x8x3_t vld3_dup_s8 (const int8_t *) 28890 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 28891 [R0]' 28892 28893 * float32x2x3_t vld3_dup_f32 (const float32_t *) 28894 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 28895 [R0]' 28896 28897 * poly16x4x3_t vld3_dup_p16 (const poly16_t *) 28898 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 28899 [R0]' 28900 28901 * poly8x8x3_t vld3_dup_p8 (const poly8_t *) 28902 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 28903 [R0]' 28904 28905 * uint64x1x3_t vld3_dup_u64 (const uint64_t *) 28906 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 28907 28908 * int64x1x3_t vld3_dup_s64 (const int64_t *) 28909 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 28910 28911 5.50.3.73 Element/structure stores, VST3 variants 28912 ................................................. 28913 28914 * void vst3_u32 (uint32_t *, uint32x2x3_t) 28915 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 28916 28917 * void vst3_u16 (uint16_t *, uint16x4x3_t) 28918 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 28919 28920 * void vst3_u8 (uint8_t *, uint8x8x3_t) 28921 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 28922 28923 * void vst3_s32 (int32_t *, int32x2x3_t) 28924 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 28925 28926 * void vst3_s16 (int16_t *, int16x4x3_t) 28927 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 28928 28929 * void vst3_s8 (int8_t *, int8x8x3_t) 28930 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 28931 28932 * void vst3_f32 (float32_t *, float32x2x3_t) 28933 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 28934 28935 * void vst3_p16 (poly16_t *, poly16x4x3_t) 28936 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 28937 28938 * void vst3_p8 (poly8_t *, poly8x8x3_t) 28939 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 28940 28941 * void vst3_u64 (uint64_t *, uint64x1x3_t) 28942 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 28943 28944 * void vst3_s64 (int64_t *, int64x1x3_t) 28945 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 28946 28947 * void vst3q_u32 (uint32_t *, uint32x4x3_t) 28948 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 28949 28950 * void vst3q_u16 (uint16_t *, uint16x8x3_t) 28951 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 28952 28953 * void vst3q_u8 (uint8_t *, uint8x16x3_t) 28954 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 28955 28956 * void vst3q_s32 (int32_t *, int32x4x3_t) 28957 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 28958 28959 * void vst3q_s16 (int16_t *, int16x8x3_t) 28960 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 28961 28962 * void vst3q_s8 (int8_t *, int8x16x3_t) 28963 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 28964 28965 * void vst3q_f32 (float32_t *, float32x4x3_t) 28966 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 28967 28968 * void vst3q_p16 (poly16_t *, poly16x8x3_t) 28969 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 28970 28971 * void vst3q_p8 (poly8_t *, poly8x16x3_t) 28972 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 28973 28974 * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) 28975 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 28976 [R0]' 28977 28978 * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) 28979 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 28980 [R0]' 28981 28982 * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) 28983 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 28984 [R0]' 28985 28986 * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) 28987 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 28988 [R0]' 28989 28990 * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) 28991 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 28992 [R0]' 28993 28994 * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) 28995 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 28996 [R0]' 28997 28998 * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) 28999 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 29000 [R0]' 29001 29002 * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) 29003 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 29004 [R0]' 29005 29006 * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) 29007 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 29008 [R0]' 29009 29010 * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) 29011 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 29012 [R0]' 29013 29014 * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) 29015 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 29016 [R0]' 29017 29018 * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) 29019 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 29020 [R0]' 29021 29022 * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) 29023 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 29024 [R0]' 29025 29026 * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) 29027 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 29028 [R0]' 29029 29030 * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) 29031 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 29032 [R0]' 29033 29034 5.50.3.74 Element/structure loads, VLD4 variants 29035 ................................................ 29036 29037 * uint32x2x4_t vld4_u32 (const uint32_t *) 29038 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29039 29040 * uint16x4x4_t vld4_u16 (const uint16_t *) 29041 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29042 29043 * uint8x8x4_t vld4_u8 (const uint8_t *) 29044 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29045 29046 * int32x2x4_t vld4_s32 (const int32_t *) 29047 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29048 29049 * int16x4x4_t vld4_s16 (const int16_t *) 29050 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29051 29052 * int8x8x4_t vld4_s8 (const int8_t *) 29053 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29054 29055 * float32x2x4_t vld4_f32 (const float32_t *) 29056 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29057 29058 * poly16x4x4_t vld4_p16 (const poly16_t *) 29059 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29060 29061 * poly8x8x4_t vld4_p8 (const poly8_t *) 29062 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29063 29064 * uint64x1x4_t vld4_u64 (const uint64_t *) 29065 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 29066 29067 * int64x1x4_t vld4_s64 (const int64_t *) 29068 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 29069 29070 * uint32x4x4_t vld4q_u32 (const uint32_t *) 29071 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29072 29073 * uint16x8x4_t vld4q_u16 (const uint16_t *) 29074 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29075 29076 * uint8x16x4_t vld4q_u8 (const uint8_t *) 29077 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29078 29079 * int32x4x4_t vld4q_s32 (const int32_t *) 29080 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29081 29082 * int16x8x4_t vld4q_s16 (const int16_t *) 29083 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29084 29085 * int8x16x4_t vld4q_s8 (const int8_t *) 29086 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29087 29088 * float32x4x4_t vld4q_f32 (const float32_t *) 29089 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29090 29091 * poly16x8x4_t vld4q_p16 (const poly16_t *) 29092 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29093 29094 * poly8x16x4_t vld4q_p8 (const poly8_t *) 29095 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29096 29097 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const 29098 int) 29099 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29100 D3[0]}, [R0]' 29101 29102 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const 29103 int) 29104 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29105 D3[0]}, [R0]' 29106 29107 * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) 29108 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 29109 D3[0]}, [R0]' 29110 29111 * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) 29112 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29113 D3[0]}, [R0]' 29114 29115 * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) 29116 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29117 D3[0]}, [R0]' 29118 29119 * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) 29120 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 29121 D3[0]}, [R0]' 29122 29123 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, 29124 const int) 29125 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29126 D3[0]}, [R0]' 29127 29128 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const 29129 int) 29130 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29131 D3[0]}, [R0]' 29132 29133 * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) 29134 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 29135 D3[0]}, [R0]' 29136 29137 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const 29138 int) 29139 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29140 D3[0]}, [R0]' 29141 29142 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const 29143 int) 29144 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29145 D3[0]}, [R0]' 29146 29147 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const 29148 int) 29149 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29150 D3[0]}, [R0]' 29151 29152 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const 29153 int) 29154 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29155 D3[0]}, [R0]' 29156 29157 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, 29158 const int) 29159 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29160 D3[0]}, [R0]' 29161 29162 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const 29163 int) 29164 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29165 D3[0]}, [R0]' 29166 29167 * uint32x2x4_t vld4_dup_u32 (const uint32_t *) 29168 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 29169 D3[]}, [R0]' 29170 29171 * uint16x4x4_t vld4_dup_u16 (const uint16_t *) 29172 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 29173 D3[]}, [R0]' 29174 29175 * uint8x8x4_t vld4_dup_u8 (const uint8_t *) 29176 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 29177 D3[]}, [R0]' 29178 29179 * int32x2x4_t vld4_dup_s32 (const int32_t *) 29180 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 29181 D3[]}, [R0]' 29182 29183 * int16x4x4_t vld4_dup_s16 (const int16_t *) 29184 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 29185 D3[]}, [R0]' 29186 29187 * int8x8x4_t vld4_dup_s8 (const int8_t *) 29188 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 29189 D3[]}, [R0]' 29190 29191 * float32x2x4_t vld4_dup_f32 (const float32_t *) 29192 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 29193 D3[]}, [R0]' 29194 29195 * poly16x4x4_t vld4_dup_p16 (const poly16_t *) 29196 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 29197 D3[]}, [R0]' 29198 29199 * poly8x8x4_t vld4_dup_p8 (const poly8_t *) 29200 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 29201 D3[]}, [R0]' 29202 29203 * uint64x1x4_t vld4_dup_u64 (const uint64_t *) 29204 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 29205 29206 * int64x1x4_t vld4_dup_s64 (const int64_t *) 29207 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 29208 29209 5.50.3.75 Element/structure stores, VST4 variants 29210 ................................................. 29211 29212 * void vst4_u32 (uint32_t *, uint32x2x4_t) 29213 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29214 29215 * void vst4_u16 (uint16_t *, uint16x4x4_t) 29216 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29217 29218 * void vst4_u8 (uint8_t *, uint8x8x4_t) 29219 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29220 29221 * void vst4_s32 (int32_t *, int32x2x4_t) 29222 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29223 29224 * void vst4_s16 (int16_t *, int16x4x4_t) 29225 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29226 29227 * void vst4_s8 (int8_t *, int8x8x4_t) 29228 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29229 29230 * void vst4_f32 (float32_t *, float32x2x4_t) 29231 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29232 29233 * void vst4_p16 (poly16_t *, poly16x4x4_t) 29234 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29235 29236 * void vst4_p8 (poly8_t *, poly8x8x4_t) 29237 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29238 29239 * void vst4_u64 (uint64_t *, uint64x1x4_t) 29240 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 29241 29242 * void vst4_s64 (int64_t *, int64x1x4_t) 29243 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 29244 29245 * void vst4q_u32 (uint32_t *, uint32x4x4_t) 29246 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29247 29248 * void vst4q_u16 (uint16_t *, uint16x8x4_t) 29249 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29250 29251 * void vst4q_u8 (uint8_t *, uint8x16x4_t) 29252 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29253 29254 * void vst4q_s32 (int32_t *, int32x4x4_t) 29255 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29256 29257 * void vst4q_s16 (int16_t *, int16x8x4_t) 29258 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29259 29260 * void vst4q_s8 (int8_t *, int8x16x4_t) 29261 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29262 29263 * void vst4q_f32 (float32_t *, float32x4x4_t) 29264 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29265 29266 * void vst4q_p16 (poly16_t *, poly16x8x4_t) 29267 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29268 29269 * void vst4q_p8 (poly8_t *, poly8x16x4_t) 29270 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29271 29272 * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) 29273 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29274 D3[0]}, [R0]' 29275 29276 * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) 29277 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29278 D3[0]}, [R0]' 29279 29280 * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) 29281 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 29282 D3[0]}, [R0]' 29283 29284 * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) 29285 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29286 D3[0]}, [R0]' 29287 29288 * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) 29289 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29290 D3[0]}, [R0]' 29291 29292 * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) 29293 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 29294 D3[0]}, [R0]' 29295 29296 * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) 29297 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29298 D3[0]}, [R0]' 29299 29300 * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) 29301 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29302 D3[0]}, [R0]' 29303 29304 * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) 29305 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 29306 D3[0]}, [R0]' 29307 29308 * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) 29309 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29310 D3[0]}, [R0]' 29311 29312 * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) 29313 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29314 D3[0]}, [R0]' 29315 29316 * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) 29317 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29318 D3[0]}, [R0]' 29319 29320 * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) 29321 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29322 D3[0]}, [R0]' 29323 29324 * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) 29325 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29326 D3[0]}, [R0]' 29327 29328 * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) 29329 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29330 D3[0]}, [R0]' 29331 29332 5.50.3.76 Logical operations (AND) 29333 .................................. 29334 29335 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) 29336 _Form of expected instruction(s):_ `vand D0, D0, D0' 29337 29338 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) 29339 _Form of expected instruction(s):_ `vand D0, D0, D0' 29340 29341 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) 29342 _Form of expected instruction(s):_ `vand D0, D0, D0' 29343 29344 * int32x2_t vand_s32 (int32x2_t, int32x2_t) 29345 _Form of expected instruction(s):_ `vand D0, D0, D0' 29346 29347 * int16x4_t vand_s16 (int16x4_t, int16x4_t) 29348 _Form of expected instruction(s):_ `vand D0, D0, D0' 29349 29350 * int8x8_t vand_s8 (int8x8_t, int8x8_t) 29351 _Form of expected instruction(s):_ `vand D0, D0, D0' 29352 29353 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) 29354 _Form of expected instruction(s):_ `vand D0, D0, D0' 29355 29356 * int64x1_t vand_s64 (int64x1_t, int64x1_t) 29357 _Form of expected instruction(s):_ `vand D0, D0, D0' 29358 29359 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) 29360 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29361 29362 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) 29363 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29364 29365 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) 29366 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29367 29368 * int32x4_t vandq_s32 (int32x4_t, int32x4_t) 29369 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29370 29371 * int16x8_t vandq_s16 (int16x8_t, int16x8_t) 29372 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29373 29374 * int8x16_t vandq_s8 (int8x16_t, int8x16_t) 29375 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29376 29377 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) 29378 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29379 29380 * int64x2_t vandq_s64 (int64x2_t, int64x2_t) 29381 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29382 29383 5.50.3.77 Logical operations (OR) 29384 ................................. 29385 29386 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) 29387 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29388 29389 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) 29390 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29391 29392 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) 29393 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29394 29395 * int32x2_t vorr_s32 (int32x2_t, int32x2_t) 29396 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29397 29398 * int16x4_t vorr_s16 (int16x4_t, int16x4_t) 29399 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29400 29401 * int8x8_t vorr_s8 (int8x8_t, int8x8_t) 29402 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29403 29404 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) 29405 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29406 29407 * int64x1_t vorr_s64 (int64x1_t, int64x1_t) 29408 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29409 29410 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) 29411 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29412 29413 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) 29414 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29415 29416 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) 29417 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29418 29419 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) 29420 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29421 29422 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) 29423 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29424 29425 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) 29426 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29427 29428 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) 29429 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29430 29431 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) 29432 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29433 29434 5.50.3.78 Logical operations (exclusive OR) 29435 ........................................... 29436 29437 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) 29438 _Form of expected instruction(s):_ `veor D0, D0, D0' 29439 29440 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) 29441 _Form of expected instruction(s):_ `veor D0, D0, D0' 29442 29443 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) 29444 _Form of expected instruction(s):_ `veor D0, D0, D0' 29445 29446 * int32x2_t veor_s32 (int32x2_t, int32x2_t) 29447 _Form of expected instruction(s):_ `veor D0, D0, D0' 29448 29449 * int16x4_t veor_s16 (int16x4_t, int16x4_t) 29450 _Form of expected instruction(s):_ `veor D0, D0, D0' 29451 29452 * int8x8_t veor_s8 (int8x8_t, int8x8_t) 29453 _Form of expected instruction(s):_ `veor D0, D0, D0' 29454 29455 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) 29456 _Form of expected instruction(s):_ `veor D0, D0, D0' 29457 29458 * int64x1_t veor_s64 (int64x1_t, int64x1_t) 29459 _Form of expected instruction(s):_ `veor D0, D0, D0' 29460 29461 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) 29462 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29463 29464 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) 29465 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29466 29467 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) 29468 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29469 29470 * int32x4_t veorq_s32 (int32x4_t, int32x4_t) 29471 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29472 29473 * int16x8_t veorq_s16 (int16x8_t, int16x8_t) 29474 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29475 29476 * int8x16_t veorq_s8 (int8x16_t, int8x16_t) 29477 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29478 29479 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) 29480 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29481 29482 * int64x2_t veorq_s64 (int64x2_t, int64x2_t) 29483 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29484 29485 5.50.3.79 Logical operations (AND-NOT) 29486 ...................................... 29487 29488 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) 29489 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29490 29491 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) 29492 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29493 29494 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) 29495 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29496 29497 * int32x2_t vbic_s32 (int32x2_t, int32x2_t) 29498 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29499 29500 * int16x4_t vbic_s16 (int16x4_t, int16x4_t) 29501 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29502 29503 * int8x8_t vbic_s8 (int8x8_t, int8x8_t) 29504 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29505 29506 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) 29507 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29508 29509 * int64x1_t vbic_s64 (int64x1_t, int64x1_t) 29510 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29511 29512 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) 29513 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29514 29515 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) 29516 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29517 29518 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) 29519 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29520 29521 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) 29522 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29523 29524 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) 29525 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29526 29527 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) 29528 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29529 29530 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) 29531 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29532 29533 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) 29534 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29535 29536 5.50.3.80 Logical operations (OR-NOT) 29537 ..................................... 29538 29539 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) 29540 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29541 29542 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) 29543 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29544 29545 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) 29546 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29547 29548 * int32x2_t vorn_s32 (int32x2_t, int32x2_t) 29549 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29550 29551 * int16x4_t vorn_s16 (int16x4_t, int16x4_t) 29552 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29553 29554 * int8x8_t vorn_s8 (int8x8_t, int8x8_t) 29555 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29556 29557 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) 29558 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29559 29560 * int64x1_t vorn_s64 (int64x1_t, int64x1_t) 29561 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29562 29563 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) 29564 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29565 29566 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) 29567 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29568 29569 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) 29570 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29571 29572 * int32x4_t vornq_s32 (int32x4_t, int32x4_t) 29573 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29574 29575 * int16x8_t vornq_s16 (int16x8_t, int16x8_t) 29576 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29577 29578 * int8x16_t vornq_s8 (int8x16_t, int8x16_t) 29579 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29580 29581 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) 29582 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29583 29584 * int64x2_t vornq_s64 (int64x2_t, int64x2_t) 29585 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29586 29587 5.50.3.81 Reinterpret casts 29588 ........................... 29589 29590 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) 29591 29592 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) 29593 29594 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) 29595 29596 * poly8x8_t vreinterpret_p8_s32 (int32x2_t) 29597 29598 * poly8x8_t vreinterpret_p8_s16 (int16x4_t) 29599 29600 * poly8x8_t vreinterpret_p8_s8 (int8x8_t) 29601 29602 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) 29603 29604 * poly8x8_t vreinterpret_p8_s64 (int64x1_t) 29605 29606 * poly8x8_t vreinterpret_p8_f32 (float32x2_t) 29607 29608 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) 29609 29610 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) 29611 29612 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) 29613 29614 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) 29615 29616 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) 29617 29618 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) 29619 29620 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) 29621 29622 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) 29623 29624 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) 29625 29626 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) 29627 29628 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) 29629 29630 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) 29631 29632 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) 29633 29634 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) 29635 29636 * poly16x4_t vreinterpret_p16_s32 (int32x2_t) 29637 29638 * poly16x4_t vreinterpret_p16_s16 (int16x4_t) 29639 29640 * poly16x4_t vreinterpret_p16_s8 (int8x8_t) 29641 29642 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) 29643 29644 * poly16x4_t vreinterpret_p16_s64 (int64x1_t) 29645 29646 * poly16x4_t vreinterpret_p16_f32 (float32x2_t) 29647 29648 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) 29649 29650 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) 29651 29652 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) 29653 29654 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) 29655 29656 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) 29657 29658 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) 29659 29660 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) 29661 29662 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) 29663 29664 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) 29665 29666 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) 29667 29668 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) 29669 29670 * float32x2_t vreinterpret_f32_u32 (uint32x2_t) 29671 29672 * float32x2_t vreinterpret_f32_u16 (uint16x4_t) 29673 29674 * float32x2_t vreinterpret_f32_u8 (uint8x8_t) 29675 29676 * float32x2_t vreinterpret_f32_s32 (int32x2_t) 29677 29678 * float32x2_t vreinterpret_f32_s16 (int16x4_t) 29679 29680 * float32x2_t vreinterpret_f32_s8 (int8x8_t) 29681 29682 * float32x2_t vreinterpret_f32_u64 (uint64x1_t) 29683 29684 * float32x2_t vreinterpret_f32_s64 (int64x1_t) 29685 29686 * float32x2_t vreinterpret_f32_p16 (poly16x4_t) 29687 29688 * float32x2_t vreinterpret_f32_p8 (poly8x8_t) 29689 29690 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) 29691 29692 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) 29693 29694 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) 29695 29696 * float32x4_t vreinterpretq_f32_s32 (int32x4_t) 29697 29698 * float32x4_t vreinterpretq_f32_s16 (int16x8_t) 29699 29700 * float32x4_t vreinterpretq_f32_s8 (int8x16_t) 29701 29702 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) 29703 29704 * float32x4_t vreinterpretq_f32_s64 (int64x2_t) 29705 29706 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) 29707 29708 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) 29709 29710 * int64x1_t vreinterpret_s64_u32 (uint32x2_t) 29711 29712 * int64x1_t vreinterpret_s64_u16 (uint16x4_t) 29713 29714 * int64x1_t vreinterpret_s64_u8 (uint8x8_t) 29715 29716 * int64x1_t vreinterpret_s64_s32 (int32x2_t) 29717 29718 * int64x1_t vreinterpret_s64_s16 (int16x4_t) 29719 29720 * int64x1_t vreinterpret_s64_s8 (int8x8_t) 29721 29722 * int64x1_t vreinterpret_s64_u64 (uint64x1_t) 29723 29724 * int64x1_t vreinterpret_s64_f32 (float32x2_t) 29725 29726 * int64x1_t vreinterpret_s64_p16 (poly16x4_t) 29727 29728 * int64x1_t vreinterpret_s64_p8 (poly8x8_t) 29729 29730 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) 29731 29732 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) 29733 29734 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) 29735 29736 * int64x2_t vreinterpretq_s64_s32 (int32x4_t) 29737 29738 * int64x2_t vreinterpretq_s64_s16 (int16x8_t) 29739 29740 * int64x2_t vreinterpretq_s64_s8 (int8x16_t) 29741 29742 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) 29743 29744 * int64x2_t vreinterpretq_s64_f32 (float32x4_t) 29745 29746 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) 29747 29748 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) 29749 29750 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) 29751 29752 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) 29753 29754 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) 29755 29756 * uint64x1_t vreinterpret_u64_s32 (int32x2_t) 29757 29758 * uint64x1_t vreinterpret_u64_s16 (int16x4_t) 29759 29760 * uint64x1_t vreinterpret_u64_s8 (int8x8_t) 29761 29762 * uint64x1_t vreinterpret_u64_s64 (int64x1_t) 29763 29764 * uint64x1_t vreinterpret_u64_f32 (float32x2_t) 29765 29766 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) 29767 29768 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) 29769 29770 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) 29771 29772 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) 29773 29774 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) 29775 29776 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) 29777 29778 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) 29779 29780 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) 29781 29782 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) 29783 29784 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) 29785 29786 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) 29787 29788 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) 29789 29790 * int8x8_t vreinterpret_s8_u32 (uint32x2_t) 29791 29792 * int8x8_t vreinterpret_s8_u16 (uint16x4_t) 29793 29794 * int8x8_t vreinterpret_s8_u8 (uint8x8_t) 29795 29796 * int8x8_t vreinterpret_s8_s32 (int32x2_t) 29797 29798 * int8x8_t vreinterpret_s8_s16 (int16x4_t) 29799 29800 * int8x8_t vreinterpret_s8_u64 (uint64x1_t) 29801 29802 * int8x8_t vreinterpret_s8_s64 (int64x1_t) 29803 29804 * int8x8_t vreinterpret_s8_f32 (float32x2_t) 29805 29806 * int8x8_t vreinterpret_s8_p16 (poly16x4_t) 29807 29808 * int8x8_t vreinterpret_s8_p8 (poly8x8_t) 29809 29810 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) 29811 29812 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) 29813 29814 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) 29815 29816 * int8x16_t vreinterpretq_s8_s32 (int32x4_t) 29817 29818 * int8x16_t vreinterpretq_s8_s16 (int16x8_t) 29819 29820 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) 29821 29822 * int8x16_t vreinterpretq_s8_s64 (int64x2_t) 29823 29824 * int8x16_t vreinterpretq_s8_f32 (float32x4_t) 29825 29826 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) 29827 29828 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) 29829 29830 * int16x4_t vreinterpret_s16_u32 (uint32x2_t) 29831 29832 * int16x4_t vreinterpret_s16_u16 (uint16x4_t) 29833 29834 * int16x4_t vreinterpret_s16_u8 (uint8x8_t) 29835 29836 * int16x4_t vreinterpret_s16_s32 (int32x2_t) 29837 29838 * int16x4_t vreinterpret_s16_s8 (int8x8_t) 29839 29840 * int16x4_t vreinterpret_s16_u64 (uint64x1_t) 29841 29842 * int16x4_t vreinterpret_s16_s64 (int64x1_t) 29843 29844 * int16x4_t vreinterpret_s16_f32 (float32x2_t) 29845 29846 * int16x4_t vreinterpret_s16_p16 (poly16x4_t) 29847 29848 * int16x4_t vreinterpret_s16_p8 (poly8x8_t) 29849 29850 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) 29851 29852 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) 29853 29854 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) 29855 29856 * int16x8_t vreinterpretq_s16_s32 (int32x4_t) 29857 29858 * int16x8_t vreinterpretq_s16_s8 (int8x16_t) 29859 29860 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) 29861 29862 * int16x8_t vreinterpretq_s16_s64 (int64x2_t) 29863 29864 * int16x8_t vreinterpretq_s16_f32 (float32x4_t) 29865 29866 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) 29867 29868 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) 29869 29870 * int32x2_t vreinterpret_s32_u32 (uint32x2_t) 29871 29872 * int32x2_t vreinterpret_s32_u16 (uint16x4_t) 29873 29874 * int32x2_t vreinterpret_s32_u8 (uint8x8_t) 29875 29876 * int32x2_t vreinterpret_s32_s16 (int16x4_t) 29877 29878 * int32x2_t vreinterpret_s32_s8 (int8x8_t) 29879 29880 * int32x2_t vreinterpret_s32_u64 (uint64x1_t) 29881 29882 * int32x2_t vreinterpret_s32_s64 (int64x1_t) 29883 29884 * int32x2_t vreinterpret_s32_f32 (float32x2_t) 29885 29886 * int32x2_t vreinterpret_s32_p16 (poly16x4_t) 29887 29888 * int32x2_t vreinterpret_s32_p8 (poly8x8_t) 29889 29890 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) 29891 29892 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) 29893 29894 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) 29895 29896 * int32x4_t vreinterpretq_s32_s16 (int16x8_t) 29897 29898 * int32x4_t vreinterpretq_s32_s8 (int8x16_t) 29899 29900 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) 29901 29902 * int32x4_t vreinterpretq_s32_s64 (int64x2_t) 29903 29904 * int32x4_t vreinterpretq_s32_f32 (float32x4_t) 29905 29906 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) 29907 29908 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) 29909 29910 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) 29911 29912 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) 29913 29914 * uint8x8_t vreinterpret_u8_s32 (int32x2_t) 29915 29916 * uint8x8_t vreinterpret_u8_s16 (int16x4_t) 29917 29918 * uint8x8_t vreinterpret_u8_s8 (int8x8_t) 29919 29920 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) 29921 29922 * uint8x8_t vreinterpret_u8_s64 (int64x1_t) 29923 29924 * uint8x8_t vreinterpret_u8_f32 (float32x2_t) 29925 29926 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) 29927 29928 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) 29929 29930 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) 29931 29932 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) 29933 29934 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) 29935 29936 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) 29937 29938 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) 29939 29940 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) 29941 29942 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) 29943 29944 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) 29945 29946 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) 29947 29948 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) 29949 29950 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) 29951 29952 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) 29953 29954 * uint16x4_t vreinterpret_u16_s32 (int32x2_t) 29955 29956 * uint16x4_t vreinterpret_u16_s16 (int16x4_t) 29957 29958 * uint16x4_t vreinterpret_u16_s8 (int8x8_t) 29959 29960 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) 29961 29962 * uint16x4_t vreinterpret_u16_s64 (int64x1_t) 29963 29964 * uint16x4_t vreinterpret_u16_f32 (float32x2_t) 29965 29966 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) 29967 29968 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) 29969 29970 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) 29971 29972 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) 29973 29974 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) 29975 29976 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) 29977 29978 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) 29979 29980 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) 29981 29982 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) 29983 29984 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) 29985 29986 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) 29987 29988 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) 29989 29990 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) 29991 29992 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) 29993 29994 * uint32x2_t vreinterpret_u32_s32 (int32x2_t) 29995 29996 * uint32x2_t vreinterpret_u32_s16 (int16x4_t) 29997 29998 * uint32x2_t vreinterpret_u32_s8 (int8x8_t) 29999 30000 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) 30001 30002 * uint32x2_t vreinterpret_u32_s64 (int64x1_t) 30003 30004 * uint32x2_t vreinterpret_u32_f32 (float32x2_t) 30005 30006 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) 30007 30008 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) 30009 30010 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) 30011 30012 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) 30013 30014 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) 30015 30016 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) 30017 30018 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) 30019 30020 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) 30021 30022 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) 30023 30024 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) 30025 30026 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) 30027 30028 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) 30029 30030 30031 File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins 30032 30033 5.50.4 Blackfin Built-in Functions 30034 ---------------------------------- 30035 30036 Currently, there are two Blackfin-specific built-in functions. These 30037 are used for generating `CSYNC' and `SSYNC' machine insns without using 30038 inline assembly; by using these built-in functions the compiler can 30039 automatically add workarounds for hardware errata involving these 30040 instructions. These functions are named as follows: 30041 30042 void __builtin_bfin_csync (void) 30043 void __builtin_bfin_ssync (void) 30044 30045 30046 File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 30047 30048 5.50.5 FR-V Built-in Functions 30049 ------------------------------ 30050 30051 GCC provides many FR-V-specific built-in functions. In general, these 30052 functions are intended to be compatible with those described by `FR-V 30053 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 30054 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of 30055 which pass 128-bit values by pointer rather than by value. 30056 30057 Most of the functions are named after specific FR-V instructions. 30058 Such functions are said to be "directly mapped" and are summarized here 30059 in tabular form. 30060 30061 * Menu: 30062 30063 * Argument Types:: 30064 * Directly-mapped Integer Functions:: 30065 * Directly-mapped Media Functions:: 30066 * Raw read/write Functions:: 30067 * Other Built-in Functions:: 30068 30069 30070 File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 30071 30072 5.50.5.1 Argument Types 30073 ....................... 30074 30075 The arguments to the built-in functions can be divided into three 30076 groups: register numbers, compile-time constants and run-time values. 30077 In order to make this classification clear at a glance, the arguments 30078 and return values are given the following pseudo types: 30079 30080 Pseudo type Real C type Constant? Description 30081 `uh' `unsigned short' No an unsigned halfword 30082 `uw1' `unsigned int' No an unsigned word 30083 `sw1' `int' No a signed word 30084 `uw2' `unsigned long long' No an unsigned doubleword 30085 `sw2' `long long' No a signed doubleword 30086 `const' `int' Yes an integer constant 30087 `acc' `int' Yes an ACC register number 30088 `iacc' `int' Yes an IACC register number 30089 30090 These pseudo types are not defined by GCC, they are simply a notational 30091 convenience used in this manual. 30092 30093 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 30094 run time. They correspond to register operands in the underlying FR-V 30095 instructions. 30096 30097 `const' arguments represent immediate operands in the underlying FR-V 30098 instructions. They must be compile-time constants. 30099 30100 `acc' arguments are evaluated at compile time and specify the number 30101 of an accumulator register. For example, an `acc' argument of 2 will 30102 select the ACC2 register. 30103 30104 `iacc' arguments are similar to `acc' arguments but specify the number 30105 of an IACC register. See *note Other Built-in Functions:: for more 30106 details. 30107 30108 30109 File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 30110 30111 5.50.5.2 Directly-mapped Integer Functions 30112 .......................................... 30113 30114 The functions listed below map directly to FR-V I-type instructions. 30115 30116 Function prototype Example usage Assembly output 30117 `sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 30118 `sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 30119 `sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 30120 `sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 30121 `void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 30122 `void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 30123 `void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 30124 `sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 30125 `sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 30126 `uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 30127 30128 30129 File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 30130 30131 5.50.5.3 Directly-mapped Media Functions 30132 ........................................ 30133 30134 The functions listed below map directly to FR-V M-type instructions. 30135 30136 Function prototype Example usage Assembly output 30137 `uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 30138 `void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 30139 `sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 30140 `uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 30141 `uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 30142 `void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 30143 `uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 30144 `uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 30145 `void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 30146 `void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 30147 `void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 30148 `uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 30149 `uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 30150 `uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 30151 `uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 30152 `void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 30153 `void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 30154 `void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 30155 `void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 30156 `uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 30157 `uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 30158 `void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 30159 `void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 30160 `uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 30161 `uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 30162 `uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 30163 `void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 30164 `void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 30165 `uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 30166 `uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 30167 `uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 30168 `sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 30169 `uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 30170 `sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 30171 `uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 30172 `sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 30173 `uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 30174 `void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 30175 `void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 30176 `void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 30177 `void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 30178 `void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 30179 `void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 30180 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 30181 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 30182 `uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 30183 `uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 30184 `uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 30185 `sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 30186 `uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 30187 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 30188 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 30189 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 30190 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 30191 `sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 30192 `sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 30193 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 30194 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 30195 `void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 30196 sw2)' 30197 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 30198 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 30199 `void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 30200 sw2)' 30201 `void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 30202 uw2)' 30203 `sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 30204 `uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 30205 `sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 30206 `sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 30207 `uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 30208 `void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 30209 sw2)' 30210 `void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 30211 sw2)' 30212 `uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 30213 `uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 30214 `uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 30215 `uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 30216 `sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 30217 `uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 30218 `uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 30219 `sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 30220 `uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 30221 `void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 30222 `sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 30223 `uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 30224 `void __MTRAP (void)' `__MTRAP ()' `MTRAP' 30225 `uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 30226 `uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 30227 `void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 30228 `void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 30229 `uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 30230 30231 30232 File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 30233 30234 5.50.5.4 Raw read/write Functions 30235 ................................. 30236 30237 This sections describes built-in functions related to read and write 30238 instructions to access memory. These functions generate `membar' 30239 instructions to flush the I/O load and stores where appropriate, as 30240 described in Fujitsu's manual described above. 30241 30242 `unsigned char __builtin_read8 (void *DATA)' 30243 30244 `unsigned short __builtin_read16 (void *DATA)' 30245 30246 `unsigned long __builtin_read32 (void *DATA)' 30247 30248 `unsigned long long __builtin_read64 (void *DATA)' 30249 30250 `void __builtin_write8 (void *DATA, unsigned char DATUM)' 30251 30252 `void __builtin_write16 (void *DATA, unsigned short DATUM)' 30253 30254 `void __builtin_write32 (void *DATA, unsigned long DATUM)' 30255 30256 `void __builtin_write64 (void *DATA, unsigned long long DATUM)' 30257 30258 30259 File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 30260 30261 5.50.5.5 Other Built-in Functions 30262 ................................. 30263 30264 This section describes built-in functions that are not named after a 30265 specific FR-V instruction. 30266 30267 `sw2 __IACCreadll (iacc REG)' 30268 Return the full 64-bit value of IACC0. The REG argument is 30269 reserved for future expansion and must be 0. 30270 30271 `sw1 __IACCreadl (iacc REG)' 30272 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 30273 Other values of REG are rejected as invalid. 30274 30275 `void __IACCsetll (iacc REG, sw2 X)' 30276 Set the full 64-bit value of IACC0 to X. The REG argument is 30277 reserved for future expansion and must be 0. 30278 30279 `void __IACCsetl (iacc REG, sw1 X)' 30280 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 30281 values of REG are rejected as invalid. 30282 30283 `void __data_prefetch0 (const void *X)' 30284 Use the `dcpl' instruction to load the contents of address X into 30285 the data cache. 30286 30287 `void __data_prefetch (const void *X)' 30288 Use the `nldub' instruction to load the contents of address X into 30289 the data cache. The instruction will be issued in slot I1. 30290 30291 30292 File: gcc.info, Node: X86 Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: FR-V Built-in Functions, Up: Target Builtins 30293 30294 5.50.6 X86 Built-in Functions 30295 ----------------------------- 30296 30297 These built-in functions are available for the i386 and x86-64 family 30298 of computers, depending on the command-line switches used. 30299 30300 Note that, if you specify command-line switches such as `-msse', the 30301 compiler could use the extended instruction sets even if the built-ins 30302 are not used explicitly in the program. For this reason, applications 30303 which perform runtime CPU detection must compile separate files for each 30304 supported architecture, using the appropriate flags. In particular, 30305 the file containing the CPU detection code should be compiled without 30306 these options. 30307 30308 The following machine modes are available for use with MMX built-in 30309 functions (*note Vector Extensions::): `V2SI' for a vector of two 30310 32-bit integers, `V4HI' for a vector of four 16-bit integers, and 30311 `V8QI' for a vector of eight 8-bit integers. Some of the built-in 30312 functions operate on MMX registers as a whole 64-bit entity, these use 30313 `V1DI' as their mode. 30314 30315 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector 30316 of two 32-bit floating point values. 30317 30318 If SSE extensions are enabled, `V4SF' is used for a vector of four 30319 32-bit floating point values. Some instructions use a vector of four 30320 32-bit integers, these use `V4SI'. Finally, some instructions operate 30321 on an entire vector register, interpreting it as a 128-bit integer, 30322 these use mode `TI'. 30323 30324 In 64-bit mode, the x86-64 family of processors uses additional 30325 built-in functions for efficient use of `TF' (`__float128') 128-bit 30326 floating point and `TC' 128-bit complex floating point values. 30327 30328 The following floating point built-in functions are available in 64-bit 30329 mode. All of them implement the function that is part of the name. 30330 30331 __float128 __builtin_fabsq (__float128) 30332 __float128 __builtin_copysignq (__float128, __float128) 30333 30334 The following floating point built-in functions are made available in 30335 the 64-bit mode. 30336 30337 `__float128 __builtin_infq (void)' 30338 Similar to `__builtin_inf', except the return type is `__float128'. 30339 30340 The following built-in functions are made available by `-mmmx'. All 30341 of them generate the machine instruction that is part of the name. 30342 30343 v8qi __builtin_ia32_paddb (v8qi, v8qi) 30344 v4hi __builtin_ia32_paddw (v4hi, v4hi) 30345 v2si __builtin_ia32_paddd (v2si, v2si) 30346 v8qi __builtin_ia32_psubb (v8qi, v8qi) 30347 v4hi __builtin_ia32_psubw (v4hi, v4hi) 30348 v2si __builtin_ia32_psubd (v2si, v2si) 30349 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 30350 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 30351 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 30352 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 30353 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 30354 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 30355 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 30356 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 30357 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 30358 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 30359 di __builtin_ia32_pand (di, di) 30360 di __builtin_ia32_pandn (di,di) 30361 di __builtin_ia32_por (di, di) 30362 di __builtin_ia32_pxor (di, di) 30363 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 30364 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 30365 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 30366 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 30367 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 30368 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 30369 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 30370 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 30371 v2si __builtin_ia32_punpckhdq (v2si, v2si) 30372 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 30373 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 30374 v2si __builtin_ia32_punpckldq (v2si, v2si) 30375 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 30376 v4hi __builtin_ia32_packssdw (v2si, v2si) 30377 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 30378 30379 v4hi __builtin_ia32_psllw (v4hi, v4hi) 30380 v2si __builtin_ia32_pslld (v2si, v2si) 30381 v1di __builtin_ia32_psllq (v1di, v1di) 30382 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 30383 v2si __builtin_ia32_psrld (v2si, v2si) 30384 v1di __builtin_ia32_psrlq (v1di, v1di) 30385 v4hi __builtin_ia32_psraw (v4hi, v4hi) 30386 v2si __builtin_ia32_psrad (v2si, v2si) 30387 v4hi __builtin_ia32_psllwi (v4hi, int) 30388 v2si __builtin_ia32_pslldi (v2si, int) 30389 v1di __builtin_ia32_psllqi (v1di, int) 30390 v4hi __builtin_ia32_psrlwi (v4hi, int) 30391 v2si __builtin_ia32_psrldi (v2si, int) 30392 v1di __builtin_ia32_psrlqi (v1di, int) 30393 v4hi __builtin_ia32_psrawi (v4hi, int) 30394 v2si __builtin_ia32_psradi (v2si, int) 30395 30396 The following built-in functions are made available either with 30397 `-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 30398 of them generate the machine instruction that is part of the name. 30399 30400 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 30401 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 30402 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 30403 v1di __builtin_ia32_psadbw (v8qi, v8qi) 30404 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 30405 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 30406 v8qi __builtin_ia32_pminub (v8qi, v8qi) 30407 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 30408 int __builtin_ia32_pextrw (v4hi, int) 30409 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 30410 int __builtin_ia32_pmovmskb (v8qi) 30411 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 30412 void __builtin_ia32_movntq (di *, di) 30413 void __builtin_ia32_sfence (void) 30414 30415 The following built-in functions are available when `-msse' is used. 30416 All of them generate the machine instruction that is part of the name. 30417 30418 int __builtin_ia32_comieq (v4sf, v4sf) 30419 int __builtin_ia32_comineq (v4sf, v4sf) 30420 int __builtin_ia32_comilt (v4sf, v4sf) 30421 int __builtin_ia32_comile (v4sf, v4sf) 30422 int __builtin_ia32_comigt (v4sf, v4sf) 30423 int __builtin_ia32_comige (v4sf, v4sf) 30424 int __builtin_ia32_ucomieq (v4sf, v4sf) 30425 int __builtin_ia32_ucomineq (v4sf, v4sf) 30426 int __builtin_ia32_ucomilt (v4sf, v4sf) 30427 int __builtin_ia32_ucomile (v4sf, v4sf) 30428 int __builtin_ia32_ucomigt (v4sf, v4sf) 30429 int __builtin_ia32_ucomige (v4sf, v4sf) 30430 v4sf __builtin_ia32_addps (v4sf, v4sf) 30431 v4sf __builtin_ia32_subps (v4sf, v4sf) 30432 v4sf __builtin_ia32_mulps (v4sf, v4sf) 30433 v4sf __builtin_ia32_divps (v4sf, v4sf) 30434 v4sf __builtin_ia32_addss (v4sf, v4sf) 30435 v4sf __builtin_ia32_subss (v4sf, v4sf) 30436 v4sf __builtin_ia32_mulss (v4sf, v4sf) 30437 v4sf __builtin_ia32_divss (v4sf, v4sf) 30438 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 30439 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 30440 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 30441 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 30442 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 30443 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 30444 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 30445 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 30446 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 30447 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 30448 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 30449 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 30450 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 30451 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 30452 v4si __builtin_ia32_cmpless (v4sf, v4sf) 30453 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 30454 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 30455 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 30456 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 30457 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 30458 v4sf __builtin_ia32_maxps (v4sf, v4sf) 30459 v4sf __builtin_ia32_maxss (v4sf, v4sf) 30460 v4sf __builtin_ia32_minps (v4sf, v4sf) 30461 v4sf __builtin_ia32_minss (v4sf, v4sf) 30462 v4sf __builtin_ia32_andps (v4sf, v4sf) 30463 v4sf __builtin_ia32_andnps (v4sf, v4sf) 30464 v4sf __builtin_ia32_orps (v4sf, v4sf) 30465 v4sf __builtin_ia32_xorps (v4sf, v4sf) 30466 v4sf __builtin_ia32_movss (v4sf, v4sf) 30467 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 30468 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 30469 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 30470 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 30471 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 30472 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 30473 v2si __builtin_ia32_cvtps2pi (v4sf) 30474 int __builtin_ia32_cvtss2si (v4sf) 30475 v2si __builtin_ia32_cvttps2pi (v4sf) 30476 int __builtin_ia32_cvttss2si (v4sf) 30477 v4sf __builtin_ia32_rcpps (v4sf) 30478 v4sf __builtin_ia32_rsqrtps (v4sf) 30479 v4sf __builtin_ia32_sqrtps (v4sf) 30480 v4sf __builtin_ia32_rcpss (v4sf) 30481 v4sf __builtin_ia32_rsqrtss (v4sf) 30482 v4sf __builtin_ia32_sqrtss (v4sf) 30483 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 30484 void __builtin_ia32_movntps (float *, v4sf) 30485 int __builtin_ia32_movmskps (v4sf) 30486 30487 The following built-in functions are available when `-msse' is used. 30488 30489 `v4sf __builtin_ia32_loadaps (float *)' 30490 Generates the `movaps' machine instruction as a load from memory. 30491 30492 `void __builtin_ia32_storeaps (float *, v4sf)' 30493 Generates the `movaps' machine instruction as a store to memory. 30494 30495 `v4sf __builtin_ia32_loadups (float *)' 30496 Generates the `movups' machine instruction as a load from memory. 30497 30498 `void __builtin_ia32_storeups (float *, v4sf)' 30499 Generates the `movups' machine instruction as a store to memory. 30500 30501 `v4sf __builtin_ia32_loadsss (float *)' 30502 Generates the `movss' machine instruction as a load from memory. 30503 30504 `void __builtin_ia32_storess (float *, v4sf)' 30505 Generates the `movss' machine instruction as a store to memory. 30506 30507 `v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 30508 Generates the `movhps' machine instruction as a load from memory. 30509 30510 `v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 30511 Generates the `movlps' machine instruction as a load from memory 30512 30513 `void __builtin_ia32_storehps (v2sf *, v4sf)' 30514 Generates the `movhps' machine instruction as a store to memory. 30515 30516 `void __builtin_ia32_storelps (v2sf *, v4sf)' 30517 Generates the `movlps' machine instruction as a store to memory. 30518 30519 The following built-in functions are available when `-msse2' is used. 30520 All of them generate the machine instruction that is part of the name. 30521 30522 int __builtin_ia32_comisdeq (v2df, v2df) 30523 int __builtin_ia32_comisdlt (v2df, v2df) 30524 int __builtin_ia32_comisdle (v2df, v2df) 30525 int __builtin_ia32_comisdgt (v2df, v2df) 30526 int __builtin_ia32_comisdge (v2df, v2df) 30527 int __builtin_ia32_comisdneq (v2df, v2df) 30528 int __builtin_ia32_ucomisdeq (v2df, v2df) 30529 int __builtin_ia32_ucomisdlt (v2df, v2df) 30530 int __builtin_ia32_ucomisdle (v2df, v2df) 30531 int __builtin_ia32_ucomisdgt (v2df, v2df) 30532 int __builtin_ia32_ucomisdge (v2df, v2df) 30533 int __builtin_ia32_ucomisdneq (v2df, v2df) 30534 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 30535 v2df __builtin_ia32_cmpltpd (v2df, v2df) 30536 v2df __builtin_ia32_cmplepd (v2df, v2df) 30537 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 30538 v2df __builtin_ia32_cmpgepd (v2df, v2df) 30539 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 30540 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 30541 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 30542 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 30543 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 30544 v2df __builtin_ia32_cmpngepd (v2df, v2df) 30545 v2df __builtin_ia32_cmpordpd (v2df, v2df) 30546 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 30547 v2df __builtin_ia32_cmpltsd (v2df, v2df) 30548 v2df __builtin_ia32_cmplesd (v2df, v2df) 30549 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 30550 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 30551 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 30552 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 30553 v2df __builtin_ia32_cmpordsd (v2df, v2df) 30554 v2di __builtin_ia32_paddq (v2di, v2di) 30555 v2di __builtin_ia32_psubq (v2di, v2di) 30556 v2df __builtin_ia32_addpd (v2df, v2df) 30557 v2df __builtin_ia32_subpd (v2df, v2df) 30558 v2df __builtin_ia32_mulpd (v2df, v2df) 30559 v2df __builtin_ia32_divpd (v2df, v2df) 30560 v2df __builtin_ia32_addsd (v2df, v2df) 30561 v2df __builtin_ia32_subsd (v2df, v2df) 30562 v2df __builtin_ia32_mulsd (v2df, v2df) 30563 v2df __builtin_ia32_divsd (v2df, v2df) 30564 v2df __builtin_ia32_minpd (v2df, v2df) 30565 v2df __builtin_ia32_maxpd (v2df, v2df) 30566 v2df __builtin_ia32_minsd (v2df, v2df) 30567 v2df __builtin_ia32_maxsd (v2df, v2df) 30568 v2df __builtin_ia32_andpd (v2df, v2df) 30569 v2df __builtin_ia32_andnpd (v2df, v2df) 30570 v2df __builtin_ia32_orpd (v2df, v2df) 30571 v2df __builtin_ia32_xorpd (v2df, v2df) 30572 v2df __builtin_ia32_movsd (v2df, v2df) 30573 v2df __builtin_ia32_unpckhpd (v2df, v2df) 30574 v2df __builtin_ia32_unpcklpd (v2df, v2df) 30575 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 30576 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 30577 v4si __builtin_ia32_paddd128 (v4si, v4si) 30578 v2di __builtin_ia32_paddq128 (v2di, v2di) 30579 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 30580 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 30581 v4si __builtin_ia32_psubd128 (v4si, v4si) 30582 v2di __builtin_ia32_psubq128 (v2di, v2di) 30583 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 30584 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 30585 v2di __builtin_ia32_pand128 (v2di, v2di) 30586 v2di __builtin_ia32_pandn128 (v2di, v2di) 30587 v2di __builtin_ia32_por128 (v2di, v2di) 30588 v2di __builtin_ia32_pxor128 (v2di, v2di) 30589 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 30590 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 30591 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 30592 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 30593 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 30594 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 30595 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 30596 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 30597 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 30598 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 30599 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 30600 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 30601 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 30602 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 30603 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 30604 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 30605 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 30606 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 30607 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 30608 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 30609 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 30610 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 30611 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 30612 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 30613 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 30614 v2df __builtin_ia32_loadupd (double *) 30615 void __builtin_ia32_storeupd (double *, v2df) 30616 v2df __builtin_ia32_loadhpd (v2df, double const *) 30617 v2df __builtin_ia32_loadlpd (v2df, double const *) 30618 int __builtin_ia32_movmskpd (v2df) 30619 int __builtin_ia32_pmovmskb128 (v16qi) 30620 void __builtin_ia32_movnti (int *, int) 30621 void __builtin_ia32_movntpd (double *, v2df) 30622 void __builtin_ia32_movntdq (v2df *, v2df) 30623 v4si __builtin_ia32_pshufd (v4si, int) 30624 v8hi __builtin_ia32_pshuflw (v8hi, int) 30625 v8hi __builtin_ia32_pshufhw (v8hi, int) 30626 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 30627 v2df __builtin_ia32_sqrtpd (v2df) 30628 v2df __builtin_ia32_sqrtsd (v2df) 30629 v2df __builtin_ia32_shufpd (v2df, v2df, int) 30630 v2df __builtin_ia32_cvtdq2pd (v4si) 30631 v4sf __builtin_ia32_cvtdq2ps (v4si) 30632 v4si __builtin_ia32_cvtpd2dq (v2df) 30633 v2si __builtin_ia32_cvtpd2pi (v2df) 30634 v4sf __builtin_ia32_cvtpd2ps (v2df) 30635 v4si __builtin_ia32_cvttpd2dq (v2df) 30636 v2si __builtin_ia32_cvttpd2pi (v2df) 30637 v2df __builtin_ia32_cvtpi2pd (v2si) 30638 int __builtin_ia32_cvtsd2si (v2df) 30639 int __builtin_ia32_cvttsd2si (v2df) 30640 long long __builtin_ia32_cvtsd2si64 (v2df) 30641 long long __builtin_ia32_cvttsd2si64 (v2df) 30642 v4si __builtin_ia32_cvtps2dq (v4sf) 30643 v2df __builtin_ia32_cvtps2pd (v4sf) 30644 v4si __builtin_ia32_cvttps2dq (v4sf) 30645 v2df __builtin_ia32_cvtsi2sd (v2df, int) 30646 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 30647 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 30648 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 30649 void __builtin_ia32_clflush (const void *) 30650 void __builtin_ia32_lfence (void) 30651 void __builtin_ia32_mfence (void) 30652 v16qi __builtin_ia32_loaddqu (const char *) 30653 void __builtin_ia32_storedqu (char *, v16qi) 30654 v1di __builtin_ia32_pmuludq (v2si, v2si) 30655 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 30656 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 30657 v4si __builtin_ia32_pslld128 (v4si, v4si) 30658 v2di __builtin_ia32_psllq128 (v2di, v2di) 30659 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 30660 v4si __builtin_ia32_psrld128 (v4si, v4si) 30661 v2di __builtin_ia32_psrlq128 (v2di, v2di) 30662 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 30663 v4si __builtin_ia32_psrad128 (v4si, v4si) 30664 v2di __builtin_ia32_pslldqi128 (v2di, int) 30665 v8hi __builtin_ia32_psllwi128 (v8hi, int) 30666 v4si __builtin_ia32_pslldi128 (v4si, int) 30667 v2di __builtin_ia32_psllqi128 (v2di, int) 30668 v2di __builtin_ia32_psrldqi128 (v2di, int) 30669 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 30670 v4si __builtin_ia32_psrldi128 (v4si, int) 30671 v2di __builtin_ia32_psrlqi128 (v2di, int) 30672 v8hi __builtin_ia32_psrawi128 (v8hi, int) 30673 v4si __builtin_ia32_psradi128 (v4si, int) 30674 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 30675 v2di __builtin_ia32_movq128 (v2di) 30676 30677 The following built-in functions are available when `-msse3' is used. 30678 All of them generate the machine instruction that is part of the name. 30679 30680 v2df __builtin_ia32_addsubpd (v2df, v2df) 30681 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 30682 v2df __builtin_ia32_haddpd (v2df, v2df) 30683 v4sf __builtin_ia32_haddps (v4sf, v4sf) 30684 v2df __builtin_ia32_hsubpd (v2df, v2df) 30685 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 30686 v16qi __builtin_ia32_lddqu (char const *) 30687 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 30688 v2df __builtin_ia32_movddup (v2df) 30689 v4sf __builtin_ia32_movshdup (v4sf) 30690 v4sf __builtin_ia32_movsldup (v4sf) 30691 void __builtin_ia32_mwait (unsigned int, unsigned int) 30692 30693 The following built-in functions are available when `-msse3' is used. 30694 30695 `v2df __builtin_ia32_loadddup (double const *)' 30696 Generates the `movddup' machine instruction as a load from memory. 30697 30698 The following built-in functions are available when `-mssse3' is used. 30699 All of them generate the machine instruction that is part of the name 30700 with MMX registers. 30701 30702 v2si __builtin_ia32_phaddd (v2si, v2si) 30703 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 30704 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 30705 v2si __builtin_ia32_phsubd (v2si, v2si) 30706 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 30707 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 30708 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 30709 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 30710 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 30711 v8qi __builtin_ia32_psignb (v8qi, v8qi) 30712 v2si __builtin_ia32_psignd (v2si, v2si) 30713 v4hi __builtin_ia32_psignw (v4hi, v4hi) 30714 v1di __builtin_ia32_palignr (v1di, v1di, int) 30715 v8qi __builtin_ia32_pabsb (v8qi) 30716 v2si __builtin_ia32_pabsd (v2si) 30717 v4hi __builtin_ia32_pabsw (v4hi) 30718 30719 The following built-in functions are available when `-mssse3' is used. 30720 All of them generate the machine instruction that is part of the name 30721 with SSE registers. 30722 30723 v4si __builtin_ia32_phaddd128 (v4si, v4si) 30724 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 30725 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 30726 v4si __builtin_ia32_phsubd128 (v4si, v4si) 30727 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 30728 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 30729 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 30730 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 30731 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 30732 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 30733 v4si __builtin_ia32_psignd128 (v4si, v4si) 30734 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 30735 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 30736 v16qi __builtin_ia32_pabsb128 (v16qi) 30737 v4si __builtin_ia32_pabsd128 (v4si) 30738 v8hi __builtin_ia32_pabsw128 (v8hi) 30739 30740 The following built-in functions are available when `-msse4.1' is 30741 used. All of them generate the machine instruction that is part of the 30742 name. 30743 30744 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 30745 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 30746 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 30747 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 30748 v2df __builtin_ia32_dppd (v2df, v2df, const int) 30749 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 30750 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 30751 v2di __builtin_ia32_movntdqa (v2di *); 30752 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 30753 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 30754 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 30755 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 30756 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 30757 v8hi __builtin_ia32_phminposuw128 (v8hi) 30758 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 30759 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 30760 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 30761 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 30762 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 30763 v4si __builtin_ia32_pminsd128 (v4si, v4si) 30764 v4si __builtin_ia32_pminud128 (v4si, v4si) 30765 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 30766 v4si __builtin_ia32_pmovsxbd128 (v16qi) 30767 v2di __builtin_ia32_pmovsxbq128 (v16qi) 30768 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 30769 v2di __builtin_ia32_pmovsxdq128 (v4si) 30770 v4si __builtin_ia32_pmovsxwd128 (v8hi) 30771 v2di __builtin_ia32_pmovsxwq128 (v8hi) 30772 v4si __builtin_ia32_pmovzxbd128 (v16qi) 30773 v2di __builtin_ia32_pmovzxbq128 (v16qi) 30774 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 30775 v2di __builtin_ia32_pmovzxdq128 (v4si) 30776 v4si __builtin_ia32_pmovzxwd128 (v8hi) 30777 v2di __builtin_ia32_pmovzxwq128 (v8hi) 30778 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 30779 v4si __builtin_ia32_pmulld128 (v4si, v4si) 30780 int __builtin_ia32_ptestc128 (v2di, v2di) 30781 int __builtin_ia32_ptestnzc128 (v2di, v2di) 30782 int __builtin_ia32_ptestz128 (v2di, v2di) 30783 v2df __builtin_ia32_roundpd (v2df, const int) 30784 v4sf __builtin_ia32_roundps (v4sf, const int) 30785 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 30786 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 30787 30788 The following built-in functions are available when `-msse4.1' is used. 30789 30790 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 30791 Generates the `insertps' machine instruction. 30792 30793 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 30794 Generates the `pextrb' machine instruction. 30795 30796 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 30797 Generates the `pinsrb' machine instruction. 30798 30799 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 30800 Generates the `pinsrd' machine instruction. 30801 30802 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 30803 Generates the `pinsrq' machine instruction in 64bit mode. 30804 30805 The following built-in functions are changed to generate new SSE4.1 30806 instructions when `-msse4.1' is used. 30807 30808 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 30809 Generates the `extractps' machine instruction. 30810 30811 `int __builtin_ia32_vec_ext_v4si (v4si, const int)' 30812 Generates the `pextrd' machine instruction. 30813 30814 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 30815 Generates the `pextrq' machine instruction in 64bit mode. 30816 30817 The following built-in functions are available when `-msse4.2' is 30818 used. All of them generate the machine instruction that is part of the 30819 name. 30820 30821 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 30822 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 30823 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 30824 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 30825 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 30826 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 30827 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 30828 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 30829 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 30830 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 30831 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 30832 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 30833 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 30834 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 30835 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 30836 30837 The following built-in functions are available when `-msse4.2' is used. 30838 30839 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 30840 Generates the `crc32b' machine instruction. 30841 30842 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 30843 Generates the `crc32w' machine instruction. 30844 30845 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 30846 Generates the `crc32l' machine instruction. 30847 30848 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 30849 30850 The following built-in functions are changed to generate new SSE4.2 30851 instructions when `-msse4.2' is used. 30852 30853 `int __builtin_popcount (unsigned int)' 30854 Generates the `popcntl' machine instruction. 30855 30856 `int __builtin_popcountl (unsigned long)' 30857 Generates the `popcntl' or `popcntq' machine instruction, 30858 depending on the size of `unsigned long'. 30859 30860 `int __builtin_popcountll (unsigned long long)' 30861 Generates the `popcntq' machine instruction. 30862 30863 The following built-in functions are available when `-mavx' is used. 30864 All of them generate the machine instruction that is part of the name. 30865 30866 v4df __builtin_ia32_addpd256 (v4df,v4df) 30867 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 30868 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 30869 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 30870 v4df __builtin_ia32_andnpd256 (v4df,v4df) 30871 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 30872 v4df __builtin_ia32_andpd256 (v4df,v4df) 30873 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 30874 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 30875 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 30876 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 30877 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 30878 v2df __builtin_ia32_cmppd (v2df,v2df,int) 30879 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 30880 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 30881 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 30882 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 30883 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 30884 v4df __builtin_ia32_cvtdq2pd256 (v4si) 30885 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 30886 v4si __builtin_ia32_cvtpd2dq256 (v4df) 30887 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 30888 v8si __builtin_ia32_cvtps2dq256 (v8sf) 30889 v4df __builtin_ia32_cvtps2pd256 (v4sf) 30890 v4si __builtin_ia32_cvttpd2dq256 (v4df) 30891 v8si __builtin_ia32_cvttps2dq256 (v8sf) 30892 v4df __builtin_ia32_divpd256 (v4df,v4df) 30893 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 30894 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 30895 v4df __builtin_ia32_haddpd256 (v4df,v4df) 30896 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 30897 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 30898 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 30899 v32qi __builtin_ia32_lddqu256 (pcchar) 30900 v32qi __builtin_ia32_loaddqu256 (pcchar) 30901 v4df __builtin_ia32_loadupd256 (pcdouble) 30902 v8sf __builtin_ia32_loadups256 (pcfloat) 30903 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 30904 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 30905 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 30906 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 30907 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 30908 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 30909 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 30910 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 30911 v4df __builtin_ia32_maxpd256 (v4df,v4df) 30912 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 30913 v4df __builtin_ia32_minpd256 (v4df,v4df) 30914 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 30915 v4df __builtin_ia32_movddup256 (v4df) 30916 int __builtin_ia32_movmskpd256 (v4df) 30917 int __builtin_ia32_movmskps256 (v8sf) 30918 v8sf __builtin_ia32_movshdup256 (v8sf) 30919 v8sf __builtin_ia32_movsldup256 (v8sf) 30920 v4df __builtin_ia32_mulpd256 (v4df,v4df) 30921 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 30922 v4df __builtin_ia32_orpd256 (v4df,v4df) 30923 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 30924 v2df __builtin_ia32_pd_pd256 (v4df) 30925 v4df __builtin_ia32_pd256_pd (v2df) 30926 v4sf __builtin_ia32_ps_ps256 (v8sf) 30927 v8sf __builtin_ia32_ps256_ps (v4sf) 30928 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 30929 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 30930 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 30931 v8sf __builtin_ia32_rcpps256 (v8sf) 30932 v4df __builtin_ia32_roundpd256 (v4df,int) 30933 v8sf __builtin_ia32_roundps256 (v8sf,int) 30934 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 30935 v8sf __builtin_ia32_rsqrtps256 (v8sf) 30936 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 30937 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 30938 v4si __builtin_ia32_si_si256 (v8si) 30939 v8si __builtin_ia32_si256_si (v4si) 30940 v4df __builtin_ia32_sqrtpd256 (v4df) 30941 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 30942 v8sf __builtin_ia32_sqrtps256 (v8sf) 30943 void __builtin_ia32_storedqu256 (pchar,v32qi) 30944 void __builtin_ia32_storeupd256 (pdouble,v4df) 30945 void __builtin_ia32_storeups256 (pfloat,v8sf) 30946 v4df __builtin_ia32_subpd256 (v4df,v4df) 30947 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 30948 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 30949 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 30950 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 30951 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 30952 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 30953 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 30954 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 30955 v4sf __builtin_ia32_vbroadcastss (pcfloat) 30956 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 30957 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 30958 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 30959 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 30960 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 30961 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 30962 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 30963 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 30964 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 30965 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 30966 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 30967 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 30968 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 30969 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 30970 v2df __builtin_ia32_vpermilpd (v2df,int) 30971 v4df __builtin_ia32_vpermilpd256 (v4df,int) 30972 v4sf __builtin_ia32_vpermilps (v4sf,int) 30973 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 30974 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 30975 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 30976 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 30977 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 30978 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 30979 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 30980 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 30981 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 30982 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 30983 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 30984 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 30985 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 30986 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 30987 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 30988 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 30989 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 30990 void __builtin_ia32_vzeroall (void) 30991 void __builtin_ia32_vzeroupper (void) 30992 v4df __builtin_ia32_xorpd256 (v4df,v4df) 30993 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 30994 30995 The following built-in functions are available when `-maes' is used. 30996 All of them generate the machine instruction that is part of the name. 30997 30998 v2di __builtin_ia32_aesenc128 (v2di, v2di) 30999 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 31000 v2di __builtin_ia32_aesdec128 (v2di, v2di) 31001 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 31002 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 31003 v2di __builtin_ia32_aesimc128 (v2di) 31004 31005 The following built-in function is available when `-mpclmul' is used. 31006 31007 `v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 31008 Generates the `pclmulqdq' machine instruction. 31009 31010 The following built-in functions are available when `-msse4a' is used. 31011 All of them generate the machine instruction that is part of the name. 31012 31013 void __builtin_ia32_movntsd (double *, v2df) 31014 void __builtin_ia32_movntss (float *, v4sf) 31015 v2di __builtin_ia32_extrq (v2di, v16qi) 31016 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 31017 v2di __builtin_ia32_insertq (v2di, v2di) 31018 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 31019 31020 The following built-in functions are available when `-msse5' is used. 31021 All of them generate the machine instruction that is part of the name 31022 with MMX registers. 31023 31024 v2df __builtin_ia32_comeqpd (v2df, v2df) 31025 v2df __builtin_ia32_comeqps (v2df, v2df) 31026 v4sf __builtin_ia32_comeqsd (v4sf, v4sf) 31027 v4sf __builtin_ia32_comeqss (v4sf, v4sf) 31028 v2df __builtin_ia32_comfalsepd (v2df, v2df) 31029 v2df __builtin_ia32_comfalseps (v2df, v2df) 31030 v4sf __builtin_ia32_comfalsesd (v4sf, v4sf) 31031 v4sf __builtin_ia32_comfalsess (v4sf, v4sf) 31032 v2df __builtin_ia32_comgepd (v2df, v2df) 31033 v2df __builtin_ia32_comgeps (v2df, v2df) 31034 v4sf __builtin_ia32_comgesd (v4sf, v4sf) 31035 v4sf __builtin_ia32_comgess (v4sf, v4sf) 31036 v2df __builtin_ia32_comgtpd (v2df, v2df) 31037 v2df __builtin_ia32_comgtps (v2df, v2df) 31038 v4sf __builtin_ia32_comgtsd (v4sf, v4sf) 31039 v4sf __builtin_ia32_comgtss (v4sf, v4sf) 31040 v2df __builtin_ia32_comlepd (v2df, v2df) 31041 v2df __builtin_ia32_comleps (v2df, v2df) 31042 v4sf __builtin_ia32_comlesd (v4sf, v4sf) 31043 v4sf __builtin_ia32_comless (v4sf, v4sf) 31044 v2df __builtin_ia32_comltpd (v2df, v2df) 31045 v2df __builtin_ia32_comltps (v2df, v2df) 31046 v4sf __builtin_ia32_comltsd (v4sf, v4sf) 31047 v4sf __builtin_ia32_comltss (v4sf, v4sf) 31048 v2df __builtin_ia32_comnepd (v2df, v2df) 31049 v2df __builtin_ia32_comneps (v2df, v2df) 31050 v4sf __builtin_ia32_comnesd (v4sf, v4sf) 31051 v4sf __builtin_ia32_comness (v4sf, v4sf) 31052 v2df __builtin_ia32_comordpd (v2df, v2df) 31053 v2df __builtin_ia32_comordps (v2df, v2df) 31054 v4sf __builtin_ia32_comordsd (v4sf, v4sf) 31055 v4sf __builtin_ia32_comordss (v4sf, v4sf) 31056 v2df __builtin_ia32_comtruepd (v2df, v2df) 31057 v2df __builtin_ia32_comtrueps (v2df, v2df) 31058 v4sf __builtin_ia32_comtruesd (v4sf, v4sf) 31059 v4sf __builtin_ia32_comtruess (v4sf, v4sf) 31060 v2df __builtin_ia32_comueqpd (v2df, v2df) 31061 v2df __builtin_ia32_comueqps (v2df, v2df) 31062 v4sf __builtin_ia32_comueqsd (v4sf, v4sf) 31063 v4sf __builtin_ia32_comueqss (v4sf, v4sf) 31064 v2df __builtin_ia32_comugepd (v2df, v2df) 31065 v2df __builtin_ia32_comugeps (v2df, v2df) 31066 v4sf __builtin_ia32_comugesd (v4sf, v4sf) 31067 v4sf __builtin_ia32_comugess (v4sf, v4sf) 31068 v2df __builtin_ia32_comugtpd (v2df, v2df) 31069 v2df __builtin_ia32_comugtps (v2df, v2df) 31070 v4sf __builtin_ia32_comugtsd (v4sf, v4sf) 31071 v4sf __builtin_ia32_comugtss (v4sf, v4sf) 31072 v2df __builtin_ia32_comulepd (v2df, v2df) 31073 v2df __builtin_ia32_comuleps (v2df, v2df) 31074 v4sf __builtin_ia32_comulesd (v4sf, v4sf) 31075 v4sf __builtin_ia32_comuless (v4sf, v4sf) 31076 v2df __builtin_ia32_comultpd (v2df, v2df) 31077 v2df __builtin_ia32_comultps (v2df, v2df) 31078 v4sf __builtin_ia32_comultsd (v4sf, v4sf) 31079 v4sf __builtin_ia32_comultss (v4sf, v4sf) 31080 v2df __builtin_ia32_comunepd (v2df, v2df) 31081 v2df __builtin_ia32_comuneps (v2df, v2df) 31082 v4sf __builtin_ia32_comunesd (v4sf, v4sf) 31083 v4sf __builtin_ia32_comuness (v4sf, v4sf) 31084 v2df __builtin_ia32_comunordpd (v2df, v2df) 31085 v2df __builtin_ia32_comunordps (v2df, v2df) 31086 v4sf __builtin_ia32_comunordsd (v4sf, v4sf) 31087 v4sf __builtin_ia32_comunordss (v4sf, v4sf) 31088 v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df) 31089 v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf) 31090 v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df) 31091 v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf) 31092 v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df) 31093 v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf) 31094 v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df) 31095 v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf) 31096 v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df) 31097 v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf) 31098 v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df) 31099 v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf) 31100 v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df) 31101 v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf) 31102 v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df) 31103 v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf) 31104 v2df __builtin_ia32_frczpd (v2df) 31105 v4sf __builtin_ia32_frczps (v4sf) 31106 v2df __builtin_ia32_frczsd (v2df, v2df) 31107 v4sf __builtin_ia32_frczss (v4sf, v4sf) 31108 v2di __builtin_ia32_pcmov (v2di, v2di, v2di) 31109 v2di __builtin_ia32_pcmov_v2di (v2di, v2di, v2di) 31110 v4si __builtin_ia32_pcmov_v4si (v4si, v4si, v4si) 31111 v8hi __builtin_ia32_pcmov_v8hi (v8hi, v8hi, v8hi) 31112 v16qi __builtin_ia32_pcmov_v16qi (v16qi, v16qi, v16qi) 31113 v2df __builtin_ia32_pcmov_v2df (v2df, v2df, v2df) 31114 v4sf __builtin_ia32_pcmov_v4sf (v4sf, v4sf, v4sf) 31115 v16qi __builtin_ia32_pcomeqb (v16qi, v16qi) 31116 v8hi __builtin_ia32_pcomeqw (v8hi, v8hi) 31117 v4si __builtin_ia32_pcomeqd (v4si, v4si) 31118 v2di __builtin_ia32_pcomeqq (v2di, v2di) 31119 v16qi __builtin_ia32_pcomequb (v16qi, v16qi) 31120 v4si __builtin_ia32_pcomequd (v4si, v4si) 31121 v2di __builtin_ia32_pcomequq (v2di, v2di) 31122 v8hi __builtin_ia32_pcomequw (v8hi, v8hi) 31123 v8hi __builtin_ia32_pcomeqw (v8hi, v8hi) 31124 v16qi __builtin_ia32_pcomfalseb (v16qi, v16qi) 31125 v4si __builtin_ia32_pcomfalsed (v4si, v4si) 31126 v2di __builtin_ia32_pcomfalseq (v2di, v2di) 31127 v16qi __builtin_ia32_pcomfalseub (v16qi, v16qi) 31128 v4si __builtin_ia32_pcomfalseud (v4si, v4si) 31129 v2di __builtin_ia32_pcomfalseuq (v2di, v2di) 31130 v8hi __builtin_ia32_pcomfalseuw (v8hi, v8hi) 31131 v8hi __builtin_ia32_pcomfalsew (v8hi, v8hi) 31132 v16qi __builtin_ia32_pcomgeb (v16qi, v16qi) 31133 v4si __builtin_ia32_pcomged (v4si, v4si) 31134 v2di __builtin_ia32_pcomgeq (v2di, v2di) 31135 v16qi __builtin_ia32_pcomgeub (v16qi, v16qi) 31136 v4si __builtin_ia32_pcomgeud (v4si, v4si) 31137 v2di __builtin_ia32_pcomgeuq (v2di, v2di) 31138 v8hi __builtin_ia32_pcomgeuw (v8hi, v8hi) 31139 v8hi __builtin_ia32_pcomgew (v8hi, v8hi) 31140 v16qi __builtin_ia32_pcomgtb (v16qi, v16qi) 31141 v4si __builtin_ia32_pcomgtd (v4si, v4si) 31142 v2di __builtin_ia32_pcomgtq (v2di, v2di) 31143 v16qi __builtin_ia32_pcomgtub (v16qi, v16qi) 31144 v4si __builtin_ia32_pcomgtud (v4si, v4si) 31145 v2di __builtin_ia32_pcomgtuq (v2di, v2di) 31146 v8hi __builtin_ia32_pcomgtuw (v8hi, v8hi) 31147 v8hi __builtin_ia32_pcomgtw (v8hi, v8hi) 31148 v16qi __builtin_ia32_pcomleb (v16qi, v16qi) 31149 v4si __builtin_ia32_pcomled (v4si, v4si) 31150 v2di __builtin_ia32_pcomleq (v2di, v2di) 31151 v16qi __builtin_ia32_pcomleub (v16qi, v16qi) 31152 v4si __builtin_ia32_pcomleud (v4si, v4si) 31153 v2di __builtin_ia32_pcomleuq (v2di, v2di) 31154 v8hi __builtin_ia32_pcomleuw (v8hi, v8hi) 31155 v8hi __builtin_ia32_pcomlew (v8hi, v8hi) 31156 v16qi __builtin_ia32_pcomltb (v16qi, v16qi) 31157 v4si __builtin_ia32_pcomltd (v4si, v4si) 31158 v2di __builtin_ia32_pcomltq (v2di, v2di) 31159 v16qi __builtin_ia32_pcomltub (v16qi, v16qi) 31160 v4si __builtin_ia32_pcomltud (v4si, v4si) 31161 v2di __builtin_ia32_pcomltuq (v2di, v2di) 31162 v8hi __builtin_ia32_pcomltuw (v8hi, v8hi) 31163 v8hi __builtin_ia32_pcomltw (v8hi, v8hi) 31164 v16qi __builtin_ia32_pcomneb (v16qi, v16qi) 31165 v4si __builtin_ia32_pcomned (v4si, v4si) 31166 v2di __builtin_ia32_pcomneq (v2di, v2di) 31167 v16qi __builtin_ia32_pcomneub (v16qi, v16qi) 31168 v4si __builtin_ia32_pcomneud (v4si, v4si) 31169 v2di __builtin_ia32_pcomneuq (v2di, v2di) 31170 v8hi __builtin_ia32_pcomneuw (v8hi, v8hi) 31171 v8hi __builtin_ia32_pcomnew (v8hi, v8hi) 31172 v16qi __builtin_ia32_pcomtrueb (v16qi, v16qi) 31173 v4si __builtin_ia32_pcomtrued (v4si, v4si) 31174 v2di __builtin_ia32_pcomtrueq (v2di, v2di) 31175 v16qi __builtin_ia32_pcomtrueub (v16qi, v16qi) 31176 v4si __builtin_ia32_pcomtrueud (v4si, v4si) 31177 v2di __builtin_ia32_pcomtrueuq (v2di, v2di) 31178 v8hi __builtin_ia32_pcomtrueuw (v8hi, v8hi) 31179 v8hi __builtin_ia32_pcomtruew (v8hi, v8hi) 31180 v4df __builtin_ia32_permpd (v2df, v2df, v16qi) 31181 v4sf __builtin_ia32_permps (v4sf, v4sf, v16qi) 31182 v4si __builtin_ia32_phaddbd (v16qi) 31183 v2di __builtin_ia32_phaddbq (v16qi) 31184 v8hi __builtin_ia32_phaddbw (v16qi) 31185 v2di __builtin_ia32_phadddq (v4si) 31186 v4si __builtin_ia32_phaddubd (v16qi) 31187 v2di __builtin_ia32_phaddubq (v16qi) 31188 v8hi __builtin_ia32_phaddubw (v16qi) 31189 v2di __builtin_ia32_phaddudq (v4si) 31190 v4si __builtin_ia32_phadduwd (v8hi) 31191 v2di __builtin_ia32_phadduwq (v8hi) 31192 v4si __builtin_ia32_phaddwd (v8hi) 31193 v2di __builtin_ia32_phaddwq (v8hi) 31194 v8hi __builtin_ia32_phsubbw (v16qi) 31195 v2di __builtin_ia32_phsubdq (v4si) 31196 v4si __builtin_ia32_phsubwd (v8hi) 31197 v4si __builtin_ia32_pmacsdd (v4si, v4si, v4si) 31198 v2di __builtin_ia32_pmacsdqh (v4si, v4si, v2di) 31199 v2di __builtin_ia32_pmacsdql (v4si, v4si, v2di) 31200 v4si __builtin_ia32_pmacssdd (v4si, v4si, v4si) 31201 v2di __builtin_ia32_pmacssdqh (v4si, v4si, v2di) 31202 v2di __builtin_ia32_pmacssdql (v4si, v4si, v2di) 31203 v4si __builtin_ia32_pmacsswd (v8hi, v8hi, v4si) 31204 v8hi __builtin_ia32_pmacssww (v8hi, v8hi, v8hi) 31205 v4si __builtin_ia32_pmacswd (v8hi, v8hi, v4si) 31206 v8hi __builtin_ia32_pmacsww (v8hi, v8hi, v8hi) 31207 v4si __builtin_ia32_pmadcsswd (v8hi, v8hi, v4si) 31208 v4si __builtin_ia32_pmadcswd (v8hi, v8hi, v4si) 31209 v16qi __builtin_ia32_pperm (v16qi, v16qi, v16qi) 31210 v16qi __builtin_ia32_protb (v16qi, v16qi) 31211 v4si __builtin_ia32_protd (v4si, v4si) 31212 v2di __builtin_ia32_protq (v2di, v2di) 31213 v8hi __builtin_ia32_protw (v8hi, v8hi) 31214 v16qi __builtin_ia32_pshab (v16qi, v16qi) 31215 v4si __builtin_ia32_pshad (v4si, v4si) 31216 v2di __builtin_ia32_pshaq (v2di, v2di) 31217 v8hi __builtin_ia32_pshaw (v8hi, v8hi) 31218 v16qi __builtin_ia32_pshlb (v16qi, v16qi) 31219 v4si __builtin_ia32_pshld (v4si, v4si) 31220 v2di __builtin_ia32_pshlq (v2di, v2di) 31221 v8hi __builtin_ia32_pshlw (v8hi, v8hi) 31222 31223 The following builtin-in functions are available when `-msse5' is 31224 used. The second argument must be an integer constant and generate the 31225 machine instruction that is part of the name with the `_imm' suffix 31226 removed. 31227 31228 v16qi __builtin_ia32_protb_imm (v16qi, int) 31229 v4si __builtin_ia32_protd_imm (v4si, int) 31230 v2di __builtin_ia32_protq_imm (v2di, int) 31231 v8hi __builtin_ia32_protw_imm (v8hi, int) 31232 31233 The following built-in functions are available when `-m3dnow' is used. 31234 All of them generate the machine instruction that is part of the name. 31235 31236 void __builtin_ia32_femms (void) 31237 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 31238 v2si __builtin_ia32_pf2id (v2sf) 31239 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 31240 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 31241 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 31242 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 31243 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 31244 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 31245 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 31246 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 31247 v2sf __builtin_ia32_pfrcp (v2sf) 31248 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 31249 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 31250 v2sf __builtin_ia32_pfrsqrt (v2sf) 31251 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 31252 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 31253 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 31254 v2sf __builtin_ia32_pi2fd (v2si) 31255 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 31256 31257 The following built-in functions are available when both `-m3dnow' and 31258 `-march=athlon' are used. All of them generate the machine instruction 31259 that is part of the name. 31260 31261 v2si __builtin_ia32_pf2iw (v2sf) 31262 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 31263 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 31264 v2sf __builtin_ia32_pi2fw (v2si) 31265 v2sf __builtin_ia32_pswapdsf (v2sf) 31266 v2si __builtin_ia32_pswapdsi (v2si) 31267 31268 31269 File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 Built-in Functions, Up: Target Builtins 31270 31271 5.50.7 MIPS DSP Built-in Functions 31272 ---------------------------------- 31273 31274 The MIPS DSP Application-Specific Extension (ASE) includes new 31275 instructions that are designed to improve the performance of DSP and 31276 media applications. It provides instructions that operate on packed 31277 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 31278 31279 GCC supports MIPS DSP operations using both the generic vector 31280 extensions (*note Vector Extensions::) and a collection of 31281 MIPS-specific built-in functions. Both kinds of support are enabled by 31282 the `-mdsp' command-line option. 31283 31284 Revision 2 of the ASE was introduced in the second half of 2006. This 31285 revision adds extra instructions to the original ASE, but is otherwise 31286 backwards-compatible with it. You can select revision 2 using the 31287 command-line option `-mdspr2'; this option implies `-mdsp'. 31288 31289 The SCOUNT and POS bits of the DSP control register are global. The 31290 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and 31291 POS bits. During optimization, the compiler will not delete these 31292 instructions and it will not delete calls to functions containing these 31293 instructions. 31294 31295 At present, GCC only provides support for operations on 32-bit 31296 vectors. The vector type associated with 8-bit integer data is usually 31297 called `v4i8', the vector type associated with Q7 is usually called 31298 `v4q7', the vector type associated with 16-bit integer data is usually 31299 called `v2i16', and the vector type associated with Q15 is usually 31300 called `v2q15'. They can be defined in C as follows: 31301 31302 typedef signed char v4i8 __attribute__ ((vector_size(4))); 31303 typedef signed char v4q7 __attribute__ ((vector_size(4))); 31304 typedef short v2i16 __attribute__ ((vector_size(4))); 31305 typedef short v2q15 __attribute__ ((vector_size(4))); 31306 31307 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same 31308 way as aggregates. For example: 31309 31310 v4i8 a = {1, 2, 3, 4}; 31311 v4i8 b; 31312 b = (v4i8) {5, 6, 7, 8}; 31313 31314 v2q15 c = {0x0fcb, 0x3a75}; 31315 v2q15 d; 31316 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 31317 31318 _Note:_ The CPU's endianness determines the order in which values are 31319 packed. On little-endian targets, the first value is the least 31320 significant and the last value is the most significant. The opposite 31321 order applies to big-endian targets. For example, the code above will 31322 set the lowest byte of `a' to `1' on little-endian targets and `4' on 31323 big-endian targets. 31324 31325 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 31326 representation. As shown in this example, the integer representation 31327 of a Q7 value can be obtained by multiplying the fractional value by 31328 `0x1.0p7'. The equivalent for Q15 values is to multiply by `0x1.0p15'. 31329 The equivalent for Q31 values is to multiply by `0x1.0p31'. 31330 31331 The table below lists the `v4i8' and `v2q15' operations for which 31332 hardware support exists. `a' and `b' are `v4i8' values, and `c' and 31333 `d' are `v2q15' values. 31334 31335 C code MIPS instruction 31336 `a + b' `addu.qb' 31337 `c + d' `addq.ph' 31338 `a - b' `subu.qb' 31339 `c - d' `subq.ph' 31340 31341 The table below lists the `v2i16' operation for which hardware support 31342 exists for the DSP ASE REV 2. `e' and `f' are `v2i16' values. 31343 31344 C code MIPS instruction 31345 `e * f' `mul.ph' 31346 31347 It is easier to describe the DSP built-in functions if we first define 31348 the following types: 31349 31350 typedef int q31; 31351 typedef int i32; 31352 typedef unsigned int ui32; 31353 typedef long long a64; 31354 31355 `q31' and `i32' are actually the same as `int', but we use `q31' to 31356 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 31357 value. Similarly, `a64' is the same as `long long', but we use `a64' 31358 to indicate values that will be placed in one of the four DSP 31359 accumulators (`$ac0', `$ac1', `$ac2' or `$ac3'). 31360 31361 Also, some built-in functions prefer or require immediate numbers as 31362 parameters, because the corresponding DSP instructions accept both 31363 immediate numbers and register operands, or accept immediate numbers 31364 only. The immediate parameters are listed as follows. 31365 31366 imm0_3: 0 to 3. 31367 imm0_7: 0 to 7. 31368 imm0_15: 0 to 15. 31369 imm0_31: 0 to 31. 31370 imm0_63: 0 to 63. 31371 imm0_255: 0 to 255. 31372 imm_n32_31: -32 to 31. 31373 imm_n512_511: -512 to 511. 31374 31375 The following built-in functions map directly to a particular MIPS DSP 31376 instruction. Please refer to the architecture specification for 31377 details on what each instruction does. 31378 31379 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 31380 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 31381 q31 __builtin_mips_addq_s_w (q31, q31) 31382 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 31383 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 31384 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 31385 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 31386 q31 __builtin_mips_subq_s_w (q31, q31) 31387 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 31388 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 31389 i32 __builtin_mips_addsc (i32, i32) 31390 i32 __builtin_mips_addwc (i32, i32) 31391 i32 __builtin_mips_modsub (i32, i32) 31392 i32 __builtin_mips_raddu_w_qb (v4i8) 31393 v2q15 __builtin_mips_absq_s_ph (v2q15) 31394 q31 __builtin_mips_absq_s_w (q31) 31395 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 31396 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 31397 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 31398 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 31399 q31 __builtin_mips_preceq_w_phl (v2q15) 31400 q31 __builtin_mips_preceq_w_phr (v2q15) 31401 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 31402 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 31403 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 31404 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 31405 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 31406 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 31407 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 31408 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 31409 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 31410 v4i8 __builtin_mips_shll_qb (v4i8, i32) 31411 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 31412 v2q15 __builtin_mips_shll_ph (v2q15, i32) 31413 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 31414 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 31415 q31 __builtin_mips_shll_s_w (q31, imm0_31) 31416 q31 __builtin_mips_shll_s_w (q31, i32) 31417 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 31418 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 31419 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 31420 v2q15 __builtin_mips_shra_ph (v2q15, i32) 31421 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 31422 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 31423 q31 __builtin_mips_shra_r_w (q31, imm0_31) 31424 q31 __builtin_mips_shra_r_w (q31, i32) 31425 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 31426 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 31427 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 31428 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 31429 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 31430 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 31431 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 31432 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 31433 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 31434 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 31435 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 31436 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 31437 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 31438 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 31439 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 31440 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 31441 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 31442 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 31443 i32 __builtin_mips_bitrev (i32) 31444 i32 __builtin_mips_insv (i32, i32) 31445 v4i8 __builtin_mips_repl_qb (imm0_255) 31446 v4i8 __builtin_mips_repl_qb (i32) 31447 v2q15 __builtin_mips_repl_ph (imm_n512_511) 31448 v2q15 __builtin_mips_repl_ph (i32) 31449 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 31450 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 31451 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 31452 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 31453 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 31454 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 31455 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 31456 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 31457 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 31458 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 31459 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 31460 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 31461 i32 __builtin_mips_extr_w (a64, imm0_31) 31462 i32 __builtin_mips_extr_w (a64, i32) 31463 i32 __builtin_mips_extr_r_w (a64, imm0_31) 31464 i32 __builtin_mips_extr_s_h (a64, i32) 31465 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 31466 i32 __builtin_mips_extr_rs_w (a64, i32) 31467 i32 __builtin_mips_extr_s_h (a64, imm0_31) 31468 i32 __builtin_mips_extr_r_w (a64, i32) 31469 i32 __builtin_mips_extp (a64, imm0_31) 31470 i32 __builtin_mips_extp (a64, i32) 31471 i32 __builtin_mips_extpdp (a64, imm0_31) 31472 i32 __builtin_mips_extpdp (a64, i32) 31473 a64 __builtin_mips_shilo (a64, imm_n32_31) 31474 a64 __builtin_mips_shilo (a64, i32) 31475 a64 __builtin_mips_mthlip (a64, i32) 31476 void __builtin_mips_wrdsp (i32, imm0_63) 31477 i32 __builtin_mips_rddsp (imm0_63) 31478 i32 __builtin_mips_lbux (void *, i32) 31479 i32 __builtin_mips_lhx (void *, i32) 31480 i32 __builtin_mips_lwx (void *, i32) 31481 i32 __builtin_mips_bposge32 (void) 31482 31483 The following built-in functions map directly to a particular MIPS DSP 31484 REV 2 instruction. Please refer to the architecture specification for 31485 details on what each instruction does. 31486 31487 v4q7 __builtin_mips_absq_s_qb (v4q7); 31488 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 31489 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 31490 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 31491 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 31492 i32 __builtin_mips_append (i32, i32, imm0_31); 31493 i32 __builtin_mips_balign (i32, i32, imm0_3); 31494 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 31495 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 31496 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 31497 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 31498 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 31499 a64 __builtin_mips_madd (a64, i32, i32); 31500 a64 __builtin_mips_maddu (a64, ui32, ui32); 31501 a64 __builtin_mips_msub (a64, i32, i32); 31502 a64 __builtin_mips_msubu (a64, ui32, ui32); 31503 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 31504 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 31505 q31 __builtin_mips_mulq_rs_w (q31, q31); 31506 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 31507 q31 __builtin_mips_mulq_s_w (q31, q31); 31508 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 31509 a64 __builtin_mips_mult (i32, i32); 31510 a64 __builtin_mips_multu (ui32, ui32); 31511 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 31512 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 31513 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 31514 i32 __builtin_mips_prepend (i32, i32, imm0_31); 31515 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 31516 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 31517 v4i8 __builtin_mips_shra_qb (v4i8, i32); 31518 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 31519 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 31520 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 31521 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 31522 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 31523 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 31524 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 31525 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 31526 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 31527 q31 __builtin_mips_addqh_w (q31, q31); 31528 q31 __builtin_mips_addqh_r_w (q31, q31); 31529 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 31530 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 31531 q31 __builtin_mips_subqh_w (q31, q31); 31532 q31 __builtin_mips_subqh_r_w (q31, q31); 31533 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 31534 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 31535 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 31536 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 31537 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 31538 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 31539 31540 31541 File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 31542 31543 5.50.8 MIPS Paired-Single Support 31544 --------------------------------- 31545 31546 The MIPS64 architecture includes a number of instructions that operate 31547 on pairs of single-precision floating-point values. Each pair is 31548 packed into a 64-bit floating-point register, with one element being 31549 designated the "upper half" and the other being designated the "lower 31550 half". 31551 31552 GCC supports paired-single operations using both the generic vector 31553 extensions (*note Vector Extensions::) and a collection of 31554 MIPS-specific built-in functions. Both kinds of support are enabled by 31555 the `-mpaired-single' command-line option. 31556 31557 The vector type associated with paired-single values is usually called 31558 `v2sf'. It can be defined in C as follows: 31559 31560 typedef float v2sf __attribute__ ((vector_size (8))); 31561 31562 `v2sf' values are initialized in the same way as aggregates. For 31563 example: 31564 31565 v2sf a = {1.5, 9.1}; 31566 v2sf b; 31567 float e, f; 31568 b = (v2sf) {e, f}; 31569 31570 _Note:_ The CPU's endianness determines which value is stored in the 31571 upper half of a register and which value is stored in the lower half. 31572 On little-endian targets, the first value is the lower one and the 31573 second value is the upper one. The opposite order applies to 31574 big-endian targets. For example, the code above will set the lower 31575 half of `a' to `1.5' on little-endian targets and `9.1' on big-endian 31576 targets. 31577 31578 31579 File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 31580 31581 5.50.9 MIPS Loongson Built-in Functions 31582 --------------------------------------- 31583 31584 GCC provides intrinsics to access the SIMD instructions provided by the 31585 ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 31586 available after inclusion of the `loongson.h' header file, operate on 31587 the following 64-bit vector types: 31588 31589 * `uint8x8_t', a vector of eight unsigned 8-bit integers; 31590 31591 * `uint16x4_t', a vector of four unsigned 16-bit integers; 31592 31593 * `uint32x2_t', a vector of two unsigned 32-bit integers; 31594 31595 * `int8x8_t', a vector of eight signed 8-bit integers; 31596 31597 * `int16x4_t', a vector of four signed 16-bit integers; 31598 31599 * `int32x2_t', a vector of two signed 32-bit integers. 31600 31601 The intrinsics provided are listed below; each is named after the 31602 machine instruction to which it corresponds, with suffixes added as 31603 appropriate to distinguish intrinsics that expand to the same machine 31604 instruction yet have different argument types. Refer to the 31605 architecture documentation for a description of the functionality of 31606 each instruction. 31607 31608 int16x4_t packsswh (int32x2_t s, int32x2_t t); 31609 int8x8_t packsshb (int16x4_t s, int16x4_t t); 31610 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 31611 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 31612 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 31613 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 31614 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 31615 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 31616 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 31617 uint64_t paddd_u (uint64_t s, uint64_t t); 31618 int64_t paddd_s (int64_t s, int64_t t); 31619 int16x4_t paddsh (int16x4_t s, int16x4_t t); 31620 int8x8_t paddsb (int8x8_t s, int8x8_t t); 31621 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 31622 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 31623 uint64_t pandn_ud (uint64_t s, uint64_t t); 31624 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 31625 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 31626 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 31627 int64_t pandn_sd (int64_t s, int64_t t); 31628 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 31629 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 31630 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 31631 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 31632 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 31633 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 31634 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 31635 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 31636 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 31637 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 31638 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 31639 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 31640 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 31641 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 31642 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 31643 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 31644 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 31645 uint16x4_t pextrh_u (uint16x4_t s, int field); 31646 int16x4_t pextrh_s (int16x4_t s, int field); 31647 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 31648 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 31649 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 31650 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 31651 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 31652 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 31653 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 31654 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 31655 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 31656 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 31657 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 31658 int16x4_t pminsh (int16x4_t s, int16x4_t t); 31659 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 31660 uint8x8_t pmovmskb_u (uint8x8_t s); 31661 int8x8_t pmovmskb_s (int8x8_t s); 31662 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 31663 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 31664 int16x4_t pmullh (int16x4_t s, int16x4_t t); 31665 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 31666 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 31667 uint16x4_t biadd (uint8x8_t s); 31668 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 31669 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 31670 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 31671 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 31672 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 31673 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 31674 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 31675 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 31676 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 31677 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 31678 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 31679 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 31680 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 31681 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 31682 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 31683 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 31684 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 31685 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 31686 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 31687 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 31688 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 31689 uint64_t psubd_u (uint64_t s, uint64_t t); 31690 int64_t psubd_s (int64_t s, int64_t t); 31691 int16x4_t psubsh (int16x4_t s, int16x4_t t); 31692 int8x8_t psubsb (int8x8_t s, int8x8_t t); 31693 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 31694 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 31695 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 31696 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 31697 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 31698 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 31699 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 31700 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 31701 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 31702 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 31703 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 31704 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 31705 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 31706 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 31707 31708 * Menu: 31709 31710 * Paired-Single Arithmetic:: 31711 * Paired-Single Built-in Functions:: 31712 * MIPS-3D Built-in Functions:: 31713 31714 31715 File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 31716 31717 5.50.9.1 Paired-Single Arithmetic 31718 ................................. 31719 31720 The table below lists the `v2sf' operations for which hardware support 31721 exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 31722 value. 31723 31724 C code MIPS instruction 31725 `a + b' `add.ps' 31726 `a - b' `sub.ps' 31727 `-a' `neg.ps' 31728 `a * b' `mul.ps' 31729 `a * b + c' `madd.ps' 31730 `a * b - c' `msub.ps' 31731 `-(a * b + c)' `nmadd.ps' 31732 `-(a * b - c)' `nmsub.ps' 31733 `x ? a : b' `movn.ps'/`movz.ps' 31734 31735 Note that the multiply-accumulate instructions can be disabled using 31736 the command-line option `-mno-fused-madd'. 31737 31738 31739 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 31740 31741 5.50.9.2 Paired-Single Built-in Functions 31742 ......................................... 31743 31744 The following paired-single functions map directly to a particular MIPS 31745 instruction. Please refer to the architecture specification for 31746 details on what each instruction does. 31747 31748 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 31749 Pair lower lower (`pll.ps'). 31750 31751 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 31752 Pair upper lower (`pul.ps'). 31753 31754 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 31755 Pair lower upper (`plu.ps'). 31756 31757 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 31758 Pair upper upper (`puu.ps'). 31759 31760 `v2sf __builtin_mips_cvt_ps_s (float, float)' 31761 Convert pair to paired single (`cvt.ps.s'). 31762 31763 `float __builtin_mips_cvt_s_pl (v2sf)' 31764 Convert pair lower to single (`cvt.s.pl'). 31765 31766 `float __builtin_mips_cvt_s_pu (v2sf)' 31767 Convert pair upper to single (`cvt.s.pu'). 31768 31769 `v2sf __builtin_mips_abs_ps (v2sf)' 31770 Absolute value (`abs.ps'). 31771 31772 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 31773 Align variable (`alnv.ps'). 31774 31775 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 31776 otherwise the result will be unpredictable. Please read the 31777 instruction description for details. 31778 31779 The following multi-instruction functions are also available. In each 31780 case, COND can be any of the 16 floating-point conditions: `f', `un', 31781 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 31782 `lt', `nge', `le' or `ngt'. 31783 31784 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 31785 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 31786 Conditional move based on floating point comparison (`c.COND.ps', 31787 `movt.ps'/`movf.ps'). 31788 31789 The `movt' functions return the value X computed by: 31790 31791 c.COND.ps CC,A,B 31792 mov.ps X,C 31793 movt.ps X,D,CC 31794 31795 The `movf' functions are similar but use `movf.ps' instead of 31796 `movt.ps'. 31797 31798 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 31799 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 31800 Comparison of two paired-single values (`c.COND.ps', 31801 `bc1t'/`bc1f'). 31802 31803 These functions compare A and B using `c.COND.ps' and return 31804 either the upper or lower half of the result. For example: 31805 31806 v2sf a, b; 31807 if (__builtin_mips_upper_c_eq_ps (a, b)) 31808 upper_halves_are_equal (); 31809 else 31810 upper_halves_are_unequal (); 31811 31812 if (__builtin_mips_lower_c_eq_ps (a, b)) 31813 lower_halves_are_equal (); 31814 else 31815 lower_halves_are_unequal (); 31816 31817 31818 File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 31819 31820 5.50.9.3 MIPS-3D Built-in Functions 31821 ................................... 31822 31823 The MIPS-3D Application-Specific Extension (ASE) includes additional 31824 paired-single instructions that are designed to improve the performance 31825 of 3D graphics operations. Support for these instructions is controlled 31826 by the `-mips3d' command-line option. 31827 31828 The functions listed below map directly to a particular MIPS-3D 31829 instruction. Please refer to the architecture specification for more 31830 details on what each instruction does. 31831 31832 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 31833 Reduction add (`addr.ps'). 31834 31835 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 31836 Reduction multiply (`mulr.ps'). 31837 31838 `v2sf __builtin_mips_cvt_pw_ps (v2sf)' 31839 Convert paired single to paired word (`cvt.pw.ps'). 31840 31841 `v2sf __builtin_mips_cvt_ps_pw (v2sf)' 31842 Convert paired word to paired single (`cvt.ps.pw'). 31843 31844 `float __builtin_mips_recip1_s (float)' 31845 `double __builtin_mips_recip1_d (double)' 31846 `v2sf __builtin_mips_recip1_ps (v2sf)' 31847 Reduced precision reciprocal (sequence step 1) (`recip1.FMT'). 31848 31849 `float __builtin_mips_recip2_s (float, float)' 31850 `double __builtin_mips_recip2_d (double, double)' 31851 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 31852 Reduced precision reciprocal (sequence step 2) (`recip2.FMT'). 31853 31854 `float __builtin_mips_rsqrt1_s (float)' 31855 `double __builtin_mips_rsqrt1_d (double)' 31856 `v2sf __builtin_mips_rsqrt1_ps (v2sf)' 31857 Reduced precision reciprocal square root (sequence step 1) 31858 (`rsqrt1.FMT'). 31859 31860 `float __builtin_mips_rsqrt2_s (float, float)' 31861 `double __builtin_mips_rsqrt2_d (double, double)' 31862 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 31863 Reduced precision reciprocal square root (sequence step 2) 31864 (`rsqrt2.FMT'). 31865 31866 The following multi-instruction functions are also available. In each 31867 case, COND can be any of the 16 floating-point conditions: `f', `un', 31868 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 31869 `lt', `nge', `le' or `ngt'. 31870 31871 `int __builtin_mips_cabs_COND_s (float A, float B)' 31872 `int __builtin_mips_cabs_COND_d (double A, double B)' 31873 Absolute comparison of two scalar values (`cabs.COND.FMT', 31874 `bc1t'/`bc1f'). 31875 31876 These functions compare A and B using `cabs.COND.s' or 31877 `cabs.COND.d' and return the result as a boolean value. For 31878 example: 31879 31880 float a, b; 31881 if (__builtin_mips_cabs_eq_s (a, b)) 31882 true (); 31883 else 31884 false (); 31885 31886 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 31887 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 31888 Absolute comparison of two paired-single values (`cabs.COND.ps', 31889 `bc1t'/`bc1f'). 31890 31891 These functions compare A and B using `cabs.COND.ps' and return 31892 either the upper or lower half of the result. For example: 31893 31894 v2sf a, b; 31895 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 31896 upper_halves_are_equal (); 31897 else 31898 upper_halves_are_unequal (); 31899 31900 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 31901 lower_halves_are_equal (); 31902 else 31903 lower_halves_are_unequal (); 31904 31905 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 31906 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 31907 Conditional move based on absolute comparison (`cabs.COND.ps', 31908 `movt.ps'/`movf.ps'). 31909 31910 The `movt' functions return the value X computed by: 31911 31912 cabs.COND.ps CC,A,B 31913 mov.ps X,C 31914 movt.ps X,D,CC 31915 31916 The `movf' functions are similar but use `movf.ps' instead of 31917 `movt.ps'. 31918 31919 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 31920 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 31921 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 31922 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 31923 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 31924 `bc1any2t'/`bc1any2f'). 31925 31926 These functions compare A and B using `c.COND.ps' or 31927 `cabs.COND.ps'. The `any' forms return true if either result is 31928 true and the `all' forms return true if both results are true. 31929 For example: 31930 31931 v2sf a, b; 31932 if (__builtin_mips_any_c_eq_ps (a, b)) 31933 one_is_true (); 31934 else 31935 both_are_false (); 31936 31937 if (__builtin_mips_all_c_eq_ps (a, b)) 31938 both_are_true (); 31939 else 31940 one_is_false (); 31941 31942 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 31943 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 31944 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 31945 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 31946 Comparison of four paired-single values 31947 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 31948 31949 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 31950 with B and to compare C with D. The `any' forms return true if 31951 any of the four results are true and the `all' forms return true 31952 if all four results are true. For example: 31953 31954 v2sf a, b, c, d; 31955 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 31956 some_are_true (); 31957 else 31958 all_are_false (); 31959 31960 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 31961 all_are_true (); 31962 else 31963 some_are_false (); 31964 31965 31966 File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC AltiVec Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 31967 31968 5.50.10 picoChip Built-in Functions 31969 ----------------------------------- 31970 31971 GCC provides an interface to selected machine instructions from the 31972 picoChip instruction set. 31973 31974 `int __builtin_sbc (int VALUE)' 31975 Sign bit count. Return the number of consecutive bits in VALUE 31976 which have the same value as the sign-bit. The result is the 31977 number of leading sign bits minus one, giving the number of 31978 redundant sign bits in VALUE. 31979 31980 `int __builtin_byteswap (int VALUE)' 31981 Byte swap. Return the result of swapping the upper and lower 31982 bytes of VALUE. 31983 31984 `int __builtin_brev (int VALUE)' 31985 Bit reversal. Return the result of reversing the bits in VALUE. 31986 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 31987 on. 31988 31989 `int __builtin_adds (int X, int Y)' 31990 Saturating addition. Return the result of adding X and Y, storing 31991 the value 32767 if the result overflows. 31992 31993 `int __builtin_subs (int X, int Y)' 31994 Saturating subtraction. Return the result of subtracting Y from 31995 X, storing the value -32768 if the result overflows. 31996 31997 `void __builtin_halt (void)' 31998 Halt. The processor will stop execution. This built-in is useful 31999 for implementing assertions. 32000 32001 32002 32003 File: gcc.info, Node: Other MIPS Built-in Functions, Next: picoChip Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 32004 32005 5.50.11 Other MIPS Built-in Functions 32006 ------------------------------------- 32007 32008 GCC provides other MIPS-specific built-in functions: 32009 32010 `void __builtin_mips_cache (int OP, const volatile void *ADDR)' 32011 Insert a `cache' instruction with operands OP and ADDR. GCC 32012 defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE' 32013 when this function is available. 32014 32015 32016 File: gcc.info, Node: PowerPC AltiVec Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 32017 32018 5.50.12 PowerPC AltiVec Built-in Functions 32019 ------------------------------------------ 32020 32021 GCC provides an interface for the PowerPC family of processors to access 32022 the AltiVec operations described in Motorola's AltiVec Programming 32023 Interface Manual. The interface is made available by including 32024 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 32025 supports the following vector types. 32026 32027 vector unsigned char 32028 vector signed char 32029 vector bool char 32030 32031 vector unsigned short 32032 vector signed short 32033 vector bool short 32034 vector pixel 32035 32036 vector unsigned int 32037 vector signed int 32038 vector bool int 32039 vector float 32040 32041 GCC's implementation of the high-level language interface available 32042 from C and C++ code differs from Motorola's documentation in several 32043 ways. 32044 32045 * A vector constant is a list of constant expressions within curly 32046 braces. 32047 32048 * A vector initializer requires no cast if the vector constant is of 32049 the same type as the variable it is initializing. 32050 32051 * If `signed' or `unsigned' is omitted, the signedness of the vector 32052 type is the default signedness of the base type. The default 32053 varies depending on the operating system, so a portable program 32054 should always specify the signedness. 32055 32056 * Compiling with `-maltivec' adds keywords `__vector', `vector', 32057 `__pixel', `pixel', `__bool' and `bool'. When compiling ISO C, 32058 the context-sensitive substitution of the keywords `vector', 32059 `pixel' and `bool' is disabled. To use them, you must include 32060 `<altivec.h>' instead. 32061 32062 * GCC allows using a `typedef' name as the type specifier for a 32063 vector type. 32064 32065 * For C, overloaded functions are implemented with macros so the 32066 following does not work: 32067 32068 vec_add ((vector signed int){1, 2, 3, 4}, foo); 32069 32070 Since `vec_add' is a macro, the vector constant in the example is 32071 treated as four separate arguments. Wrap the entire argument in 32072 parentheses for this to work. 32073 32074 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 32075 GCC uses built-in functions to achieve the functionality in the 32076 aforementioned header file, but they are not supported and are subject 32077 to change without notice. 32078 32079 The following interfaces are supported for the generic and specific 32080 AltiVec operations and the AltiVec predicates. In cases where there is 32081 a direct mapping between generic and specific operations, only the 32082 generic names are shown here, although the specific operations can also 32083 be used. 32084 32085 Arguments that are documented as `const int' require literal integral 32086 values within the range required for that operation. 32087 32088 vector signed char vec_abs (vector signed char); 32089 vector signed short vec_abs (vector signed short); 32090 vector signed int vec_abs (vector signed int); 32091 vector float vec_abs (vector float); 32092 32093 vector signed char vec_abss (vector signed char); 32094 vector signed short vec_abss (vector signed short); 32095 vector signed int vec_abss (vector signed int); 32096 32097 vector signed char vec_add (vector bool char, vector signed char); 32098 vector signed char vec_add (vector signed char, vector bool char); 32099 vector signed char vec_add (vector signed char, vector signed char); 32100 vector unsigned char vec_add (vector bool char, vector unsigned char); 32101 vector unsigned char vec_add (vector unsigned char, vector bool char); 32102 vector unsigned char vec_add (vector unsigned char, 32103 vector unsigned char); 32104 vector signed short vec_add (vector bool short, vector signed short); 32105 vector signed short vec_add (vector signed short, vector bool short); 32106 vector signed short vec_add (vector signed short, vector signed short); 32107 vector unsigned short vec_add (vector bool short, 32108 vector unsigned short); 32109 vector unsigned short vec_add (vector unsigned short, 32110 vector bool short); 32111 vector unsigned short vec_add (vector unsigned short, 32112 vector unsigned short); 32113 vector signed int vec_add (vector bool int, vector signed int); 32114 vector signed int vec_add (vector signed int, vector bool int); 32115 vector signed int vec_add (vector signed int, vector signed int); 32116 vector unsigned int vec_add (vector bool int, vector unsigned int); 32117 vector unsigned int vec_add (vector unsigned int, vector bool int); 32118 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 32119 vector float vec_add (vector float, vector float); 32120 32121 vector float vec_vaddfp (vector float, vector float); 32122 32123 vector signed int vec_vadduwm (vector bool int, vector signed int); 32124 vector signed int vec_vadduwm (vector signed int, vector bool int); 32125 vector signed int vec_vadduwm (vector signed int, vector signed int); 32126 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 32127 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 32128 vector unsigned int vec_vadduwm (vector unsigned int, 32129 vector unsigned int); 32130 32131 vector signed short vec_vadduhm (vector bool short, 32132 vector signed short); 32133 vector signed short vec_vadduhm (vector signed short, 32134 vector bool short); 32135 vector signed short vec_vadduhm (vector signed short, 32136 vector signed short); 32137 vector unsigned short vec_vadduhm (vector bool short, 32138 vector unsigned short); 32139 vector unsigned short vec_vadduhm (vector unsigned short, 32140 vector bool short); 32141 vector unsigned short vec_vadduhm (vector unsigned short, 32142 vector unsigned short); 32143 32144 vector signed char vec_vaddubm (vector bool char, vector signed char); 32145 vector signed char vec_vaddubm (vector signed char, vector bool char); 32146 vector signed char vec_vaddubm (vector signed char, vector signed char); 32147 vector unsigned char vec_vaddubm (vector bool char, 32148 vector unsigned char); 32149 vector unsigned char vec_vaddubm (vector unsigned char, 32150 vector bool char); 32151 vector unsigned char vec_vaddubm (vector unsigned char, 32152 vector unsigned char); 32153 32154 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 32155 32156 vector unsigned char vec_adds (vector bool char, vector unsigned char); 32157 vector unsigned char vec_adds (vector unsigned char, vector bool char); 32158 vector unsigned char vec_adds (vector unsigned char, 32159 vector unsigned char); 32160 vector signed char vec_adds (vector bool char, vector signed char); 32161 vector signed char vec_adds (vector signed char, vector bool char); 32162 vector signed char vec_adds (vector signed char, vector signed char); 32163 vector unsigned short vec_adds (vector bool short, 32164 vector unsigned short); 32165 vector unsigned short vec_adds (vector unsigned short, 32166 vector bool short); 32167 vector unsigned short vec_adds (vector unsigned short, 32168 vector unsigned short); 32169 vector signed short vec_adds (vector bool short, vector signed short); 32170 vector signed short vec_adds (vector signed short, vector bool short); 32171 vector signed short vec_adds (vector signed short, vector signed short); 32172 vector unsigned int vec_adds (vector bool int, vector unsigned int); 32173 vector unsigned int vec_adds (vector unsigned int, vector bool int); 32174 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 32175 vector signed int vec_adds (vector bool int, vector signed int); 32176 vector signed int vec_adds (vector signed int, vector bool int); 32177 vector signed int vec_adds (vector signed int, vector signed int); 32178 32179 vector signed int vec_vaddsws (vector bool int, vector signed int); 32180 vector signed int vec_vaddsws (vector signed int, vector bool int); 32181 vector signed int vec_vaddsws (vector signed int, vector signed int); 32182 32183 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 32184 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 32185 vector unsigned int vec_vadduws (vector unsigned int, 32186 vector unsigned int); 32187 32188 vector signed short vec_vaddshs (vector bool short, 32189 vector signed short); 32190 vector signed short vec_vaddshs (vector signed short, 32191 vector bool short); 32192 vector signed short vec_vaddshs (vector signed short, 32193 vector signed short); 32194 32195 vector unsigned short vec_vadduhs (vector bool short, 32196 vector unsigned short); 32197 vector unsigned short vec_vadduhs (vector unsigned short, 32198 vector bool short); 32199 vector unsigned short vec_vadduhs (vector unsigned short, 32200 vector unsigned short); 32201 32202 vector signed char vec_vaddsbs (vector bool char, vector signed char); 32203 vector signed char vec_vaddsbs (vector signed char, vector bool char); 32204 vector signed char vec_vaddsbs (vector signed char, vector signed char); 32205 32206 vector unsigned char vec_vaddubs (vector bool char, 32207 vector unsigned char); 32208 vector unsigned char vec_vaddubs (vector unsigned char, 32209 vector bool char); 32210 vector unsigned char vec_vaddubs (vector unsigned char, 32211 vector unsigned char); 32212 32213 vector float vec_and (vector float, vector float); 32214 vector float vec_and (vector float, vector bool int); 32215 vector float vec_and (vector bool int, vector float); 32216 vector bool int vec_and (vector bool int, vector bool int); 32217 vector signed int vec_and (vector bool int, vector signed int); 32218 vector signed int vec_and (vector signed int, vector bool int); 32219 vector signed int vec_and (vector signed int, vector signed int); 32220 vector unsigned int vec_and (vector bool int, vector unsigned int); 32221 vector unsigned int vec_and (vector unsigned int, vector bool int); 32222 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 32223 vector bool short vec_and (vector bool short, vector bool short); 32224 vector signed short vec_and (vector bool short, vector signed short); 32225 vector signed short vec_and (vector signed short, vector bool short); 32226 vector signed short vec_and (vector signed short, vector signed short); 32227 vector unsigned short vec_and (vector bool short, 32228 vector unsigned short); 32229 vector unsigned short vec_and (vector unsigned short, 32230 vector bool short); 32231 vector unsigned short vec_and (vector unsigned short, 32232 vector unsigned short); 32233 vector signed char vec_and (vector bool char, vector signed char); 32234 vector bool char vec_and (vector bool char, vector bool char); 32235 vector signed char vec_and (vector signed char, vector bool char); 32236 vector signed char vec_and (vector signed char, vector signed char); 32237 vector unsigned char vec_and (vector bool char, vector unsigned char); 32238 vector unsigned char vec_and (vector unsigned char, vector bool char); 32239 vector unsigned char vec_and (vector unsigned char, 32240 vector unsigned char); 32241 32242 vector float vec_andc (vector float, vector float); 32243 vector float vec_andc (vector float, vector bool int); 32244 vector float vec_andc (vector bool int, vector float); 32245 vector bool int vec_andc (vector bool int, vector bool int); 32246 vector signed int vec_andc (vector bool int, vector signed int); 32247 vector signed int vec_andc (vector signed int, vector bool int); 32248 vector signed int vec_andc (vector signed int, vector signed int); 32249 vector unsigned int vec_andc (vector bool int, vector unsigned int); 32250 vector unsigned int vec_andc (vector unsigned int, vector bool int); 32251 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 32252 vector bool short vec_andc (vector bool short, vector bool short); 32253 vector signed short vec_andc (vector bool short, vector signed short); 32254 vector signed short vec_andc (vector signed short, vector bool short); 32255 vector signed short vec_andc (vector signed short, vector signed short); 32256 vector unsigned short vec_andc (vector bool short, 32257 vector unsigned short); 32258 vector unsigned short vec_andc (vector unsigned short, 32259 vector bool short); 32260 vector unsigned short vec_andc (vector unsigned short, 32261 vector unsigned short); 32262 vector signed char vec_andc (vector bool char, vector signed char); 32263 vector bool char vec_andc (vector bool char, vector bool char); 32264 vector signed char vec_andc (vector signed char, vector bool char); 32265 vector signed char vec_andc (vector signed char, vector signed char); 32266 vector unsigned char vec_andc (vector bool char, vector unsigned char); 32267 vector unsigned char vec_andc (vector unsigned char, vector bool char); 32268 vector unsigned char vec_andc (vector unsigned char, 32269 vector unsigned char); 32270 32271 vector unsigned char vec_avg (vector unsigned char, 32272 vector unsigned char); 32273 vector signed char vec_avg (vector signed char, vector signed char); 32274 vector unsigned short vec_avg (vector unsigned short, 32275 vector unsigned short); 32276 vector signed short vec_avg (vector signed short, vector signed short); 32277 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 32278 vector signed int vec_avg (vector signed int, vector signed int); 32279 32280 vector signed int vec_vavgsw (vector signed int, vector signed int); 32281 32282 vector unsigned int vec_vavguw (vector unsigned int, 32283 vector unsigned int); 32284 32285 vector signed short vec_vavgsh (vector signed short, 32286 vector signed short); 32287 32288 vector unsigned short vec_vavguh (vector unsigned short, 32289 vector unsigned short); 32290 32291 vector signed char vec_vavgsb (vector signed char, vector signed char); 32292 32293 vector unsigned char vec_vavgub (vector unsigned char, 32294 vector unsigned char); 32295 32296 vector float vec_ceil (vector float); 32297 32298 vector signed int vec_cmpb (vector float, vector float); 32299 32300 vector bool char vec_cmpeq (vector signed char, vector signed char); 32301 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 32302 vector bool short vec_cmpeq (vector signed short, vector signed short); 32303 vector bool short vec_cmpeq (vector unsigned short, 32304 vector unsigned short); 32305 vector bool int vec_cmpeq (vector signed int, vector signed int); 32306 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 32307 vector bool int vec_cmpeq (vector float, vector float); 32308 32309 vector bool int vec_vcmpeqfp (vector float, vector float); 32310 32311 vector bool int vec_vcmpequw (vector signed int, vector signed int); 32312 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 32313 32314 vector bool short vec_vcmpequh (vector signed short, 32315 vector signed short); 32316 vector bool short vec_vcmpequh (vector unsigned short, 32317 vector unsigned short); 32318 32319 vector bool char vec_vcmpequb (vector signed char, vector signed char); 32320 vector bool char vec_vcmpequb (vector unsigned char, 32321 vector unsigned char); 32322 32323 vector bool int vec_cmpge (vector float, vector float); 32324 32325 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 32326 vector bool char vec_cmpgt (vector signed char, vector signed char); 32327 vector bool short vec_cmpgt (vector unsigned short, 32328 vector unsigned short); 32329 vector bool short vec_cmpgt (vector signed short, vector signed short); 32330 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 32331 vector bool int vec_cmpgt (vector signed int, vector signed int); 32332 vector bool int vec_cmpgt (vector float, vector float); 32333 32334 vector bool int vec_vcmpgtfp (vector float, vector float); 32335 32336 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 32337 32338 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 32339 32340 vector bool short vec_vcmpgtsh (vector signed short, 32341 vector signed short); 32342 32343 vector bool short vec_vcmpgtuh (vector unsigned short, 32344 vector unsigned short); 32345 32346 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 32347 32348 vector bool char vec_vcmpgtub (vector unsigned char, 32349 vector unsigned char); 32350 32351 vector bool int vec_cmple (vector float, vector float); 32352 32353 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 32354 vector bool char vec_cmplt (vector signed char, vector signed char); 32355 vector bool short vec_cmplt (vector unsigned short, 32356 vector unsigned short); 32357 vector bool short vec_cmplt (vector signed short, vector signed short); 32358 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 32359 vector bool int vec_cmplt (vector signed int, vector signed int); 32360 vector bool int vec_cmplt (vector float, vector float); 32361 32362 vector float vec_ctf (vector unsigned int, const int); 32363 vector float vec_ctf (vector signed int, const int); 32364 32365 vector float vec_vcfsx (vector signed int, const int); 32366 32367 vector float vec_vcfux (vector unsigned int, const int); 32368 32369 vector signed int vec_cts (vector float, const int); 32370 32371 vector unsigned int vec_ctu (vector float, const int); 32372 32373 void vec_dss (const int); 32374 32375 void vec_dssall (void); 32376 32377 void vec_dst (const vector unsigned char *, int, const int); 32378 void vec_dst (const vector signed char *, int, const int); 32379 void vec_dst (const vector bool char *, int, const int); 32380 void vec_dst (const vector unsigned short *, int, const int); 32381 void vec_dst (const vector signed short *, int, const int); 32382 void vec_dst (const vector bool short *, int, const int); 32383 void vec_dst (const vector pixel *, int, const int); 32384 void vec_dst (const vector unsigned int *, int, const int); 32385 void vec_dst (const vector signed int *, int, const int); 32386 void vec_dst (const vector bool int *, int, const int); 32387 void vec_dst (const vector float *, int, const int); 32388 void vec_dst (const unsigned char *, int, const int); 32389 void vec_dst (const signed char *, int, const int); 32390 void vec_dst (const unsigned short *, int, const int); 32391 void vec_dst (const short *, int, const int); 32392 void vec_dst (const unsigned int *, int, const int); 32393 void vec_dst (const int *, int, const int); 32394 void vec_dst (const unsigned long *, int, const int); 32395 void vec_dst (const long *, int, const int); 32396 void vec_dst (const float *, int, const int); 32397 32398 void vec_dstst (const vector unsigned char *, int, const int); 32399 void vec_dstst (const vector signed char *, int, const int); 32400 void vec_dstst (const vector bool char *, int, const int); 32401 void vec_dstst (const vector unsigned short *, int, const int); 32402 void vec_dstst (const vector signed short *, int, const int); 32403 void vec_dstst (const vector bool short *, int, const int); 32404 void vec_dstst (const vector pixel *, int, const int); 32405 void vec_dstst (const vector unsigned int *, int, const int); 32406 void vec_dstst (const vector signed int *, int, const int); 32407 void vec_dstst (const vector bool int *, int, const int); 32408 void vec_dstst (const vector float *, int, const int); 32409 void vec_dstst (const unsigned char *, int, const int); 32410 void vec_dstst (const signed char *, int, const int); 32411 void vec_dstst (const unsigned short *, int, const int); 32412 void vec_dstst (const short *, int, const int); 32413 void vec_dstst (const unsigned int *, int, const int); 32414 void vec_dstst (const int *, int, const int); 32415 void vec_dstst (const unsigned long *, int, const int); 32416 void vec_dstst (const long *, int, const int); 32417 void vec_dstst (const float *, int, const int); 32418 32419 void vec_dststt (const vector unsigned char *, int, const int); 32420 void vec_dststt (const vector signed char *, int, const int); 32421 void vec_dststt (const vector bool char *, int, const int); 32422 void vec_dststt (const vector unsigned short *, int, const int); 32423 void vec_dststt (const vector signed short *, int, const int); 32424 void vec_dststt (const vector bool short *, int, const int); 32425 void vec_dststt (const vector pixel *, int, const int); 32426 void vec_dststt (const vector unsigned int *, int, const int); 32427 void vec_dststt (const vector signed int *, int, const int); 32428 void vec_dststt (const vector bool int *, int, const int); 32429 void vec_dststt (const vector float *, int, const int); 32430 void vec_dststt (const unsigned char *, int, const int); 32431 void vec_dststt (const signed char *, int, const int); 32432 void vec_dststt (const unsigned short *, int, const int); 32433 void vec_dststt (const short *, int, const int); 32434 void vec_dststt (const unsigned int *, int, const int); 32435 void vec_dststt (const int *, int, const int); 32436 void vec_dststt (const unsigned long *, int, const int); 32437 void vec_dststt (const long *, int, const int); 32438 void vec_dststt (const float *, int, const int); 32439 32440 void vec_dstt (const vector unsigned char *, int, const int); 32441 void vec_dstt (const vector signed char *, int, const int); 32442 void vec_dstt (const vector bool char *, int, const int); 32443 void vec_dstt (const vector unsigned short *, int, const int); 32444 void vec_dstt (const vector signed short *, int, const int); 32445 void vec_dstt (const vector bool short *, int, const int); 32446 void vec_dstt (const vector pixel *, int, const int); 32447 void vec_dstt (const vector unsigned int *, int, const int); 32448 void vec_dstt (const vector signed int *, int, const int); 32449 void vec_dstt (const vector bool int *, int, const int); 32450 void vec_dstt (const vector float *, int, const int); 32451 void vec_dstt (const unsigned char *, int, const int); 32452 void vec_dstt (const signed char *, int, const int); 32453 void vec_dstt (const unsigned short *, int, const int); 32454 void vec_dstt (const short *, int, const int); 32455 void vec_dstt (const unsigned int *, int, const int); 32456 void vec_dstt (const int *, int, const int); 32457 void vec_dstt (const unsigned long *, int, const int); 32458 void vec_dstt (const long *, int, const int); 32459 void vec_dstt (const float *, int, const int); 32460 32461 vector float vec_expte (vector float); 32462 32463 vector float vec_floor (vector float); 32464 32465 vector float vec_ld (int, const vector float *); 32466 vector float vec_ld (int, const float *); 32467 vector bool int vec_ld (int, const vector bool int *); 32468 vector signed int vec_ld (int, const vector signed int *); 32469 vector signed int vec_ld (int, const int *); 32470 vector signed int vec_ld (int, const long *); 32471 vector unsigned int vec_ld (int, const vector unsigned int *); 32472 vector unsigned int vec_ld (int, const unsigned int *); 32473 vector unsigned int vec_ld (int, const unsigned long *); 32474 vector bool short vec_ld (int, const vector bool short *); 32475 vector pixel vec_ld (int, const vector pixel *); 32476 vector signed short vec_ld (int, const vector signed short *); 32477 vector signed short vec_ld (int, const short *); 32478 vector unsigned short vec_ld (int, const vector unsigned short *); 32479 vector unsigned short vec_ld (int, const unsigned short *); 32480 vector bool char vec_ld (int, const vector bool char *); 32481 vector signed char vec_ld (int, const vector signed char *); 32482 vector signed char vec_ld (int, const signed char *); 32483 vector unsigned char vec_ld (int, const vector unsigned char *); 32484 vector unsigned char vec_ld (int, const unsigned char *); 32485 32486 vector signed char vec_lde (int, const signed char *); 32487 vector unsigned char vec_lde (int, const unsigned char *); 32488 vector signed short vec_lde (int, const short *); 32489 vector unsigned short vec_lde (int, const unsigned short *); 32490 vector float vec_lde (int, const float *); 32491 vector signed int vec_lde (int, const int *); 32492 vector unsigned int vec_lde (int, const unsigned int *); 32493 vector signed int vec_lde (int, const long *); 32494 vector unsigned int vec_lde (int, const unsigned long *); 32495 32496 vector float vec_lvewx (int, float *); 32497 vector signed int vec_lvewx (int, int *); 32498 vector unsigned int vec_lvewx (int, unsigned int *); 32499 vector signed int vec_lvewx (int, long *); 32500 vector unsigned int vec_lvewx (int, unsigned long *); 32501 32502 vector signed short vec_lvehx (int, short *); 32503 vector unsigned short vec_lvehx (int, unsigned short *); 32504 32505 vector signed char vec_lvebx (int, char *); 32506 vector unsigned char vec_lvebx (int, unsigned char *); 32507 32508 vector float vec_ldl (int, const vector float *); 32509 vector float vec_ldl (int, const float *); 32510 vector bool int vec_ldl (int, const vector bool int *); 32511 vector signed int vec_ldl (int, const vector signed int *); 32512 vector signed int vec_ldl (int, const int *); 32513 vector signed int vec_ldl (int, const long *); 32514 vector unsigned int vec_ldl (int, const vector unsigned int *); 32515 vector unsigned int vec_ldl (int, const unsigned int *); 32516 vector unsigned int vec_ldl (int, const unsigned long *); 32517 vector bool short vec_ldl (int, const vector bool short *); 32518 vector pixel vec_ldl (int, const vector pixel *); 32519 vector signed short vec_ldl (int, const vector signed short *); 32520 vector signed short vec_ldl (int, const short *); 32521 vector unsigned short vec_ldl (int, const vector unsigned short *); 32522 vector unsigned short vec_ldl (int, const unsigned short *); 32523 vector bool char vec_ldl (int, const vector bool char *); 32524 vector signed char vec_ldl (int, const vector signed char *); 32525 vector signed char vec_ldl (int, const signed char *); 32526 vector unsigned char vec_ldl (int, const vector unsigned char *); 32527 vector unsigned char vec_ldl (int, const unsigned char *); 32528 32529 vector float vec_loge (vector float); 32530 32531 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 32532 vector unsigned char vec_lvsl (int, const volatile signed char *); 32533 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 32534 vector unsigned char vec_lvsl (int, const volatile short *); 32535 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 32536 vector unsigned char vec_lvsl (int, const volatile int *); 32537 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 32538 vector unsigned char vec_lvsl (int, const volatile long *); 32539 vector unsigned char vec_lvsl (int, const volatile float *); 32540 32541 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 32542 vector unsigned char vec_lvsr (int, const volatile signed char *); 32543 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 32544 vector unsigned char vec_lvsr (int, const volatile short *); 32545 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 32546 vector unsigned char vec_lvsr (int, const volatile int *); 32547 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 32548 vector unsigned char vec_lvsr (int, const volatile long *); 32549 vector unsigned char vec_lvsr (int, const volatile float *); 32550 32551 vector float vec_madd (vector float, vector float, vector float); 32552 32553 vector signed short vec_madds (vector signed short, 32554 vector signed short, 32555 vector signed short); 32556 32557 vector unsigned char vec_max (vector bool char, vector unsigned char); 32558 vector unsigned char vec_max (vector unsigned char, vector bool char); 32559 vector unsigned char vec_max (vector unsigned char, 32560 vector unsigned char); 32561 vector signed char vec_max (vector bool char, vector signed char); 32562 vector signed char vec_max (vector signed char, vector bool char); 32563 vector signed char vec_max (vector signed char, vector signed char); 32564 vector unsigned short vec_max (vector bool short, 32565 vector unsigned short); 32566 vector unsigned short vec_max (vector unsigned short, 32567 vector bool short); 32568 vector unsigned short vec_max (vector unsigned short, 32569 vector unsigned short); 32570 vector signed short vec_max (vector bool short, vector signed short); 32571 vector signed short vec_max (vector signed short, vector bool short); 32572 vector signed short vec_max (vector signed short, vector signed short); 32573 vector unsigned int vec_max (vector bool int, vector unsigned int); 32574 vector unsigned int vec_max (vector unsigned int, vector bool int); 32575 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 32576 vector signed int vec_max (vector bool int, vector signed int); 32577 vector signed int vec_max (vector signed int, vector bool int); 32578 vector signed int vec_max (vector signed int, vector signed int); 32579 vector float vec_max (vector float, vector float); 32580 32581 vector float vec_vmaxfp (vector float, vector float); 32582 32583 vector signed int vec_vmaxsw (vector bool int, vector signed int); 32584 vector signed int vec_vmaxsw (vector signed int, vector bool int); 32585 vector signed int vec_vmaxsw (vector signed int, vector signed int); 32586 32587 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 32588 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 32589 vector unsigned int vec_vmaxuw (vector unsigned int, 32590 vector unsigned int); 32591 32592 vector signed short vec_vmaxsh (vector bool short, vector signed short); 32593 vector signed short vec_vmaxsh (vector signed short, vector bool short); 32594 vector signed short vec_vmaxsh (vector signed short, 32595 vector signed short); 32596 32597 vector unsigned short vec_vmaxuh (vector bool short, 32598 vector unsigned short); 32599 vector unsigned short vec_vmaxuh (vector unsigned short, 32600 vector bool short); 32601 vector unsigned short vec_vmaxuh (vector unsigned short, 32602 vector unsigned short); 32603 32604 vector signed char vec_vmaxsb (vector bool char, vector signed char); 32605 vector signed char vec_vmaxsb (vector signed char, vector bool char); 32606 vector signed char vec_vmaxsb (vector signed char, vector signed char); 32607 32608 vector unsigned char vec_vmaxub (vector bool char, 32609 vector unsigned char); 32610 vector unsigned char vec_vmaxub (vector unsigned char, 32611 vector bool char); 32612 vector unsigned char vec_vmaxub (vector unsigned char, 32613 vector unsigned char); 32614 32615 vector bool char vec_mergeh (vector bool char, vector bool char); 32616 vector signed char vec_mergeh (vector signed char, vector signed char); 32617 vector unsigned char vec_mergeh (vector unsigned char, 32618 vector unsigned char); 32619 vector bool short vec_mergeh (vector bool short, vector bool short); 32620 vector pixel vec_mergeh (vector pixel, vector pixel); 32621 vector signed short vec_mergeh (vector signed short, 32622 vector signed short); 32623 vector unsigned short vec_mergeh (vector unsigned short, 32624 vector unsigned short); 32625 vector float vec_mergeh (vector float, vector float); 32626 vector bool int vec_mergeh (vector bool int, vector bool int); 32627 vector signed int vec_mergeh (vector signed int, vector signed int); 32628 vector unsigned int vec_mergeh (vector unsigned int, 32629 vector unsigned int); 32630 32631 vector float vec_vmrghw (vector float, vector float); 32632 vector bool int vec_vmrghw (vector bool int, vector bool int); 32633 vector signed int vec_vmrghw (vector signed int, vector signed int); 32634 vector unsigned int vec_vmrghw (vector unsigned int, 32635 vector unsigned int); 32636 32637 vector bool short vec_vmrghh (vector bool short, vector bool short); 32638 vector signed short vec_vmrghh (vector signed short, 32639 vector signed short); 32640 vector unsigned short vec_vmrghh (vector unsigned short, 32641 vector unsigned short); 32642 vector pixel vec_vmrghh (vector pixel, vector pixel); 32643 32644 vector bool char vec_vmrghb (vector bool char, vector bool char); 32645 vector signed char vec_vmrghb (vector signed char, vector signed char); 32646 vector unsigned char vec_vmrghb (vector unsigned char, 32647 vector unsigned char); 32648 32649 vector bool char vec_mergel (vector bool char, vector bool char); 32650 vector signed char vec_mergel (vector signed char, vector signed char); 32651 vector unsigned char vec_mergel (vector unsigned char, 32652 vector unsigned char); 32653 vector bool short vec_mergel (vector bool short, vector bool short); 32654 vector pixel vec_mergel (vector pixel, vector pixel); 32655 vector signed short vec_mergel (vector signed short, 32656 vector signed short); 32657 vector unsigned short vec_mergel (vector unsigned short, 32658 vector unsigned short); 32659 vector float vec_mergel (vector float, vector float); 32660 vector bool int vec_mergel (vector bool int, vector bool int); 32661 vector signed int vec_mergel (vector signed int, vector signed int); 32662 vector unsigned int vec_mergel (vector unsigned int, 32663 vector unsigned int); 32664 32665 vector float vec_vmrglw (vector float, vector float); 32666 vector signed int vec_vmrglw (vector signed int, vector signed int); 32667 vector unsigned int vec_vmrglw (vector unsigned int, 32668 vector unsigned int); 32669 vector bool int vec_vmrglw (vector bool int, vector bool int); 32670 32671 vector bool short vec_vmrglh (vector bool short, vector bool short); 32672 vector signed short vec_vmrglh (vector signed short, 32673 vector signed short); 32674 vector unsigned short vec_vmrglh (vector unsigned short, 32675 vector unsigned short); 32676 vector pixel vec_vmrglh (vector pixel, vector pixel); 32677 32678 vector bool char vec_vmrglb (vector bool char, vector bool char); 32679 vector signed char vec_vmrglb (vector signed char, vector signed char); 32680 vector unsigned char vec_vmrglb (vector unsigned char, 32681 vector unsigned char); 32682 32683 vector unsigned short vec_mfvscr (void); 32684 32685 vector unsigned char vec_min (vector bool char, vector unsigned char); 32686 vector unsigned char vec_min (vector unsigned char, vector bool char); 32687 vector unsigned char vec_min (vector unsigned char, 32688 vector unsigned char); 32689 vector signed char vec_min (vector bool char, vector signed char); 32690 vector signed char vec_min (vector signed char, vector bool char); 32691 vector signed char vec_min (vector signed char, vector signed char); 32692 vector unsigned short vec_min (vector bool short, 32693 vector unsigned short); 32694 vector unsigned short vec_min (vector unsigned short, 32695 vector bool short); 32696 vector unsigned short vec_min (vector unsigned short, 32697 vector unsigned short); 32698 vector signed short vec_min (vector bool short, vector signed short); 32699 vector signed short vec_min (vector signed short, vector bool short); 32700 vector signed short vec_min (vector signed short, vector signed short); 32701 vector unsigned int vec_min (vector bool int, vector unsigned int); 32702 vector unsigned int vec_min (vector unsigned int, vector bool int); 32703 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 32704 vector signed int vec_min (vector bool int, vector signed int); 32705 vector signed int vec_min (vector signed int, vector bool int); 32706 vector signed int vec_min (vector signed int, vector signed int); 32707 vector float vec_min (vector float, vector float); 32708 32709 vector float vec_vminfp (vector float, vector float); 32710 32711 vector signed int vec_vminsw (vector bool int, vector signed int); 32712 vector signed int vec_vminsw (vector signed int, vector bool int); 32713 vector signed int vec_vminsw (vector signed int, vector signed int); 32714 32715 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 32716 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 32717 vector unsigned int vec_vminuw (vector unsigned int, 32718 vector unsigned int); 32719 32720 vector signed short vec_vminsh (vector bool short, vector signed short); 32721 vector signed short vec_vminsh (vector signed short, vector bool short); 32722 vector signed short vec_vminsh (vector signed short, 32723 vector signed short); 32724 32725 vector unsigned short vec_vminuh (vector bool short, 32726 vector unsigned short); 32727 vector unsigned short vec_vminuh (vector unsigned short, 32728 vector bool short); 32729 vector unsigned short vec_vminuh (vector unsigned short, 32730 vector unsigned short); 32731 32732 vector signed char vec_vminsb (vector bool char, vector signed char); 32733 vector signed char vec_vminsb (vector signed char, vector bool char); 32734 vector signed char vec_vminsb (vector signed char, vector signed char); 32735 32736 vector unsigned char vec_vminub (vector bool char, 32737 vector unsigned char); 32738 vector unsigned char vec_vminub (vector unsigned char, 32739 vector bool char); 32740 vector unsigned char vec_vminub (vector unsigned char, 32741 vector unsigned char); 32742 32743 vector signed short vec_mladd (vector signed short, 32744 vector signed short, 32745 vector signed short); 32746 vector signed short vec_mladd (vector signed short, 32747 vector unsigned short, 32748 vector unsigned short); 32749 vector signed short vec_mladd (vector unsigned short, 32750 vector signed short, 32751 vector signed short); 32752 vector unsigned short vec_mladd (vector unsigned short, 32753 vector unsigned short, 32754 vector unsigned short); 32755 32756 vector signed short vec_mradds (vector signed short, 32757 vector signed short, 32758 vector signed short); 32759 32760 vector unsigned int vec_msum (vector unsigned char, 32761 vector unsigned char, 32762 vector unsigned int); 32763 vector signed int vec_msum (vector signed char, 32764 vector unsigned char, 32765 vector signed int); 32766 vector unsigned int vec_msum (vector unsigned short, 32767 vector unsigned short, 32768 vector unsigned int); 32769 vector signed int vec_msum (vector signed short, 32770 vector signed short, 32771 vector signed int); 32772 32773 vector signed int vec_vmsumshm (vector signed short, 32774 vector signed short, 32775 vector signed int); 32776 32777 vector unsigned int vec_vmsumuhm (vector unsigned short, 32778 vector unsigned short, 32779 vector unsigned int); 32780 32781 vector signed int vec_vmsummbm (vector signed char, 32782 vector unsigned char, 32783 vector signed int); 32784 32785 vector unsigned int vec_vmsumubm (vector unsigned char, 32786 vector unsigned char, 32787 vector unsigned int); 32788 32789 vector unsigned int vec_msums (vector unsigned short, 32790 vector unsigned short, 32791 vector unsigned int); 32792 vector signed int vec_msums (vector signed short, 32793 vector signed short, 32794 vector signed int); 32795 32796 vector signed int vec_vmsumshs (vector signed short, 32797 vector signed short, 32798 vector signed int); 32799 32800 vector unsigned int vec_vmsumuhs (vector unsigned short, 32801 vector unsigned short, 32802 vector unsigned int); 32803 32804 void vec_mtvscr (vector signed int); 32805 void vec_mtvscr (vector unsigned int); 32806 void vec_mtvscr (vector bool int); 32807 void vec_mtvscr (vector signed short); 32808 void vec_mtvscr (vector unsigned short); 32809 void vec_mtvscr (vector bool short); 32810 void vec_mtvscr (vector pixel); 32811 void vec_mtvscr (vector signed char); 32812 void vec_mtvscr (vector unsigned char); 32813 void vec_mtvscr (vector bool char); 32814 32815 vector unsigned short vec_mule (vector unsigned char, 32816 vector unsigned char); 32817 vector signed short vec_mule (vector signed char, 32818 vector signed char); 32819 vector unsigned int vec_mule (vector unsigned short, 32820 vector unsigned short); 32821 vector signed int vec_mule (vector signed short, vector signed short); 32822 32823 vector signed int vec_vmulesh (vector signed short, 32824 vector signed short); 32825 32826 vector unsigned int vec_vmuleuh (vector unsigned short, 32827 vector unsigned short); 32828 32829 vector signed short vec_vmulesb (vector signed char, 32830 vector signed char); 32831 32832 vector unsigned short vec_vmuleub (vector unsigned char, 32833 vector unsigned char); 32834 32835 vector unsigned short vec_mulo (vector unsigned char, 32836 vector unsigned char); 32837 vector signed short vec_mulo (vector signed char, vector signed char); 32838 vector unsigned int vec_mulo (vector unsigned short, 32839 vector unsigned short); 32840 vector signed int vec_mulo (vector signed short, vector signed short); 32841 32842 vector signed int vec_vmulosh (vector signed short, 32843 vector signed short); 32844 32845 vector unsigned int vec_vmulouh (vector unsigned short, 32846 vector unsigned short); 32847 32848 vector signed short vec_vmulosb (vector signed char, 32849 vector signed char); 32850 32851 vector unsigned short vec_vmuloub (vector unsigned char, 32852 vector unsigned char); 32853 32854 vector float vec_nmsub (vector float, vector float, vector float); 32855 32856 vector float vec_nor (vector float, vector float); 32857 vector signed int vec_nor (vector signed int, vector signed int); 32858 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 32859 vector bool int vec_nor (vector bool int, vector bool int); 32860 vector signed short vec_nor (vector signed short, vector signed short); 32861 vector unsigned short vec_nor (vector unsigned short, 32862 vector unsigned short); 32863 vector bool short vec_nor (vector bool short, vector bool short); 32864 vector signed char vec_nor (vector signed char, vector signed char); 32865 vector unsigned char vec_nor (vector unsigned char, 32866 vector unsigned char); 32867 vector bool char vec_nor (vector bool char, vector bool char); 32868 32869 vector float vec_or (vector float, vector float); 32870 vector float vec_or (vector float, vector bool int); 32871 vector float vec_or (vector bool int, vector float); 32872 vector bool int vec_or (vector bool int, vector bool int); 32873 vector signed int vec_or (vector bool int, vector signed int); 32874 vector signed int vec_or (vector signed int, vector bool int); 32875 vector signed int vec_or (vector signed int, vector signed int); 32876 vector unsigned int vec_or (vector bool int, vector unsigned int); 32877 vector unsigned int vec_or (vector unsigned int, vector bool int); 32878 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 32879 vector bool short vec_or (vector bool short, vector bool short); 32880 vector signed short vec_or (vector bool short, vector signed short); 32881 vector signed short vec_or (vector signed short, vector bool short); 32882 vector signed short vec_or (vector signed short, vector signed short); 32883 vector unsigned short vec_or (vector bool short, vector unsigned short); 32884 vector unsigned short vec_or (vector unsigned short, vector bool short); 32885 vector unsigned short vec_or (vector unsigned short, 32886 vector unsigned short); 32887 vector signed char vec_or (vector bool char, vector signed char); 32888 vector bool char vec_or (vector bool char, vector bool char); 32889 vector signed char vec_or (vector signed char, vector bool char); 32890 vector signed char vec_or (vector signed char, vector signed char); 32891 vector unsigned char vec_or (vector bool char, vector unsigned char); 32892 vector unsigned char vec_or (vector unsigned char, vector bool char); 32893 vector unsigned char vec_or (vector unsigned char, 32894 vector unsigned char); 32895 32896 vector signed char vec_pack (vector signed short, vector signed short); 32897 vector unsigned char vec_pack (vector unsigned short, 32898 vector unsigned short); 32899 vector bool char vec_pack (vector bool short, vector bool short); 32900 vector signed short vec_pack (vector signed int, vector signed int); 32901 vector unsigned short vec_pack (vector unsigned int, 32902 vector unsigned int); 32903 vector bool short vec_pack (vector bool int, vector bool int); 32904 32905 vector bool short vec_vpkuwum (vector bool int, vector bool int); 32906 vector signed short vec_vpkuwum (vector signed int, vector signed int); 32907 vector unsigned short vec_vpkuwum (vector unsigned int, 32908 vector unsigned int); 32909 32910 vector bool char vec_vpkuhum (vector bool short, vector bool short); 32911 vector signed char vec_vpkuhum (vector signed short, 32912 vector signed short); 32913 vector unsigned char vec_vpkuhum (vector unsigned short, 32914 vector unsigned short); 32915 32916 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 32917 32918 vector unsigned char vec_packs (vector unsigned short, 32919 vector unsigned short); 32920 vector signed char vec_packs (vector signed short, vector signed short); 32921 vector unsigned short vec_packs (vector unsigned int, 32922 vector unsigned int); 32923 vector signed short vec_packs (vector signed int, vector signed int); 32924 32925 vector signed short vec_vpkswss (vector signed int, vector signed int); 32926 32927 vector unsigned short vec_vpkuwus (vector unsigned int, 32928 vector unsigned int); 32929 32930 vector signed char vec_vpkshss (vector signed short, 32931 vector signed short); 32932 32933 vector unsigned char vec_vpkuhus (vector unsigned short, 32934 vector unsigned short); 32935 32936 vector unsigned char vec_packsu (vector unsigned short, 32937 vector unsigned short); 32938 vector unsigned char vec_packsu (vector signed short, 32939 vector signed short); 32940 vector unsigned short vec_packsu (vector unsigned int, 32941 vector unsigned int); 32942 vector unsigned short vec_packsu (vector signed int, vector signed int); 32943 32944 vector unsigned short vec_vpkswus (vector signed int, 32945 vector signed int); 32946 32947 vector unsigned char vec_vpkshus (vector signed short, 32948 vector signed short); 32949 32950 vector float vec_perm (vector float, 32951 vector float, 32952 vector unsigned char); 32953 vector signed int vec_perm (vector signed int, 32954 vector signed int, 32955 vector unsigned char); 32956 vector unsigned int vec_perm (vector unsigned int, 32957 vector unsigned int, 32958 vector unsigned char); 32959 vector bool int vec_perm (vector bool int, 32960 vector bool int, 32961 vector unsigned char); 32962 vector signed short vec_perm (vector signed short, 32963 vector signed short, 32964 vector unsigned char); 32965 vector unsigned short vec_perm (vector unsigned short, 32966 vector unsigned short, 32967 vector unsigned char); 32968 vector bool short vec_perm (vector bool short, 32969 vector bool short, 32970 vector unsigned char); 32971 vector pixel vec_perm (vector pixel, 32972 vector pixel, 32973 vector unsigned char); 32974 vector signed char vec_perm (vector signed char, 32975 vector signed char, 32976 vector unsigned char); 32977 vector unsigned char vec_perm (vector unsigned char, 32978 vector unsigned char, 32979 vector unsigned char); 32980 vector bool char vec_perm (vector bool char, 32981 vector bool char, 32982 vector unsigned char); 32983 32984 vector float vec_re (vector float); 32985 32986 vector signed char vec_rl (vector signed char, 32987 vector unsigned char); 32988 vector unsigned char vec_rl (vector unsigned char, 32989 vector unsigned char); 32990 vector signed short vec_rl (vector signed short, vector unsigned short); 32991 vector unsigned short vec_rl (vector unsigned short, 32992 vector unsigned short); 32993 vector signed int vec_rl (vector signed int, vector unsigned int); 32994 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 32995 32996 vector signed int vec_vrlw (vector signed int, vector unsigned int); 32997 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 32998 32999 vector signed short vec_vrlh (vector signed short, 33000 vector unsigned short); 33001 vector unsigned short vec_vrlh (vector unsigned short, 33002 vector unsigned short); 33003 33004 vector signed char vec_vrlb (vector signed char, vector unsigned char); 33005 vector unsigned char vec_vrlb (vector unsigned char, 33006 vector unsigned char); 33007 33008 vector float vec_round (vector float); 33009 33010 vector float vec_rsqrte (vector float); 33011 33012 vector float vec_sel (vector float, vector float, vector bool int); 33013 vector float vec_sel (vector float, vector float, vector unsigned int); 33014 vector signed int vec_sel (vector signed int, 33015 vector signed int, 33016 vector bool int); 33017 vector signed int vec_sel (vector signed int, 33018 vector signed int, 33019 vector unsigned int); 33020 vector unsigned int vec_sel (vector unsigned int, 33021 vector unsigned int, 33022 vector bool int); 33023 vector unsigned int vec_sel (vector unsigned int, 33024 vector unsigned int, 33025 vector unsigned int); 33026 vector bool int vec_sel (vector bool int, 33027 vector bool int, 33028 vector bool int); 33029 vector bool int vec_sel (vector bool int, 33030 vector bool int, 33031 vector unsigned int); 33032 vector signed short vec_sel (vector signed short, 33033 vector signed short, 33034 vector bool short); 33035 vector signed short vec_sel (vector signed short, 33036 vector signed short, 33037 vector unsigned short); 33038 vector unsigned short vec_sel (vector unsigned short, 33039 vector unsigned short, 33040 vector bool short); 33041 vector unsigned short vec_sel (vector unsigned short, 33042 vector unsigned short, 33043 vector unsigned short); 33044 vector bool short vec_sel (vector bool short, 33045 vector bool short, 33046 vector bool short); 33047 vector bool short vec_sel (vector bool short, 33048 vector bool short, 33049 vector unsigned short); 33050 vector signed char vec_sel (vector signed char, 33051 vector signed char, 33052 vector bool char); 33053 vector signed char vec_sel (vector signed char, 33054 vector signed char, 33055 vector unsigned char); 33056 vector unsigned char vec_sel (vector unsigned char, 33057 vector unsigned char, 33058 vector bool char); 33059 vector unsigned char vec_sel (vector unsigned char, 33060 vector unsigned char, 33061 vector unsigned char); 33062 vector bool char vec_sel (vector bool char, 33063 vector bool char, 33064 vector bool char); 33065 vector bool char vec_sel (vector bool char, 33066 vector bool char, 33067 vector unsigned char); 33068 33069 vector signed char vec_sl (vector signed char, 33070 vector unsigned char); 33071 vector unsigned char vec_sl (vector unsigned char, 33072 vector unsigned char); 33073 vector signed short vec_sl (vector signed short, vector unsigned short); 33074 vector unsigned short vec_sl (vector unsigned short, 33075 vector unsigned short); 33076 vector signed int vec_sl (vector signed int, vector unsigned int); 33077 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 33078 33079 vector signed int vec_vslw (vector signed int, vector unsigned int); 33080 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 33081 33082 vector signed short vec_vslh (vector signed short, 33083 vector unsigned short); 33084 vector unsigned short vec_vslh (vector unsigned short, 33085 vector unsigned short); 33086 33087 vector signed char vec_vslb (vector signed char, vector unsigned char); 33088 vector unsigned char vec_vslb (vector unsigned char, 33089 vector unsigned char); 33090 33091 vector float vec_sld (vector float, vector float, const int); 33092 vector signed int vec_sld (vector signed int, 33093 vector signed int, 33094 const int); 33095 vector unsigned int vec_sld (vector unsigned int, 33096 vector unsigned int, 33097 const int); 33098 vector bool int vec_sld (vector bool int, 33099 vector bool int, 33100 const int); 33101 vector signed short vec_sld (vector signed short, 33102 vector signed short, 33103 const int); 33104 vector unsigned short vec_sld (vector unsigned short, 33105 vector unsigned short, 33106 const int); 33107 vector bool short vec_sld (vector bool short, 33108 vector bool short, 33109 const int); 33110 vector pixel vec_sld (vector pixel, 33111 vector pixel, 33112 const int); 33113 vector signed char vec_sld (vector signed char, 33114 vector signed char, 33115 const int); 33116 vector unsigned char vec_sld (vector unsigned char, 33117 vector unsigned char, 33118 const int); 33119 vector bool char vec_sld (vector bool char, 33120 vector bool char, 33121 const int); 33122 33123 vector signed int vec_sll (vector signed int, 33124 vector unsigned int); 33125 vector signed int vec_sll (vector signed int, 33126 vector unsigned short); 33127 vector signed int vec_sll (vector signed int, 33128 vector unsigned char); 33129 vector unsigned int vec_sll (vector unsigned int, 33130 vector unsigned int); 33131 vector unsigned int vec_sll (vector unsigned int, 33132 vector unsigned short); 33133 vector unsigned int vec_sll (vector unsigned int, 33134 vector unsigned char); 33135 vector bool int vec_sll (vector bool int, 33136 vector unsigned int); 33137 vector bool int vec_sll (vector bool int, 33138 vector unsigned short); 33139 vector bool int vec_sll (vector bool int, 33140 vector unsigned char); 33141 vector signed short vec_sll (vector signed short, 33142 vector unsigned int); 33143 vector signed short vec_sll (vector signed short, 33144 vector unsigned short); 33145 vector signed short vec_sll (vector signed short, 33146 vector unsigned char); 33147 vector unsigned short vec_sll (vector unsigned short, 33148 vector unsigned int); 33149 vector unsigned short vec_sll (vector unsigned short, 33150 vector unsigned short); 33151 vector unsigned short vec_sll (vector unsigned short, 33152 vector unsigned char); 33153 vector bool short vec_sll (vector bool short, vector unsigned int); 33154 vector bool short vec_sll (vector bool short, vector unsigned short); 33155 vector bool short vec_sll (vector bool short, vector unsigned char); 33156 vector pixel vec_sll (vector pixel, vector unsigned int); 33157 vector pixel vec_sll (vector pixel, vector unsigned short); 33158 vector pixel vec_sll (vector pixel, vector unsigned char); 33159 vector signed char vec_sll (vector signed char, vector unsigned int); 33160 vector signed char vec_sll (vector signed char, vector unsigned short); 33161 vector signed char vec_sll (vector signed char, vector unsigned char); 33162 vector unsigned char vec_sll (vector unsigned char, 33163 vector unsigned int); 33164 vector unsigned char vec_sll (vector unsigned char, 33165 vector unsigned short); 33166 vector unsigned char vec_sll (vector unsigned char, 33167 vector unsigned char); 33168 vector bool char vec_sll (vector bool char, vector unsigned int); 33169 vector bool char vec_sll (vector bool char, vector unsigned short); 33170 vector bool char vec_sll (vector bool char, vector unsigned char); 33171 33172 vector float vec_slo (vector float, vector signed char); 33173 vector float vec_slo (vector float, vector unsigned char); 33174 vector signed int vec_slo (vector signed int, vector signed char); 33175 vector signed int vec_slo (vector signed int, vector unsigned char); 33176 vector unsigned int vec_slo (vector unsigned int, vector signed char); 33177 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 33178 vector signed short vec_slo (vector signed short, vector signed char); 33179 vector signed short vec_slo (vector signed short, vector unsigned char); 33180 vector unsigned short vec_slo (vector unsigned short, 33181 vector signed char); 33182 vector unsigned short vec_slo (vector unsigned short, 33183 vector unsigned char); 33184 vector pixel vec_slo (vector pixel, vector signed char); 33185 vector pixel vec_slo (vector pixel, vector unsigned char); 33186 vector signed char vec_slo (vector signed char, vector signed char); 33187 vector signed char vec_slo (vector signed char, vector unsigned char); 33188 vector unsigned char vec_slo (vector unsigned char, vector signed char); 33189 vector unsigned char vec_slo (vector unsigned char, 33190 vector unsigned char); 33191 33192 vector signed char vec_splat (vector signed char, const int); 33193 vector unsigned char vec_splat (vector unsigned char, const int); 33194 vector bool char vec_splat (vector bool char, const int); 33195 vector signed short vec_splat (vector signed short, const int); 33196 vector unsigned short vec_splat (vector unsigned short, const int); 33197 vector bool short vec_splat (vector bool short, const int); 33198 vector pixel vec_splat (vector pixel, const int); 33199 vector float vec_splat (vector float, const int); 33200 vector signed int vec_splat (vector signed int, const int); 33201 vector unsigned int vec_splat (vector unsigned int, const int); 33202 vector bool int vec_splat (vector bool int, const int); 33203 33204 vector float vec_vspltw (vector float, const int); 33205 vector signed int vec_vspltw (vector signed int, const int); 33206 vector unsigned int vec_vspltw (vector unsigned int, const int); 33207 vector bool int vec_vspltw (vector bool int, const int); 33208 33209 vector bool short vec_vsplth (vector bool short, const int); 33210 vector signed short vec_vsplth (vector signed short, const int); 33211 vector unsigned short vec_vsplth (vector unsigned short, const int); 33212 vector pixel vec_vsplth (vector pixel, const int); 33213 33214 vector signed char vec_vspltb (vector signed char, const int); 33215 vector unsigned char vec_vspltb (vector unsigned char, const int); 33216 vector bool char vec_vspltb (vector bool char, const int); 33217 33218 vector signed char vec_splat_s8 (const int); 33219 33220 vector signed short vec_splat_s16 (const int); 33221 33222 vector signed int vec_splat_s32 (const int); 33223 33224 vector unsigned char vec_splat_u8 (const int); 33225 33226 vector unsigned short vec_splat_u16 (const int); 33227 33228 vector unsigned int vec_splat_u32 (const int); 33229 33230 vector signed char vec_sr (vector signed char, vector unsigned char); 33231 vector unsigned char vec_sr (vector unsigned char, 33232 vector unsigned char); 33233 vector signed short vec_sr (vector signed short, 33234 vector unsigned short); 33235 vector unsigned short vec_sr (vector unsigned short, 33236 vector unsigned short); 33237 vector signed int vec_sr (vector signed int, vector unsigned int); 33238 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 33239 33240 vector signed int vec_vsrw (vector signed int, vector unsigned int); 33241 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 33242 33243 vector signed short vec_vsrh (vector signed short, 33244 vector unsigned short); 33245 vector unsigned short vec_vsrh (vector unsigned short, 33246 vector unsigned short); 33247 33248 vector signed char vec_vsrb (vector signed char, vector unsigned char); 33249 vector unsigned char vec_vsrb (vector unsigned char, 33250 vector unsigned char); 33251 33252 vector signed char vec_sra (vector signed char, vector unsigned char); 33253 vector unsigned char vec_sra (vector unsigned char, 33254 vector unsigned char); 33255 vector signed short vec_sra (vector signed short, 33256 vector unsigned short); 33257 vector unsigned short vec_sra (vector unsigned short, 33258 vector unsigned short); 33259 vector signed int vec_sra (vector signed int, vector unsigned int); 33260 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 33261 33262 vector signed int vec_vsraw (vector signed int, vector unsigned int); 33263 vector unsigned int vec_vsraw (vector unsigned int, 33264 vector unsigned int); 33265 33266 vector signed short vec_vsrah (vector signed short, 33267 vector unsigned short); 33268 vector unsigned short vec_vsrah (vector unsigned short, 33269 vector unsigned short); 33270 33271 vector signed char vec_vsrab (vector signed char, vector unsigned char); 33272 vector unsigned char vec_vsrab (vector unsigned char, 33273 vector unsigned char); 33274 33275 vector signed int vec_srl (vector signed int, vector unsigned int); 33276 vector signed int vec_srl (vector signed int, vector unsigned short); 33277 vector signed int vec_srl (vector signed int, vector unsigned char); 33278 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 33279 vector unsigned int vec_srl (vector unsigned int, 33280 vector unsigned short); 33281 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 33282 vector bool int vec_srl (vector bool int, vector unsigned int); 33283 vector bool int vec_srl (vector bool int, vector unsigned short); 33284 vector bool int vec_srl (vector bool int, vector unsigned char); 33285 vector signed short vec_srl (vector signed short, vector unsigned int); 33286 vector signed short vec_srl (vector signed short, 33287 vector unsigned short); 33288 vector signed short vec_srl (vector signed short, vector unsigned char); 33289 vector unsigned short vec_srl (vector unsigned short, 33290 vector unsigned int); 33291 vector unsigned short vec_srl (vector unsigned short, 33292 vector unsigned short); 33293 vector unsigned short vec_srl (vector unsigned short, 33294 vector unsigned char); 33295 vector bool short vec_srl (vector bool short, vector unsigned int); 33296 vector bool short vec_srl (vector bool short, vector unsigned short); 33297 vector bool short vec_srl (vector bool short, vector unsigned char); 33298 vector pixel vec_srl (vector pixel, vector unsigned int); 33299 vector pixel vec_srl (vector pixel, vector unsigned short); 33300 vector pixel vec_srl (vector pixel, vector unsigned char); 33301 vector signed char vec_srl (vector signed char, vector unsigned int); 33302 vector signed char vec_srl (vector signed char, vector unsigned short); 33303 vector signed char vec_srl (vector signed char, vector unsigned char); 33304 vector unsigned char vec_srl (vector unsigned char, 33305 vector unsigned int); 33306 vector unsigned char vec_srl (vector unsigned char, 33307 vector unsigned short); 33308 vector unsigned char vec_srl (vector unsigned char, 33309 vector unsigned char); 33310 vector bool char vec_srl (vector bool char, vector unsigned int); 33311 vector bool char vec_srl (vector bool char, vector unsigned short); 33312 vector bool char vec_srl (vector bool char, vector unsigned char); 33313 33314 vector float vec_sro (vector float, vector signed char); 33315 vector float vec_sro (vector float, vector unsigned char); 33316 vector signed int vec_sro (vector signed int, vector signed char); 33317 vector signed int vec_sro (vector signed int, vector unsigned char); 33318 vector unsigned int vec_sro (vector unsigned int, vector signed char); 33319 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 33320 vector signed short vec_sro (vector signed short, vector signed char); 33321 vector signed short vec_sro (vector signed short, vector unsigned char); 33322 vector unsigned short vec_sro (vector unsigned short, 33323 vector signed char); 33324 vector unsigned short vec_sro (vector unsigned short, 33325 vector unsigned char); 33326 vector pixel vec_sro (vector pixel, vector signed char); 33327 vector pixel vec_sro (vector pixel, vector unsigned char); 33328 vector signed char vec_sro (vector signed char, vector signed char); 33329 vector signed char vec_sro (vector signed char, vector unsigned char); 33330 vector unsigned char vec_sro (vector unsigned char, vector signed char); 33331 vector unsigned char vec_sro (vector unsigned char, 33332 vector unsigned char); 33333 33334 void vec_st (vector float, int, vector float *); 33335 void vec_st (vector float, int, float *); 33336 void vec_st (vector signed int, int, vector signed int *); 33337 void vec_st (vector signed int, int, int *); 33338 void vec_st (vector unsigned int, int, vector unsigned int *); 33339 void vec_st (vector unsigned int, int, unsigned int *); 33340 void vec_st (vector bool int, int, vector bool int *); 33341 void vec_st (vector bool int, int, unsigned int *); 33342 void vec_st (vector bool int, int, int *); 33343 void vec_st (vector signed short, int, vector signed short *); 33344 void vec_st (vector signed short, int, short *); 33345 void vec_st (vector unsigned short, int, vector unsigned short *); 33346 void vec_st (vector unsigned short, int, unsigned short *); 33347 void vec_st (vector bool short, int, vector bool short *); 33348 void vec_st (vector bool short, int, unsigned short *); 33349 void vec_st (vector pixel, int, vector pixel *); 33350 void vec_st (vector pixel, int, unsigned short *); 33351 void vec_st (vector pixel, int, short *); 33352 void vec_st (vector bool short, int, short *); 33353 void vec_st (vector signed char, int, vector signed char *); 33354 void vec_st (vector signed char, int, signed char *); 33355 void vec_st (vector unsigned char, int, vector unsigned char *); 33356 void vec_st (vector unsigned char, int, unsigned char *); 33357 void vec_st (vector bool char, int, vector bool char *); 33358 void vec_st (vector bool char, int, unsigned char *); 33359 void vec_st (vector bool char, int, signed char *); 33360 33361 void vec_ste (vector signed char, int, signed char *); 33362 void vec_ste (vector unsigned char, int, unsigned char *); 33363 void vec_ste (vector bool char, int, signed char *); 33364 void vec_ste (vector bool char, int, unsigned char *); 33365 void vec_ste (vector signed short, int, short *); 33366 void vec_ste (vector unsigned short, int, unsigned short *); 33367 void vec_ste (vector bool short, int, short *); 33368 void vec_ste (vector bool short, int, unsigned short *); 33369 void vec_ste (vector pixel, int, short *); 33370 void vec_ste (vector pixel, int, unsigned short *); 33371 void vec_ste (vector float, int, float *); 33372 void vec_ste (vector signed int, int, int *); 33373 void vec_ste (vector unsigned int, int, unsigned int *); 33374 void vec_ste (vector bool int, int, int *); 33375 void vec_ste (vector bool int, int, unsigned int *); 33376 33377 void vec_stvewx (vector float, int, float *); 33378 void vec_stvewx (vector signed int, int, int *); 33379 void vec_stvewx (vector unsigned int, int, unsigned int *); 33380 void vec_stvewx (vector bool int, int, int *); 33381 void vec_stvewx (vector bool int, int, unsigned int *); 33382 33383 void vec_stvehx (vector signed short, int, short *); 33384 void vec_stvehx (vector unsigned short, int, unsigned short *); 33385 void vec_stvehx (vector bool short, int, short *); 33386 void vec_stvehx (vector bool short, int, unsigned short *); 33387 void vec_stvehx (vector pixel, int, short *); 33388 void vec_stvehx (vector pixel, int, unsigned short *); 33389 33390 void vec_stvebx (vector signed char, int, signed char *); 33391 void vec_stvebx (vector unsigned char, int, unsigned char *); 33392 void vec_stvebx (vector bool char, int, signed char *); 33393 void vec_stvebx (vector bool char, int, unsigned char *); 33394 33395 void vec_stl (vector float, int, vector float *); 33396 void vec_stl (vector float, int, float *); 33397 void vec_stl (vector signed int, int, vector signed int *); 33398 void vec_stl (vector signed int, int, int *); 33399 void vec_stl (vector unsigned int, int, vector unsigned int *); 33400 void vec_stl (vector unsigned int, int, unsigned int *); 33401 void vec_stl (vector bool int, int, vector bool int *); 33402 void vec_stl (vector bool int, int, unsigned int *); 33403 void vec_stl (vector bool int, int, int *); 33404 void vec_stl (vector signed short, int, vector signed short *); 33405 void vec_stl (vector signed short, int, short *); 33406 void vec_stl (vector unsigned short, int, vector unsigned short *); 33407 void vec_stl (vector unsigned short, int, unsigned short *); 33408 void vec_stl (vector bool short, int, vector bool short *); 33409 void vec_stl (vector bool short, int, unsigned short *); 33410 void vec_stl (vector bool short, int, short *); 33411 void vec_stl (vector pixel, int, vector pixel *); 33412 void vec_stl (vector pixel, int, unsigned short *); 33413 void vec_stl (vector pixel, int, short *); 33414 void vec_stl (vector signed char, int, vector signed char *); 33415 void vec_stl (vector signed char, int, signed char *); 33416 void vec_stl (vector unsigned char, int, vector unsigned char *); 33417 void vec_stl (vector unsigned char, int, unsigned char *); 33418 void vec_stl (vector bool char, int, vector bool char *); 33419 void vec_stl (vector bool char, int, unsigned char *); 33420 void vec_stl (vector bool char, int, signed char *); 33421 33422 vector signed char vec_sub (vector bool char, vector signed char); 33423 vector signed char vec_sub (vector signed char, vector bool char); 33424 vector signed char vec_sub (vector signed char, vector signed char); 33425 vector unsigned char vec_sub (vector bool char, vector unsigned char); 33426 vector unsigned char vec_sub (vector unsigned char, vector bool char); 33427 vector unsigned char vec_sub (vector unsigned char, 33428 vector unsigned char); 33429 vector signed short vec_sub (vector bool short, vector signed short); 33430 vector signed short vec_sub (vector signed short, vector bool short); 33431 vector signed short vec_sub (vector signed short, vector signed short); 33432 vector unsigned short vec_sub (vector bool short, 33433 vector unsigned short); 33434 vector unsigned short vec_sub (vector unsigned short, 33435 vector bool short); 33436 vector unsigned short vec_sub (vector unsigned short, 33437 vector unsigned short); 33438 vector signed int vec_sub (vector bool int, vector signed int); 33439 vector signed int vec_sub (vector signed int, vector bool int); 33440 vector signed int vec_sub (vector signed int, vector signed int); 33441 vector unsigned int vec_sub (vector bool int, vector unsigned int); 33442 vector unsigned int vec_sub (vector unsigned int, vector bool int); 33443 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 33444 vector float vec_sub (vector float, vector float); 33445 33446 vector float vec_vsubfp (vector float, vector float); 33447 33448 vector signed int vec_vsubuwm (vector bool int, vector signed int); 33449 vector signed int vec_vsubuwm (vector signed int, vector bool int); 33450 vector signed int vec_vsubuwm (vector signed int, vector signed int); 33451 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 33452 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 33453 vector unsigned int vec_vsubuwm (vector unsigned int, 33454 vector unsigned int); 33455 33456 vector signed short vec_vsubuhm (vector bool short, 33457 vector signed short); 33458 vector signed short vec_vsubuhm (vector signed short, 33459 vector bool short); 33460 vector signed short vec_vsubuhm (vector signed short, 33461 vector signed short); 33462 vector unsigned short vec_vsubuhm (vector bool short, 33463 vector unsigned short); 33464 vector unsigned short vec_vsubuhm (vector unsigned short, 33465 vector bool short); 33466 vector unsigned short vec_vsubuhm (vector unsigned short, 33467 vector unsigned short); 33468 33469 vector signed char vec_vsububm (vector bool char, vector signed char); 33470 vector signed char vec_vsububm (vector signed char, vector bool char); 33471 vector signed char vec_vsububm (vector signed char, vector signed char); 33472 vector unsigned char vec_vsububm (vector bool char, 33473 vector unsigned char); 33474 vector unsigned char vec_vsububm (vector unsigned char, 33475 vector bool char); 33476 vector unsigned char vec_vsububm (vector unsigned char, 33477 vector unsigned char); 33478 33479 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 33480 33481 vector unsigned char vec_subs (vector bool char, vector unsigned char); 33482 vector unsigned char vec_subs (vector unsigned char, vector bool char); 33483 vector unsigned char vec_subs (vector unsigned char, 33484 vector unsigned char); 33485 vector signed char vec_subs (vector bool char, vector signed char); 33486 vector signed char vec_subs (vector signed char, vector bool char); 33487 vector signed char vec_subs (vector signed char, vector signed char); 33488 vector unsigned short vec_subs (vector bool short, 33489 vector unsigned short); 33490 vector unsigned short vec_subs (vector unsigned short, 33491 vector bool short); 33492 vector unsigned short vec_subs (vector unsigned short, 33493 vector unsigned short); 33494 vector signed short vec_subs (vector bool short, vector signed short); 33495 vector signed short vec_subs (vector signed short, vector bool short); 33496 vector signed short vec_subs (vector signed short, vector signed short); 33497 vector unsigned int vec_subs (vector bool int, vector unsigned int); 33498 vector unsigned int vec_subs (vector unsigned int, vector bool int); 33499 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 33500 vector signed int vec_subs (vector bool int, vector signed int); 33501 vector signed int vec_subs (vector signed int, vector bool int); 33502 vector signed int vec_subs (vector signed int, vector signed int); 33503 33504 vector signed int vec_vsubsws (vector bool int, vector signed int); 33505 vector signed int vec_vsubsws (vector signed int, vector bool int); 33506 vector signed int vec_vsubsws (vector signed int, vector signed int); 33507 33508 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 33509 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 33510 vector unsigned int vec_vsubuws (vector unsigned int, 33511 vector unsigned int); 33512 33513 vector signed short vec_vsubshs (vector bool short, 33514 vector signed short); 33515 vector signed short vec_vsubshs (vector signed short, 33516 vector bool short); 33517 vector signed short vec_vsubshs (vector signed short, 33518 vector signed short); 33519 33520 vector unsigned short vec_vsubuhs (vector bool short, 33521 vector unsigned short); 33522 vector unsigned short vec_vsubuhs (vector unsigned short, 33523 vector bool short); 33524 vector unsigned short vec_vsubuhs (vector unsigned short, 33525 vector unsigned short); 33526 33527 vector signed char vec_vsubsbs (vector bool char, vector signed char); 33528 vector signed char vec_vsubsbs (vector signed char, vector bool char); 33529 vector signed char vec_vsubsbs (vector signed char, vector signed char); 33530 33531 vector unsigned char vec_vsububs (vector bool char, 33532 vector unsigned char); 33533 vector unsigned char vec_vsububs (vector unsigned char, 33534 vector bool char); 33535 vector unsigned char vec_vsububs (vector unsigned char, 33536 vector unsigned char); 33537 33538 vector unsigned int vec_sum4s (vector unsigned char, 33539 vector unsigned int); 33540 vector signed int vec_sum4s (vector signed char, vector signed int); 33541 vector signed int vec_sum4s (vector signed short, vector signed int); 33542 33543 vector signed int vec_vsum4shs (vector signed short, vector signed int); 33544 33545 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 33546 33547 vector unsigned int vec_vsum4ubs (vector unsigned char, 33548 vector unsigned int); 33549 33550 vector signed int vec_sum2s (vector signed int, vector signed int); 33551 33552 vector signed int vec_sums (vector signed int, vector signed int); 33553 33554 vector float vec_trunc (vector float); 33555 33556 vector signed short vec_unpackh (vector signed char); 33557 vector bool short vec_unpackh (vector bool char); 33558 vector signed int vec_unpackh (vector signed short); 33559 vector bool int vec_unpackh (vector bool short); 33560 vector unsigned int vec_unpackh (vector pixel); 33561 33562 vector bool int vec_vupkhsh (vector bool short); 33563 vector signed int vec_vupkhsh (vector signed short); 33564 33565 vector unsigned int vec_vupkhpx (vector pixel); 33566 33567 vector bool short vec_vupkhsb (vector bool char); 33568 vector signed short vec_vupkhsb (vector signed char); 33569 33570 vector signed short vec_unpackl (vector signed char); 33571 vector bool short vec_unpackl (vector bool char); 33572 vector unsigned int vec_unpackl (vector pixel); 33573 vector signed int vec_unpackl (vector signed short); 33574 vector bool int vec_unpackl (vector bool short); 33575 33576 vector unsigned int vec_vupklpx (vector pixel); 33577 33578 vector bool int vec_vupklsh (vector bool short); 33579 vector signed int vec_vupklsh (vector signed short); 33580 33581 vector bool short vec_vupklsb (vector bool char); 33582 vector signed short vec_vupklsb (vector signed char); 33583 33584 vector float vec_xor (vector float, vector float); 33585 vector float vec_xor (vector float, vector bool int); 33586 vector float vec_xor (vector bool int, vector float); 33587 vector bool int vec_xor (vector bool int, vector bool int); 33588 vector signed int vec_xor (vector bool int, vector signed int); 33589 vector signed int vec_xor (vector signed int, vector bool int); 33590 vector signed int vec_xor (vector signed int, vector signed int); 33591 vector unsigned int vec_xor (vector bool int, vector unsigned int); 33592 vector unsigned int vec_xor (vector unsigned int, vector bool int); 33593 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 33594 vector bool short vec_xor (vector bool short, vector bool short); 33595 vector signed short vec_xor (vector bool short, vector signed short); 33596 vector signed short vec_xor (vector signed short, vector bool short); 33597 vector signed short vec_xor (vector signed short, vector signed short); 33598 vector unsigned short vec_xor (vector bool short, 33599 vector unsigned short); 33600 vector unsigned short vec_xor (vector unsigned short, 33601 vector bool short); 33602 vector unsigned short vec_xor (vector unsigned short, 33603 vector unsigned short); 33604 vector signed char vec_xor (vector bool char, vector signed char); 33605 vector bool char vec_xor (vector bool char, vector bool char); 33606 vector signed char vec_xor (vector signed char, vector bool char); 33607 vector signed char vec_xor (vector signed char, vector signed char); 33608 vector unsigned char vec_xor (vector bool char, vector unsigned char); 33609 vector unsigned char vec_xor (vector unsigned char, vector bool char); 33610 vector unsigned char vec_xor (vector unsigned char, 33611 vector unsigned char); 33612 33613 int vec_all_eq (vector signed char, vector bool char); 33614 int vec_all_eq (vector signed char, vector signed char); 33615 int vec_all_eq (vector unsigned char, vector bool char); 33616 int vec_all_eq (vector unsigned char, vector unsigned char); 33617 int vec_all_eq (vector bool char, vector bool char); 33618 int vec_all_eq (vector bool char, vector unsigned char); 33619 int vec_all_eq (vector bool char, vector signed char); 33620 int vec_all_eq (vector signed short, vector bool short); 33621 int vec_all_eq (vector signed short, vector signed short); 33622 int vec_all_eq (vector unsigned short, vector bool short); 33623 int vec_all_eq (vector unsigned short, vector unsigned short); 33624 int vec_all_eq (vector bool short, vector bool short); 33625 int vec_all_eq (vector bool short, vector unsigned short); 33626 int vec_all_eq (vector bool short, vector signed short); 33627 int vec_all_eq (vector pixel, vector pixel); 33628 int vec_all_eq (vector signed int, vector bool int); 33629 int vec_all_eq (vector signed int, vector signed int); 33630 int vec_all_eq (vector unsigned int, vector bool int); 33631 int vec_all_eq (vector unsigned int, vector unsigned int); 33632 int vec_all_eq (vector bool int, vector bool int); 33633 int vec_all_eq (vector bool int, vector unsigned int); 33634 int vec_all_eq (vector bool int, vector signed int); 33635 int vec_all_eq (vector float, vector float); 33636 33637 int vec_all_ge (vector bool char, vector unsigned char); 33638 int vec_all_ge (vector unsigned char, vector bool char); 33639 int vec_all_ge (vector unsigned char, vector unsigned char); 33640 int vec_all_ge (vector bool char, vector signed char); 33641 int vec_all_ge (vector signed char, vector bool char); 33642 int vec_all_ge (vector signed char, vector signed char); 33643 int vec_all_ge (vector bool short, vector unsigned short); 33644 int vec_all_ge (vector unsigned short, vector bool short); 33645 int vec_all_ge (vector unsigned short, vector unsigned short); 33646 int vec_all_ge (vector signed short, vector signed short); 33647 int vec_all_ge (vector bool short, vector signed short); 33648 int vec_all_ge (vector signed short, vector bool short); 33649 int vec_all_ge (vector bool int, vector unsigned int); 33650 int vec_all_ge (vector unsigned int, vector bool int); 33651 int vec_all_ge (vector unsigned int, vector unsigned int); 33652 int vec_all_ge (vector bool int, vector signed int); 33653 int vec_all_ge (vector signed int, vector bool int); 33654 int vec_all_ge (vector signed int, vector signed int); 33655 int vec_all_ge (vector float, vector float); 33656 33657 int vec_all_gt (vector bool char, vector unsigned char); 33658 int vec_all_gt (vector unsigned char, vector bool char); 33659 int vec_all_gt (vector unsigned char, vector unsigned char); 33660 int vec_all_gt (vector bool char, vector signed char); 33661 int vec_all_gt (vector signed char, vector bool char); 33662 int vec_all_gt (vector signed char, vector signed char); 33663 int vec_all_gt (vector bool short, vector unsigned short); 33664 int vec_all_gt (vector unsigned short, vector bool short); 33665 int vec_all_gt (vector unsigned short, vector unsigned short); 33666 int vec_all_gt (vector bool short, vector signed short); 33667 int vec_all_gt (vector signed short, vector bool short); 33668 int vec_all_gt (vector signed short, vector signed short); 33669 int vec_all_gt (vector bool int, vector unsigned int); 33670 int vec_all_gt (vector unsigned int, vector bool int); 33671 int vec_all_gt (vector unsigned int, vector unsigned int); 33672 int vec_all_gt (vector bool int, vector signed int); 33673 int vec_all_gt (vector signed int, vector bool int); 33674 int vec_all_gt (vector signed int, vector signed int); 33675 int vec_all_gt (vector float, vector float); 33676 33677 int vec_all_in (vector float, vector float); 33678 33679 int vec_all_le (vector bool char, vector unsigned char); 33680 int vec_all_le (vector unsigned char, vector bool char); 33681 int vec_all_le (vector unsigned char, vector unsigned char); 33682 int vec_all_le (vector bool char, vector signed char); 33683 int vec_all_le (vector signed char, vector bool char); 33684 int vec_all_le (vector signed char, vector signed char); 33685 int vec_all_le (vector bool short, vector unsigned short); 33686 int vec_all_le (vector unsigned short, vector bool short); 33687 int vec_all_le (vector unsigned short, vector unsigned short); 33688 int vec_all_le (vector bool short, vector signed short); 33689 int vec_all_le (vector signed short, vector bool short); 33690 int vec_all_le (vector signed short, vector signed short); 33691 int vec_all_le (vector bool int, vector unsigned int); 33692 int vec_all_le (vector unsigned int, vector bool int); 33693 int vec_all_le (vector unsigned int, vector unsigned int); 33694 int vec_all_le (vector bool int, vector signed int); 33695 int vec_all_le (vector signed int, vector bool int); 33696 int vec_all_le (vector signed int, vector signed int); 33697 int vec_all_le (vector float, vector float); 33698 33699 int vec_all_lt (vector bool char, vector unsigned char); 33700 int vec_all_lt (vector unsigned char, vector bool char); 33701 int vec_all_lt (vector unsigned char, vector unsigned char); 33702 int vec_all_lt (vector bool char, vector signed char); 33703 int vec_all_lt (vector signed char, vector bool char); 33704 int vec_all_lt (vector signed char, vector signed char); 33705 int vec_all_lt (vector bool short, vector unsigned short); 33706 int vec_all_lt (vector unsigned short, vector bool short); 33707 int vec_all_lt (vector unsigned short, vector unsigned short); 33708 int vec_all_lt (vector bool short, vector signed short); 33709 int vec_all_lt (vector signed short, vector bool short); 33710 int vec_all_lt (vector signed short, vector signed short); 33711 int vec_all_lt (vector bool int, vector unsigned int); 33712 int vec_all_lt (vector unsigned int, vector bool int); 33713 int vec_all_lt (vector unsigned int, vector unsigned int); 33714 int vec_all_lt (vector bool int, vector signed int); 33715 int vec_all_lt (vector signed int, vector bool int); 33716 int vec_all_lt (vector signed int, vector signed int); 33717 int vec_all_lt (vector float, vector float); 33718 33719 int vec_all_nan (vector float); 33720 33721 int vec_all_ne (vector signed char, vector bool char); 33722 int vec_all_ne (vector signed char, vector signed char); 33723 int vec_all_ne (vector unsigned char, vector bool char); 33724 int vec_all_ne (vector unsigned char, vector unsigned char); 33725 int vec_all_ne (vector bool char, vector bool char); 33726 int vec_all_ne (vector bool char, vector unsigned char); 33727 int vec_all_ne (vector bool char, vector signed char); 33728 int vec_all_ne (vector signed short, vector bool short); 33729 int vec_all_ne (vector signed short, vector signed short); 33730 int vec_all_ne (vector unsigned short, vector bool short); 33731 int vec_all_ne (vector unsigned short, vector unsigned short); 33732 int vec_all_ne (vector bool short, vector bool short); 33733 int vec_all_ne (vector bool short, vector unsigned short); 33734 int vec_all_ne (vector bool short, vector signed short); 33735 int vec_all_ne (vector pixel, vector pixel); 33736 int vec_all_ne (vector signed int, vector bool int); 33737 int vec_all_ne (vector signed int, vector signed int); 33738 int vec_all_ne (vector unsigned int, vector bool int); 33739 int vec_all_ne (vector unsigned int, vector unsigned int); 33740 int vec_all_ne (vector bool int, vector bool int); 33741 int vec_all_ne (vector bool int, vector unsigned int); 33742 int vec_all_ne (vector bool int, vector signed int); 33743 int vec_all_ne (vector float, vector float); 33744 33745 int vec_all_nge (vector float, vector float); 33746 33747 int vec_all_ngt (vector float, vector float); 33748 33749 int vec_all_nle (vector float, vector float); 33750 33751 int vec_all_nlt (vector float, vector float); 33752 33753 int vec_all_numeric (vector float); 33754 33755 int vec_any_eq (vector signed char, vector bool char); 33756 int vec_any_eq (vector signed char, vector signed char); 33757 int vec_any_eq (vector unsigned char, vector bool char); 33758 int vec_any_eq (vector unsigned char, vector unsigned char); 33759 int vec_any_eq (vector bool char, vector bool char); 33760 int vec_any_eq (vector bool char, vector unsigned char); 33761 int vec_any_eq (vector bool char, vector signed char); 33762 int vec_any_eq (vector signed short, vector bool short); 33763 int vec_any_eq (vector signed short, vector signed short); 33764 int vec_any_eq (vector unsigned short, vector bool short); 33765 int vec_any_eq (vector unsigned short, vector unsigned short); 33766 int vec_any_eq (vector bool short, vector bool short); 33767 int vec_any_eq (vector bool short, vector unsigned short); 33768 int vec_any_eq (vector bool short, vector signed short); 33769 int vec_any_eq (vector pixel, vector pixel); 33770 int vec_any_eq (vector signed int, vector bool int); 33771 int vec_any_eq (vector signed int, vector signed int); 33772 int vec_any_eq (vector unsigned int, vector bool int); 33773 int vec_any_eq (vector unsigned int, vector unsigned int); 33774 int vec_any_eq (vector bool int, vector bool int); 33775 int vec_any_eq (vector bool int, vector unsigned int); 33776 int vec_any_eq (vector bool int, vector signed int); 33777 int vec_any_eq (vector float, vector float); 33778 33779 int vec_any_ge (vector signed char, vector bool char); 33780 int vec_any_ge (vector unsigned char, vector bool char); 33781 int vec_any_ge (vector unsigned char, vector unsigned char); 33782 int vec_any_ge (vector signed char, vector signed char); 33783 int vec_any_ge (vector bool char, vector unsigned char); 33784 int vec_any_ge (vector bool char, vector signed char); 33785 int vec_any_ge (vector unsigned short, vector bool short); 33786 int vec_any_ge (vector unsigned short, vector unsigned short); 33787 int vec_any_ge (vector signed short, vector signed short); 33788 int vec_any_ge (vector signed short, vector bool short); 33789 int vec_any_ge (vector bool short, vector unsigned short); 33790 int vec_any_ge (vector bool short, vector signed short); 33791 int vec_any_ge (vector signed int, vector bool int); 33792 int vec_any_ge (vector unsigned int, vector bool int); 33793 int vec_any_ge (vector unsigned int, vector unsigned int); 33794 int vec_any_ge (vector signed int, vector signed int); 33795 int vec_any_ge (vector bool int, vector unsigned int); 33796 int vec_any_ge (vector bool int, vector signed int); 33797 int vec_any_ge (vector float, vector float); 33798 33799 int vec_any_gt (vector bool char, vector unsigned char); 33800 int vec_any_gt (vector unsigned char, vector bool char); 33801 int vec_any_gt (vector unsigned char, vector unsigned char); 33802 int vec_any_gt (vector bool char, vector signed char); 33803 int vec_any_gt (vector signed char, vector bool char); 33804 int vec_any_gt (vector signed char, vector signed char); 33805 int vec_any_gt (vector bool short, vector unsigned short); 33806 int vec_any_gt (vector unsigned short, vector bool short); 33807 int vec_any_gt (vector unsigned short, vector unsigned short); 33808 int vec_any_gt (vector bool short, vector signed short); 33809 int vec_any_gt (vector signed short, vector bool short); 33810 int vec_any_gt (vector signed short, vector signed short); 33811 int vec_any_gt (vector bool int, vector unsigned int); 33812 int vec_any_gt (vector unsigned int, vector bool int); 33813 int vec_any_gt (vector unsigned int, vector unsigned int); 33814 int vec_any_gt (vector bool int, vector signed int); 33815 int vec_any_gt (vector signed int, vector bool int); 33816 int vec_any_gt (vector signed int, vector signed int); 33817 int vec_any_gt (vector float, vector float); 33818 33819 int vec_any_le (vector bool char, vector unsigned char); 33820 int vec_any_le (vector unsigned char, vector bool char); 33821 int vec_any_le (vector unsigned char, vector unsigned char); 33822 int vec_any_le (vector bool char, vector signed char); 33823 int vec_any_le (vector signed char, vector bool char); 33824 int vec_any_le (vector signed char, vector signed char); 33825 int vec_any_le (vector bool short, vector unsigned short); 33826 int vec_any_le (vector unsigned short, vector bool short); 33827 int vec_any_le (vector unsigned short, vector unsigned short); 33828 int vec_any_le (vector bool short, vector signed short); 33829 int vec_any_le (vector signed short, vector bool short); 33830 int vec_any_le (vector signed short, vector signed short); 33831 int vec_any_le (vector bool int, vector unsigned int); 33832 int vec_any_le (vector unsigned int, vector bool int); 33833 int vec_any_le (vector unsigned int, vector unsigned int); 33834 int vec_any_le (vector bool int, vector signed int); 33835 int vec_any_le (vector signed int, vector bool int); 33836 int vec_any_le (vector signed int, vector signed int); 33837 int vec_any_le (vector float, vector float); 33838 33839 int vec_any_lt (vector bool char, vector unsigned char); 33840 int vec_any_lt (vector unsigned char, vector bool char); 33841 int vec_any_lt (vector unsigned char, vector unsigned char); 33842 int vec_any_lt (vector bool char, vector signed char); 33843 int vec_any_lt (vector signed char, vector bool char); 33844 int vec_any_lt (vector signed char, vector signed char); 33845 int vec_any_lt (vector bool short, vector unsigned short); 33846 int vec_any_lt (vector unsigned short, vector bool short); 33847 int vec_any_lt (vector unsigned short, vector unsigned short); 33848 int vec_any_lt (vector bool short, vector signed short); 33849 int vec_any_lt (vector signed short, vector bool short); 33850 int vec_any_lt (vector signed short, vector signed short); 33851 int vec_any_lt (vector bool int, vector unsigned int); 33852 int vec_any_lt (vector unsigned int, vector bool int); 33853 int vec_any_lt (vector unsigned int, vector unsigned int); 33854 int vec_any_lt (vector bool int, vector signed int); 33855 int vec_any_lt (vector signed int, vector bool int); 33856 int vec_any_lt (vector signed int, vector signed int); 33857 int vec_any_lt (vector float, vector float); 33858 33859 int vec_any_nan (vector float); 33860 33861 int vec_any_ne (vector signed char, vector bool char); 33862 int vec_any_ne (vector signed char, vector signed char); 33863 int vec_any_ne (vector unsigned char, vector bool char); 33864 int vec_any_ne (vector unsigned char, vector unsigned char); 33865 int vec_any_ne (vector bool char, vector bool char); 33866 int vec_any_ne (vector bool char, vector unsigned char); 33867 int vec_any_ne (vector bool char, vector signed char); 33868 int vec_any_ne (vector signed short, vector bool short); 33869 int vec_any_ne (vector signed short, vector signed short); 33870 int vec_any_ne (vector unsigned short, vector bool short); 33871 int vec_any_ne (vector unsigned short, vector unsigned short); 33872 int vec_any_ne (vector bool short, vector bool short); 33873 int vec_any_ne (vector bool short, vector unsigned short); 33874 int vec_any_ne (vector bool short, vector signed short); 33875 int vec_any_ne (vector pixel, vector pixel); 33876 int vec_any_ne (vector signed int, vector bool int); 33877 int vec_any_ne (vector signed int, vector signed int); 33878 int vec_any_ne (vector unsigned int, vector bool int); 33879 int vec_any_ne (vector unsigned int, vector unsigned int); 33880 int vec_any_ne (vector bool int, vector bool int); 33881 int vec_any_ne (vector bool int, vector unsigned int); 33882 int vec_any_ne (vector bool int, vector signed int); 33883 int vec_any_ne (vector float, vector float); 33884 33885 int vec_any_nge (vector float, vector float); 33886 33887 int vec_any_ngt (vector float, vector float); 33888 33889 int vec_any_nle (vector float, vector float); 33890 33891 int vec_any_nlt (vector float, vector float); 33892 33893 int vec_any_numeric (vector float); 33894 33895 int vec_any_out (vector float, vector float); 33896 33897 33898 File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: PowerPC AltiVec Built-in Functions, Up: Target Builtins 33899 33900 5.50.13 SPARC VIS Built-in Functions 33901 ------------------------------------ 33902 33903 GCC supports SIMD operations on the SPARC using both the generic vector 33904 extensions (*note Vector Extensions::) as well as built-in functions for 33905 the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 33906 switch, the VIS extension is exposed as the following built-in 33907 functions: 33908 33909 typedef int v2si __attribute__ ((vector_size (8))); 33910 typedef short v4hi __attribute__ ((vector_size (8))); 33911 typedef short v2hi __attribute__ ((vector_size (4))); 33912 typedef char v8qi __attribute__ ((vector_size (8))); 33913 typedef char v4qi __attribute__ ((vector_size (4))); 33914 33915 void * __builtin_vis_alignaddr (void *, long); 33916 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 33917 v2si __builtin_vis_faligndatav2si (v2si, v2si); 33918 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 33919 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 33920 33921 v4hi __builtin_vis_fexpand (v4qi); 33922 33923 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 33924 v4hi __builtin_vis_fmul8x16au (v4qi, v4hi); 33925 v4hi __builtin_vis_fmul8x16al (v4qi, v4hi); 33926 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 33927 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 33928 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 33929 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 33930 33931 v4qi __builtin_vis_fpack16 (v4hi); 33932 v8qi __builtin_vis_fpack32 (v2si, v2si); 33933 v2hi __builtin_vis_fpackfix (v2si); 33934 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 33935 33936 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 33937 33938 33939 File: gcc.info, Node: SPU Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 33940 33941 5.50.14 SPU Built-in Functions 33942 ------------------------------ 33943 33944 GCC provides extensions for the SPU processor as described in the 33945 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 33946 found at `http://cell.scei.co.jp/' or 33947 `http://www.ibm.com/developerworks/power/cell/'. GCC's implementation 33948 differs in several ways. 33949 33950 * The optional extension of specifying vector constants in 33951 parentheses is not supported. 33952 33953 * A vector initializer requires no cast if the vector constant is of 33954 the same type as the variable it is initializing. 33955 33956 * If `signed' or `unsigned' is omitted, the signedness of the vector 33957 type is the default signedness of the base type. The default 33958 varies depending on the operating system, so a portable program 33959 should always specify the signedness. 33960 33961 * By default, the keyword `__vector' is added. The macro `vector' is 33962 defined in `<spu_intrinsics.h>' and can be undefined. 33963 33964 * GCC allows using a `typedef' name as the type specifier for a 33965 vector type. 33966 33967 * For C, overloaded functions are implemented with macros so the 33968 following does not work: 33969 33970 spu_add ((vector signed int){1, 2, 3, 4}, foo); 33971 33972 Since `spu_add' is a macro, the vector constant in the example is 33973 treated as four separate arguments. Wrap the entire argument in 33974 parentheses for this to work. 33975 33976 * The extended version of `__builtin_expect' is not supported. 33977 33978 33979 _Note:_ Only the interface described in the aforementioned 33980 specification is supported. Internally, GCC uses built-in functions to 33981 implement the required functionality, but these are not supported and 33982 are subject to change without notice. 33983 33984 33985 File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 33986 33987 5.51 Format Checks Specific to Particular Target Machines 33988 ========================================================= 33989 33990 For some target machines, GCC supports additional options to the format 33991 attribute (*note Declaring Attributes of Functions: Function 33992 Attributes.). 33993 33994 * Menu: 33995 33996 * Solaris Format Checks:: 33997 33998 33999 File: gcc.info, Node: Solaris Format Checks, Up: Target Format Checks 34000 34001 5.51.1 Solaris Format Checks 34002 ---------------------------- 34003 34004 Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 34005 `cmn_err' accepts a subset of the standard `printf' conversions, and 34006 the two-argument `%b' conversion for displaying bit-fields. See the 34007 Solaris man page for `cmn_err' for more information. 34008 34009 34010 File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 34011 34012 5.52 Pragmas Accepted by GCC 34013 ============================ 34014 34015 GCC supports several types of pragmas, primarily in order to compile 34016 code originally written for other compilers. Note that in general we 34017 do not recommend the use of pragmas; *Note Function Attributes::, for 34018 further explanation. 34019 34020 * Menu: 34021 34022 * ARM Pragmas:: 34023 * M32C Pragmas:: 34024 * RS/6000 and PowerPC Pragmas:: 34025 * Darwin Pragmas:: 34026 * Solaris Pragmas:: 34027 * Symbol-Renaming Pragmas:: 34028 * Structure-Packing Pragmas:: 34029 * Weak Pragmas:: 34030 * Diagnostic Pragmas:: 34031 * Visibility Pragmas:: 34032 * Push/Pop Macro Pragmas:: 34033 * Function Specific Option Pragmas:: 34034 34035 34036 File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 34037 34038 5.52.1 ARM Pragmas 34039 ------------------ 34040 34041 The ARM target defines pragmas for controlling the default addition of 34042 `long_call' and `short_call' attributes to functions. *Note Function 34043 Attributes::, for information about the effects of these attributes. 34044 34045 `long_calls' 34046 Set all subsequent functions to have the `long_call' attribute. 34047 34048 `no_long_calls' 34049 Set all subsequent functions to have the `short_call' attribute. 34050 34051 `long_calls_off' 34052 Do not affect the `long_call' or `short_call' attributes of 34053 subsequent functions. 34054 34055 34056 File: gcc.info, Node: M32C Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: ARM Pragmas, Up: Pragmas 34057 34058 5.52.2 M32C Pragmas 34059 ------------------- 34060 34061 `memregs NUMBER' 34062 Overrides the command line option `-memregs=' for the current 34063 file. Use with care! This pragma must be before any function in 34064 the file, and mixing different memregs values in different objects 34065 may make them incompatible. This pragma is useful when a 34066 performance-critical function uses a memreg for temporary values, 34067 as it may allow you to reduce the number of memregs used. 34068 34069 34070 34071 File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: M32C Pragmas, Up: Pragmas 34072 34073 5.52.3 RS/6000 and PowerPC Pragmas 34074 ---------------------------------- 34075 34076 The RS/6000 and PowerPC targets define one pragma for controlling 34077 whether or not the `longcall' attribute is added to function 34078 declarations by default. This pragma overrides the `-mlongcall' 34079 option, but not the `longcall' and `shortcall' attributes. *Note 34080 RS/6000 and PowerPC Options::, for more information about when long 34081 calls are and are not necessary. 34082 34083 `longcall (1)' 34084 Apply the `longcall' attribute to all subsequent function 34085 declarations. 34086 34087 `longcall (0)' 34088 Do not apply the `longcall' attribute to subsequent function 34089 declarations. 34090 34091 34092 File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 34093 34094 5.52.4 Darwin Pragmas 34095 --------------------- 34096 34097 The following pragmas are available for all architectures running the 34098 Darwin operating system. These are useful for compatibility with other 34099 Mac OS compilers. 34100 34101 `mark TOKENS...' 34102 This pragma is accepted, but has no effect. 34103 34104 `options align=ALIGNMENT' 34105 This pragma sets the alignment of fields in structures. The 34106 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 34107 `power', to emulate PowerPC alignment. Uses of this pragma nest 34108 properly; to restore the previous setting, use `reset' for the 34109 ALIGNMENT. 34110 34111 `segment TOKENS...' 34112 This pragma is accepted, but has no effect. 34113 34114 `unused (VAR [, VAR]...)' 34115 This pragma declares variables to be possibly unused. GCC will not 34116 produce warnings for the listed variables. The effect is similar 34117 to that of the `unused' attribute, except that this pragma may 34118 appear anywhere within the variables' scopes. 34119 34120 34121 File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 34122 34123 5.52.5 Solaris Pragmas 34124 ---------------------- 34125 34126 The Solaris target supports `#pragma redefine_extname' (*note 34127 Symbol-Renaming Pragmas::). It also supports additional `#pragma' 34128 directives for compatibility with the system compiler. 34129 34130 `align ALIGNMENT (VARIABLE [, VARIABLE]...)' 34131 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 34132 This is the same as GCC's `aligned' attribute *note Variable 34133 Attributes::). Macro expansion occurs on the arguments to this 34134 pragma when compiling C and Objective-C. It does not currently 34135 occur when compiling C++, but this is a bug which may be fixed in 34136 a future release. 34137 34138 `fini (FUNCTION [, FUNCTION]...)' 34139 This pragma causes each listed FUNCTION to be called after main, 34140 or during shared module unloading, by adding a call to the `.fini' 34141 section. 34142 34143 `init (FUNCTION [, FUNCTION]...)' 34144 This pragma causes each listed FUNCTION to be called during 34145 initialization (before `main') or during shared module loading, by 34146 adding a call to the `.init' section. 34147 34148 34149 34150 File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 34151 34152 5.52.6 Symbol-Renaming Pragmas 34153 ------------------------------ 34154 34155 For compatibility with the Solaris and Tru64 UNIX system headers, GCC 34156 supports two `#pragma' directives which change the name used in 34157 assembly for a given declaration. These pragmas are only available on 34158 platforms whose system headers need them. To get this effect on all 34159 platforms supported by GCC, use the asm labels extension (*note Asm 34160 Labels::). 34161 34162 `redefine_extname OLDNAME NEWNAME' 34163 This pragma gives the C function OLDNAME the assembly symbol 34164 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will 34165 be defined if this pragma is available (currently only on Solaris). 34166 34167 `extern_prefix STRING' 34168 This pragma causes all subsequent external function and variable 34169 declarations to have STRING prepended to their assembly symbols. 34170 This effect may be terminated with another `extern_prefix' pragma 34171 whose argument is an empty string. The preprocessor macro 34172 `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is 34173 available (currently only on Tru64 UNIX). 34174 34175 These pragmas and the asm labels extension interact in a complicated 34176 manner. Here are some corner cases you may want to be aware of. 34177 34178 1. Both pragmas silently apply only to declarations with external 34179 linkage. Asm labels do not have this restriction. 34180 34181 2. In C++, both pragmas silently apply only to declarations with "C" 34182 linkage. Again, asm labels do not have this restriction. 34183 34184 3. If any of the three ways of changing the assembly name of a 34185 declaration is applied to a declaration whose assembly name has 34186 already been determined (either by a previous use of one of these 34187 features, or because the compiler needed the assembly name in 34188 order to generate code), and the new name is different, a warning 34189 issues and the name does not change. 34190 34191 4. The OLDNAME used by `#pragma redefine_extname' is always the 34192 C-language name. 34193 34194 5. If `#pragma extern_prefix' is in effect, and a declaration occurs 34195 with an asm label attached, the prefix is silently ignored for 34196 that declaration. 34197 34198 6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to 34199 the same declaration, whichever triggered first wins, and a 34200 warning issues if they contradict each other. (We would like to 34201 have `#pragma redefine_extname' always win, for consistency with 34202 asm labels, but if `#pragma extern_prefix' triggers first we have 34203 no way of knowing that that happened.) 34204 34205 34206 File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 34207 34208 5.52.7 Structure-Packing Pragmas 34209 -------------------------------- 34210 34211 For compatibility with Microsoft Windows compilers, GCC supports a set 34212 of `#pragma' directives which change the maximum alignment of members 34213 of structures (other than zero-width bitfields), unions, and classes 34214 subsequently defined. The N value below always is required to be a 34215 small power of two and specifies the new alignment in bytes. 34216 34217 1. `#pragma pack(N)' simply sets the new alignment. 34218 34219 2. `#pragma pack()' sets the alignment to the one that was in effect 34220 when compilation started (see also command line option 34221 `-fpack-struct[=<n>]' *note Code Gen Options::). 34222 34223 3. `#pragma pack(push[,N])' pushes the current alignment setting on 34224 an internal stack and then optionally sets the new alignment. 34225 34226 4. `#pragma pack(pop)' restores the alignment setting to the one 34227 saved at the top of the internal stack (and removes that stack 34228 entry). Note that `#pragma pack([N])' does not influence this 34229 internal stack; thus it is possible to have `#pragma pack(push)' 34230 followed by multiple `#pragma pack(N)' instances and finalized by 34231 a single `#pragma pack(pop)'. 34232 34233 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma' 34234 which lays out a structure as the documented `__attribute__ 34235 ((ms_struct))'. 34236 1. `#pragma ms_struct on' turns on the layout for structures declared. 34237 34238 2. `#pragma ms_struct off' turns off the layout for structures 34239 declared. 34240 34241 3. `#pragma ms_struct reset' goes back to the default layout. 34242 34243 34244 File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 34245 34246 5.52.8 Weak Pragmas 34247 ------------------- 34248 34249 For compatibility with SVR4, GCC supports a set of `#pragma' directives 34250 for declaring symbols to be weak, and defining weak aliases. 34251 34252 `#pragma weak SYMBOL' 34253 This pragma declares SYMBOL to be weak, as if the declaration had 34254 the attribute of the same name. The pragma may appear before or 34255 after the declaration of SYMBOL, but must appear before either its 34256 first use or its definition. It is not an error for SYMBOL to 34257 never be defined at all. 34258 34259 `#pragma weak SYMBOL1 = SYMBOL2' 34260 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 34261 an error if SYMBOL2 is not defined in the current translation unit. 34262 34263 34264 File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 34265 34266 5.52.9 Diagnostic Pragmas 34267 ------------------------- 34268 34269 GCC allows the user to selectively enable or disable certain types of 34270 diagnostics, and change the kind of the diagnostic. For example, a 34271 project's policy might require that all sources compile with `-Werror' 34272 but certain files might have exceptions allowing specific types of 34273 warnings. Or, a project might selectively enable diagnostics and treat 34274 them as errors depending on which preprocessor macros are defined. 34275 34276 `#pragma GCC diagnostic KIND OPTION' 34277 Modifies the disposition of a diagnostic. Note that not all 34278 diagnostics are modifiable; at the moment only warnings (normally 34279 controlled by `-W...') can be controlled, and not all of them. 34280 Use `-fdiagnostics-show-option' to determine which diagnostics are 34281 controllable and which option controls them. 34282 34283 KIND is `error' to treat this diagnostic as an error, `warning' to 34284 treat it like a warning (even if `-Werror' is in effect), or 34285 `ignored' if the diagnostic is to be ignored. OPTION is a double 34286 quoted string which matches the command line option. 34287 34288 #pragma GCC diagnostic warning "-Wformat" 34289 #pragma GCC diagnostic error "-Wformat" 34290 #pragma GCC diagnostic ignored "-Wformat" 34291 34292 Note that these pragmas override any command line options. Also, 34293 while it is syntactically valid to put these pragmas anywhere in 34294 your sources, the only supported location for them is before any 34295 data or functions are defined. Doing otherwise may result in 34296 unpredictable results depending on how the optimizer manages your 34297 sources. If the same option is listed multiple times, the last 34298 one specified is the one that is in effect. This pragma is not 34299 intended to be a general purpose replacement for command line 34300 options, but for implementing strict control over project policies. 34301 34302 34303 GCC also offers a simple mechanism for printing messages during 34304 compilation. 34305 34306 `#pragma message STRING' 34307 Prints STRING as a compiler message on compilation. The message 34308 is informational only, and is neither a compilation warning nor an 34309 error. 34310 34311 #pragma message "Compiling " __FILE__ "..." 34312 34313 STRING may be parenthesized, and is printed with location 34314 information. For example, 34315 34316 #define DO_PRAGMA(x) _Pragma (#x) 34317 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 34318 34319 TODO(Remember to fix this) 34320 34321 prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to 34322 fix this'. 34323 34324 34325 34326 File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 34327 34328 5.52.10 Visibility Pragmas 34329 -------------------------- 34330 34331 `#pragma GCC visibility push(VISIBILITY)' 34332 `#pragma GCC visibility pop' 34333 This pragma allows the user to set the visibility for multiple 34334 declarations without having to give each a visibility attribute 34335 *Note Function Attributes::, for more information about visibility 34336 and the attribute syntax. 34337 34338 In C++, `#pragma GCC visibility' affects only namespace-scope 34339 declarations. Class members and template specializations are not 34340 affected; if you want to override the visibility for a particular 34341 member or instantiation, you must use an attribute. 34342 34343 34344 34345 File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 34346 34347 5.52.11 Push/Pop Macro Pragmas 34348 ------------------------------ 34349 34350 For compatibility with Microsoft Windows compilers, GCC supports 34351 `#pragma push_macro("MACRO_NAME")' and `#pragma 34352 pop_macro("MACRO_NAME")'. 34353 34354 `#pragma push_macro("MACRO_NAME")' 34355 This pragma saves the value of the macro named as MACRO_NAME to 34356 the top of the stack for this macro. 34357 34358 `#pragma pop_macro("MACRO_NAME")' 34359 This pragma sets the value of the macro named as MACRO_NAME to the 34360 value on top of the stack for this macro. If the stack for 34361 MACRO_NAME is empty, the value of the macro remains unchanged. 34362 34363 For example: 34364 34365 #define X 1 34366 #pragma push_macro("X") 34367 #undef X 34368 #define X -1 34369 #pragma pop_macro("X") 34370 int x [X]; 34371 34372 In this example, the definition of X as 1 is saved by `#pragma 34373 push_macro' and restored by `#pragma pop_macro'. 34374 34375 34376 File: gcc.info, Node: Function Specific Option Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 34377 34378 5.52.12 Function Specific Option Pragmas 34379 ---------------------------------------- 34380 34381 `#pragma GCC target ("STRING"...)' 34382 This pragma allows you to set target specific options for functions 34383 defined later in the source file. One or more strings can be 34384 specified. Each function that is defined after this point will be 34385 as if `attribute((target("STRING")))' was specified for that 34386 function. The parenthesis around the options is optional. *Note 34387 Function Attributes::, for more information about the `target' 34388 attribute and the attribute syntax. 34389 34390 The `#pragma GCC target' pragma is not implemented in GCC versions 34391 earlier than 4.4, and is currently only implemented for the 386 34392 and x86_64 backends. 34393 34394 `#pragma GCC optimize ("STRING"...)' 34395 This pragma allows you to set global optimization options for 34396 functions defined later in the source file. One or more strings 34397 can be specified. Each function that is defined after this point 34398 will be as if `attribute((optimize("STRING")))' was specified for 34399 that function. The parenthesis around the options is optional. 34400 *Note Function Attributes::, for more information about the 34401 `optimize' attribute and the attribute syntax. 34402 34403 The `#pragma GCC optimize' pragma is not implemented in GCC 34404 versions earlier than 4.4. 34405 34406 `#pragma GCC push_options' 34407 `#pragma GCC pop_options' 34408 These pragmas maintain a stack of the current target and 34409 optimization options. It is intended for include files where you 34410 temporarily want to switch to using a different `#pragma GCC 34411 target' or `#pragma GCC optimize' and then to pop back to the 34412 previous options. 34413 34414 The `#pragma GCC push_options' and `#pragma GCC pop_options' 34415 pragmas are not implemented in GCC versions earlier than 4.4. 34416 34417 `#pragma GCC reset_options' 34418 This pragma clears the current `#pragma GCC target' and `#pragma 34419 GCC optimize' to use the default switches as specified on the 34420 command line. 34421 34422 The `#pragma GCC reset_options' pragma is not implemented in GCC 34423 versions earlier than 4.4. 34424 34425 34426 File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 34427 34428 5.53 Unnamed struct/union fields within structs/unions 34429 ====================================================== 34430 34431 For compatibility with other compilers, GCC allows you to define a 34432 structure or union that contains, as fields, structures and unions 34433 without names. For example: 34434 34435 struct { 34436 int a; 34437 union { 34438 int b; 34439 float c; 34440 }; 34441 int d; 34442 } foo; 34443 34444 In this example, the user would be able to access members of the 34445 unnamed union with code like `foo.b'. Note that only unnamed structs 34446 and unions are allowed, you may not have, for example, an unnamed `int'. 34447 34448 You must never create such structures that cause ambiguous field 34449 definitions. For example, this structure: 34450 34451 struct { 34452 int a; 34453 struct { 34454 int a; 34455 }; 34456 } foo; 34457 34458 It is ambiguous which `a' is being referred to with `foo.a'. Such 34459 constructs are not supported and must be avoided. In the future, such 34460 constructs may be detected and treated as compilation errors. 34461 34462 Unless `-fms-extensions' is used, the unnamed field must be a 34463 structure or union definition without a tag (for example, `struct { int 34464 a; };'). If `-fms-extensions' is used, the field may also be a 34465 definition with a tag such as `struct foo { int a; };', a reference to 34466 a previously defined structure or union such as `struct foo;', or a 34467 reference to a `typedef' name for a previously defined structure or 34468 union type. 34469 34470 34471 File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 34472 34473 5.54 Thread-Local Storage 34474 ========================= 34475 34476 Thread-local storage (TLS) is a mechanism by which variables are 34477 allocated such that there is one instance of the variable per extant 34478 thread. The run-time model GCC uses to implement this originates in 34479 the IA-64 processor-specific ABI, but has since been migrated to other 34480 processors as well. It requires significant support from the linker 34481 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 34482 `libpthread.so'), so it is not available everywhere. 34483 34484 At the user level, the extension is visible with a new storage class 34485 keyword: `__thread'. For example: 34486 34487 __thread int i; 34488 extern __thread struct state s; 34489 static __thread char *p; 34490 34491 The `__thread' specifier may be used alone, with the `extern' or 34492 `static' specifiers, but with no other storage class specifier. When 34493 used with `extern' or `static', `__thread' must appear immediately 34494 after the other storage class specifier. 34495 34496 The `__thread' specifier may be applied to any global, file-scoped 34497 static, function-scoped static, or static data member of a class. It 34498 may not be applied to block-scoped automatic or non-static data member. 34499 34500 When the address-of operator is applied to a thread-local variable, it 34501 is evaluated at run-time and returns the address of the current thread's 34502 instance of that variable. An address so obtained may be used by any 34503 thread. When a thread terminates, any pointers to thread-local 34504 variables in that thread become invalid. 34505 34506 No static initialization may refer to the address of a thread-local 34507 variable. 34508 34509 In C++, if an initializer is present for a thread-local variable, it 34510 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 34511 standard. 34512 34513 See ELF Handling For Thread-Local Storage 34514 (http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of 34515 the four thread-local storage addressing models, and how the run-time 34516 is expected to function. 34517 34518 * Menu: 34519 34520 * C99 Thread-Local Edits:: 34521 * C++98 Thread-Local Edits:: 34522 34523 34524 File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 34525 34526 5.54.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 34527 ------------------------------------------------------- 34528 34529 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 34530 document the exact semantics of the language extension. 34531 34532 * `5.1.2 Execution environments' 34533 34534 Add new text after paragraph 1 34535 34536 Within either execution environment, a "thread" is a flow of 34537 control within a program. It is implementation defined 34538 whether or not there may be more than one thread associated 34539 with a program. It is implementation defined how threads 34540 beyond the first are created, the name and type of the 34541 function called at thread startup, and how threads may be 34542 terminated. However, objects with thread storage duration 34543 shall be initialized before thread startup. 34544 34545 * `6.2.4 Storage durations of objects' 34546 34547 Add new text before paragraph 3 34548 34549 An object whose identifier is declared with the storage-class 34550 specifier `__thread' has "thread storage duration". Its 34551 lifetime is the entire execution of the thread, and its 34552 stored value is initialized only once, prior to thread 34553 startup. 34554 34555 * `6.4.1 Keywords' 34556 34557 Add `__thread'. 34558 34559 * `6.7.1 Storage-class specifiers' 34560 34561 Add `__thread' to the list of storage class specifiers in 34562 paragraph 1. 34563 34564 Change paragraph 2 to 34565 34566 With the exception of `__thread', at most one storage-class 34567 specifier may be given [...]. The `__thread' specifier may 34568 be used alone, or immediately following `extern' or `static'. 34569 34570 Add new text after paragraph 6 34571 34572 The declaration of an identifier for a variable that has 34573 block scope that specifies `__thread' shall also specify 34574 either `extern' or `static'. 34575 34576 The `__thread' specifier shall be used only with variables. 34577 34578 34579 File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 34580 34581 5.54.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 34582 -------------------------------------------------------- 34583 34584 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 34585 that document the exact semantics of the language extension. 34586 34587 * [intro.execution] 34588 34589 New text after paragraph 4 34590 34591 A "thread" is a flow of control within the abstract machine. 34592 It is implementation defined whether or not there may be more 34593 than one thread. 34594 34595 New text after paragraph 7 34596 34597 It is unspecified whether additional action must be taken to 34598 ensure when and whether side effects are visible to other 34599 threads. 34600 34601 * [lex.key] 34602 34603 Add `__thread'. 34604 34605 * [basic.start.main] 34606 34607 Add after paragraph 5 34608 34609 The thread that begins execution at the `main' function is 34610 called the "main thread". It is implementation defined how 34611 functions beginning threads other than the main thread are 34612 designated or typed. A function so designated, as well as 34613 the `main' function, is called a "thread startup function". 34614 It is implementation defined what happens if a thread startup 34615 function returns. It is implementation defined what happens 34616 to other threads when any thread calls `exit'. 34617 34618 * [basic.start.init] 34619 34620 Add after paragraph 4 34621 34622 The storage for an object of thread storage duration shall be 34623 statically initialized before the first statement of the 34624 thread startup function. An object of thread storage 34625 duration shall not require dynamic initialization. 34626 34627 * [basic.start.term] 34628 34629 Add after paragraph 3 34630 34631 The type of an object with thread storage duration shall not 34632 have a non-trivial destructor, nor shall it be an array type 34633 whose elements (directly or indirectly) have non-trivial 34634 destructors. 34635 34636 * [basic.stc] 34637 34638 Add "thread storage duration" to the list in paragraph 1. 34639 34640 Change paragraph 2 34641 34642 Thread, static, and automatic storage durations are 34643 associated with objects introduced by declarations [...]. 34644 34645 Add `__thread' to the list of specifiers in paragraph 3. 34646 34647 * [basic.stc.thread] 34648 34649 New section before [basic.stc.static] 34650 34651 The keyword `__thread' applied to a non-local object gives the 34652 object thread storage duration. 34653 34654 A local variable or class data member declared both `static' 34655 and `__thread' gives the variable or member thread storage 34656 duration. 34657 34658 * [basic.stc.static] 34659 34660 Change paragraph 1 34661 34662 All objects which have neither thread storage duration, 34663 dynamic storage duration nor are local [...]. 34664 34665 * [dcl.stc] 34666 34667 Add `__thread' to the list in paragraph 1. 34668 34669 Change paragraph 1 34670 34671 With the exception of `__thread', at most one 34672 STORAGE-CLASS-SPECIFIER shall appear in a given 34673 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 34674 alone, or immediately following the `extern' or `static' 34675 specifiers. [...] 34676 34677 Add after paragraph 5 34678 34679 The `__thread' specifier can be applied only to the names of 34680 objects and to anonymous unions. 34681 34682 * [class.mem] 34683 34684 Add after paragraph 6 34685 34686 Non-`static' members shall not be `__thread'. 34687 34688 34689 File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 34690 34691 5.55 Binary constants using the `0b' prefix 34692 =========================================== 34693 34694 Integer constants can be written as binary constants, consisting of a 34695 sequence of `0' and `1' digits, prefixed by `0b' or `0B'. This is 34696 particularly useful in environments that operate a lot on the bit-level 34697 (like microcontrollers). 34698 34699 The following statements are identical: 34700 34701 i = 42; 34702 i = 0x2a; 34703 i = 052; 34704 i = 0b101010; 34705 34706 The type of these constants follows the same rules as for octal or 34707 hexadecimal integer constants, so suffixes like `L' or `UL' can be 34708 applied. 34709 34710 34711 File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 34712 34713 6 Extensions to the C++ Language 34714 ******************************** 34715 34716 The GNU compiler provides these extensions to the C++ language (and you 34717 can also use most of the C language extensions in your C++ programs). 34718 If you want to write code that checks whether these features are 34719 available, you can test for the GNU compiler the same way as for C 34720 programs: check for a predefined macro `__GNUC__'. You can also use 34721 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 34722 (cpp)Common Predefined Macros.). 34723 34724 * Menu: 34725 34726 * Volatiles:: What constitutes an access to a volatile object. 34727 * Restricted Pointers:: C99 restricted pointers and references. 34728 * Vague Linkage:: Where G++ puts inlines, vtables and such. 34729 * C++ Interface:: You can use a single C++ header file for both 34730 declarations and definitions. 34731 * Template Instantiation:: Methods for ensuring that exactly one copy of 34732 each needed template instantiation is emitted. 34733 * Bound member functions:: You can extract a function pointer to the 34734 method denoted by a `->*' or `.*' expression. 34735 * C++ Attributes:: Variable, function, and type attributes for C++ only. 34736 * Namespace Association:: Strong using-directives for namespace association. 34737 * Type Traits:: Compiler support for type traits 34738 * Java Exceptions:: Tweaking exception handling to work with Java. 34739 * Deprecated Features:: Things will disappear from g++. 34740 * Backwards Compatibility:: Compatibilities with earlier definitions of C++. 34741 34742 34743 File: gcc.info, Node: Volatiles, Next: Restricted Pointers, Up: C++ Extensions 34744 34745 6.1 When is a Volatile Object Accessed? 34746 ======================================= 34747 34748 Both the C and C++ standard have the concept of volatile objects. These 34749 are normally accessed by pointers and used for accessing hardware. The 34750 standards encourage compilers to refrain from optimizations concerning 34751 accesses to volatile objects. The C standard leaves it implementation 34752 defined as to what constitutes a volatile access. The C++ standard 34753 omits to specify this, except to say that C++ should behave in a 34754 similar manner to C with respect to volatiles, where possible. The 34755 minimum either standard specifies is that at a sequence point all 34756 previous accesses to volatile objects have stabilized and no subsequent 34757 accesses have occurred. Thus an implementation is free to reorder and 34758 combine volatile accesses which occur between sequence points, but 34759 cannot do so for accesses across a sequence point. The use of 34760 volatiles does not allow you to violate the restriction on updating 34761 objects multiple times within a sequence point. 34762 34763 *Note Volatile qualifier and the C compiler: Qualifiers implementation. 34764 34765 The behavior differs slightly between C and C++ in the non-obvious 34766 cases: 34767 34768 volatile int *src = SOMEVALUE; 34769 *src; 34770 34771 With C, such expressions are rvalues, and GCC interprets this either 34772 as a read of the volatile object being pointed to or only as request to 34773 evaluate the side-effects. The C++ standard specifies that such 34774 expressions do not undergo lvalue to rvalue conversion, and that the 34775 type of the dereferenced object may be incomplete. The C++ standard 34776 does not specify explicitly that it is this lvalue to rvalue conversion 34777 which may be responsible for causing an access. However, there is 34778 reason to believe that it is, because otherwise certain simple 34779 expressions become undefined. However, because it would surprise most 34780 programmers, G++ treats dereferencing a pointer to volatile object of 34781 complete type when the value is unused as GCC would do for an 34782 equivalent type in C. When the object has incomplete type, G++ issues 34783 a warning; if you wish to force an error, you must force a conversion 34784 to rvalue with, for instance, a static cast. 34785 34786 When using a reference to volatile, G++ does not treat equivalent 34787 expressions as accesses to volatiles, but instead issues a warning that 34788 no volatile is accessed. The rationale for this is that otherwise it 34789 becomes difficult to determine where volatile access occur, and not 34790 possible to ignore the return value from functions returning volatile 34791 references. Again, if you wish to force a read, cast the reference to 34792 an rvalue. 34793 34794 34795 File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: Volatiles, Up: C++ Extensions 34796 34797 6.2 Restricting Pointer Aliasing 34798 ================================ 34799 34800 As with the C front end, G++ understands the C99 feature of restricted 34801 pointers, specified with the `__restrict__', or `__restrict' type 34802 qualifier. Because you cannot compile C++ by specifying the `-std=c99' 34803 language flag, `restrict' is not a keyword in C++. 34804 34805 In addition to allowing restricted pointers, you can specify restricted 34806 references, which indicate that the reference is not aliased in the 34807 local context. 34808 34809 void fn (int *__restrict__ rptr, int &__restrict__ rref) 34810 { 34811 /* ... */ 34812 } 34813 34814 In the body of `fn', RPTR points to an unaliased integer and RREF 34815 refers to a (different) unaliased integer. 34816 34817 You may also specify whether a member function's THIS pointer is 34818 unaliased by using `__restrict__' as a member function qualifier. 34819 34820 void T::fn () __restrict__ 34821 { 34822 /* ... */ 34823 } 34824 34825 Within the body of `T::fn', THIS will have the effective definition `T 34826 *__restrict__ const this'. Notice that the interpretation of a 34827 `__restrict__' member function qualifier is different to that of 34828 `const' or `volatile' qualifier, in that it is applied to the pointer 34829 rather than the object. This is consistent with other compilers which 34830 implement restricted pointers. 34831 34832 As with all outermost parameter qualifiers, `__restrict__' is ignored 34833 in function definition matching. This means you only need to specify 34834 `__restrict__' in a function definition, rather than in a function 34835 prototype as well. 34836 34837 34838 File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 34839 34840 6.3 Vague Linkage 34841 ================= 34842 34843 There are several constructs in C++ which require space in the object 34844 file but are not clearly tied to a single translation unit. We say that 34845 these constructs have "vague linkage". Typically such constructs are 34846 emitted wherever they are needed, though sometimes we can be more 34847 clever. 34848 34849 Inline Functions 34850 Inline functions are typically defined in a header file which can 34851 be included in many different compilations. Hopefully they can 34852 usually be inlined, but sometimes an out-of-line copy is 34853 necessary, if the address of the function is taken or if inlining 34854 fails. In general, we emit an out-of-line copy in all translation 34855 units where one is needed. As an exception, we only emit inline 34856 virtual functions with the vtable, since it will always require a 34857 copy. 34858 34859 Local static variables and string constants used in an inline 34860 function are also considered to have vague linkage, since they 34861 must be shared between all inlined and out-of-line instances of 34862 the function. 34863 34864 VTables 34865 C++ virtual functions are implemented in most compilers using a 34866 lookup table, known as a vtable. The vtable contains pointers to 34867 the virtual functions provided by a class, and each object of the 34868 class contains a pointer to its vtable (or vtables, in some 34869 multiple-inheritance situations). If the class declares any 34870 non-inline, non-pure virtual functions, the first one is chosen as 34871 the "key method" for the class, and the vtable is only emitted in 34872 the translation unit where the key method is defined. 34873 34874 _Note:_ If the chosen key method is later defined as inline, the 34875 vtable will still be emitted in every translation unit which 34876 defines it. Make sure that any inline virtuals are declared 34877 inline in the class body, even if they are not defined there. 34878 34879 type_info objects 34880 C++ requires information about types to be written out in order to 34881 implement `dynamic_cast', `typeid' and exception handling. For 34882 polymorphic classes (classes with virtual functions), the type_info 34883 object is written out along with the vtable so that `dynamic_cast' 34884 can determine the dynamic type of a class object at runtime. For 34885 all other types, we write out the type_info object when it is 34886 used: when applying `typeid' to an expression, throwing an object, 34887 or referring to a type in a catch clause or exception 34888 specification. 34889 34890 Template Instantiations 34891 Most everything in this section also applies to template 34892 instantiations, but there are other options as well. *Note 34893 Where's the Template?: Template Instantiation. 34894 34895 34896 When used with GNU ld version 2.8 or later on an ELF system such as 34897 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 34898 these constructs will be discarded at link time. This is known as 34899 COMDAT support. 34900 34901 On targets that don't support COMDAT, but do support weak symbols, GCC 34902 will use them. This way one copy will override all the others, but the 34903 unused copies will still take up space in the executable. 34904 34905 For targets which do not support either COMDAT or weak symbols, most 34906 entities with vague linkage will be emitted as local symbols to avoid 34907 duplicate definition errors from the linker. This will not happen for 34908 local statics in inlines, however, as having multiple copies will 34909 almost certainly break things. 34910 34911 *Note Declarations and Definitions in One Header: C++ Interface, for 34912 another way to control placement of these constructs. 34913 34914 34915 File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 34916 34917 6.4 #pragma interface and implementation 34918 ======================================== 34919 34920 `#pragma interface' and `#pragma implementation' provide the user with 34921 a way of explicitly directing the compiler to emit entities with vague 34922 linkage (and debugging information) in a particular translation unit. 34923 34924 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 34925 cases, because of COMDAT support and the "key method" heuristic 34926 mentioned in *Note Vague Linkage::. Using them can actually cause your 34927 program to grow due to unnecessary out-of-line copies of inline 34928 functions. Currently (3.4) the only benefit of these `#pragma's is 34929 reduced duplication of debugging information, and that should be 34930 addressed soon on DWARF 2 targets with the use of COMDAT groups. 34931 34932 `#pragma interface' 34933 `#pragma interface "SUBDIR/OBJECTS.h"' 34934 Use this directive in _header files_ that define object classes, 34935 to save space in most of the object files that use those classes. 34936 Normally, local copies of certain information (backup copies of 34937 inline member functions, debugging information, and the internal 34938 tables that implement virtual functions) must be kept in each 34939 object file that includes class definitions. You can use this 34940 pragma to avoid such duplication. When a header file containing 34941 `#pragma interface' is included in a compilation, this auxiliary 34942 information will not be generated (unless the main input source 34943 file itself uses `#pragma implementation'). Instead, the object 34944 files will contain references to be resolved at link time. 34945 34946 The second form of this directive is useful for the case where you 34947 have multiple headers with the same name in different directories. 34948 If you use this form, you must specify the same string to `#pragma 34949 implementation'. 34950 34951 `#pragma implementation' 34952 `#pragma implementation "OBJECTS.h"' 34953 Use this pragma in a _main input file_, when you want full output 34954 from included header files to be generated (and made globally 34955 visible). The included header file, in turn, should use `#pragma 34956 interface'. Backup copies of inline member functions, debugging 34957 information, and the internal tables used to implement virtual 34958 functions are all generated in implementation files. 34959 34960 If you use `#pragma implementation' with no argument, it applies to 34961 an include file with the same basename(1) as your source file. 34962 For example, in `allclass.cc', giving just `#pragma implementation' 34963 by itself is equivalent to `#pragma implementation "allclass.h"'. 34964 34965 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 34966 an implementation file whenever you would include it from 34967 `allclass.cc' even if you never specified `#pragma 34968 implementation'. This was deemed to be more trouble than it was 34969 worth, however, and disabled. 34970 34971 Use the string argument if you want a single implementation file to 34972 include code from multiple header files. (You must also use 34973 `#include' to include the header file; `#pragma implementation' 34974 only specifies how to use the file--it doesn't actually include 34975 it.) 34976 34977 There is no way to split up the contents of a single header file 34978 into multiple implementation files. 34979 34980 `#pragma implementation' and `#pragma interface' also have an effect 34981 on function inlining. 34982 34983 If you define a class in a header file marked with `#pragma 34984 interface', the effect on an inline function defined in that class is 34985 similar to an explicit `extern' declaration--the compiler emits no code 34986 at all to define an independent version of the function. Its 34987 definition is used only for inlining with its callers. 34988 34989 Conversely, when you include the same header file in a main source file 34990 that declares it as `#pragma implementation', the compiler emits code 34991 for the function itself; this defines a version of the function that 34992 can be found via pointers (or by callers compiled without inlining). 34993 If all calls to the function can be inlined, you can avoid emitting the 34994 function by compiling with `-fno-implement-inlines'. If any calls were 34995 not inlined, you will get linker errors. 34996 34997 ---------- Footnotes ---------- 34998 34999 (1) A file's "basename" was the name stripped of all leading path 35000 information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 35001 35002 35003 File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 35004 35005 6.5 Where's the Template? 35006 ========================= 35007 35008 C++ templates are the first language feature to require more 35009 intelligence from the environment than one usually finds on a UNIX 35010 system. Somehow the compiler and linker have to make sure that each 35011 template instance occurs exactly once in the executable if it is needed, 35012 and not at all otherwise. There are two basic approaches to this 35013 problem, which are referred to as the Borland model and the Cfront 35014 model. 35015 35016 Borland model 35017 Borland C++ solved the template instantiation problem by adding 35018 the code equivalent of common blocks to their linker; the compiler 35019 emits template instances in each translation unit that uses them, 35020 and the linker collapses them together. The advantage of this 35021 model is that the linker only has to consider the object files 35022 themselves; there is no external complexity to worry about. This 35023 disadvantage is that compilation time is increased because the 35024 template code is being compiled repeatedly. Code written for this 35025 model tends to include definitions of all templates in the header 35026 file, since they must be seen to be instantiated. 35027 35028 Cfront model 35029 The AT&T C++ translator, Cfront, solved the template instantiation 35030 problem by creating the notion of a template repository, an 35031 automatically maintained place where template instances are 35032 stored. A more modern version of the repository works as follows: 35033 As individual object files are built, the compiler places any 35034 template definitions and instantiations encountered in the 35035 repository. At link time, the link wrapper adds in the objects in 35036 the repository and compiles any needed instances that were not 35037 previously emitted. The advantages of this model are more optimal 35038 compilation speed and the ability to use the system linker; to 35039 implement the Borland model a compiler vendor also needs to 35040 replace the linker. The disadvantages are vastly increased 35041 complexity, and thus potential for error; for some code this can be 35042 just as transparent, but in practice it can been very difficult to 35043 build multiple programs in one directory and one program in 35044 multiple directories. Code written for this model tends to 35045 separate definitions of non-inline member templates into a 35046 separate file, which should be compiled separately. 35047 35048 When used with GNU ld version 2.8 or later on an ELF system such as 35049 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 35050 Borland model. On other systems, G++ implements neither automatic 35051 model. 35052 35053 A future version of G++ will support a hybrid model whereby the 35054 compiler will emit any instantiations for which the template definition 35055 is included in the compile, and store template definitions and 35056 instantiation context information into the object file for the rest. 35057 The link wrapper will extract that information as necessary and invoke 35058 the compiler to produce the remaining instantiations. The linker will 35059 then combine duplicate instantiations. 35060 35061 In the mean time, you have the following options for dealing with 35062 template instantiations: 35063 35064 1. Compile your template-using code with `-frepo'. The compiler will 35065 generate files with the extension `.rpo' listing all of the 35066 template instantiations used in the corresponding object files 35067 which could be instantiated there; the link wrapper, `collect2', 35068 will then update the `.rpo' files to tell the compiler where to 35069 place those instantiations and rebuild any affected object files. 35070 The link-time overhead is negligible after the first pass, as the 35071 compiler will continue to place the instantiations in the same 35072 files. 35073 35074 This is your best option for application code written for the 35075 Borland model, as it will just work. Code written for the Cfront 35076 model will need to be modified so that the template definitions 35077 are available at one or more points of instantiation; usually this 35078 is as simple as adding `#include <tmethods.cc>' to the end of each 35079 template header. 35080 35081 For library code, if you want the library to provide all of the 35082 template instantiations it needs, just try to link all of its 35083 object files together; the link will fail, but cause the 35084 instantiations to be generated as a side effect. Be warned, 35085 however, that this may cause conflicts if multiple libraries try 35086 to provide the same instantiations. For greater control, use 35087 explicit instantiation as described in the next option. 35088 35089 2. Compile your code with `-fno-implicit-templates' to disable the 35090 implicit generation of template instances, and explicitly 35091 instantiate all the ones you use. This approach requires more 35092 knowledge of exactly which instances you need than do the others, 35093 but it's less mysterious and allows greater control. You can 35094 scatter the explicit instantiations throughout your program, 35095 perhaps putting them in the translation units where the instances 35096 are used or the translation units that define the templates 35097 themselves; you can put all of the explicit instantiations you 35098 need into one big file; or you can create small files like 35099 35100 #include "Foo.h" 35101 #include "Foo.cc" 35102 35103 template class Foo<int>; 35104 template ostream& operator << 35105 (ostream&, const Foo<int>&); 35106 35107 for each of the instances you need, and create a template 35108 instantiation library from those. 35109 35110 If you are using Cfront-model code, you can probably get away with 35111 not using `-fno-implicit-templates' when compiling files that don't 35112 `#include' the member template definitions. 35113 35114 If you use one big file to do the instantiations, you may want to 35115 compile it without `-fno-implicit-templates' so you get all of the 35116 instances required by your explicit instantiations (but not by any 35117 other files) without having to specify them as well. 35118 35119 G++ has extended the template instantiation syntax given in the ISO 35120 standard to allow forward declaration of explicit instantiations 35121 (with `extern'), instantiation of the compiler support data for a 35122 template class (i.e. the vtable) without instantiating any of its 35123 members (with `inline'), and instantiation of only the static data 35124 members of a template class, without the support data or member 35125 functions (with (`static'): 35126 35127 extern template int max (int, int); 35128 inline template class Foo<int>; 35129 static template class Foo<int>; 35130 35131 3. Do nothing. Pretend G++ does implement automatic instantiation 35132 management. Code written for the Borland model will work fine, but 35133 each translation unit will contain instances of each of the 35134 templates it uses. In a large program, this can lead to an 35135 unacceptable amount of code duplication. 35136 35137 35138 File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 35139 35140 6.6 Extracting the function pointer from a bound pointer to member function 35141 =========================================================================== 35142 35143 In C++, pointer to member functions (PMFs) are implemented using a wide 35144 pointer of sorts to handle all the possible call mechanisms; the PMF 35145 needs to store information about how to adjust the `this' pointer, and 35146 if the function pointed to is virtual, where to find the vtable, and 35147 where in the vtable to look for the member function. If you are using 35148 PMFs in an inner loop, you should really reconsider that decision. If 35149 that is not an option, you can extract the pointer to the function that 35150 would be called for a given object/PMF pair and call it directly inside 35151 the inner loop, to save a bit of time. 35152 35153 Note that you will still be paying the penalty for the call through a 35154 function pointer; on most modern architectures, such a call defeats the 35155 branch prediction features of the CPU. This is also true of normal 35156 virtual function calls. 35157 35158 The syntax for this extension is 35159 35160 extern A a; 35161 extern int (A::*fp)(); 35162 typedef int (*fptr)(A *); 35163 35164 fptr p = (fptr)(a.*fp); 35165 35166 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 35167 object is needed to obtain the address of the function. They can be 35168 converted to function pointers directly: 35169 35170 fptr p1 = (fptr)(&A::foo); 35171 35172 You must specify `-Wno-pmf-conversions' to use this extension. 35173 35174 35175 File: gcc.info, Node: C++ Attributes, Next: Namespace Association, Prev: Bound member functions, Up: C++ Extensions 35176 35177 6.7 C++-Specific Variable, Function, and Type Attributes 35178 ======================================================== 35179 35180 Some attributes only make sense for C++ programs. 35181 35182 `init_priority (PRIORITY)' 35183 In Standard C++, objects defined at namespace scope are guaranteed 35184 to be initialized in an order in strict accordance with that of 35185 their definitions _in a given translation unit_. No guarantee is 35186 made for initializations across translation units. However, GNU 35187 C++ allows users to control the order of initialization of objects 35188 defined at namespace scope with the `init_priority' attribute by 35189 specifying a relative PRIORITY, a constant integral expression 35190 currently bounded between 101 and 65535 inclusive. Lower numbers 35191 indicate a higher priority. 35192 35193 In the following example, `A' would normally be created before 35194 `B', but the `init_priority' attribute has reversed that order: 35195 35196 Some_Class A __attribute__ ((init_priority (2000))); 35197 Some_Class B __attribute__ ((init_priority (543))); 35198 35199 Note that the particular values of PRIORITY do not matter; only 35200 their relative ordering. 35201 35202 `java_interface' 35203 This type attribute informs C++ that the class is a Java 35204 interface. It may only be applied to classes declared within an 35205 `extern "Java"' block. Calls to methods declared in this 35206 interface will be dispatched using GCJ's interface table 35207 mechanism, instead of regular virtual table dispatch. 35208 35209 35210 See also *Note Namespace Association::. 35211 35212 35213 File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: C++ Attributes, Up: C++ Extensions 35214 35215 6.8 Namespace Association 35216 ========================= 35217 35218 *Caution:* The semantics of this extension are not fully defined. 35219 Users should refrain from using this extension as its semantics may 35220 change subtly over time. It is possible that this extension will be 35221 removed in future versions of G++. 35222 35223 A using-directive with `__attribute ((strong))' is stronger than a 35224 normal using-directive in two ways: 35225 35226 * Templates from the used namespace can be specialized and explicitly 35227 instantiated as though they were members of the using namespace. 35228 35229 * The using namespace is considered an associated namespace of all 35230 templates in the used namespace for purposes of argument-dependent 35231 name lookup. 35232 35233 The used namespace must be nested within the using namespace so that 35234 normal unqualified lookup works properly. 35235 35236 This is useful for composing a namespace transparently from 35237 implementation namespaces. For example: 35238 35239 namespace std { 35240 namespace debug { 35241 template <class T> struct A { }; 35242 } 35243 using namespace debug __attribute ((__strong__)); 35244 template <> struct A<int> { }; // ok to specialize 35245 35246 template <class T> void f (A<T>); 35247 } 35248 35249 int main() 35250 { 35251 f (std::A<float>()); // lookup finds std::f 35252 f (std::A<int>()); 35253 } 35254 35255 35256 File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 35257 35258 6.9 Type Traits 35259 =============== 35260 35261 The C++ front-end implements syntactic extensions that allow to 35262 determine at compile time various characteristics of a type (or of a 35263 pair of types). 35264 35265 `__has_nothrow_assign (type)' 35266 If `type' is const qualified or is a reference type then the trait 35267 is false. Otherwise if `__has_trivial_assign (type)' is true then 35268 the trait is true, else if `type' is a cv class or union type with 35269 copy assignment operators that are known not to throw an exception 35270 then the trait is true, else it is false. Requires: `type' shall 35271 be a complete type, an array type of unknown bound, or is a `void' 35272 type. 35273 35274 `__has_nothrow_copy (type)' 35275 If `__has_trivial_copy (type)' is true then the trait is true, 35276 else if `type' is a cv class or union type with copy constructors 35277 that are known not to throw an exception then the trait is true, 35278 else it is false. Requires: `type' shall be a complete type, an 35279 array type of unknown bound, or is a `void' type. 35280 35281 `__has_nothrow_constructor (type)' 35282 If `__has_trivial_constructor (type)' is true then the trait is 35283 true, else if `type' is a cv class or union type (or array 35284 thereof) with a default constructor that is known not to throw an 35285 exception then the trait is true, else it is false. Requires: 35286 `type' shall be a complete type, an array type of unknown bound, 35287 or is a `void' type. 35288 35289 `__has_trivial_assign (type)' 35290 If `type' is const qualified or is a reference type then the trait 35291 is false. Otherwise if `__is_pod (type)' is true then the trait is 35292 true, else if `type' is a cv class or union type with a trivial 35293 copy assignment ([class.copy]) then the trait is true, else it is 35294 false. Requires: `type' shall be a complete type, an array type 35295 of unknown bound, or is a `void' type. 35296 35297 `__has_trivial_copy (type)' 35298 If `__is_pod (type)' is true or `type' is a reference type then 35299 the trait is true, else if `type' is a cv class or union type with 35300 a trivial copy constructor ([class.copy]) then the trait is true, 35301 else it is false. Requires: `type' shall be a complete type, an 35302 array type of unknown bound, or is a `void' type. 35303 35304 `__has_trivial_constructor (type)' 35305 If `__is_pod (type)' is true then the trait is true, else if 35306 `type' is a cv class or union type (or array thereof) with a 35307 trivial default constructor ([class.ctor]) then the trait is true, 35308 else it is false. Requires: `type' shall be a complete type, an 35309 array type of unknown bound, or is a `void' type. 35310 35311 `__has_trivial_destructor (type)' 35312 If `__is_pod (type)' is true or `type' is a reference type then 35313 the trait is true, else if `type' is a cv class or union type (or 35314 array thereof) with a trivial destructor ([class.dtor]) then the 35315 trait is true, else it is false. Requires: `type' shall be a 35316 complete type, an array type of unknown bound, or is a `void' type. 35317 35318 `__has_virtual_destructor (type)' 35319 If `type' is a class type with a virtual destructor ([class.dtor]) 35320 then the trait is true, else it is false. Requires: `type' shall 35321 be a complete type, an array type of unknown bound, or is a `void' 35322 type. 35323 35324 `__is_abstract (type)' 35325 If `type' is an abstract class ([class.abstract]) then the trait 35326 is true, else it is false. Requires: `type' shall be a complete 35327 type, an array type of unknown bound, or is a `void' type. 35328 35329 `__is_base_of (base_type, derived_type)' 35330 If `base_type' is a base class of `derived_type' ([class.derived]) 35331 then the trait is true, otherwise it is false. Top-level cv 35332 qualifications of `base_type' and `derived_type' are ignored. For 35333 the purposes of this trait, a class type is considered is own 35334 base. Requires: if `__is_class (base_type)' and `__is_class 35335 (derived_type)' are true and `base_type' and `derived_type' are 35336 not the same type (disregarding cv-qualifiers), `derived_type' 35337 shall be a complete type. Diagnostic is produced if this 35338 requirement is not met. 35339 35340 `__is_class (type)' 35341 If `type' is a cv class type, and not a union type 35342 ([basic.compound]) the trait is true, else it is false. 35343 35344 `__is_empty (type)' 35345 If `__is_class (type)' is false then the trait is false. 35346 Otherwise `type' is considered empty if and only if: `type' has no 35347 non-static data members, or all non-static data members, if any, 35348 are bit-fields of length 0, and `type' has no virtual members, and 35349 `type' has no virtual base classes, and `type' has no base classes 35350 `base_type' for which `__is_empty (base_type)' is false. 35351 Requires: `type' shall be a complete type, an array type of 35352 unknown bound, or is a `void' type. 35353 35354 `__is_enum (type)' 35355 If `type' is a cv enumeration type ([basic.compound]) the trait is 35356 true, else it is false. 35357 35358 `__is_pod (type)' 35359 If `type' is a cv POD type ([basic.types]) then the trait is true, 35360 else it is false. Requires: `type' shall be a complete type, an 35361 array type of unknown bound, or is a `void' type. 35362 35363 `__is_polymorphic (type)' 35364 If `type' is a polymorphic class ([class.virtual]) then the trait 35365 is true, else it is false. Requires: `type' shall be a complete 35366 type, an array type of unknown bound, or is a `void' type. 35367 35368 `__is_union (type)' 35369 If `type' is a cv union type ([basic.compound]) the trait is true, 35370 else it is false. 35371 35372 35373 35374 File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 35375 35376 6.10 Java Exceptions 35377 ==================== 35378 35379 The Java language uses a slightly different exception handling model 35380 from C++. Normally, GNU C++ will automatically detect when you are 35381 writing C++ code that uses Java exceptions, and handle them 35382 appropriately. However, if C++ code only needs to execute destructors 35383 when Java exceptions are thrown through it, GCC will guess incorrectly. 35384 Sample problematic code is: 35385 35386 struct S { ~S(); }; 35387 extern void bar(); // is written in Java, and may throw exceptions 35388 void foo() 35389 { 35390 S s; 35391 bar(); 35392 } 35393 35394 The usual effect of an incorrect guess is a link failure, complaining of 35395 a missing routine called `__gxx_personality_v0'. 35396 35397 You can inform the compiler that Java exceptions are to be used in a 35398 translation unit, irrespective of what it might think, by writing 35399 `#pragma GCC java_exceptions' at the head of the file. This `#pragma' 35400 must appear before any functions that throw or catch exceptions, or run 35401 destructors when exceptions are thrown through them. 35402 35403 You cannot mix Java and C++ exceptions in the same translation unit. 35404 It is believed to be safe to throw a C++ exception from one file through 35405 another file compiled for the Java exception model, or vice versa, but 35406 there may be bugs in this area. 35407 35408 35409 File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 35410 35411 6.11 Deprecated Features 35412 ======================== 35413 35414 In the past, the GNU C++ compiler was extended to experiment with new 35415 features, at a time when the C++ language was still evolving. Now that 35416 the C++ standard is complete, some of those features are superseded by 35417 superior alternatives. Using the old features might cause a warning in 35418 some cases that the feature will be dropped in the future. In other 35419 cases, the feature might be gone already. 35420 35421 While the list below is not exhaustive, it documents some of the 35422 options that are now deprecated: 35423 35424 `-fexternal-templates' 35425 `-falt-external-templates' 35426 These are two of the many ways for G++ to implement template 35427 instantiation. *Note Template Instantiation::. The C++ standard 35428 clearly defines how template definitions have to be organized 35429 across implementation units. G++ has an implicit instantiation 35430 mechanism that should work just fine for standard-conforming code. 35431 35432 `-fstrict-prototype' 35433 `-fno-strict-prototype' 35434 Previously it was possible to use an empty prototype parameter 35435 list to indicate an unspecified number of parameters (like C), 35436 rather than no parameters, as C++ demands. This feature has been 35437 removed, except where it is required for backwards compatibility. 35438 *Note Backwards Compatibility::. 35439 35440 G++ allows a virtual function returning `void *' to be overridden by 35441 one returning a different pointer type. This extension to the 35442 covariant return type rules is now deprecated and will be removed from a 35443 future version. 35444 35445 The G++ minimum and maximum operators (`<?' and `>?') and their 35446 compound forms (`<?=') and `>?=') have been deprecated and are now 35447 removed from G++. Code using these operators should be modified to use 35448 `std::min' and `std::max' instead. 35449 35450 The named return value extension has been deprecated, and is now 35451 removed from G++. 35452 35453 The use of initializer lists with new expressions has been deprecated, 35454 and is now removed from G++. 35455 35456 Floating and complex non-type template parameters have been deprecated, 35457 and are now removed from G++. 35458 35459 The implicit typename extension has been deprecated and is now removed 35460 from G++. 35461 35462 The use of default arguments in function pointers, function typedefs 35463 and other places where they are not permitted by the standard is 35464 deprecated and will be removed from a future version of G++. 35465 35466 G++ allows floating-point literals to appear in integral constant 35467 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 35468 deprecated and will be removed from a future version. 35469 35470 G++ allows static data members of const floating-point type to be 35471 declared with an initializer in a class definition. The standard only 35472 allows initializers for static members of const integral types and const 35473 enumeration types so this extension has been deprecated and will be 35474 removed from a future version. 35475 35476 35477 File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 35478 35479 6.12 Backwards Compatibility 35480 ============================ 35481 35482 Now that there is a definitive ISO standard C++, G++ has a specification 35483 to adhere to. The C++ language evolved over time, and features that 35484 used to be acceptable in previous drafts of the standard, such as the 35485 ARM [Annotated C++ Reference Manual], are no longer accepted. In order 35486 to allow compilation of C++ written to such drafts, G++ contains some 35487 backwards compatibilities. _All such backwards compatibility features 35488 are liable to disappear in future versions of G++._ They should be 35489 considered deprecated. *Note Deprecated Features::. 35490 35491 `For scope' 35492 If a variable is declared at for scope, it used to remain in scope 35493 until the end of the scope which contained the for statement 35494 (rather than just within the for scope). G++ retains this, but 35495 issues a warning, if such a variable is accessed outside the for 35496 scope. 35497 35498 `Implicit C language' 35499 Old C system header files did not contain an `extern "C" {...}' 35500 scope to set the language. On such systems, all header files are 35501 implicitly scoped inside a C language scope. Also, an empty 35502 prototype `()' will be treated as an unspecified number of 35503 arguments, rather than no arguments, as C++ demands. 35504 35505 35506 File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 35507 35508 7 GNU Objective-C runtime features 35509 ********************************** 35510 35511 This document is meant to describe some of the GNU Objective-C runtime 35512 features. It is not intended to teach you Objective-C, there are 35513 several resources on the Internet that present the language. Questions 35514 and comments about this document to Ovidiu Predescu <ovidiu (a] cup.hp.com>. 35515 35516 * Menu: 35517 35518 * Executing code before main:: 35519 * Type encoding:: 35520 * Garbage Collection:: 35521 * Constant string objects:: 35522 * compatibility_alias:: 35523 35524 35525 File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: Objective-C, Up: Objective-C 35526 35527 7.1 `+load': Executing code before main 35528 ======================================= 35529 35530 The GNU Objective-C runtime provides a way that allows you to execute 35531 code before the execution of the program enters the `main' function. 35532 The code is executed on a per-class and a per-category basis, through a 35533 special class method `+load'. 35534 35535 This facility is very useful if you want to initialize global variables 35536 which can be accessed by the program directly, without sending a message 35537 to the class first. The usual way to initialize global variables, in 35538 the `+initialize' method, might not be useful because `+initialize' is 35539 only called when the first message is sent to a class object, which in 35540 some cases could be too late. 35541 35542 Suppose for example you have a `FileStream' class that declares 35543 `Stdin', `Stdout' and `Stderr' as global variables, like below: 35544 35545 35546 FileStream *Stdin = nil; 35547 FileStream *Stdout = nil; 35548 FileStream *Stderr = nil; 35549 35550 @implementation FileStream 35551 35552 + (void)initialize 35553 { 35554 Stdin = [[FileStream new] initWithFd:0]; 35555 Stdout = [[FileStream new] initWithFd:1]; 35556 Stderr = [[FileStream new] initWithFd:2]; 35557 } 35558 35559 /* Other methods here */ 35560 @end 35561 35562 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 35563 in `+initialize' occurs too late. The programmer can send a message to 35564 one of these objects before the variables are actually initialized, 35565 thus sending messages to the `nil' object. The `+initialize' method 35566 which actually initializes the global variables is not invoked until 35567 the first message is sent to the class object. The solution would 35568 require these variables to be initialized just before entering `main'. 35569 35570 The correct solution of the above problem is to use the `+load' method 35571 instead of `+initialize': 35572 35573 35574 @implementation FileStream 35575 35576 + (void)load 35577 { 35578 Stdin = [[FileStream new] initWithFd:0]; 35579 Stdout = [[FileStream new] initWithFd:1]; 35580 Stderr = [[FileStream new] initWithFd:2]; 35581 } 35582 35583 /* Other methods here */ 35584 @end 35585 35586 The `+load' is a method that is not overridden by categories. If a 35587 class and a category of it both implement `+load', both methods are 35588 invoked. This allows some additional initializations to be performed in 35589 a category. 35590 35591 This mechanism is not intended to be a replacement for `+initialize'. 35592 You should be aware of its limitations when you decide to use it 35593 instead of `+initialize'. 35594 35595 * Menu: 35596 35597 * What you can and what you cannot do in +load:: 35598 35599 35600 File: gcc.info, Node: What you can and what you cannot do in +load, Prev: Executing code before main, Up: Executing code before main 35601 35602 7.1.1 What you can and what you cannot do in `+load' 35603 ---------------------------------------------------- 35604 35605 The `+load' implementation in the GNU runtime guarantees you the 35606 following things: 35607 35608 * you can write whatever C code you like; 35609 35610 * you can send messages to Objective-C constant strings (`@"this is a 35611 constant string"'); 35612 35613 * you can allocate and send messages to objects whose class is 35614 implemented in the same file; 35615 35616 * the `+load' implementation of all super classes of a class are 35617 executed before the `+load' of that class is executed; 35618 35619 * the `+load' implementation of a class is executed before the 35620 `+load' implementation of any category. 35621 35622 35623 In particular, the following things, even if they can work in a 35624 particular case, are not guaranteed: 35625 35626 * allocation of or sending messages to arbitrary objects; 35627 35628 * allocation of or sending messages to objects whose classes have a 35629 category implemented in the same file; 35630 35631 35632 You should make no assumptions about receiving `+load' in sibling 35633 classes when you write `+load' of a class. The order in which sibling 35634 classes receive `+load' is not guaranteed. 35635 35636 The order in which `+load' and `+initialize' are called could be 35637 problematic if this matters. If you don't allocate objects inside 35638 `+load', it is guaranteed that `+load' is called before `+initialize'. 35639 If you create an object inside `+load' the `+initialize' method of 35640 object's class is invoked even if `+load' was not invoked. Note if you 35641 explicitly call `+load' on a class, `+initialize' will be called first. 35642 To avoid possible problems try to implement only one of these methods. 35643 35644 The `+load' method is also invoked when a bundle is dynamically loaded 35645 into your running program. This happens automatically without any 35646 intervening operation from you. When you write bundles and you need to 35647 write `+load' you can safely create and send messages to objects whose 35648 classes already exist in the running program. The same restrictions as 35649 above apply to classes defined in bundle. 35650 35651 35652 File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 35653 35654 7.2 Type encoding 35655 ================= 35656 35657 The Objective-C compiler generates type encodings for all the types. 35658 These type encodings are used at runtime to find out information about 35659 selectors and methods and about objects and classes. 35660 35661 The types are encoded in the following way: 35662 35663 `_Bool' `B' 35664 `char' `c' 35665 `unsigned char' `C' 35666 `short' `s' 35667 `unsigned short' `S' 35668 `int' `i' 35669 `unsigned int' `I' 35670 `long' `l' 35671 `unsigned long' `L' 35672 `long long' `q' 35673 `unsigned long `Q' 35674 long' 35675 `float' `f' 35676 `double' `d' 35677 `void' `v' 35678 `id' `@' 35679 `Class' `#' 35680 `SEL' `:' 35681 `char*' `*' 35682 unknown type `?' 35683 Complex types `j' followed by the inner type. For example 35684 `_Complex double' is encoded as "jd". 35685 bit-fields `b' followed by the starting position of the 35686 bit-field, the type of the bit-field and the size of 35687 the bit-field (the bit-fields encoding was changed 35688 from the NeXT's compiler encoding, see below) 35689 35690 The encoding of bit-fields has changed to allow bit-fields to be 35691 properly handled by the runtime functions that compute sizes and 35692 alignments of types that contain bit-fields. The previous encoding 35693 contained only the size of the bit-field. Using only this information 35694 it is not possible to reliably compute the size occupied by the 35695 bit-field. This is very important in the presence of the Boehm's 35696 garbage collector because the objects are allocated using the typed 35697 memory facility available in this collector. The typed memory 35698 allocation requires information about where the pointers are located 35699 inside the object. 35700 35701 The position in the bit-field is the position, counting in bits, of the 35702 bit closest to the beginning of the structure. 35703 35704 The non-atomic types are encoded as follows: 35705 35706 pointers `^' followed by the pointed type. 35707 arrays `[' followed by the number of elements in the array 35708 followed by the type of the elements followed by `]' 35709 structures `{' followed by the name of the structure (or `?' if the 35710 structure is unnamed), the `=' sign, the type of the 35711 members and by `}' 35712 unions `(' followed by the name of the structure (or `?' if the 35713 union is unnamed), the `=' sign, the type of the members 35714 followed by `)' 35715 35716 Here are some types and their encodings, as they are generated by the 35717 compiler on an i386 machine: 35718 35719 35720 Objective-C type Compiler encoding 35721 int a[10]; `[10i]' 35722 struct { `{?=i[3f]b128i3b131i2c}' 35723 int i; 35724 float f[3]; 35725 int a:3; 35726 int b:2; 35727 char c; 35728 } 35729 35730 35731 In addition to the types the compiler also encodes the type 35732 specifiers. The table below describes the encoding of the current 35733 Objective-C type specifiers: 35734 35735 35736 Specifier Encoding 35737 `const' `r' 35738 `in' `n' 35739 `inout' `N' 35740 `out' `o' 35741 `bycopy' `O' 35742 `oneway' `V' 35743 35744 35745 The type specifiers are encoded just before the type. Unlike types 35746 however, the type specifiers are only encoded when they appear in method 35747 argument types. 35748 35749 35750 File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 35751 35752 7.3 Garbage Collection 35753 ====================== 35754 35755 Support for a new memory management policy has been added by using a 35756 powerful conservative garbage collector, known as the 35757 Boehm-Demers-Weiser conservative garbage collector. It is available 35758 from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'. 35759 35760 To enable the support for it you have to configure the compiler using 35761 an additional argument, `--enable-objc-gc'. You need to have garbage 35762 collector installed before building the compiler. This will build an 35763 additional runtime library which has several enhancements to support 35764 the garbage collector. The new library has a new name, `libobjc_gc.a' 35765 to not conflict with the non-garbage-collected library. 35766 35767 When the garbage collector is used, the objects are allocated using the 35768 so-called typed memory allocation mechanism available in the 35769 Boehm-Demers-Weiser collector. This mode requires precise information 35770 on where pointers are located inside objects. This information is 35771 computed once per class, immediately after the class has been 35772 initialized. 35773 35774 There is a new runtime function `class_ivar_set_gcinvisible()' which 35775 can be used to declare a so-called "weak pointer" reference. Such a 35776 pointer is basically hidden for the garbage collector; this can be 35777 useful in certain situations, especially when you want to keep track of 35778 the allocated objects, yet allow them to be collected. This kind of 35779 pointers can only be members of objects, you cannot declare a global 35780 pointer as a weak reference. Every type which is a pointer type can be 35781 declared a weak pointer, including `id', `Class' and `SEL'. 35782 35783 Here is an example of how to use this feature. Suppose you want to 35784 implement a class whose instances hold a weak pointer reference; the 35785 following class does this: 35786 35787 35788 @interface WeakPointer : Object 35789 { 35790 const void* weakPointer; 35791 } 35792 35793 - initWithPointer:(const void*)p; 35794 - (const void*)weakPointer; 35795 @end 35796 35797 35798 @implementation WeakPointer 35799 35800 + (void)initialize 35801 { 35802 class_ivar_set_gcinvisible (self, "weakPointer", YES); 35803 } 35804 35805 - initWithPointer:(const void*)p 35806 { 35807 weakPointer = p; 35808 return self; 35809 } 35810 35811 - (const void*)weakPointer 35812 { 35813 return weakPointer; 35814 } 35815 35816 @end 35817 35818 Weak pointers are supported through a new type character specifier 35819 represented by the `!' character. The `class_ivar_set_gcinvisible()' 35820 function adds or removes this specifier to the string type description 35821 of the instance variable named as argument. 35822 35823 35824 File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 35825 35826 7.4 Constant string objects 35827 =========================== 35828 35829 GNU Objective-C provides constant string objects that are generated 35830 directly by the compiler. You declare a constant string object by 35831 prefixing a C constant string with the character `@': 35832 35833 id myString = @"this is a constant string object"; 35834 35835 The constant string objects are by default instances of the 35836 `NXConstantString' class which is provided by the GNU Objective-C 35837 runtime. To get the definition of this class you must include the 35838 `objc/NXConstStr.h' header file. 35839 35840 User defined libraries may want to implement their own constant string 35841 class. To be able to support them, the GNU Objective-C compiler 35842 provides a new command line options 35843 `-fconstant-string-class=CLASS-NAME'. The provided class should adhere 35844 to a strict structure, the same as `NXConstantString''s structure: 35845 35846 35847 @interface MyConstantStringClass 35848 { 35849 Class isa; 35850 char *c_string; 35851 unsigned int len; 35852 } 35853 @end 35854 35855 `NXConstantString' inherits from `Object'; user class libraries may 35856 choose to inherit the customized constant string class from a different 35857 class than `Object'. There is no requirement in the methods the 35858 constant string class has to implement, but the final ivar layout of 35859 the class must be the compatible with the given structure. 35860 35861 When the compiler creates the statically allocated constant string 35862 object, the `c_string' field will be filled by the compiler with the 35863 string; the `length' field will be filled by the compiler with the 35864 string length; the `isa' pointer will be filled with `NULL' by the 35865 compiler, and it will later be fixed up automatically at runtime by the 35866 GNU Objective-C runtime library to point to the class which was set by 35867 the `-fconstant-string-class' option when the object file is loaded (if 35868 you wonder how it works behind the scenes, the name of the class to 35869 use, and the list of static objects to fixup, are stored by the 35870 compiler in the object file in a place where the GNU runtime library 35871 will find them at runtime). 35872 35873 As a result, when a file is compiled with the 35874 `-fconstant-string-class' option, all the constant string objects will 35875 be instances of the class specified as argument to this option. It is 35876 possible to have multiple compilation units referring to different 35877 constant string classes, neither the compiler nor the linker impose any 35878 restrictions in doing this. 35879 35880 35881 File: gcc.info, Node: compatibility_alias, Prev: Constant string objects, Up: Objective-C 35882 35883 7.5 compatibility_alias 35884 ======================= 35885 35886 This is a feature of the Objective-C compiler rather than of the 35887 runtime, anyway since it is documented nowhere and its existence was 35888 forgotten, we are documenting it here. 35889 35890 The keyword `@compatibility_alias' allows you to define a class name 35891 as equivalent to another class name. For example: 35892 35893 @compatibility_alias WOApplication GSWApplication; 35894 35895 tells the compiler that each time it encounters `WOApplication' as a 35896 class name, it should replace it with `GSWApplication' (that is, 35897 `WOApplication' is just an alias for `GSWApplication'). 35898 35899 There are some constraints on how this can be used-- 35900 35901 * `WOApplication' (the alias) must not be an existing class; 35902 35903 * `GSWApplication' (the real class) must be an existing class. 35904 35905 35906 35907 File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 35908 35909 8 Binary Compatibility 35910 ********************** 35911 35912 Binary compatibility encompasses several related concepts: 35913 35914 "application binary interface (ABI)" 35915 The set of runtime conventions followed by all of the tools that 35916 deal with binary representations of a program, including 35917 compilers, assemblers, linkers, and language runtime support. 35918 Some ABIs are formal with a written specification, possibly 35919 designed by multiple interested parties. Others are simply the 35920 way things are actually done by a particular set of tools. 35921 35922 "ABI conformance" 35923 A compiler conforms to an ABI if it generates code that follows 35924 all of the specifications enumerated by that ABI. A library 35925 conforms to an ABI if it is implemented according to that ABI. An 35926 application conforms to an ABI if it is built using tools that 35927 conform to that ABI and does not contain source code that 35928 specifically changes behavior specified by the ABI. 35929 35930 "calling conventions" 35931 Calling conventions are a subset of an ABI that specify of how 35932 arguments are passed and function results are returned. 35933 35934 "interoperability" 35935 Different sets of tools are interoperable if they generate files 35936 that can be used in the same program. The set of tools includes 35937 compilers, assemblers, linkers, libraries, header files, startup 35938 files, and debuggers. Binaries produced by different sets of 35939 tools are not interoperable unless they implement the same ABI. 35940 This applies to different versions of the same tools as well as 35941 tools from different vendors. 35942 35943 "intercallability" 35944 Whether a function in a binary built by one set of tools can call a 35945 function in a binary built by a different set of tools is a subset 35946 of interoperability. 35947 35948 "implementation-defined features" 35949 Language standards include lists of implementation-defined 35950 features whose behavior can vary from one implementation to 35951 another. Some of these features are normally covered by a 35952 platform's ABI and others are not. The features that are not 35953 covered by an ABI generally affect how a program behaves, but not 35954 intercallability. 35955 35956 "compatibility" 35957 Conformance to the same ABI and the same behavior of 35958 implementation-defined features are both relevant for 35959 compatibility. 35960 35961 The application binary interface implemented by a C or C++ compiler 35962 affects code generation and runtime support for: 35963 35964 * size and alignment of data types 35965 35966 * layout of structured types 35967 35968 * calling conventions 35969 35970 * register usage conventions 35971 35972 * interfaces for runtime arithmetic support 35973 35974 * object file formats 35975 35976 In addition, the application binary interface implemented by a C++ 35977 compiler affects code generation and runtime support for: 35978 * name mangling 35979 35980 * exception handling 35981 35982 * invoking constructors and destructors 35983 35984 * layout, alignment, and padding of classes 35985 35986 * layout and alignment of virtual tables 35987 35988 Some GCC compilation options cause the compiler to generate code that 35989 does not conform to the platform's default ABI. Other options cause 35990 different program behavior for implementation-defined features that are 35991 not covered by an ABI. These options are provided for consistency with 35992 other compilers that do not follow the platform's default ABI or the 35993 usual behavior of implementation-defined features for the platform. Be 35994 very careful about using such options. 35995 35996 Most platforms have a well-defined ABI that covers C code, but ABIs 35997 that cover C++ functionality are not yet common. 35998 35999 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 36000 written, vendor-neutral C++ ABI that was designed to be specific to 36001 64-bit Itanium but also includes generic specifications that apply to 36002 any platform. This C++ ABI is also implemented by other compiler 36003 vendors on some platforms, notably GNU/Linux and BSD systems. We have 36004 tried hard to provide a stable ABI that will be compatible with future 36005 GCC releases, but it is possible that we will encounter problems that 36006 make this difficult. Such problems could include different 36007 interpretations of the C++ ABI by different vendors, bugs in the ABI, or 36008 bugs in the implementation of the ABI in different compilers. GCC's 36009 `-Wabi' switch warns when G++ generates code that is probably not 36010 compatible with the C++ ABI. 36011 36012 The C++ library used with a C++ compiler includes the Standard C++ 36013 Library, with functionality defined in the C++ Standard, plus language 36014 runtime support. The runtime support is included in a C++ ABI, but 36015 there is no formal ABI for the Standard C++ Library. Two 36016 implementations of that library are interoperable if one follows the 36017 de-facto ABI of the other and if they are both built with the same 36018 compiler, or with compilers that conform to the same ABI for C++ 36019 compiler and runtime support. 36020 36021 When G++ and another C++ compiler conform to the same C++ ABI, but the 36022 implementations of the Standard C++ Library that they normally use do 36023 not follow the same ABI for the Standard C++ Library, object files 36024 built with those compilers can be used in the same program only if they 36025 use the same C++ library. This requires specifying the location of the 36026 C++ library header files when invoking the compiler whose usual library 36027 is not being used. The location of GCC's C++ header files depends on 36028 how the GCC build was configured, but can be seen by using the G++ `-v' 36029 option. With default configuration options for G++ 3.3 the compile 36030 line for a different C++ compiler needs to include 36031 36032 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 36033 36034 Similarly, compiling code with G++ that must use a C++ library other 36035 than the GNU C++ library requires specifying the location of the header 36036 files for that other library. 36037 36038 The most straightforward way to link a program to use a particular C++ 36039 library is to use a C++ driver that specifies that C++ library by 36040 default. The `g++' driver, for example, tells the linker where to find 36041 GCC's C++ library (`libstdc++') plus the other libraries and startup 36042 files it needs, in the proper order. 36043 36044 If a program must use a different C++ library and it's not possible to 36045 do the final link using a C++ driver that uses that library by default, 36046 it is necessary to tell `g++' the location and name of that library. 36047 It might also be necessary to specify different startup files and other 36048 runtime support libraries, and to suppress the use of GCC's support 36049 libraries with one or more of the options `-nostdlib', `-nostartfiles', 36050 and `-nodefaultlibs'. 36051 36052 36053 File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 36054 36055 9 `gcov'--a Test Coverage Program 36056 ********************************* 36057 36058 `gcov' is a tool you can use in conjunction with GCC to test code 36059 coverage in your programs. 36060 36061 * Menu: 36062 36063 * Gcov Intro:: Introduction to gcov. 36064 * Invoking Gcov:: How to use gcov. 36065 * Gcov and Optimization:: Using gcov with GCC optimization. 36066 * Gcov Data Files:: The files used by gcov. 36067 * Cross-profiling:: Data file relocation. 36068 36069 36070 File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 36071 36072 9.1 Introduction to `gcov' 36073 ========================== 36074 36075 `gcov' is a test coverage program. Use it in concert with GCC to 36076 analyze your programs to help create more efficient, faster running 36077 code and to discover untested parts of your program. You can use 36078 `gcov' as a profiling tool to help discover where your optimization 36079 efforts will best affect your code. You can also use `gcov' along with 36080 the other profiling tool, `gprof', to assess which parts of your code 36081 use the greatest amount of computing time. 36082 36083 Profiling tools help you analyze your code's performance. Using a 36084 profiler such as `gcov' or `gprof', you can find out some basic 36085 performance statistics, such as: 36086 36087 * how often each line of code executes 36088 36089 * what lines of code are actually executed 36090 36091 * how much computing time each section of code uses 36092 36093 Once you know these things about how your code works when compiled, you 36094 can look at each module to see which modules should be optimized. 36095 `gcov' helps you determine where to work on optimization. 36096 36097 Software developers also use coverage testing in concert with 36098 testsuites, to make sure software is actually good enough for a release. 36099 Testsuites can verify that a program works as expected; a coverage 36100 program tests to see how much of the program is exercised by the 36101 testsuite. Developers can then determine what kinds of test cases need 36102 to be added to the testsuites to create both better testing and a better 36103 final product. 36104 36105 You should compile your code without optimization if you plan to use 36106 `gcov' because the optimization, by combining some lines of code into 36107 one function, may not give you as much information as you need to look 36108 for `hot spots' where the code is using a great deal of computer time. 36109 Likewise, because `gcov' accumulates statistics by line (at the lowest 36110 resolution), it works best with a programming style that places only 36111 one statement on each line. If you use complicated macros that expand 36112 to loops or to other control structures, the statistics are less 36113 helpful--they only report on the line where the macro call appears. If 36114 your complex macros behave like functions, you can replace them with 36115 inline functions to solve this problem. 36116 36117 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 36118 many times each line of a source file `SOURCEFILE.c' has executed. You 36119 can use these logfiles along with `gprof' to aid in fine-tuning the 36120 performance of your programs. `gprof' gives timing information you can 36121 use along with the information you get from `gcov'. 36122 36123 `gcov' works only on code compiled with GCC. It is not compatible 36124 with any other profiling or test coverage mechanism. 36125 36126 36127 File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 36128 36129 9.2 Invoking `gcov' 36130 =================== 36131 36132 gcov [OPTIONS] SOURCEFILES 36133 36134 `gcov' accepts the following options: 36135 36136 `-h' 36137 `--help' 36138 Display help about using `gcov' (on the standard output), and exit 36139 without doing any further processing. 36140 36141 `-v' 36142 `--version' 36143 Display the `gcov' version number (on the standard output), and 36144 exit without doing any further processing. 36145 36146 `-a' 36147 `--all-blocks' 36148 Write individual execution counts for every basic block. Normally 36149 gcov outputs execution counts only for the main blocks of a line. 36150 With this option you can determine if blocks within a single line 36151 are not being executed. 36152 36153 `-b' 36154 `--branch-probabilities' 36155 Write branch frequencies to the output file, and write branch 36156 summary info to the standard output. This option allows you to 36157 see how often each branch in your program was taken. 36158 Unconditional branches will not be shown, unless the `-u' option 36159 is given. 36160 36161 `-c' 36162 `--branch-counts' 36163 Write branch frequencies as the number of branches taken, rather 36164 than the percentage of branches taken. 36165 36166 `-n' 36167 `--no-output' 36168 Do not create the `gcov' output file. 36169 36170 `-l' 36171 `--long-file-names' 36172 Create long file names for included source files. For example, if 36173 the header file `x.h' contains code, and was included in the file 36174 `a.c', then running `gcov' on the file `a.c' will produce an 36175 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 36176 can be useful if `x.h' is included in multiple source files. If 36177 you use the `-p' option, both the including and included file 36178 names will be complete path names. 36179 36180 `-p' 36181 `--preserve-paths' 36182 Preserve complete path information in the names of generated 36183 `.gcov' files. Without this option, just the filename component is 36184 used. With this option, all directories are used, with `/' 36185 characters translated to `#' characters, `.' directory components 36186 removed and `..' components renamed to `^'. This is useful if 36187 sourcefiles are in several different directories. It also affects 36188 the `-l' option. 36189 36190 `-f' 36191 `--function-summaries' 36192 Output summaries for each function in addition to the file level 36193 summary. 36194 36195 `-o DIRECTORY|FILE' 36196 `--object-directory DIRECTORY' 36197 `--object-file FILE' 36198 Specify either the directory containing the gcov data files, or the 36199 object path name. The `.gcno', and `.gcda' data files are 36200 searched for using this option. If a directory is specified, the 36201 data files are in that directory and named after the source file 36202 name, without its extension. If a file is specified here, the 36203 data files are named after that file, without its extension. If 36204 this option is not supplied, it defaults to the current directory. 36205 36206 `-u' 36207 `--unconditional-branches' 36208 When branch probabilities are given, include those of 36209 unconditional branches. Unconditional branches are normally not 36210 interesting. 36211 36212 `-i' 36213 `--intermediate-format' 36214 Output gcov file in an intermediate text format that can be used by 36215 `lcov' or other applications. It will output a single *.gcov file 36216 per *gcda file. No source code required. 36217 36218 36219 `gcov' should be run with the current directory the same as that when 36220 you invoked the compiler. Otherwise it will not be able to locate the 36221 source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 36222 current directory. These contain the coverage information of the 36223 source file they correspond to. One `.gcov' file is produced for each 36224 source file containing code, which was compiled to produce the data 36225 files. The MANGLEDNAME part of the output file name is usually simply 36226 the source file name, but can be something more complicated if the `-l' 36227 or `-p' options are given. Refer to those options for details. 36228 36229 The `.gcov' files contain the `:' separated fields along with program 36230 source code. The format is 36231 36232 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 36233 36234 Additional block information may succeed each line, when requested by 36235 command line option. The EXECUTION_COUNT is `-' for lines containing 36236 no code and `#####' for lines which were never executed. Some lines of 36237 information at the start have LINE_NUMBER of zero. 36238 36239 The preamble lines are of the form 36240 36241 -:0:TAG:VALUE 36242 36243 The ordering and number of these preamble lines will be augmented as 36244 `gcov' development progresses -- do not rely on them remaining 36245 unchanged. Use TAG to locate a particular preamble line. 36246 36247 The additional block information is of the form 36248 36249 TAG INFORMATION 36250 36251 The INFORMATION is human readable, but designed to be simple enough 36252 for machine parsing too. 36253 36254 When printing percentages, 0% and 100% are only printed when the values 36255 are _exactly_ 0% and 100% respectively. Other values which would 36256 conventionally be rounded to 0% or 100% are instead printed as the 36257 nearest non-boundary value. 36258 36259 When using `gcov', you must first compile your program with two 36260 special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 36261 compiler to generate additional information needed by gcov (basically a 36262 flow graph of the program) and also includes additional code in the 36263 object files for generating the extra profiling information needed by 36264 gcov. These additional files are placed in the directory where the 36265 object file is located. 36266 36267 Running the program will cause profile output to be generated. For 36268 each source file compiled with `-fprofile-arcs', an accompanying 36269 `.gcda' file will be placed in the object file directory. 36270 36271 Running `gcov' with your program's source file names as arguments will 36272 now produce a listing of the code along with frequency of execution for 36273 each line. For example, if your program is called `tmp.c', this is 36274 what you see when you use the basic `gcov' facility: 36275 36276 $ gcc -fprofile-arcs -ftest-coverage tmp.c 36277 $ a.out 36278 $ gcov tmp.c 36279 90.00% of 10 source lines executed in file tmp.c 36280 Creating tmp.c.gcov. 36281 36282 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 36283 36284 -: 0:Source:tmp.c 36285 -: 0:Graph:tmp.gcno 36286 -: 0:Data:tmp.gcda 36287 -: 0:Runs:1 36288 -: 0:Programs:1 36289 -: 1:#include <stdio.h> 36290 -: 2: 36291 -: 3:int main (void) 36292 1: 4:{ 36293 1: 5: int i, total; 36294 -: 6: 36295 1: 7: total = 0; 36296 -: 8: 36297 11: 9: for (i = 0; i < 10; i++) 36298 10: 10: total += i; 36299 -: 11: 36300 1: 12: if (total != 45) 36301 #####: 13: printf ("Failure\n"); 36302 -: 14: else 36303 1: 15: printf ("Success\n"); 36304 1: 16: return 0; 36305 -: 17:} 36306 36307 When you use the `-a' option, you will get individual block counts, 36308 and the output looks like this: 36309 36310 -: 0:Source:tmp.c 36311 -: 0:Graph:tmp.gcno 36312 -: 0:Data:tmp.gcda 36313 -: 0:Runs:1 36314 -: 0:Programs:1 36315 -: 1:#include <stdio.h> 36316 -: 2: 36317 -: 3:int main (void) 36318 1: 4:{ 36319 1: 4-block 0 36320 1: 5: int i, total; 36321 -: 6: 36322 1: 7: total = 0; 36323 -: 8: 36324 11: 9: for (i = 0; i < 10; i++) 36325 11: 9-block 0 36326 10: 10: total += i; 36327 10: 10-block 0 36328 -: 11: 36329 1: 12: if (total != 45) 36330 1: 12-block 0 36331 #####: 13: printf ("Failure\n"); 36332 $$$$$: 13-block 0 36333 -: 14: else 36334 1: 15: printf ("Success\n"); 36335 1: 15-block 0 36336 1: 16: return 0; 36337 1: 16-block 0 36338 -: 17:} 36339 36340 In this mode, each basic block is only shown on one line - the last 36341 line of the block. A multi-line block will only contribute to the 36342 execution count of that last line, and other lines will not be shown to 36343 contain code, unless previous blocks end on those lines. The total 36344 execution count of a line is shown and subsequent lines show the 36345 execution counts for individual blocks that end on that line. After 36346 each block, the branch and call counts of the block will be shown, if 36347 the `-b' option is given. 36348 36349 Because of the way GCC instruments calls, a call count can be shown 36350 after a line with no individual blocks. As you can see, line 13 36351 contains a basic block that was not executed. 36352 36353 When you use the `-b' option, your output looks like this: 36354 36355 $ gcov -b tmp.c 36356 90.00% of 10 source lines executed in file tmp.c 36357 80.00% of 5 branches executed in file tmp.c 36358 80.00% of 5 branches taken at least once in file tmp.c 36359 50.00% of 2 calls executed in file tmp.c 36360 Creating tmp.c.gcov. 36361 36362 Here is a sample of a resulting `tmp.c.gcov' file: 36363 36364 -: 0:Source:tmp.c 36365 -: 0:Graph:tmp.gcno 36366 -: 0:Data:tmp.gcda 36367 -: 0:Runs:1 36368 -: 0:Programs:1 36369 -: 1:#include <stdio.h> 36370 -: 2: 36371 -: 3:int main (void) 36372 function main called 1 returned 1 blocks executed 75% 36373 1: 4:{ 36374 1: 5: int i, total; 36375 -: 6: 36376 1: 7: total = 0; 36377 -: 8: 36378 11: 9: for (i = 0; i < 10; i++) 36379 branch 0 taken 91% (fallthrough) 36380 branch 1 taken 9% 36381 10: 10: total += i; 36382 -: 11: 36383 1: 12: if (total != 45) 36384 branch 0 taken 0% (fallthrough) 36385 branch 1 taken 100% 36386 #####: 13: printf ("Failure\n"); 36387 call 0 never executed 36388 -: 14: else 36389 1: 15: printf ("Success\n"); 36390 call 0 called 1 returned 100% 36391 1: 16: return 0; 36392 -: 17:} 36393 36394 For each function, a line is printed showing how many times the 36395 function is called, how many times it returns and what percentage of the 36396 function's blocks were executed. 36397 36398 For each basic block, a line is printed after the last line of the 36399 basic block describing the branch or call that ends the basic block. 36400 There can be multiple branches and calls listed for a single source 36401 line if there are multiple basic blocks that end on that line. In this 36402 case, the branches and calls are each given a number. There is no 36403 simple way to map these branches and calls back to source constructs. 36404 In general, though, the lowest numbered branch or call will correspond 36405 to the leftmost construct on the source line. 36406 36407 For a branch, if it was executed at least once, then a percentage 36408 indicating the number of times the branch was taken divided by the 36409 number of times the branch was executed will be printed. Otherwise, the 36410 message "never executed" is printed. 36411 36412 For a call, if it was executed at least once, then a percentage 36413 indicating the number of times the call returned divided by the number 36414 of times the call was executed will be printed. This will usually be 36415 100%, but may be less for functions that call `exit' or `longjmp', and 36416 thus may not return every time they are called. 36417 36418 The execution counts are cumulative. If the example program were 36419 executed again without removing the `.gcda' file, the count for the 36420 number of times each line in the source was executed would be added to 36421 the results of the previous run(s). This is potentially useful in 36422 several ways. For example, it could be used to accumulate data over a 36423 number of program runs as part of a test verification suite, or to 36424 provide more accurate long-term information over a large number of 36425 program runs. 36426 36427 The data in the `.gcda' files is saved immediately before the program 36428 exits. For each source file compiled with `-fprofile-arcs', the 36429 profiling code first attempts to read in an existing `.gcda' file; if 36430 the file doesn't match the executable (differing number of basic block 36431 counts) it will ignore the contents of the file. It then adds in the 36432 new execution counts and finally writes the data to the file. 36433 36434 36435 File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 36436 36437 9.3 Using `gcov' with GCC Optimization 36438 ====================================== 36439 36440 If you plan to use `gcov' to help optimize your code, you must first 36441 compile your program with two special GCC options: `-fprofile-arcs 36442 -ftest-coverage'. Aside from that, you can use any other GCC options; 36443 but if you want to prove that every single line in your program was 36444 executed, you should not compile with optimization at the same time. 36445 On some machines the optimizer can eliminate some simple code lines by 36446 combining them with other lines. For example, code like this: 36447 36448 if (a != b) 36449 c = 1; 36450 else 36451 c = 0; 36452 36453 can be compiled into one instruction on some machines. In this case, 36454 there is no way for `gcov' to calculate separate execution counts for 36455 each line because there isn't separate code for each line. Hence the 36456 `gcov' output looks like this if you compiled the program with 36457 optimization: 36458 36459 100: 12:if (a != b) 36460 100: 13: c = 1; 36461 100: 14:else 36462 100: 15: c = 0; 36463 36464 The output shows that this block of code, combined by optimization, 36465 executed 100 times. In one sense this result is correct, because there 36466 was only one instruction representing all four of these lines. However, 36467 the output does not indicate how many times the result was 0 and how 36468 many times the result was 1. 36469 36470 Inlineable functions can create unexpected line counts. Line counts 36471 are shown for the source code of the inlineable function, but what is 36472 shown depends on where the function is inlined, or if it is not inlined 36473 at all. 36474 36475 If the function is not inlined, the compiler must emit an out of line 36476 copy of the function, in any object file that needs it. If `fileA.o' 36477 and `fileB.o' both contain out of line bodies of a particular 36478 inlineable function, they will also both contain coverage counts for 36479 that function. When `fileA.o' and `fileB.o' are linked together, the 36480 linker will, on many systems, select one of those out of line bodies 36481 for all calls to that function, and remove or ignore the other. 36482 Unfortunately, it will not remove the coverage counters for the unused 36483 function body. Hence when instrumented, all but one use of that 36484 function will show zero counts. 36485 36486 If the function is inlined in several places, the block structure in 36487 each location might not be the same. For instance, a condition might 36488 now be calculable at compile time in some instances. Because the 36489 coverage of all the uses of the inline function will be shown for the 36490 same source lines, the line counts themselves might seem inconsistent. 36491 36492 36493 File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 36494 36495 9.4 Brief description of `gcov' data files 36496 ========================================== 36497 36498 `gcov' uses two files for profiling. The names of these files are 36499 derived from the original _object_ file by substituting the file suffix 36500 with either `.gcno', or `.gcda'. All of these files are placed in the 36501 same directory as the object file, and contain data stored in a 36502 platform-independent format. 36503 36504 The `.gcno' file is generated when the source file is compiled with 36505 the GCC `-ftest-coverage' option. It contains information to 36506 reconstruct the basic block graphs and assign source line numbers to 36507 blocks. 36508 36509 The `.gcda' file is generated when a program containing object files 36510 built with the GCC `-fprofile-arcs' option is executed. A separate 36511 `.gcda' file is created for each object file compiled with this option. 36512 It contains arc transition counts, and some summary information. 36513 36514 The full details of the file format is specified in `gcov-io.h', and 36515 functions provided in that header file should be used to access the 36516 coverage files. 36517 36518 36519 File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 36520 36521 9.5 Data file relocation to support cross-profiling 36522 =================================================== 36523 36524 Running the program will cause profile output to be generated. For each 36525 source file compiled with `-fprofile-arcs', an accompanying `.gcda' 36526 file will be placed in the object file directory. That implicitly 36527 requires running the program on the same system as it was built or 36528 having the same absolute directory structure on the target system. The 36529 program will try to create the needed directory structure, if it is not 36530 already present. 36531 36532 To support cross-profiling, a program compiled with `-fprofile-arcs' 36533 can relocate the data files based on two environment variables: 36534 36535 * GCOV_PREFIX contains the prefix to add to the absolute paths in 36536 the object file. Prefix must be absolute as well, otherwise its 36537 value is ignored. The default is no prefix. 36538 36539 * GCOV_PREFIX_STRIP indicates the how many initial directory names 36540 to strip off the hardwired absolute paths. Default value is 0. 36541 36542 _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is 36543 undefined, empty or non-absolute. 36544 36545 For example, if the object file `/user/build/foo.o' was built with 36546 `-fprofile-arcs', the final executable will try to create the data file 36547 `/user/build/foo.gcda' when running on the target system. This will 36548 fail if the corresponding directory does not exist and it is unable to 36549 create it. This can be overcome by, for example, setting the 36550 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 36551 Such a setting will name the data file `/target/run/build/foo.gcda'. 36552 36553 You must move the data files to the expected directory tree in order to 36554 use them for profile directed optimizations (`--use-profile'), or to 36555 use the `gcov' tool. 36556 36557 36558 File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 36559 36560 10 Known Causes of Trouble with GCC 36561 *********************************** 36562 36563 This section describes known problems that affect users of GCC. Most 36564 of these are not GCC bugs per se--if they were, we would fix them. But 36565 the result for a user may be like the result of a bug. 36566 36567 Some of these problems are due to bugs in other software, some are 36568 missing features that are too much work to add, and some are places 36569 where people's opinions differ as to what is best. 36570 36571 * Menu: 36572 36573 * Actual Bugs:: Bugs we will fix later. 36574 * Cross-Compiler Problems:: Common problems of cross compiling with GCC. 36575 * Interoperation:: Problems using GCC with other compilers, 36576 and with certain linkers, assemblers and debuggers. 36577 * Incompatibilities:: GCC is incompatible with traditional C. 36578 * Fixed Headers:: GCC uses corrected versions of system header files. 36579 This is necessary, but doesn't always work smoothly. 36580 * Standard Libraries:: GCC uses the system C library, which might not be 36581 compliant with the ISO C standard. 36582 * Disappointments:: Regrettable things we can't change, but not quite bugs. 36583 * C++ Misunderstandings:: Common misunderstandings with GNU C++. 36584 * Protoize Caveats:: Things to watch out for when using `protoize'. 36585 * Non-bugs:: Things we think are right, but some others disagree. 36586 * Warnings and Errors:: Which problems in your code get warnings, 36587 and which get errors. 36588 36589 36590 File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble 36591 36592 10.1 Actual Bugs We Haven't Fixed Yet 36593 ===================================== 36594 36595 * The `fixincludes' script interacts badly with automounters; if the 36596 directory of system header files is automounted, it tends to be 36597 unmounted while `fixincludes' is running. This would seem to be a 36598 bug in the automounter. We don't know any good way to work around 36599 it. 36600 36601 * The `fixproto' script will sometimes add prototypes for the 36602 `sigsetjmp' and `siglongjmp' functions that reference the 36603 `jmp_buf' type before that type is defined. To work around this, 36604 edit the offending file and place the typedef in front of the 36605 prototypes. 36606 36607 36608 File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble 36609 36610 10.2 Cross-Compiler Problems 36611 ============================ 36612 36613 You may run into problems with cross compilation on certain machines, 36614 for several reasons. 36615 36616 * At present, the program `mips-tfile' which adds debug support to 36617 object files on MIPS systems does not work in a cross compile 36618 environment. 36619 36620 36621 File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble 36622 36623 10.3 Interoperation 36624 =================== 36625 36626 This section lists various difficulties encountered in using GCC 36627 together with other compilers or with the assemblers, linkers, 36628 libraries and debuggers on certain systems. 36629 36630 * On many platforms, GCC supports a different ABI for C++ than do 36631 other compilers, so the object files compiled by GCC cannot be 36632 used with object files generated by another C++ compiler. 36633 36634 An area where the difference is most apparent is name mangling. 36635 The use of different name mangling is intentional, to protect you 36636 from more subtle problems. Compilers differ as to many internal 36637 details of C++ implementation, including: how class instances are 36638 laid out, how multiple inheritance is implemented, and how virtual 36639 function calls are handled. If the name encoding were made the 36640 same, your programs would link against libraries provided from 36641 other compilers--but the programs would then crash when run. 36642 Incompatible libraries are then detected at link time, rather than 36643 at run time. 36644 36645 * On some BSD systems, including some versions of Ultrix, use of 36646 profiling causes static variable destructors (currently used only 36647 in C++) not to be run. 36648 36649 * On some SGI systems, when you use `-lgl_s' as an option, it gets 36650 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 36651 does not happen when you use GCC. You must specify all three 36652 options explicitly. 36653 36654 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 36655 boundary, and it expects every `double' to be so aligned. The Sun 36656 compiler usually gives `double' values 8-byte alignment, with one 36657 exception: function arguments of type `double' may not be aligned. 36658 36659 As a result, if a function compiled with Sun CC takes the address 36660 of an argument of type `double' and passes this pointer of type 36661 `double *' to a function compiled with GCC, dereferencing the 36662 pointer may cause a fatal signal. 36663 36664 One way to solve this problem is to compile your entire program 36665 with GCC. Another solution is to modify the function that is 36666 compiled with Sun CC to copy the argument into a local variable; 36667 local variables are always properly aligned. A third solution is 36668 to modify the function that uses the pointer to dereference it via 36669 the following function `access_double' instead of directly with 36670 `*': 36671 36672 inline double 36673 access_double (double *unaligned_ptr) 36674 { 36675 union d2i { double d; int i[2]; }; 36676 36677 union d2i *p = (union d2i *) unaligned_ptr; 36678 union d2i u; 36679 36680 u.i[0] = p->i[0]; 36681 u.i[1] = p->i[1]; 36682 36683 return u.d; 36684 } 36685 36686 Storing into the pointer can be done likewise with the same union. 36687 36688 * On Solaris, the `malloc' function in the `libmalloc.a' library may 36689 allocate memory that is only 4 byte aligned. Since GCC on the 36690 SPARC assumes that doubles are 8 byte aligned, this may result in a 36691 fatal signal if doubles are stored in memory allocated by the 36692 `libmalloc.a' library. 36693 36694 The solution is to not use the `libmalloc.a' library. Use instead 36695 `malloc' and related functions from `libc.a'; they do not have 36696 this problem. 36697 36698 * On the HP PA machine, ADB sometimes fails to work on functions 36699 compiled with GCC. Specifically, it fails to work on functions 36700 that use `alloca' or variable-size arrays. This is because GCC 36701 doesn't generate HP-UX unwind descriptors for such functions. It 36702 may even be impossible to generate them. 36703 36704 * Debugging (`-g') is not supported on the HP PA machine, unless you 36705 use the preliminary GNU tools. 36706 36707 * Taking the address of a label may generate errors from the HP-UX 36708 PA assembler. GAS for the PA does not have this problem. 36709 36710 * Using floating point parameters for indirect calls to static 36711 functions will not work when using the HP assembler. There simply 36712 is no way for GCC to specify what registers hold arguments for 36713 static functions when using the HP assembler. GAS for the PA does 36714 not have this problem. 36715 36716 * In extremely rare cases involving some very large functions you may 36717 receive errors from the HP linker complaining about an out of 36718 bounds unconditional branch offset. This used to occur more often 36719 in previous versions of GCC, but is now exceptionally rare. If 36720 you should run into it, you can work around by making your 36721 function smaller. 36722 36723 * GCC compiled code sometimes emits warnings from the HP-UX 36724 assembler of the form: 36725 36726 (warning) Use of GR3 when 36727 frame >= 8192 may cause conflict. 36728 36729 These warnings are harmless and can be safely ignored. 36730 36731 * In extremely rare cases involving some very large functions you may 36732 receive errors from the AIX Assembler complaining about a 36733 displacement that is too large. If you should run into it, you 36734 can work around by making your function smaller. 36735 36736 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 36737 semantics which merges global symbols between libraries and 36738 applications, especially necessary for C++ streams functionality. 36739 This is not the default behavior of AIX shared libraries and 36740 dynamic linking. `libstdc++.a' is built on AIX with 36741 "runtime-linking" enabled so that symbol merging can occur. To 36742 utilize this feature, the application linked with `libstdc++.a' 36743 must include the `-Wl,-brtl' flag on the link line. G++ cannot 36744 impose this because this option may interfere with the semantics 36745 of the user program and users may not always use `g++' to link his 36746 or her application. Applications are not required to use the 36747 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 36748 library which is not dependent on the symbol merging semantics 36749 will continue to function correctly. 36750 36751 * An application can interpose its own definition of functions for 36752 functions invoked by `libstdc++.a' with "runtime-linking" enabled 36753 on AIX. To accomplish this the application must be linked with 36754 "runtime-linking" option and the functions explicitly must be 36755 exported by the application (`-Wl,-brtl,-bE:exportfile'). 36756 36757 * AIX on the RS/6000 provides support (NLS) for environments outside 36758 of the United States. Compilers and assemblers use NLS to support 36759 locale-specific representations of various objects including 36760 floating-point numbers (`.' vs `,' for separating decimal 36761 fractions). There have been problems reported where the library 36762 linked with GCC does not produce the same floating-point formats 36763 that the assembler accepts. If you have this problem, set the 36764 `LANG' environment variable to `C' or `En_US'. 36765 36766 * Even if you specify `-fdollars-in-identifiers', you cannot 36767 successfully use `$' in identifiers on the RS/6000 due to a 36768 restriction in the IBM assembler. GAS supports these identifiers. 36769 36770 36771 36772 File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 36773 36774 10.4 Incompatibilities of GCC 36775 ============================= 36776 36777 There are several noteworthy incompatibilities between GNU C and K&R 36778 (non-ISO) versions of C. 36779 36780 * GCC normally makes string constants read-only. If several 36781 identical-looking string constants are used, GCC stores only one 36782 copy of the string. 36783 36784 One consequence is that you cannot call `mktemp' with a string 36785 constant argument. The function `mktemp' always alters the string 36786 its argument points to. 36787 36788 Another consequence is that `sscanf' does not work on some very 36789 old systems when passed a string constant as its format control 36790 string or input. This is because `sscanf' incorrectly tries to 36791 write into the string constant. Likewise `fscanf' and `scanf'. 36792 36793 The solution to these problems is to change the program to use 36794 `char'-array variables with initialization strings for these 36795 purposes instead of string constants. 36796 36797 * `-2147483648' is positive. 36798 36799 This is because 2147483648 cannot fit in the type `int', so 36800 (following the ISO C rules) its data type is `unsigned long int'. 36801 Negating this value yields 2147483648 again. 36802 36803 * GCC does not substitute macro arguments when they appear inside of 36804 string constants. For example, the following macro in GCC 36805 36806 #define foo(a) "a" 36807 36808 will produce output `"a"' regardless of what the argument A is. 36809 36810 * When you use `setjmp' and `longjmp', the only automatic variables 36811 guaranteed to remain valid are those declared `volatile'. This is 36812 a consequence of automatic register allocation. Consider this 36813 function: 36814 36815 jmp_buf j; 36816 36817 foo () 36818 { 36819 int a, b; 36820 36821 a = fun1 (); 36822 if (setjmp (j)) 36823 return a; 36824 36825 a = fun2 (); 36826 /* `longjmp (j)' may occur in `fun3'. */ 36827 return a + fun3 (); 36828 } 36829 36830 Here `a' may or may not be restored to its first value when the 36831 `longjmp' occurs. If `a' is allocated in a register, then its 36832 first value is restored; otherwise, it keeps the last value stored 36833 in it. 36834 36835 If you use the `-W' option with the `-O' option, you will get a 36836 warning when GCC thinks such a problem might be possible. 36837 36838 * Programs that use preprocessing directives in the middle of macro 36839 arguments do not work with GCC. For example, a program like this 36840 will not work: 36841 36842 foobar ( 36843 #define luser 36844 hack) 36845 36846 ISO C does not permit such a construct. 36847 36848 * K&R compilers allow comments to cross over an inclusion boundary 36849 (i.e. started in an include file and ended in the including file). 36850 36851 * Declarations of external variables and functions within a block 36852 apply only to the block containing the declaration. In other 36853 words, they have the same scope as any other declaration in the 36854 same place. 36855 36856 In some other C compilers, a `extern' declaration affects all the 36857 rest of the file even if it happens within a block. 36858 36859 * In traditional C, you can combine `long', etc., with a typedef 36860 name, as shown here: 36861 36862 typedef int foo; 36863 typedef long foo bar; 36864 36865 In ISO C, this is not allowed: `long' and other type modifiers 36866 require an explicit `int'. 36867 36868 * PCC allows typedef names to be used as function parameters. 36869 36870 * Traditional C allows the following erroneous pair of declarations 36871 to appear together in a given scope: 36872 36873 typedef int foo; 36874 typedef foo foo; 36875 36876 * GCC treats all characters of identifiers as significant. 36877 According to K&R-1 (2.2), "No more than the first eight characters 36878 are significant, although more may be used.". Also according to 36879 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 36880 the first character must be a letter. The underscore _ counts as 36881 a letter.", but GCC also allows dollar signs in identifiers. 36882 36883 * PCC allows whitespace in the middle of compound assignment 36884 operators such as `+='. GCC, following the ISO standard, does not 36885 allow this. 36886 36887 * GCC complains about unterminated character constants inside of 36888 preprocessing conditionals that fail. Some programs have English 36889 comments enclosed in conditionals that are guaranteed to fail; if 36890 these comments contain apostrophes, GCC will probably report an 36891 error. For example, this code would produce an error: 36892 36893 #if 0 36894 You can't expect this to work. 36895 #endif 36896 36897 The best solution to such a problem is to put the text into an 36898 actual C comment delimited by `/*...*/'. 36899 36900 * Many user programs contain the declaration `long time ();'. In the 36901 past, the system header files on many systems did not actually 36902 declare `time', so it did not matter what type your program 36903 declared it to return. But in systems with ISO C headers, `time' 36904 is declared to return `time_t', and if that is not the same as 36905 `long', then `long time ();' is erroneous. 36906 36907 The solution is to change your program to use appropriate system 36908 headers (`<time.h>' on systems with ISO C headers) and not to 36909 declare `time' if the system header files declare it, or failing 36910 that to use `time_t' as the return type of `time'. 36911 36912 * When compiling functions that return `float', PCC converts it to a 36913 double. GCC actually returns a `float'. If you are concerned 36914 with PCC compatibility, you should declare your functions to return 36915 `double'; you might as well say what you mean. 36916 36917 * When compiling functions that return structures or unions, GCC 36918 output code normally uses a method different from that used on most 36919 versions of Unix. As a result, code compiled with GCC cannot call 36920 a structure-returning function compiled with PCC, and vice versa. 36921 36922 The method used by GCC is as follows: a structure or union which is 36923 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 36924 union with any other size is stored into an address supplied by 36925 the caller (usually in a special, fixed register, but on some 36926 machines it is passed on the stack). The target hook 36927 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 36928 36929 By contrast, PCC on most target machines returns structures and 36930 unions of any size by copying the data into an area of static 36931 storage, and then returning the address of that storage as if it 36932 were a pointer value. The caller must copy the data from that 36933 memory area to the place where the value is wanted. GCC does not 36934 use this method because it is slower and nonreentrant. 36935 36936 On some newer machines, PCC uses a reentrant convention for all 36937 structure and union returning. GCC on most of these machines uses 36938 a compatible convention when returning structures and unions in 36939 memory, but still returns small structures and unions in registers. 36940 36941 You can tell GCC to use a compatible convention for all structure 36942 and union returning with the option `-fpcc-struct-return'. 36943 36944 * GCC complains about program fragments such as `0x74ae-0x4000' 36945 which appear to be two hexadecimal constants separated by the minus 36946 operator. Actually, this string is a single "preprocessing token". 36947 Each such token must correspond to one token in C. Since this 36948 does not, GCC prints an error message. Although it may appear 36949 obvious that what is meant is an operator and two values, the ISO 36950 C standard specifically requires that this be treated as erroneous. 36951 36952 A "preprocessing token" is a "preprocessing number" if it begins 36953 with a digit and is followed by letters, underscores, digits, 36954 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 36955 character sequences. (In strict C89 mode, the sequences `p+', 36956 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 36957 36958 To make the above program fragment valid, place whitespace in 36959 front of the minus sign. This whitespace will end the 36960 preprocessing number. 36961 36962 36963 File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 36964 36965 10.5 Fixed Header Files 36966 ======================= 36967 36968 GCC needs to install corrected versions of some system header files. 36969 This is because most target systems have some header files that won't 36970 work with GCC unless they are changed. Some have bugs, some are 36971 incompatible with ISO C, and some depend on special features of other 36972 compilers. 36973 36974 Installing GCC automatically creates and installs the fixed header 36975 files, by running a program called `fixincludes'. Normally, you don't 36976 need to pay attention to this. But there are cases where it doesn't do 36977 the right thing automatically. 36978 36979 * If you update the system's header files, such as by installing a 36980 new system version, the fixed header files of GCC are not 36981 automatically updated. They can be updated using the `mkheaders' 36982 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 36983 36984 * On some systems, header file directories contain machine-specific 36985 symbolic links in certain places. This makes it possible to share 36986 most of the header files among hosts running the same version of 36987 the system on different machine models. 36988 36989 The programs that fix the header files do not understand this 36990 special way of using symbolic links; therefore, the directory of 36991 fixed header files is good only for the machine model used to 36992 build it. 36993 36994 It is possible to make separate sets of fixed header files for the 36995 different machine models, and arrange a structure of symbolic 36996 links so as to use the proper set, but you'll have to do this by 36997 hand. 36998 36999 37000 File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 37001 37002 10.6 Standard Libraries 37003 ======================= 37004 37005 GCC by itself attempts to be a conforming freestanding implementation. 37006 *Note Language Standards Supported by GCC: Standards, for details of 37007 what this means. Beyond the library facilities required of such an 37008 implementation, the rest of the C library is supplied by the vendor of 37009 the operating system. If that C library doesn't conform to the C 37010 standards, then your programs might get warnings (especially when using 37011 `-Wall') that you don't expect. 37012 37013 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 37014 while the C standard says that `sprintf' returns an `int'. The 37015 `fixincludes' program could make the prototype for this function match 37016 the Standard, but that would be wrong, since the function will still 37017 return `char *'. 37018 37019 If you need a Standard compliant library, then you need to find one, as 37020 GCC does not provide one. The GNU C library (called `glibc') provides 37021 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 37022 HURD-based GNU systems; no recent version of it supports other systems, 37023 though some very old versions did. Version 2.2 of the GNU C library 37024 includes nearly complete C99 support. You could also ask your 37025 operating system vendor if newer libraries are available. 37026 37027 37028 File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 37029 37030 10.7 Disappointments and Misunderstandings 37031 ========================================== 37032 37033 These problems are perhaps regrettable, but we don't know any practical 37034 way around them. 37035 37036 * Certain local variables aren't recognized by debuggers when you 37037 compile with optimization. 37038 37039 This occurs because sometimes GCC optimizes the variable out of 37040 existence. There is no way to tell the debugger how to compute the 37041 value such a variable "would have had", and it is not clear that 37042 would be desirable anyway. So GCC simply does not mention the 37043 eliminated variable when it writes debugging information. 37044 37045 You have to expect a certain amount of disagreement between the 37046 executable and your source code, when you use optimization. 37047 37048 * Users often think it is a bug when GCC reports an error for code 37049 like this: 37050 37051 int foo (struct mumble *); 37052 37053 struct mumble { ... }; 37054 37055 int foo (struct mumble *x) 37056 { ... } 37057 37058 This code really is erroneous, because the scope of `struct 37059 mumble' in the prototype is limited to the argument list 37060 containing it. It does not refer to the `struct mumble' defined 37061 with file scope immediately below--they are two unrelated types 37062 with similar names in different scopes. 37063 37064 But in the definition of `foo', the file-scope type is used 37065 because that is available to be inherited. Thus, the definition 37066 and the prototype do not match, and you get an error. 37067 37068 This behavior may seem silly, but it's what the ISO standard 37069 specifies. It is easy enough for you to make your code work by 37070 moving the definition of `struct mumble' above the prototype. 37071 It's not worth being incompatible with ISO C just to avoid an 37072 error for the example shown above. 37073 37074 * Accesses to bit-fields even in volatile objects works by accessing 37075 larger objects, such as a byte or a word. You cannot rely on what 37076 size of object is accessed in order to read or write the 37077 bit-field; it may even vary for a given bit-field according to the 37078 precise usage. 37079 37080 If you care about controlling the amount of memory that is 37081 accessed, use volatile but do not use bit-fields. 37082 37083 * GCC comes with shell scripts to fix certain known problems in 37084 system header files. They install corrected copies of various 37085 header files in a special directory where only GCC will normally 37086 look for them. The scripts adapt to various systems by searching 37087 all the system header files for the problem cases that we know 37088 about. 37089 37090 If new system header files are installed, nothing automatically 37091 arranges to update the corrected header files. They can be 37092 updated using the `mkheaders' script installed in 37093 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 37094 37095 * On 68000 and x86 systems, for instance, you can get paradoxical 37096 results if you test the precise values of floating point numbers. 37097 For example, you can find that a floating point value which is not 37098 a NaN is not equal to itself. This results from the fact that the 37099 floating point registers hold a few more bits of precision than 37100 fit in a `double' in memory. Compiled code moves values between 37101 memory and floating point registers at its convenience, and moving 37102 them into memory truncates them. 37103 37104 You can partially avoid this problem by using the `-ffloat-store' 37105 option (*note Optimize Options::). 37106 37107 * On AIX and other platforms without weak symbol support, templates 37108 need to be instantiated explicitly and symbols for static members 37109 of templates will not be generated. 37110 37111 * On AIX, GCC scans object files and library archives for static 37112 constructors and destructors when linking an application before the 37113 linker prunes unreferenced symbols. This is necessary to prevent 37114 the AIX linker from mistakenly assuming that static constructor or 37115 destructor are unused and removing them before the scanning can 37116 occur. All static constructors and destructors found will be 37117 referenced even though the modules in which they occur may not be 37118 used by the program. This may lead to both increased executable 37119 size and unexpected symbol references. 37120 37121 37122 File: gcc.info, Node: C++ Misunderstandings, Next: Protoize Caveats, Prev: Disappointments, Up: Trouble 37123 37124 10.8 Common Misunderstandings with GNU C++ 37125 ========================================== 37126 37127 C++ is a complex language and an evolving one, and its standard 37128 definition (the ISO C++ standard) was only recently completed. As a 37129 result, your C++ compiler may occasionally surprise you, even when its 37130 behavior is correct. This section discusses some areas that frequently 37131 give rise to questions of this sort. 37132 37133 * Menu: 37134 37135 * Static Definitions:: Static member declarations are not definitions 37136 * Name lookup:: Name lookup, templates, and accessing members of base classes 37137 * Temporaries:: Temporaries may vanish before you expect 37138 * Copy Assignment:: Copy Assignment operators copy virtual bases twice 37139 37140 37141 File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 37142 37143 10.8.1 Declare _and_ Define Static Members 37144 ------------------------------------------ 37145 37146 When a class has static data members, it is not enough to _declare_ the 37147 static member; you must also _define_ it. For example: 37148 37149 class Foo 37150 { 37151 ... 37152 void method(); 37153 static int bar; 37154 }; 37155 37156 This declaration only establishes that the class `Foo' has an `int' 37157 named `Foo::bar', and a member function named `Foo::method'. But you 37158 still need to define _both_ `method' and `bar' elsewhere. According to 37159 the ISO standard, you must supply an initializer in one (and only one) 37160 source file, such as: 37161 37162 int Foo::bar = 0; 37163 37164 Other C++ compilers may not correctly implement the standard behavior. 37165 As a result, when you switch to `g++' from one of these compilers, you 37166 may discover that a program that appeared to work correctly in fact 37167 does not conform to the standard: `g++' reports as undefined symbols 37168 any static data members that lack definitions. 37169 37170 37171 File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 37172 37173 10.8.2 Name lookup, templates, and accessing members of base classes 37174 -------------------------------------------------------------------- 37175 37176 The C++ standard prescribes that all names that are not dependent on 37177 template parameters are bound to their present definitions when parsing 37178 a template function or class.(1) Only names that are dependent are 37179 looked up at the point of instantiation. For example, consider 37180 37181 void foo(double); 37182 37183 struct A { 37184 template <typename T> 37185 void f () { 37186 foo (1); // 1 37187 int i = N; // 2 37188 T t; 37189 t.bar(); // 3 37190 foo (t); // 4 37191 } 37192 37193 static const int N; 37194 }; 37195 37196 Here, the names `foo' and `N' appear in a context that does not depend 37197 on the type of `T'. The compiler will thus require that they are 37198 defined in the context of use in the template, not only before the 37199 point of instantiation, and will here use `::foo(double)' and `A::N', 37200 respectively. In particular, it will convert the integer value to a 37201 `double' when passing it to `::foo(double)'. 37202 37203 Conversely, `bar' and the call to `foo' in the fourth marked line are 37204 used in contexts that do depend on the type of `T', so they are only 37205 looked up at the point of instantiation, and you can provide 37206 declarations for them after declaring the template, but before 37207 instantiating it. In particular, if you instantiate `A::f<int>', the 37208 last line will call an overloaded `::foo(int)' if one was provided, 37209 even if after the declaration of `struct A'. 37210 37211 This distinction between lookup of dependent and non-dependent names is 37212 called two-stage (or dependent) name lookup. G++ implements it since 37213 version 3.4. 37214 37215 Two-stage name lookup sometimes leads to situations with behavior 37216 different from non-template codes. The most common is probably this: 37217 37218 template <typename T> struct Base { 37219 int i; 37220 }; 37221 37222 template <typename T> struct Derived : public Base<T> { 37223 int get_i() { return i; } 37224 }; 37225 37226 In `get_i()', `i' is not used in a dependent context, so the compiler 37227 will look for a name declared at the enclosing namespace scope (which 37228 is the global scope here). It will not look into the base class, since 37229 that is dependent and you may declare specializations of `Base' even 37230 after declaring `Derived', so the compiler can't really know what `i' 37231 would refer to. If there is no global variable `i', then you will get 37232 an error message. 37233 37234 In order to make it clear that you want the member of the base class, 37235 you need to defer lookup until instantiation time, at which the base 37236 class is known. For this, you need to access `i' in a dependent 37237 context, by either using `this->i' (remember that `this' is of type 37238 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 37239 Alternatively, `Base<T>::i' might be brought into scope by a 37240 `using'-declaration. 37241 37242 Another, similar example involves calling member functions of a base 37243 class: 37244 37245 template <typename T> struct Base { 37246 int f(); 37247 }; 37248 37249 template <typename T> struct Derived : Base<T> { 37250 int g() { return f(); }; 37251 }; 37252 37253 Again, the call to `f()' is not dependent on template arguments (there 37254 are no arguments that depend on the type `T', and it is also not 37255 otherwise specified that the call should be in a dependent context). 37256 Thus a global declaration of such a function must be available, since 37257 the one in the base class is not visible until instantiation time. The 37258 compiler will consequently produce the following error message: 37259 37260 x.cc: In member function `int Derived<T>::g()': 37261 x.cc:6: error: there are no arguments to `f' that depend on a template 37262 parameter, so a declaration of `f' must be available 37263 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 37264 allowing the use of an undeclared name is deprecated) 37265 37266 To make the code valid either use `this->f()', or `Base<T>::f()'. 37267 Using the `-fpermissive' flag will also let the compiler accept the 37268 code, by marking all function calls for which no declaration is visible 37269 at the time of definition of the template for later lookup at 37270 instantiation time, as if it were a dependent call. We do not 37271 recommend using `-fpermissive' to work around invalid code, and it will 37272 also only catch cases where functions in base classes are called, not 37273 where variables in base classes are used (as in the example above). 37274 37275 Note that some compilers (including G++ versions prior to 3.4) get 37276 these examples wrong and accept above code without an error. Those 37277 compilers do not implement two-stage name lookup correctly. 37278 37279 ---------- Footnotes ---------- 37280 37281 (1) The C++ standard just uses the term "dependent" for names that 37282 depend on the type or value of template parameters. This shorter term 37283 will also be used in the rest of this section. 37284 37285 37286 File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 37287 37288 10.8.3 Temporaries May Vanish Before You Expect 37289 ----------------------------------------------- 37290 37291 It is dangerous to use pointers or references to _portions_ of a 37292 temporary object. The compiler may very well delete the object before 37293 you expect it to, leaving a pointer to garbage. The most common place 37294 where this problem crops up is in classes like string classes, 37295 especially ones that define a conversion function to type `char *' or 37296 `const char *'--which is one reason why the standard `string' class 37297 requires you to call the `c_str' member function. However, any class 37298 that returns a pointer to some internal structure is potentially 37299 subject to this problem. 37300 37301 For example, a program may use a function `strfunc' that returns 37302 `string' objects, and another function `charfunc' that operates on 37303 pointers to `char': 37304 37305 string strfunc (); 37306 void charfunc (const char *); 37307 37308 void 37309 f () 37310 { 37311 const char *p = strfunc().c_str(); 37312 ... 37313 charfunc (p); 37314 ... 37315 charfunc (p); 37316 } 37317 37318 In this situation, it may seem reasonable to save a pointer to the C 37319 string returned by the `c_str' member function and use that rather than 37320 call `c_str' repeatedly. However, the temporary string created by the 37321 call to `strfunc' is destroyed after `p' is initialized, at which point 37322 `p' is left pointing to freed memory. 37323 37324 Code like this may run successfully under some other compilers, 37325 particularly obsolete cfront-based compilers that delete temporaries 37326 along with normal local variables. However, the GNU C++ behavior is 37327 standard-conforming, so if your program depends on late destruction of 37328 temporaries it is not portable. 37329 37330 The safe way to write such code is to give the temporary a name, which 37331 forces it to remain until the end of the scope of the name. For 37332 example: 37333 37334 const string& tmp = strfunc (); 37335 charfunc (tmp.c_str ()); 37336 37337 37338 File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 37339 37340 10.8.4 Implicit Copy-Assignment for Virtual Bases 37341 ------------------------------------------------- 37342 37343 When a base class is virtual, only one subobject of the base class 37344 belongs to each full object. Also, the constructors and destructors are 37345 invoked only once, and called from the most-derived class. However, 37346 such objects behave unspecified when being assigned. For example: 37347 37348 struct Base{ 37349 char *name; 37350 Base(char *n) : name(strdup(n)){} 37351 Base& operator= (const Base& other){ 37352 free (name); 37353 name = strdup (other.name); 37354 } 37355 }; 37356 37357 struct A:virtual Base{ 37358 int val; 37359 A():Base("A"){} 37360 }; 37361 37362 struct B:virtual Base{ 37363 int bval; 37364 B():Base("B"){} 37365 }; 37366 37367 struct Derived:public A, public B{ 37368 Derived():Base("Derived"){} 37369 }; 37370 37371 void func(Derived &d1, Derived &d2) 37372 { 37373 d1 = d2; 37374 } 37375 37376 The C++ standard specifies that `Base::Base' is only called once when 37377 constructing or copy-constructing a Derived object. It is unspecified 37378 whether `Base::operator=' is called more than once when the implicit 37379 copy-assignment for Derived objects is invoked (as it is inside `func' 37380 in the example). 37381 37382 G++ implements the "intuitive" algorithm for copy-assignment: assign 37383 all direct bases, then assign all members. In that algorithm, the 37384 virtual base subobject can be encountered more than once. In the 37385 example, copying proceeds in the following order: `val', `name' (via 37386 `strdup'), `bval', and `name' again. 37387 37388 If application code relies on copy-assignment, a user-defined 37389 copy-assignment operator removes any uncertainties. With such an 37390 operator, the application can define whether and how the virtual base 37391 subobject is assigned. 37392 37393 37394 File: gcc.info, Node: Protoize Caveats, Next: Non-bugs, Prev: C++ Misunderstandings, Up: Trouble 37395 37396 10.9 Caveats of using `protoize' 37397 ================================ 37398 37399 The conversion programs `protoize' and `unprotoize' can sometimes 37400 change a source file in a way that won't work unless you rearrange it. 37401 37402 * `protoize' can insert references to a type name or type tag before 37403 the definition, or in a file where they are not defined. 37404 37405 If this happens, compiler error messages should show you where the 37406 new references are, so fixing the file by hand is straightforward. 37407 37408 * There are some C constructs which `protoize' cannot figure out. 37409 For example, it can't determine argument types for declaring a 37410 pointer-to-function variable; this you must do by hand. `protoize' 37411 inserts a comment containing `???' each time it finds such a 37412 variable; so you can find all such variables by searching for this 37413 string. ISO C does not require declaring the argument types of 37414 pointer-to-function types. 37415 37416 * Using `unprotoize' can easily introduce bugs. If the program 37417 relied on prototypes to bring about conversion of arguments, these 37418 conversions will not take place in the program without prototypes. 37419 One case in which you can be sure `unprotoize' is safe is when you 37420 are removing prototypes that were made with `protoize'; if the 37421 program worked before without any prototypes, it will work again 37422 without them. 37423 37424 You can find all the places where this problem might occur by 37425 compiling the program with the `-Wtraditional-conversion' option. 37426 It prints a warning whenever an argument is converted. 37427 37428 * Both conversion programs can be confused if there are macro calls 37429 in and around the text to be converted. In other words, the 37430 standard syntax for a declaration or definition must not result 37431 from expanding a macro. This problem is inherent in the design of 37432 C and cannot be fixed. If only a few functions have confusing 37433 macro calls, you can easily convert them manually. 37434 37435 * `protoize' cannot get the argument types for a function whose 37436 definition was not actually compiled due to preprocessing 37437 conditionals. When this happens, `protoize' changes nothing in 37438 regard to such a function. `protoize' tries to detect such 37439 instances and warn about them. 37440 37441 You can generally work around this problem by using `protoize' step 37442 by step, each time specifying a different set of `-D' options for 37443 compilation, until all of the functions have been converted. 37444 There is no automatic way to verify that you have got them all, 37445 however. 37446 37447 * Confusion may result if there is an occasion to convert a function 37448 declaration or definition in a region of source code where there 37449 is more than one formal parameter list present. Thus, attempts to 37450 convert code containing multiple (conditionally compiled) versions 37451 of a single function header (in the same vicinity) may not produce 37452 the desired (or expected) results. 37453 37454 If you plan on converting source files which contain such code, it 37455 is recommended that you first make sure that each conditionally 37456 compiled region of source code which contains an alternative 37457 function header also contains at least one additional follower 37458 token (past the final right parenthesis of the function header). 37459 This should circumvent the problem. 37460 37461 * `unprotoize' can become confused when trying to convert a function 37462 definition or declaration which contains a declaration for a 37463 pointer-to-function formal argument which has the same name as the 37464 function being defined or declared. We recommend you avoid such 37465 choices of formal parameter names. 37466 37467 * You might also want to correct some of the indentation by hand and 37468 break long lines. (The conversion programs don't write lines 37469 longer than eighty characters in any case.) 37470 37471 37472 File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Protoize Caveats, Up: Trouble 37473 37474 10.10 Certain Changes We Don't Want to Make 37475 =========================================== 37476 37477 This section lists changes that people frequently request, but which we 37478 do not make because we think GCC is better without them. 37479 37480 * Checking the number and type of arguments to a function which has 37481 an old-fashioned definition and no prototype. 37482 37483 Such a feature would work only occasionally--only for calls that 37484 appear in the same file as the called function, following the 37485 definition. The only way to check all calls reliably is to add a 37486 prototype for the function. But adding a prototype eliminates the 37487 motivation for this feature. So the feature is not worthwhile. 37488 37489 * Warning about using an expression whose type is signed as a shift 37490 count. 37491 37492 Shift count operands are probably signed more often than unsigned. 37493 Warning about this would cause far more annoyance than good. 37494 37495 * Warning about assigning a signed value to an unsigned variable. 37496 37497 Such assignments must be very common; warning about them would 37498 cause more annoyance than good. 37499 37500 * Warning when a non-void function value is ignored. 37501 37502 C contains many standard functions that return a value that most 37503 programs choose to ignore. One obvious example is `printf'. 37504 Warning about this practice only leads the defensive programmer to 37505 clutter programs with dozens of casts to `void'. Such casts are 37506 required so frequently that they become visual noise. Writing 37507 those casts becomes so automatic that they no longer convey useful 37508 information about the intentions of the programmer. For functions 37509 where the return value should never be ignored, use the 37510 `warn_unused_result' function attribute (*note Function 37511 Attributes::). 37512 37513 * Making `-fshort-enums' the default. 37514 37515 This would cause storage layout to be incompatible with most other 37516 C compilers. And it doesn't seem very important, given that you 37517 can get the same result in other ways. The case where it matters 37518 most is when the enumeration-valued object is inside a structure, 37519 and in that case you can specify a field width explicitly. 37520 37521 * Making bit-fields unsigned by default on particular machines where 37522 "the ABI standard" says to do so. 37523 37524 The ISO C standard leaves it up to the implementation whether a 37525 bit-field declared plain `int' is signed or not. This in effect 37526 creates two alternative dialects of C. 37527 37528 The GNU C compiler supports both dialects; you can specify the 37529 signed dialect with `-fsigned-bitfields' and the unsigned dialect 37530 with `-funsigned-bitfields'. However, this leaves open the 37531 question of which dialect to use by default. 37532 37533 Currently, the preferred dialect makes plain bit-fields signed, 37534 because this is simplest. Since `int' is the same as `signed int' 37535 in every other context, it is cleanest for them to be the same in 37536 bit-fields as well. 37537 37538 Some computer manufacturers have published Application Binary 37539 Interface standards which specify that plain bit-fields should be 37540 unsigned. It is a mistake, however, to say anything about this 37541 issue in an ABI. This is because the handling of plain bit-fields 37542 distinguishes two dialects of C. Both dialects are meaningful on 37543 every type of machine. Whether a particular object file was 37544 compiled using signed bit-fields or unsigned is of no concern to 37545 other object files, even if they access the same bit-fields in the 37546 same data structures. 37547 37548 A given program is written in one or the other of these two 37549 dialects. The program stands a chance to work on most any machine 37550 if it is compiled with the proper dialect. It is unlikely to work 37551 at all if compiled with the wrong dialect. 37552 37553 Many users appreciate the GNU C compiler because it provides an 37554 environment that is uniform across machines. These users would be 37555 inconvenienced if the compiler treated plain bit-fields 37556 differently on certain machines. 37557 37558 Occasionally users write programs intended only for a particular 37559 machine type. On these occasions, the users would benefit if the 37560 GNU C compiler were to support by default the same dialect as the 37561 other compilers on that machine. But such applications are rare. 37562 And users writing a program to run on more than one type of 37563 machine cannot possibly benefit from this kind of compatibility. 37564 37565 This is why GCC does and will treat plain bit-fields in the same 37566 fashion on all types of machines (by default). 37567 37568 There are some arguments for making bit-fields unsigned by default 37569 on all machines. If, for example, this becomes a universal de 37570 facto standard, it would make sense for GCC to go along with it. 37571 This is something to be considered in the future. 37572 37573 (Of course, users strongly concerned about portability should 37574 indicate explicitly in each bit-field whether it is signed or not. 37575 In this way, they write programs which have the same meaning in 37576 both C dialects.) 37577 37578 * Undefining `__STDC__' when `-ansi' is not used. 37579 37580 Currently, GCC defines `__STDC__' unconditionally. This provides 37581 good results in practice. 37582 37583 Programmers normally use conditionals on `__STDC__' to ask whether 37584 it is safe to use certain features of ISO C, such as function 37585 prototypes or ISO token concatenation. Since plain `gcc' supports 37586 all the features of ISO C, the correct answer to these questions is 37587 "yes". 37588 37589 Some users try to use `__STDC__' to check for the availability of 37590 certain library facilities. This is actually incorrect usage in 37591 an ISO C program, because the ISO C standard says that a conforming 37592 freestanding implementation should define `__STDC__' even though it 37593 does not have the library facilities. `gcc -ansi -pedantic' is a 37594 conforming freestanding implementation, and it is therefore 37595 required to define `__STDC__', even though it does not come with 37596 an ISO C library. 37597 37598 Sometimes people say that defining `__STDC__' in a compiler that 37599 does not completely conform to the ISO C standard somehow violates 37600 the standard. This is illogical. The standard is a standard for 37601 compilers that claim to support ISO C, such as `gcc -ansi'--not 37602 for other compilers such as plain `gcc'. Whatever the ISO C 37603 standard says is relevant to the design of plain `gcc' without 37604 `-ansi' only for pragmatic reasons, not as a requirement. 37605 37606 GCC normally defines `__STDC__' to be 1, and in addition defines 37607 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 37608 option for strict conformance to some version of ISO C. On some 37609 hosts, system include files use a different convention, where 37610 `__STDC__' is normally 0, but is 1 if the user specifies strict 37611 conformance to the C Standard. GCC follows the host convention 37612 when processing system include files, but when processing user 37613 files it follows the usual GNU C convention. 37614 37615 * Undefining `__STDC__' in C++. 37616 37617 Programs written to compile with C++-to-C translators get the 37618 value of `__STDC__' that goes with the C compiler that is 37619 subsequently used. These programs must test `__STDC__' to 37620 determine what kind of C preprocessor that compiler uses: whether 37621 they should concatenate tokens in the ISO C fashion or in the 37622 traditional fashion. 37623 37624 These programs work properly with GNU C++ if `__STDC__' is defined. 37625 They would not work otherwise. 37626 37627 In addition, many header files are written to provide prototypes 37628 in ISO C but not in traditional C. Many of these header files can 37629 work without change in C++ provided `__STDC__' is defined. If 37630 `__STDC__' is not defined, they will all fail, and will all need 37631 to be changed to test explicitly for C++ as well. 37632 37633 * Deleting "empty" loops. 37634 37635 Historically, GCC has not deleted "empty" loops under the 37636 assumption that the most likely reason you would put one in a 37637 program is to have a delay, so deleting them will not make real 37638 programs run any faster. 37639 37640 However, the rationale here is that optimization of a nonempty loop 37641 cannot produce an empty one. This held for carefully written C 37642 compiled with less powerful optimizers but is not always the case 37643 for carefully written C++ or with more powerful optimizers. Thus 37644 GCC will remove operations from loops whenever it can determine 37645 those operations are not externally visible (apart from the time 37646 taken to execute them, of course). In case the loop can be proved 37647 to be finite, GCC will also remove the loop itself. 37648 37649 Be aware of this when performing timing tests, for instance the 37650 following loop can be completely removed, provided 37651 `some_expression' can provably not change any global state. 37652 37653 { 37654 int sum = 0; 37655 int ix; 37656 37657 for (ix = 0; ix != 10000; ix++) 37658 sum += some_expression; 37659 } 37660 37661 Even though `sum' is accumulated in the loop, no use is made of 37662 that summation, so the accumulation can be removed. 37663 37664 * Making side effects happen in the same order as in some other 37665 compiler. 37666 37667 It is never safe to depend on the order of evaluation of side 37668 effects. For example, a function call like this may very well 37669 behave differently from one compiler to another: 37670 37671 void func (int, int); 37672 37673 int i = 2; 37674 func (i++, i++); 37675 37676 There is no guarantee (in either the C or the C++ standard language 37677 definitions) that the increments will be evaluated in any 37678 particular order. Either increment might happen first. `func' 37679 might get the arguments `2, 3', or it might get `3, 2', or even 37680 `2, 2'. 37681 37682 * Making certain warnings into errors by default. 37683 37684 Some ISO C testsuites report failure when the compiler does not 37685 produce an error message for a certain program. 37686 37687 ISO C requires a "diagnostic" message for certain kinds of invalid 37688 programs, but a warning is defined by GCC to count as a 37689 diagnostic. If GCC produces a warning but not an error, that is 37690 correct ISO C support. If testsuites call this "failure", they 37691 should be run with the GCC option `-pedantic-errors', which will 37692 turn these warnings into errors. 37693 37694 37695 37696 File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 37697 37698 10.11 Warning Messages and Error Messages 37699 ========================================= 37700 37701 The GNU compiler can produce two kinds of diagnostics: errors and 37702 warnings. Each kind has a different purpose: 37703 37704 "Errors" report problems that make it impossible to compile your 37705 program. GCC reports errors with the source file name and line 37706 number where the problem is apparent. 37707 37708 "Warnings" report other unusual conditions in your code that _may_ 37709 indicate a problem, although compilation can (and does) proceed. 37710 Warning messages also report the source file name and line number, 37711 but include the text `warning:' to distinguish them from error 37712 messages. 37713 37714 Warnings may indicate danger points where you should check to make sure 37715 that your program really does what you intend; or the use of obsolete 37716 features; or the use of nonstandard features of GNU C or C++. Many 37717 warnings are issued only if you ask for them, with one of the `-W' 37718 options (for instance, `-Wall' requests a variety of useful warnings). 37719 37720 GCC always tries to compile your program if possible; it never 37721 gratuitously rejects a program whose meaning is clear merely because 37722 (for instance) it fails to conform to a standard. In some cases, 37723 however, the C and C++ standards specify that certain extensions are 37724 forbidden, and a diagnostic _must_ be issued by a conforming compiler. 37725 The `-pedantic' option tells GCC to issue warnings in such cases; 37726 `-pedantic-errors' says to make them errors instead. This does not 37727 mean that _all_ non-ISO constructs get warnings or errors. 37728 37729 *Note Options to Request or Suppress Warnings: Warning Options, for 37730 more detail on these and related command-line options. 37731 37732 37733 File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 37734 37735 11 Reporting Bugs 37736 ***************** 37737 37738 Your bug reports play an essential role in making GCC reliable. 37739 37740 When you encounter a problem, the first thing to do is to see if it is 37741 already known. *Note Trouble::. If it isn't known, then you should 37742 report the problem. 37743 37744 * Menu: 37745 37746 * Criteria: Bug Criteria. Have you really found a bug? 37747 * Reporting: Bug Reporting. How to report a bug effectively. 37748 * Known: Trouble. Known problems. 37749 * Help: Service. Where to ask for help. 37750 37751 37752 File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 37753 37754 11.1 Have You Found a Bug? 37755 ========================== 37756 37757 If you are not sure whether you have found a bug, here are some 37758 guidelines: 37759 37760 * If the compiler gets a fatal signal, for any input whatever, that 37761 is a compiler bug. Reliable compilers never crash. 37762 37763 * If the compiler produces invalid assembly code, for any input 37764 whatever (except an `asm' statement), that is a compiler bug, 37765 unless the compiler reports errors (not just warnings) which would 37766 ordinarily prevent the assembler from being run. 37767 37768 * If the compiler produces valid assembly code that does not 37769 correctly execute the input source code, that is a compiler bug. 37770 37771 However, you must double-check to make sure, because you may have a 37772 program whose behavior is undefined, which happened by chance to 37773 give the desired results with another C or C++ compiler. 37774 37775 For example, in many nonoptimizing compilers, you can write `x;' 37776 at the end of a function instead of `return x;', with the same 37777 results. But the value of the function is undefined if `return' 37778 is omitted; it is not a bug when GCC produces different results. 37779 37780 Problems often result from expressions with two increment 37781 operators, as in `f (*p++, *p++)'. Your previous compiler might 37782 have interpreted that expression the way you intended; GCC might 37783 interpret it another way. Neither compiler is wrong. The bug is 37784 in your code. 37785 37786 After you have localized the error to a single source line, it 37787 should be easy to check for these things. If your program is 37788 correct and well defined, you have found a compiler bug. 37789 37790 * If the compiler produces an error message for valid input, that is 37791 a compiler bug. 37792 37793 * If the compiler does not produce an error message for invalid 37794 input, that is a compiler bug. However, you should note that your 37795 idea of "invalid input" might be someone else's idea of "an 37796 extension" or "support for traditional practice". 37797 37798 * If you are an experienced user of one of the languages GCC 37799 supports, your suggestions for improvement of GCC are welcome in 37800 any case. 37801 37802 37803 File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 37804 37805 11.2 How and where to Report Bugs 37806 ================================= 37807 37808 Bugs should be reported to the bug database at 37809 `http://gcc.gnu.org/bugs.html'. 37810 37811 37812 File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 37813 37814 12 How To Get Help with GCC 37815 *************************** 37816 37817 If you need help installing, using or changing GCC, there are two ways 37818 to find it: 37819 37820 * Send a message to a suitable network mailing list. First try 37821 <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if 37822 that brings no response, try <gcc (a] gcc.gnu.org>. For help changing 37823 GCC, ask <gcc (a] gcc.gnu.org>. If you think you have found a bug in 37824 GCC, please report it following the instructions at *note Bug 37825 Reporting::. 37826 37827 * Look in the service directory for someone who might help you for a 37828 fee. The service directory is found at 37829 `http://www.gnu.org/prep/service.html'. 37830 37831 For further information, see `http://gcc.gnu.org/faq.html#support'. 37832 37833 37834 File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 37835 37836 13 Contributing to GCC Development 37837 ********************************** 37838 37839 If you would like to help pretest GCC releases to assure they work well, 37840 current development sources are available by SVN (see 37841 `http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 37842 available for FTP; see `http://gcc.gnu.org/snapshots.html'. 37843 37844 If you would like to work on improvements to GCC, please read the 37845 advice at these URLs: 37846 37847 `http://gcc.gnu.org/contribute.html' 37848 `http://gcc.gnu.org/contributewhy.html' 37849 37850 for information on how to make useful contributions and avoid 37851 duplication of effort. Suggested projects are listed at 37852 `http://gcc.gnu.org/projects/'. 37853 37854 37855 File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 37856 37857 Funding Free Software 37858 ********************* 37859 37860 If you want to have more free software a few years from now, it makes 37861 sense for you to help encourage people to contribute funds for its 37862 development. The most effective approach known is to encourage 37863 commercial redistributors to donate. 37864 37865 Users of free software systems can boost the pace of development by 37866 encouraging for-a-fee distributors to donate part of their selling price 37867 to free software developers--the Free Software Foundation, and others. 37868 37869 The way to convince distributors to do this is to demand it and expect 37870 it from them. So when you compare distributors, judge them partly by 37871 how much they give to free software development. Show distributors 37872 they must compete to be the one who gives the most. 37873 37874 To make this approach work, you must insist on numbers that you can 37875 compare, such as, "We will donate ten dollars to the Frobnitz project 37876 for each disk sold." Don't be satisfied with a vague promise, such as 37877 "A portion of the profits are donated," since it doesn't give a basis 37878 for comparison. 37879 37880 Even a precise fraction "of the profits from this disk" is not very 37881 meaningful, since creative accounting and unrelated business decisions 37882 can greatly alter what fraction of the sales price counts as profit. 37883 If the price you pay is $50, ten percent of the profit is probably less 37884 than a dollar; it might be a few cents, or nothing at all. 37885 37886 Some redistributors do development work themselves. This is useful 37887 too; but to keep everyone honest, you need to inquire how much they do, 37888 and what kind. Some kinds of development make much more long-term 37889 difference than others. For example, maintaining a separate version of 37890 a program contributes very little; maintaining the standard version of a 37891 program for the whole community contributes much. Easy new ports 37892 contribute little, since someone else would surely do them; difficult 37893 ports such as adding a new CPU to the GNU Compiler Collection 37894 contribute more; major new features or packages contribute the most. 37895 37896 By establishing the idea that supporting further development is "the 37897 proper thing to do" when distributing free software for a fee, we can 37898 assure a steady flow of resources into making more free software. 37899 37900 Copyright (C) 1994 Free Software Foundation, Inc. 37901 Verbatim copying and redistribution of this section is permitted 37902 without royalty; alteration is not permitted. 37903 37904 37905 File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 37906 37907 The GNU Project and GNU/Linux 37908 ***************************** 37909 37910 The GNU Project was launched in 1984 to develop a complete Unix-like 37911 operating system which is free software: the GNU system. (GNU is a 37912 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 37913 Variants of the GNU operating system, which use the kernel Linux, are 37914 now widely used; though these systems are often referred to as "Linux", 37915 they are more accurately called GNU/Linux systems. 37916 37917 For more information, see: 37918 `http://www.gnu.org/' 37919 `http://www.gnu.org/gnu/linux-and-gnu.html' 37920 37921 37922 File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 37923 37924 GNU General Public License 37925 ************************** 37926 37927 Version 3, 29 June 2007 37928 37929 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 37930 37931 Everyone is permitted to copy and distribute verbatim copies of this 37932 license document, but changing it is not allowed. 37933 37934 Preamble 37935 ======== 37936 37937 The GNU General Public License is a free, copyleft license for software 37938 and other kinds of works. 37939 37940 The licenses for most software and other practical works are designed 37941 to take away your freedom to share and change the works. By contrast, 37942 the GNU General Public License is intended to guarantee your freedom to 37943 share and change all versions of a program-to make sure it remains free 37944 software for all its users. We, the Free Software Foundation, use the 37945 GNU General Public License for most of our software; it applies also to 37946 any other work released this way by its authors. You can apply it to 37947 your programs, too. 37948 37949 When we speak of free software, we are referring to freedom, not 37950 price. Our General Public Licenses are designed to make sure that you 37951 have the freedom to distribute copies of free software (and charge for 37952 them if you wish), that you receive source code or can get it if you 37953 want it, that you can change the software or use pieces of it in new 37954 free programs, and that you know you can do these things. 37955 37956 To protect your rights, we need to prevent others from denying you 37957 these rights or asking you to surrender the rights. Therefore, you 37958 have certain responsibilities if you distribute copies of the software, 37959 or if you modify it: responsibilities to respect the freedom of others. 37960 37961 For example, if you distribute copies of such a program, whether 37962 gratis or for a fee, you must pass on to the recipients the same 37963 freedoms that you received. You must make sure that they, too, receive 37964 or can get the source code. And you must show them these terms so they 37965 know their rights. 37966 37967 Developers that use the GNU GPL protect your rights with two steps: 37968 (1) assert copyright on the software, and (2) offer you this License 37969 giving you legal permission to copy, distribute and/or modify it. 37970 37971 For the developers' and authors' protection, the GPL clearly explains 37972 that there is no warranty for this free software. For both users' and 37973 authors' sake, the GPL requires that modified versions be marked as 37974 changed, so that their problems will not be attributed erroneously to 37975 authors of previous versions. 37976 37977 Some devices are designed to deny users access to install or run 37978 modified versions of the software inside them, although the 37979 manufacturer can do so. This is fundamentally incompatible with the 37980 aim of protecting users' freedom to change the software. The 37981 systematic pattern of such abuse occurs in the area of products for 37982 individuals to use, which is precisely where it is most unacceptable. 37983 Therefore, we have designed this version of the GPL to prohibit the 37984 practice for those products. If such problems arise substantially in 37985 other domains, we stand ready to extend this provision to those domains 37986 in future versions of the GPL, as needed to protect the freedom of 37987 users. 37988 37989 Finally, every program is threatened constantly by software patents. 37990 States should not allow patents to restrict development and use of 37991 software on general-purpose computers, but in those that do, we wish to 37992 avoid the special danger that patents applied to a free program could 37993 make it effectively proprietary. To prevent this, the GPL assures that 37994 patents cannot be used to render the program non-free. 37995 37996 The precise terms and conditions for copying, distribution and 37997 modification follow. 37998 37999 TERMS AND CONDITIONS 38000 ==================== 38001 38002 0. Definitions. 38003 38004 "This License" refers to version 3 of the GNU General Public 38005 License. 38006 38007 "Copyright" also means copyright-like laws that apply to other 38008 kinds of works, such as semiconductor masks. 38009 38010 "The Program" refers to any copyrightable work licensed under this 38011 License. Each licensee is addressed as "you". "Licensees" and 38012 "recipients" may be individuals or organizations. 38013 38014 To "modify" a work means to copy from or adapt all or part of the 38015 work in a fashion requiring copyright permission, other than the 38016 making of an exact copy. The resulting work is called a "modified 38017 version" of the earlier work or a work "based on" the earlier work. 38018 38019 A "covered work" means either the unmodified Program or a work 38020 based on the Program. 38021 38022 To "propagate" a work means to do anything with it that, without 38023 permission, would make you directly or secondarily liable for 38024 infringement under applicable copyright law, except executing it 38025 on a computer or modifying a private copy. Propagation includes 38026 copying, distribution (with or without modification), making 38027 available to the public, and in some countries other activities as 38028 well. 38029 38030 To "convey" a work means any kind of propagation that enables other 38031 parties to make or receive copies. Mere interaction with a user 38032 through a computer network, with no transfer of a copy, is not 38033 conveying. 38034 38035 An interactive user interface displays "Appropriate Legal Notices" 38036 to the extent that it includes a convenient and prominently visible 38037 feature that (1) displays an appropriate copyright notice, and (2) 38038 tells the user that there is no warranty for the work (except to 38039 the extent that warranties are provided), that licensees may 38040 convey the work under this License, and how to view a copy of this 38041 License. If the interface presents a list of user commands or 38042 options, such as a menu, a prominent item in the list meets this 38043 criterion. 38044 38045 1. Source Code. 38046 38047 The "source code" for a work means the preferred form of the work 38048 for making modifications to it. "Object code" means any 38049 non-source form of a work. 38050 38051 A "Standard Interface" means an interface that either is an 38052 official standard defined by a recognized standards body, or, in 38053 the case of interfaces specified for a particular programming 38054 language, one that is widely used among developers working in that 38055 language. 38056 38057 The "System Libraries" of an executable work include anything, 38058 other than the work as a whole, that (a) is included in the normal 38059 form of packaging a Major Component, but which is not part of that 38060 Major Component, and (b) serves only to enable use of the work 38061 with that Major Component, or to implement a Standard Interface 38062 for which an implementation is available to the public in source 38063 code form. A "Major Component", in this context, means a major 38064 essential component (kernel, window system, and so on) of the 38065 specific operating system (if any) on which the executable work 38066 runs, or a compiler used to produce the work, or an object code 38067 interpreter used to run it. 38068 38069 The "Corresponding Source" for a work in object code form means all 38070 the source code needed to generate, install, and (for an executable 38071 work) run the object code and to modify the work, including 38072 scripts to control those activities. However, it does not include 38073 the work's System Libraries, or general-purpose tools or generally 38074 available free programs which are used unmodified in performing 38075 those activities but which are not part of the work. For example, 38076 Corresponding Source includes interface definition files 38077 associated with source files for the work, and the source code for 38078 shared libraries and dynamically linked subprograms that the work 38079 is specifically designed to require, such as by intimate data 38080 communication or control flow between those subprograms and other 38081 parts of the work. 38082 38083 The Corresponding Source need not include anything that users can 38084 regenerate automatically from other parts of the Corresponding 38085 Source. 38086 38087 The Corresponding Source for a work in source code form is that 38088 same work. 38089 38090 2. Basic Permissions. 38091 38092 All rights granted under this License are granted for the term of 38093 copyright on the Program, and are irrevocable provided the stated 38094 conditions are met. This License explicitly affirms your unlimited 38095 permission to run the unmodified Program. The output from running 38096 a covered work is covered by this License only if the output, 38097 given its content, constitutes a covered work. This License 38098 acknowledges your rights of fair use or other equivalent, as 38099 provided by copyright law. 38100 38101 You may make, run and propagate covered works that you do not 38102 convey, without conditions so long as your license otherwise 38103 remains in force. You may convey covered works to others for the 38104 sole purpose of having them make modifications exclusively for 38105 you, or provide you with facilities for running those works, 38106 provided that you comply with the terms of this License in 38107 conveying all material for which you do not control copyright. 38108 Those thus making or running the covered works for you must do so 38109 exclusively on your behalf, under your direction and control, on 38110 terms that prohibit them from making any copies of your 38111 copyrighted material outside their relationship with you. 38112 38113 Conveying under any other circumstances is permitted solely under 38114 the conditions stated below. Sublicensing is not allowed; section 38115 10 makes it unnecessary. 38116 38117 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 38118 38119 No covered work shall be deemed part of an effective technological 38120 measure under any applicable law fulfilling obligations under 38121 article 11 of the WIPO copyright treaty adopted on 20 December 38122 1996, or similar laws prohibiting or restricting circumvention of 38123 such measures. 38124 38125 When you convey a covered work, you waive any legal power to forbid 38126 circumvention of technological measures to the extent such 38127 circumvention is effected by exercising rights under this License 38128 with respect to the covered work, and you disclaim any intention 38129 to limit operation or modification of the work as a means of 38130 enforcing, against the work's users, your or third parties' legal 38131 rights to forbid circumvention of technological measures. 38132 38133 4. Conveying Verbatim Copies. 38134 38135 You may convey verbatim copies of the Program's source code as you 38136 receive it, in any medium, provided that you conspicuously and 38137 appropriately publish on each copy an appropriate copyright notice; 38138 keep intact all notices stating that this License and any 38139 non-permissive terms added in accord with section 7 apply to the 38140 code; keep intact all notices of the absence of any warranty; and 38141 give all recipients a copy of this License along with the Program. 38142 38143 You may charge any price or no price for each copy that you convey, 38144 and you may offer support or warranty protection for a fee. 38145 38146 5. Conveying Modified Source Versions. 38147 38148 You may convey a work based on the Program, or the modifications to 38149 produce it from the Program, in the form of source code under the 38150 terms of section 4, provided that you also meet all of these 38151 conditions: 38152 38153 a. The work must carry prominent notices stating that you 38154 modified it, and giving a relevant date. 38155 38156 b. The work must carry prominent notices stating that it is 38157 released under this License and any conditions added under 38158 section 7. This requirement modifies the requirement in 38159 section 4 to "keep intact all notices". 38160 38161 c. You must license the entire work, as a whole, under this 38162 License to anyone who comes into possession of a copy. This 38163 License will therefore apply, along with any applicable 38164 section 7 additional terms, to the whole of the work, and all 38165 its parts, regardless of how they are packaged. This License 38166 gives no permission to license the work in any other way, but 38167 it does not invalidate such permission if you have separately 38168 received it. 38169 38170 d. If the work has interactive user interfaces, each must display 38171 Appropriate Legal Notices; however, if the Program has 38172 interactive interfaces that do not display Appropriate Legal 38173 Notices, your work need not make them do so. 38174 38175 A compilation of a covered work with other separate and independent 38176 works, which are not by their nature extensions of the covered 38177 work, and which are not combined with it such as to form a larger 38178 program, in or on a volume of a storage or distribution medium, is 38179 called an "aggregate" if the compilation and its resulting 38180 copyright are not used to limit the access or legal rights of the 38181 compilation's users beyond what the individual works permit. 38182 Inclusion of a covered work in an aggregate does not cause this 38183 License to apply to the other parts of the aggregate. 38184 38185 6. Conveying Non-Source Forms. 38186 38187 You may convey a covered work in object code form under the terms 38188 of sections 4 and 5, provided that you also convey the 38189 machine-readable Corresponding Source under the terms of this 38190 License, in one of these ways: 38191 38192 a. Convey the object code in, or embodied in, a physical product 38193 (including a physical distribution medium), accompanied by the 38194 Corresponding Source fixed on a durable physical medium 38195 customarily used for software interchange. 38196 38197 b. Convey the object code in, or embodied in, a physical product 38198 (including a physical distribution medium), accompanied by a 38199 written offer, valid for at least three years and valid for 38200 as long as you offer spare parts or customer support for that 38201 product model, to give anyone who possesses the object code 38202 either (1) a copy of the Corresponding Source for all the 38203 software in the product that is covered by this License, on a 38204 durable physical medium customarily used for software 38205 interchange, for a price no more than your reasonable cost of 38206 physically performing this conveying of source, or (2) access 38207 to copy the Corresponding Source from a network server at no 38208 charge. 38209 38210 c. Convey individual copies of the object code with a copy of 38211 the written offer to provide the Corresponding Source. This 38212 alternative is allowed only occasionally and noncommercially, 38213 and only if you received the object code with such an offer, 38214 in accord with subsection 6b. 38215 38216 d. Convey the object code by offering access from a designated 38217 place (gratis or for a charge), and offer equivalent access 38218 to the Corresponding Source in the same way through the same 38219 place at no further charge. You need not require recipients 38220 to copy the Corresponding Source along with the object code. 38221 If the place to copy the object code is a network server, the 38222 Corresponding Source may be on a different server (operated 38223 by you or a third party) that supports equivalent copying 38224 facilities, provided you maintain clear directions next to 38225 the object code saying where to find the Corresponding Source. 38226 Regardless of what server hosts the Corresponding Source, you 38227 remain obligated to ensure that it is available for as long 38228 as needed to satisfy these requirements. 38229 38230 e. Convey the object code using peer-to-peer transmission, 38231 provided you inform other peers where the object code and 38232 Corresponding Source of the work are being offered to the 38233 general public at no charge under subsection 6d. 38234 38235 38236 A separable portion of the object code, whose source code is 38237 excluded from the Corresponding Source as a System Library, need 38238 not be included in conveying the object code work. 38239 38240 A "User Product" is either (1) a "consumer product", which means 38241 any tangible personal property which is normally used for personal, 38242 family, or household purposes, or (2) anything designed or sold for 38243 incorporation into a dwelling. In determining whether a product 38244 is a consumer product, doubtful cases shall be resolved in favor of 38245 coverage. For a particular product received by a particular user, 38246 "normally used" refers to a typical or common use of that class of 38247 product, regardless of the status of the particular user or of the 38248 way in which the particular user actually uses, or expects or is 38249 expected to use, the product. A product is a consumer product 38250 regardless of whether the product has substantial commercial, 38251 industrial or non-consumer uses, unless such uses represent the 38252 only significant mode of use of the product. 38253 38254 "Installation Information" for a User Product means any methods, 38255 procedures, authorization keys, or other information required to 38256 install and execute modified versions of a covered work in that 38257 User Product from a modified version of its Corresponding Source. 38258 The information must suffice to ensure that the continued 38259 functioning of the modified object code is in no case prevented or 38260 interfered with solely because modification has been made. 38261 38262 If you convey an object code work under this section in, or with, 38263 or specifically for use in, a User Product, and the conveying 38264 occurs as part of a transaction in which the right of possession 38265 and use of the User Product is transferred to the recipient in 38266 perpetuity or for a fixed term (regardless of how the transaction 38267 is characterized), the Corresponding Source conveyed under this 38268 section must be accompanied by the Installation Information. But 38269 this requirement does not apply if neither you nor any third party 38270 retains the ability to install modified object code on the User 38271 Product (for example, the work has been installed in ROM). 38272 38273 The requirement to provide Installation Information does not 38274 include a requirement to continue to provide support service, 38275 warranty, or updates for a work that has been modified or 38276 installed by the recipient, or for the User Product in which it 38277 has been modified or installed. Access to a network may be denied 38278 when the modification itself materially and adversely affects the 38279 operation of the network or violates the rules and protocols for 38280 communication across the network. 38281 38282 Corresponding Source conveyed, and Installation Information 38283 provided, in accord with this section must be in a format that is 38284 publicly documented (and with an implementation available to the 38285 public in source code form), and must require no special password 38286 or key for unpacking, reading or copying. 38287 38288 7. Additional Terms. 38289 38290 "Additional permissions" are terms that supplement the terms of 38291 this License by making exceptions from one or more of its 38292 conditions. Additional permissions that are applicable to the 38293 entire Program shall be treated as though they were included in 38294 this License, to the extent that they are valid under applicable 38295 law. If additional permissions apply only to part of the Program, 38296 that part may be used separately under those permissions, but the 38297 entire Program remains governed by this License without regard to 38298 the additional permissions. 38299 38300 When you convey a copy of a covered work, you may at your option 38301 remove any additional permissions from that copy, or from any part 38302 of it. (Additional permissions may be written to require their own 38303 removal in certain cases when you modify the work.) You may place 38304 additional permissions on material, added by you to a covered work, 38305 for which you have or can give appropriate copyright permission. 38306 38307 Notwithstanding any other provision of this License, for material 38308 you add to a covered work, you may (if authorized by the copyright 38309 holders of that material) supplement the terms of this License 38310 with terms: 38311 38312 a. Disclaiming warranty or limiting liability differently from 38313 the terms of sections 15 and 16 of this License; or 38314 38315 b. Requiring preservation of specified reasonable legal notices 38316 or author attributions in that material or in the Appropriate 38317 Legal Notices displayed by works containing it; or 38318 38319 c. Prohibiting misrepresentation of the origin of that material, 38320 or requiring that modified versions of such material be 38321 marked in reasonable ways as different from the original 38322 version; or 38323 38324 d. Limiting the use for publicity purposes of names of licensors 38325 or authors of the material; or 38326 38327 e. Declining to grant rights under trademark law for use of some 38328 trade names, trademarks, or service marks; or 38329 38330 f. Requiring indemnification of licensors and authors of that 38331 material by anyone who conveys the material (or modified 38332 versions of it) with contractual assumptions of liability to 38333 the recipient, for any liability that these contractual 38334 assumptions directly impose on those licensors and authors. 38335 38336 All other non-permissive additional terms are considered "further 38337 restrictions" within the meaning of section 10. If the Program as 38338 you received it, or any part of it, contains a notice stating that 38339 it is governed by this License along with a term that is a further 38340 restriction, you may remove that term. If a license document 38341 contains a further restriction but permits relicensing or 38342 conveying under this License, you may add to a covered work 38343 material governed by the terms of that license document, provided 38344 that the further restriction does not survive such relicensing or 38345 conveying. 38346 38347 If you add terms to a covered work in accord with this section, you 38348 must place, in the relevant source files, a statement of the 38349 additional terms that apply to those files, or a notice indicating 38350 where to find the applicable terms. 38351 38352 Additional terms, permissive or non-permissive, may be stated in 38353 the form of a separately written license, or stated as exceptions; 38354 the above requirements apply either way. 38355 38356 8. Termination. 38357 38358 You may not propagate or modify a covered work except as expressly 38359 provided under this License. Any attempt otherwise to propagate or 38360 modify it is void, and will automatically terminate your rights 38361 under this License (including any patent licenses granted under 38362 the third paragraph of section 11). 38363 38364 However, if you cease all violation of this License, then your 38365 license from a particular copyright holder is reinstated (a) 38366 provisionally, unless and until the copyright holder explicitly 38367 and finally terminates your license, and (b) permanently, if the 38368 copyright holder fails to notify you of the violation by some 38369 reasonable means prior to 60 days after the cessation. 38370 38371 Moreover, your license from a particular copyright holder is 38372 reinstated permanently if the copyright holder notifies you of the 38373 violation by some reasonable means, this is the first time you have 38374 received notice of violation of this License (for any work) from 38375 that copyright holder, and you cure the violation prior to 30 days 38376 after your receipt of the notice. 38377 38378 Termination of your rights under this section does not terminate 38379 the licenses of parties who have received copies or rights from 38380 you under this License. If your rights have been terminated and 38381 not permanently reinstated, you do not qualify to receive new 38382 licenses for the same material under section 10. 38383 38384 9. Acceptance Not Required for Having Copies. 38385 38386 You are not required to accept this License in order to receive or 38387 run a copy of the Program. Ancillary propagation of a covered work 38388 occurring solely as a consequence of using peer-to-peer 38389 transmission to receive a copy likewise does not require 38390 acceptance. However, nothing other than this License grants you 38391 permission to propagate or modify any covered work. These actions 38392 infringe copyright if you do not accept this License. Therefore, 38393 by modifying or propagating a covered work, you indicate your 38394 acceptance of this License to do so. 38395 38396 10. Automatic Licensing of Downstream Recipients. 38397 38398 Each time you convey a covered work, the recipient automatically 38399 receives a license from the original licensors, to run, modify and 38400 propagate that work, subject to this License. You are not 38401 responsible for enforcing compliance by third parties with this 38402 License. 38403 38404 An "entity transaction" is a transaction transferring control of an 38405 organization, or substantially all assets of one, or subdividing an 38406 organization, or merging organizations. If propagation of a 38407 covered work results from an entity transaction, each party to that 38408 transaction who receives a copy of the work also receives whatever 38409 licenses to the work the party's predecessor in interest had or 38410 could give under the previous paragraph, plus a right to 38411 possession of the Corresponding Source of the work from the 38412 predecessor in interest, if the predecessor has it or can get it 38413 with reasonable efforts. 38414 38415 You may not impose any further restrictions on the exercise of the 38416 rights granted or affirmed under this License. For example, you 38417 may not impose a license fee, royalty, or other charge for 38418 exercise of rights granted under this License, and you may not 38419 initiate litigation (including a cross-claim or counterclaim in a 38420 lawsuit) alleging that any patent claim is infringed by making, 38421 using, selling, offering for sale, or importing the Program or any 38422 portion of it. 38423 38424 11. Patents. 38425 38426 A "contributor" is a copyright holder who authorizes use under this 38427 License of the Program or a work on which the Program is based. 38428 The work thus licensed is called the contributor's "contributor 38429 version". 38430 38431 A contributor's "essential patent claims" are all patent claims 38432 owned or controlled by the contributor, whether already acquired or 38433 hereafter acquired, that would be infringed by some manner, 38434 permitted by this License, of making, using, or selling its 38435 contributor version, but do not include claims that would be 38436 infringed only as a consequence of further modification of the 38437 contributor version. For purposes of this definition, "control" 38438 includes the right to grant patent sublicenses in a manner 38439 consistent with the requirements of this License. 38440 38441 Each contributor grants you a non-exclusive, worldwide, 38442 royalty-free patent license under the contributor's essential 38443 patent claims, to make, use, sell, offer for sale, import and 38444 otherwise run, modify and propagate the contents of its 38445 contributor version. 38446 38447 In the following three paragraphs, a "patent license" is any 38448 express agreement or commitment, however denominated, not to 38449 enforce a patent (such as an express permission to practice a 38450 patent or covenant not to sue for patent infringement). To 38451 "grant" such a patent license to a party means to make such an 38452 agreement or commitment not to enforce a patent against the party. 38453 38454 If you convey a covered work, knowingly relying on a patent 38455 license, and the Corresponding Source of the work is not available 38456 for anyone to copy, free of charge and under the terms of this 38457 License, through a publicly available network server or other 38458 readily accessible means, then you must either (1) cause the 38459 Corresponding Source to be so available, or (2) arrange to deprive 38460 yourself of the benefit of the patent license for this particular 38461 work, or (3) arrange, in a manner consistent with the requirements 38462 of this License, to extend the patent license to downstream 38463 recipients. "Knowingly relying" means you have actual knowledge 38464 that, but for the patent license, your conveying the covered work 38465 in a country, or your recipient's use of the covered work in a 38466 country, would infringe one or more identifiable patents in that 38467 country that you have reason to believe are valid. 38468 38469 If, pursuant to or in connection with a single transaction or 38470 arrangement, you convey, or propagate by procuring conveyance of, a 38471 covered work, and grant a patent license to some of the parties 38472 receiving the covered work authorizing them to use, propagate, 38473 modify or convey a specific copy of the covered work, then the 38474 patent license you grant is automatically extended to all 38475 recipients of the covered work and works based on it. 38476 38477 A patent license is "discriminatory" if it does not include within 38478 the scope of its coverage, prohibits the exercise of, or is 38479 conditioned on the non-exercise of one or more of the rights that 38480 are specifically granted under this License. You may not convey a 38481 covered work if you are a party to an arrangement with a third 38482 party that is in the business of distributing software, under 38483 which you make payment to the third party based on the extent of 38484 your activity of conveying the work, and under which the third 38485 party grants, to any of the parties who would receive the covered 38486 work from you, a discriminatory patent license (a) in connection 38487 with copies of the covered work conveyed by you (or copies made 38488 from those copies), or (b) primarily for and in connection with 38489 specific products or compilations that contain the covered work, 38490 unless you entered into that arrangement, or that patent license 38491 was granted, prior to 28 March 2007. 38492 38493 Nothing in this License shall be construed as excluding or limiting 38494 any implied license or other defenses to infringement that may 38495 otherwise be available to you under applicable patent law. 38496 38497 12. No Surrender of Others' Freedom. 38498 38499 If conditions are imposed on you (whether by court order, 38500 agreement or otherwise) that contradict the conditions of this 38501 License, they do not excuse you from the conditions of this 38502 License. If you cannot convey a covered work so as to satisfy 38503 simultaneously your obligations under this License and any other 38504 pertinent obligations, then as a consequence you may not convey it 38505 at all. For example, if you agree to terms that obligate you to 38506 collect a royalty for further conveying from those to whom you 38507 convey the Program, the only way you could satisfy both those 38508 terms and this License would be to refrain entirely from conveying 38509 the Program. 38510 38511 13. Use with the GNU Affero General Public License. 38512 38513 Notwithstanding any other provision of this License, you have 38514 permission to link or combine any covered work with a work licensed 38515 under version 3 of the GNU Affero General Public License into a 38516 single combined work, and to convey the resulting work. The terms 38517 of this License will continue to apply to the part which is the 38518 covered work, but the special requirements of the GNU Affero 38519 General Public License, section 13, concerning interaction through 38520 a network will apply to the combination as such. 38521 38522 14. Revised Versions of this License. 38523 38524 The Free Software Foundation may publish revised and/or new 38525 versions of the GNU General Public License from time to time. 38526 Such new versions will be similar in spirit to the present 38527 version, but may differ in detail to address new problems or 38528 concerns. 38529 38530 Each version is given a distinguishing version number. If the 38531 Program specifies that a certain numbered version of the GNU 38532 General Public License "or any later version" applies to it, you 38533 have the option of following the terms and conditions either of 38534 that numbered version or of any later version published by the 38535 Free Software Foundation. If the Program does not specify a 38536 version number of the GNU General Public License, you may choose 38537 any version ever published by the Free Software Foundation. 38538 38539 If the Program specifies that a proxy can decide which future 38540 versions of the GNU General Public License can be used, that 38541 proxy's public statement of acceptance of a version permanently 38542 authorizes you to choose that version for the Program. 38543 38544 Later license versions may give you additional or different 38545 permissions. However, no additional obligations are imposed on any 38546 author or copyright holder as a result of your choosing to follow a 38547 later version. 38548 38549 15. Disclaimer of Warranty. 38550 38551 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 38552 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 38553 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 38554 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 38555 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 38556 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 38557 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 38558 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 38559 NECESSARY SERVICING, REPAIR OR CORRECTION. 38560 38561 16. Limitation of Liability. 38562 38563 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 38564 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 38565 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 38566 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 38567 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 38568 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 38569 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 38570 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 38571 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 38572 THE POSSIBILITY OF SUCH DAMAGES. 38573 38574 17. Interpretation of Sections 15 and 16. 38575 38576 If the disclaimer of warranty and limitation of liability provided 38577 above cannot be given local legal effect according to their terms, 38578 reviewing courts shall apply local law that most closely 38579 approximates an absolute waiver of all civil liability in 38580 connection with the Program, unless a warranty or assumption of 38581 liability accompanies a copy of the Program in return for a fee. 38582 38583 38584 END OF TERMS AND CONDITIONS 38585 =========================== 38586 38587 How to Apply These Terms to Your New Programs 38588 ============================================= 38589 38590 If you develop a new program, and you want it to be of the greatest 38591 possible use to the public, the best way to achieve this is to make it 38592 free software which everyone can redistribute and change under these 38593 terms. 38594 38595 To do so, attach the following notices to the program. It is safest 38596 to attach them to the start of each source file to most effectively 38597 state the exclusion of warranty; and each file should have at least the 38598 "copyright" line and a pointer to where the full notice is found. 38599 38600 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 38601 Copyright (C) YEAR NAME OF AUTHOR 38602 38603 This program is free software: you can redistribute it and/or modify 38604 it under the terms of the GNU General Public License as published by 38605 the Free Software Foundation, either version 3 of the License, or (at 38606 your option) any later version. 38607 38608 This program is distributed in the hope that it will be useful, but 38609 WITHOUT ANY WARRANTY; without even the implied warranty of 38610 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 38611 General Public License for more details. 38612 38613 You should have received a copy of the GNU General Public License 38614 along with this program. If not, see `http://www.gnu.org/licenses/'. 38615 38616 Also add information on how to contact you by electronic and paper 38617 mail. 38618 38619 If the program does terminal interaction, make it output a short 38620 notice like this when it starts in an interactive mode: 38621 38622 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 38623 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 38624 This is free software, and you are welcome to redistribute it 38625 under certain conditions; type `show c' for details. 38626 38627 The hypothetical commands `show w' and `show c' should show the 38628 appropriate parts of the General Public License. Of course, your 38629 program's commands might be different; for a GUI interface, you would 38630 use an "about box". 38631 38632 You should also get your employer (if you work as a programmer) or 38633 school, if any, to sign a "copyright disclaimer" for the program, if 38634 necessary. For more information on this, and how to apply and follow 38635 the GNU GPL, see `http://www.gnu.org/licenses/'. 38636 38637 The GNU General Public License does not permit incorporating your 38638 program into proprietary programs. If your program is a subroutine 38639 library, you may consider it more useful to permit linking proprietary 38640 applications with the library. If this is what you want to do, use the 38641 GNU Lesser General Public License instead of this License. But first, 38642 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 38643 38644 38645 File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 38646 38647 GNU Free Documentation License 38648 ****************************** 38649 38650 Version 1.2, November 2002 38651 38652 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 38653 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 38654 38655 Everyone is permitted to copy and distribute verbatim copies 38656 of this license document, but changing it is not allowed. 38657 38658 0. PREAMBLE 38659 38660 The purpose of this License is to make a manual, textbook, or other 38661 functional and useful document "free" in the sense of freedom: to 38662 assure everyone the effective freedom to copy and redistribute it, 38663 with or without modifying it, either commercially or 38664 noncommercially. Secondarily, this License preserves for the 38665 author and publisher a way to get credit for their work, while not 38666 being considered responsible for modifications made by others. 38667 38668 This License is a kind of "copyleft", which means that derivative 38669 works of the document must themselves be free in the same sense. 38670 It complements the GNU General Public License, which is a copyleft 38671 license designed for free software. 38672 38673 We have designed this License in order to use it for manuals for 38674 free software, because free software needs free documentation: a 38675 free program should come with manuals providing the same freedoms 38676 that the software does. But this License is not limited to 38677 software manuals; it can be used for any textual work, regardless 38678 of subject matter or whether it is published as a printed book. 38679 We recommend this License principally for works whose purpose is 38680 instruction or reference. 38681 38682 1. APPLICABILITY AND DEFINITIONS 38683 38684 This License applies to any manual or other work, in any medium, 38685 that contains a notice placed by the copyright holder saying it 38686 can be distributed under the terms of this License. Such a notice 38687 grants a world-wide, royalty-free license, unlimited in duration, 38688 to use that work under the conditions stated herein. The 38689 "Document", below, refers to any such manual or work. Any member 38690 of the public is a licensee, and is addressed as "you". You 38691 accept the license if you copy, modify or distribute the work in a 38692 way requiring permission under copyright law. 38693 38694 A "Modified Version" of the Document means any work containing the 38695 Document or a portion of it, either copied verbatim, or with 38696 modifications and/or translated into another language. 38697 38698 A "Secondary Section" is a named appendix or a front-matter section 38699 of the Document that deals exclusively with the relationship of the 38700 publishers or authors of the Document to the Document's overall 38701 subject (or to related matters) and contains nothing that could 38702 fall directly within that overall subject. (Thus, if the Document 38703 is in part a textbook of mathematics, a Secondary Section may not 38704 explain any mathematics.) The relationship could be a matter of 38705 historical connection with the subject or with related matters, or 38706 of legal, commercial, philosophical, ethical or political position 38707 regarding them. 38708 38709 The "Invariant Sections" are certain Secondary Sections whose 38710 titles are designated, as being those of Invariant Sections, in 38711 the notice that says that the Document is released under this 38712 License. If a section does not fit the above definition of 38713 Secondary then it is not allowed to be designated as Invariant. 38714 The Document may contain zero Invariant Sections. If the Document 38715 does not identify any Invariant Sections then there are none. 38716 38717 The "Cover Texts" are certain short passages of text that are 38718 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 38719 that says that the Document is released under this License. A 38720 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 38721 be at most 25 words. 38722 38723 A "Transparent" copy of the Document means a machine-readable copy, 38724 represented in a format whose specification is available to the 38725 general public, that is suitable for revising the document 38726 straightforwardly with generic text editors or (for images 38727 composed of pixels) generic paint programs or (for drawings) some 38728 widely available drawing editor, and that is suitable for input to 38729 text formatters or for automatic translation to a variety of 38730 formats suitable for input to text formatters. A copy made in an 38731 otherwise Transparent file format whose markup, or absence of 38732 markup, has been arranged to thwart or discourage subsequent 38733 modification by readers is not Transparent. An image format is 38734 not Transparent if used for any substantial amount of text. A 38735 copy that is not "Transparent" is called "Opaque". 38736 38737 Examples of suitable formats for Transparent copies include plain 38738 ASCII without markup, Texinfo input format, LaTeX input format, 38739 SGML or XML using a publicly available DTD, and 38740 standard-conforming simple HTML, PostScript or PDF designed for 38741 human modification. Examples of transparent image formats include 38742 PNG, XCF and JPG. Opaque formats include proprietary formats that 38743 can be read and edited only by proprietary word processors, SGML or 38744 XML for which the DTD and/or processing tools are not generally 38745 available, and the machine-generated HTML, PostScript or PDF 38746 produced by some word processors for output purposes only. 38747 38748 The "Title Page" means, for a printed book, the title page itself, 38749 plus such following pages as are needed to hold, legibly, the 38750 material this License requires to appear in the title page. For 38751 works in formats which do not have any title page as such, "Title 38752 Page" means the text near the most prominent appearance of the 38753 work's title, preceding the beginning of the body of the text. 38754 38755 A section "Entitled XYZ" means a named subunit of the Document 38756 whose title either is precisely XYZ or contains XYZ in parentheses 38757 following text that translates XYZ in another language. (Here XYZ 38758 stands for a specific section name mentioned below, such as 38759 "Acknowledgements", "Dedications", "Endorsements", or "History".) 38760 To "Preserve the Title" of such a section when you modify the 38761 Document means that it remains a section "Entitled XYZ" according 38762 to this definition. 38763 38764 The Document may include Warranty Disclaimers next to the notice 38765 which states that this License applies to the Document. These 38766 Warranty Disclaimers are considered to be included by reference in 38767 this License, but only as regards disclaiming warranties: any other 38768 implication that these Warranty Disclaimers may have is void and 38769 has no effect on the meaning of this License. 38770 38771 2. VERBATIM COPYING 38772 38773 You may copy and distribute the Document in any medium, either 38774 commercially or noncommercially, provided that this License, the 38775 copyright notices, and the license notice saying this License 38776 applies to the Document are reproduced in all copies, and that you 38777 add no other conditions whatsoever to those of this License. You 38778 may not use technical measures to obstruct or control the reading 38779 or further copying of the copies you make or distribute. However, 38780 you may accept compensation in exchange for copies. If you 38781 distribute a large enough number of copies you must also follow 38782 the conditions in section 3. 38783 38784 You may also lend copies, under the same conditions stated above, 38785 and you may publicly display copies. 38786 38787 3. COPYING IN QUANTITY 38788 38789 If you publish printed copies (or copies in media that commonly 38790 have printed covers) of the Document, numbering more than 100, and 38791 the Document's license notice requires Cover Texts, you must 38792 enclose the copies in covers that carry, clearly and legibly, all 38793 these Cover Texts: Front-Cover Texts on the front cover, and 38794 Back-Cover Texts on the back cover. Both covers must also clearly 38795 and legibly identify you as the publisher of these copies. The 38796 front cover must present the full title with all words of the 38797 title equally prominent and visible. You may add other material 38798 on the covers in addition. Copying with changes limited to the 38799 covers, as long as they preserve the title of the Document and 38800 satisfy these conditions, can be treated as verbatim copying in 38801 other respects. 38802 38803 If the required texts for either cover are too voluminous to fit 38804 legibly, you should put the first ones listed (as many as fit 38805 reasonably) on the actual cover, and continue the rest onto 38806 adjacent pages. 38807 38808 If you publish or distribute Opaque copies of the Document 38809 numbering more than 100, you must either include a 38810 machine-readable Transparent copy along with each Opaque copy, or 38811 state in or with each Opaque copy a computer-network location from 38812 which the general network-using public has access to download 38813 using public-standard network protocols a complete Transparent 38814 copy of the Document, free of added material. If you use the 38815 latter option, you must take reasonably prudent steps, when you 38816 begin distribution of Opaque copies in quantity, to ensure that 38817 this Transparent copy will remain thus accessible at the stated 38818 location until at least one year after the last time you 38819 distribute an Opaque copy (directly or through your agents or 38820 retailers) of that edition to the public. 38821 38822 It is requested, but not required, that you contact the authors of 38823 the Document well before redistributing any large number of 38824 copies, to give them a chance to provide you with an updated 38825 version of the Document. 38826 38827 4. MODIFICATIONS 38828 38829 You may copy and distribute a Modified Version of the Document 38830 under the conditions of sections 2 and 3 above, provided that you 38831 release the Modified Version under precisely this License, with 38832 the Modified Version filling the role of the Document, thus 38833 licensing distribution and modification of the Modified Version to 38834 whoever possesses a copy of it. In addition, you must do these 38835 things in the Modified Version: 38836 38837 A. Use in the Title Page (and on the covers, if any) a title 38838 distinct from that of the Document, and from those of 38839 previous versions (which should, if there were any, be listed 38840 in the History section of the Document). You may use the 38841 same title as a previous version if the original publisher of 38842 that version gives permission. 38843 38844 B. List on the Title Page, as authors, one or more persons or 38845 entities responsible for authorship of the modifications in 38846 the Modified Version, together with at least five of the 38847 principal authors of the Document (all of its principal 38848 authors, if it has fewer than five), unless they release you 38849 from this requirement. 38850 38851 C. State on the Title page the name of the publisher of the 38852 Modified Version, as the publisher. 38853 38854 D. Preserve all the copyright notices of the Document. 38855 38856 E. Add an appropriate copyright notice for your modifications 38857 adjacent to the other copyright notices. 38858 38859 F. Include, immediately after the copyright notices, a license 38860 notice giving the public permission to use the Modified 38861 Version under the terms of this License, in the form shown in 38862 the Addendum below. 38863 38864 G. Preserve in that license notice the full lists of Invariant 38865 Sections and required Cover Texts given in the Document's 38866 license notice. 38867 38868 H. Include an unaltered copy of this License. 38869 38870 I. Preserve the section Entitled "History", Preserve its Title, 38871 and add to it an item stating at least the title, year, new 38872 authors, and publisher of the Modified Version as given on 38873 the Title Page. If there is no section Entitled "History" in 38874 the Document, create one stating the title, year, authors, 38875 and publisher of the Document as given on its Title Page, 38876 then add an item describing the Modified Version as stated in 38877 the previous sentence. 38878 38879 J. Preserve the network location, if any, given in the Document 38880 for public access to a Transparent copy of the Document, and 38881 likewise the network locations given in the Document for 38882 previous versions it was based on. These may be placed in 38883 the "History" section. You may omit a network location for a 38884 work that was published at least four years before the 38885 Document itself, or if the original publisher of the version 38886 it refers to gives permission. 38887 38888 K. For any section Entitled "Acknowledgements" or "Dedications", 38889 Preserve the Title of the section, and preserve in the 38890 section all the substance and tone of each of the contributor 38891 acknowledgements and/or dedications given therein. 38892 38893 L. Preserve all the Invariant Sections of the Document, 38894 unaltered in their text and in their titles. Section numbers 38895 or the equivalent are not considered part of the section 38896 titles. 38897 38898 M. Delete any section Entitled "Endorsements". Such a section 38899 may not be included in the Modified Version. 38900 38901 N. Do not retitle any existing section to be Entitled 38902 "Endorsements" or to conflict in title with any Invariant 38903 Section. 38904 38905 O. Preserve any Warranty Disclaimers. 38906 38907 If the Modified Version includes new front-matter sections or 38908 appendices that qualify as Secondary Sections and contain no 38909 material copied from the Document, you may at your option 38910 designate some or all of these sections as invariant. To do this, 38911 add their titles to the list of Invariant Sections in the Modified 38912 Version's license notice. These titles must be distinct from any 38913 other section titles. 38914 38915 You may add a section Entitled "Endorsements", provided it contains 38916 nothing but endorsements of your Modified Version by various 38917 parties--for example, statements of peer review or that the text 38918 has been approved by an organization as the authoritative 38919 definition of a standard. 38920 38921 You may add a passage of up to five words as a Front-Cover Text, 38922 and a passage of up to 25 words as a Back-Cover Text, to the end 38923 of the list of Cover Texts in the Modified Version. Only one 38924 passage of Front-Cover Text and one of Back-Cover Text may be 38925 added by (or through arrangements made by) any one entity. If the 38926 Document already includes a cover text for the same cover, 38927 previously added by you or by arrangement made by the same entity 38928 you are acting on behalf of, you may not add another; but you may 38929 replace the old one, on explicit permission from the previous 38930 publisher that added the old one. 38931 38932 The author(s) and publisher(s) of the Document do not by this 38933 License give permission to use their names for publicity for or to 38934 assert or imply endorsement of any Modified Version. 38935 38936 5. COMBINING DOCUMENTS 38937 38938 You may combine the Document with other documents released under 38939 this License, under the terms defined in section 4 above for 38940 modified versions, provided that you include in the combination 38941 all of the Invariant Sections of all of the original documents, 38942 unmodified, and list them all as Invariant Sections of your 38943 combined work in its license notice, and that you preserve all 38944 their Warranty Disclaimers. 38945 38946 The combined work need only contain one copy of this License, and 38947 multiple identical Invariant Sections may be replaced with a single 38948 copy. If there are multiple Invariant Sections with the same name 38949 but different contents, make the title of each such section unique 38950 by adding at the end of it, in parentheses, the name of the 38951 original author or publisher of that section if known, or else a 38952 unique number. Make the same adjustment to the section titles in 38953 the list of Invariant Sections in the license notice of the 38954 combined work. 38955 38956 In the combination, you must combine any sections Entitled 38957 "History" in the various original documents, forming one section 38958 Entitled "History"; likewise combine any sections Entitled 38959 "Acknowledgements", and any sections Entitled "Dedications". You 38960 must delete all sections Entitled "Endorsements." 38961 38962 6. COLLECTIONS OF DOCUMENTS 38963 38964 You may make a collection consisting of the Document and other 38965 documents released under this License, and replace the individual 38966 copies of this License in the various documents with a single copy 38967 that is included in the collection, provided that you follow the 38968 rules of this License for verbatim copying of each of the 38969 documents in all other respects. 38970 38971 You may extract a single document from such a collection, and 38972 distribute it individually under this License, provided you insert 38973 a copy of this License into the extracted document, and follow 38974 this License in all other respects regarding verbatim copying of 38975 that document. 38976 38977 7. AGGREGATION WITH INDEPENDENT WORKS 38978 38979 A compilation of the Document or its derivatives with other 38980 separate and independent documents or works, in or on a volume of 38981 a storage or distribution medium, is called an "aggregate" if the 38982 copyright resulting from the compilation is not used to limit the 38983 legal rights of the compilation's users beyond what the individual 38984 works permit. When the Document is included in an aggregate, this 38985 License does not apply to the other works in the aggregate which 38986 are not themselves derivative works of the Document. 38987 38988 If the Cover Text requirement of section 3 is applicable to these 38989 copies of the Document, then if the Document is less than one half 38990 of the entire aggregate, the Document's Cover Texts may be placed 38991 on covers that bracket the Document within the aggregate, or the 38992 electronic equivalent of covers if the Document is in electronic 38993 form. Otherwise they must appear on printed covers that bracket 38994 the whole aggregate. 38995 38996 8. TRANSLATION 38997 38998 Translation is considered a kind of modification, so you may 38999 distribute translations of the Document under the terms of section 39000 4. Replacing Invariant Sections with translations requires special 39001 permission from their copyright holders, but you may include 39002 translations of some or all Invariant Sections in addition to the 39003 original versions of these Invariant Sections. You may include a 39004 translation of this License, and all the license notices in the 39005 Document, and any Warranty Disclaimers, provided that you also 39006 include the original English version of this License and the 39007 original versions of those notices and disclaimers. In case of a 39008 disagreement between the translation and the original version of 39009 this License or a notice or disclaimer, the original version will 39010 prevail. 39011 39012 If a section in the Document is Entitled "Acknowledgements", 39013 "Dedications", or "History", the requirement (section 4) to 39014 Preserve its Title (section 1) will typically require changing the 39015 actual title. 39016 39017 9. TERMINATION 39018 39019 You may not copy, modify, sublicense, or distribute the Document 39020 except as expressly provided for under this License. Any other 39021 attempt to copy, modify, sublicense or distribute the Document is 39022 void, and will automatically terminate your rights under this 39023 License. However, parties who have received copies, or rights, 39024 from you under this License will not have their licenses 39025 terminated so long as such parties remain in full compliance. 39026 39027 10. FUTURE REVISIONS OF THIS LICENSE 39028 39029 The Free Software Foundation may publish new, revised versions of 39030 the GNU Free Documentation License from time to time. Such new 39031 versions will be similar in spirit to the present version, but may 39032 differ in detail to address new problems or concerns. See 39033 `http://www.gnu.org/copyleft/'. 39034 39035 Each version of the License is given a distinguishing version 39036 number. If the Document specifies that a particular numbered 39037 version of this License "or any later version" applies to it, you 39038 have the option of following the terms and conditions either of 39039 that specified version or of any later version that has been 39040 published (not as a draft) by the Free Software Foundation. If 39041 the Document does not specify a version number of this License, 39042 you may choose any version ever published (not as a draft) by the 39043 Free Software Foundation. 39044 39045 ADDENDUM: How to use this License for your documents 39046 ==================================================== 39047 39048 To use this License in a document you have written, include a copy of 39049 the License in the document and put the following copyright and license 39050 notices just after the title page: 39051 39052 Copyright (C) YEAR YOUR NAME. 39053 Permission is granted to copy, distribute and/or modify this document 39054 under the terms of the GNU Free Documentation License, Version 1.2 39055 or any later version published by the Free Software Foundation; 39056 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 39057 Texts. A copy of the license is included in the section entitled ``GNU 39058 Free Documentation License''. 39059 39060 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 39061 replace the "with...Texts." line with this: 39062 39063 with the Invariant Sections being LIST THEIR TITLES, with 39064 the Front-Cover Texts being LIST, and with the Back-Cover Texts 39065 being LIST. 39066 39067 If you have Invariant Sections without Cover Texts, or some other 39068 combination of the three, merge those two alternatives to suit the 39069 situation. 39070 39071 If your document contains nontrivial examples of program code, we 39072 recommend releasing these examples in parallel under your choice of 39073 free software license, such as the GNU General Public License, to 39074 permit their use in free software. 39075 39076 39077 File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 39078 39079 Contributors to GCC 39080 ******************* 39081 39082 The GCC project would like to thank its many contributors. Without 39083 them the project would not have been nearly as successful as it has 39084 been. Any omissions in this list are accidental. Feel free to contact 39085 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or 39086 some of your contributions are not listed. Please keep this list in 39087 alphabetical order. 39088 39089 * Analog Devices helped implement the support for complex data types 39090 and iterators. 39091 39092 * John David Anglin for threading-related fixes and improvements to 39093 libstdc++-v3, and the HP-UX port. 39094 39095 * James van Artsdalen wrote the code that makes efficient use of the 39096 Intel 80387 register stack. 39097 39098 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 39099 Series port. 39100 39101 * Alasdair Baird for various bug fixes. 39102 39103 * Giovanni Bajo for analyzing lots of complicated C++ problem 39104 reports. 39105 39106 * Peter Barada for his work to improve code generation for new 39107 ColdFire cores. 39108 39109 * Gerald Baumgartner added the signature extension to the C++ front 39110 end. 39111 39112 * Godmar Back for his Java improvements and encouragement. 39113 39114 * Scott Bambrough for help porting the Java compiler. 39115 39116 * Wolfgang Bangerth for processing tons of bug reports. 39117 39118 * Jon Beniston for his Microsoft Windows port of Java. 39119 39120 * Daniel Berlin for better DWARF2 support, faster/better 39121 optimizations, improved alias analysis, plus migrating GCC to 39122 Bugzilla. 39123 39124 * Geoff Berry for his Java object serialization work and various 39125 patches. 39126 39127 * Uros Bizjak for the implementation of x87 math built-in functions 39128 and for various middle end and i386 back end improvements and bug 39129 fixes. 39130 39131 * Eric Blake for helping to make GCJ and libgcj conform to the 39132 specifications. 39133 39134 * Janne Blomqvist for contributions to GNU Fortran. 39135 39136 * Segher Boessenkool for various fixes. 39137 39138 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 39139 other Java work. 39140 39141 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 39142 miscellaneous clean-ups. 39143 39144 * Steven Bosscher for integrating the GNU Fortran front end into GCC 39145 and for contributing to the tree-ssa branch. 39146 39147 * Eric Botcazou for fixing middle- and backend bugs left and right. 39148 39149 * Per Bothner for his direction via the steering committee and 39150 various improvements to the infrastructure for supporting new 39151 languages. Chill front end implementation. Initial 39152 implementations of cpplib, fix-header, config.guess, libio, and 39153 past C++ library (libg++) maintainer. Dreaming up, designing and 39154 implementing much of GCJ. 39155 39156 * Devon Bowen helped port GCC to the Tahoe. 39157 39158 * Don Bowman for mips-vxworks contributions. 39159 39160 * Dave Brolley for work on cpplib and Chill. 39161 39162 * Paul Brook for work on the ARM architecture and maintaining GNU 39163 Fortran. 39164 39165 * Robert Brown implemented the support for Encore 32000 systems. 39166 39167 * Christian Bruel for improvements to local store elimination. 39168 39169 * Herman A.J. ten Brugge for various fixes. 39170 39171 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 39172 FAQ. 39173 39174 * Joe Buck for his direction via the steering committee. 39175 39176 * Craig Burley for leadership of the G77 Fortran effort. 39177 39178 * Stephan Buys for contributing Doxygen notes for libstdc++. 39179 39180 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 39181 to the C++ strings, streambufs and formatted I/O, hard detective 39182 work on the frustrating localization issues, and keeping up with 39183 the problem reports. 39184 39185 * John Carr for his alias work, SPARC hacking, infrastructure 39186 improvements, previous contributions to the steering committee, 39187 loop optimizations, etc. 39188 39189 * Stephane Carrez for 68HC11 and 68HC12 ports. 39190 39191 * Steve Chamberlain for support for the Renesas SH and H8 processors 39192 and the PicoJava processor, and for GCJ config fixes. 39193 39194 * Glenn Chambers for help with the GCJ FAQ. 39195 39196 * John-Marc Chandonia for various libgcj patches. 39197 39198 * Scott Christley for his Objective-C contributions. 39199 39200 * Eric Christopher for his Java porting help and clean-ups. 39201 39202 * Branko Cibej for more warning contributions. 39203 39204 * The GNU Classpath project for all of their merged runtime code. 39205 39206 * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and 39207 other random hacking. 39208 39209 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 39210 39211 * R. Kelley Cook for making GCC buildable from a read-only directory 39212 as well as other miscellaneous build process and documentation 39213 clean-ups. 39214 39215 * Ralf Corsepius for SH testing and minor bug fixing. 39216 39217 * Stan Cox for care and feeding of the x86 port and lots of behind 39218 the scenes hacking. 39219 39220 * Alex Crain provided changes for the 3b1. 39221 39222 * Ian Dall for major improvements to the NS32k port. 39223 39224 * Paul Dale for his work to add uClinux platform support to the m68k 39225 backend. 39226 39227 * Dario Dariol contributed the four varieties of sample programs 39228 that print a copy of their source. 39229 39230 * Russell Davidson for fstream and stringstream fixes in libstdc++. 39231 39232 * Bud Davis for work on the G77 and GNU Fortran compilers. 39233 39234 * Mo DeJong for GCJ and libgcj bug fixes. 39235 39236 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 39237 various bug fixes, and the M32C port. 39238 39239 * Arnaud Desitter for helping to debug GNU Fortran. 39240 39241 * Gabriel Dos Reis for contributions to G++, contributions and 39242 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 39243 including `valarray<>', `complex<>', maintaining the numerics 39244 library (including that pesky `<limits>' :-) and keeping 39245 up-to-date anything to do with numbers. 39246 39247 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 39248 ISO C99 support, CFG dumping support, etc., plus support of the 39249 C++ runtime libraries including for all kinds of C interface 39250 issues, contributing and maintaining `complex<>', sanity checking 39251 and disbursement, configuration architecture, libio maintenance, 39252 and early math work. 39253 39254 * Zdenek Dvorak for a new loop unroller and various fixes. 39255 39256 * Richard Earnshaw for his ongoing work with the ARM. 39257 39258 * David Edelsohn for his direction via the steering committee, 39259 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 39260 loop changes, doing the entire AIX port of libstdc++ with his bare 39261 hands, and for ensuring GCC properly keeps working on AIX. 39262 39263 * Kevin Ediger for the floating point formatting of num_put::do_put 39264 in libstdc++. 39265 39266 * Phil Edwards for libstdc++ work including configuration hackery, 39267 documentation maintainer, chief breaker of the web pages, the 39268 occasional iostream bug fix, and work on shared library symbol 39269 versioning. 39270 39271 * Paul Eggert for random hacking all over GCC. 39272 39273 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 39274 configuration support for locales and fstream-related fixes. 39275 39276 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 39277 iostreams. 39278 39279 * Christian Ehrhardt for dealing with bug reports. 39280 39281 * Ben Elliston for his work to move the Objective-C runtime into its 39282 own subdirectory and for his work on autoconf. 39283 39284 * Revital Eres for work on the PowerPC 750CL port. 39285 39286 * Marc Espie for OpenBSD support. 39287 39288 * Doug Evans for much of the global optimization framework, arc, 39289 m32r, and SPARC work. 39290 39291 * Christopher Faylor for his work on the Cygwin port and for caring 39292 and feeding the gcc.gnu.org box and saving its users tons of spam. 39293 39294 * Fred Fish for BeOS support and Ada fixes. 39295 39296 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 39297 39298 * Peter Gerwinski for various bug fixes and the Pascal front end. 39299 39300 * Kaveh R. Ghazi for his direction via the steering committee, 39301 amazing work to make `-W -Wall -W* -Werror' useful, and 39302 continuously testing GCC on a plethora of platforms. Kaveh 39303 extends his gratitude to the CAIP Center at Rutgers University for 39304 providing him with computing resources to work on Free Software 39305 since the late 1980s. 39306 39307 * John Gilmore for a donation to the FSF earmarked improving GNU 39308 Java. 39309 39310 * Judy Goldberg for c++ contributions. 39311 39312 * Torbjorn Granlund for various fixes and the c-torture testsuite, 39313 multiply- and divide-by-constant optimization, improved long long 39314 support, improved leaf function register allocation, and his 39315 direction via the steering committee. 39316 39317 * Anthony Green for his `-Os' contributions and Java front end work. 39318 39319 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 39320 Java code. 39321 39322 * Michael K. Gschwind contributed the port to the PDP-11. 39323 39324 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 39325 the support for Dwarf symbolic debugging information, and much of 39326 the support for System V Release 4. He has also worked heavily on 39327 the Intel 386 and 860 support. 39328 39329 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 39330 GCSE. 39331 39332 * Bruno Haible for improvements in the runtime overhead for EH, new 39333 warnings and assorted bug fixes. 39334 39335 * Andrew Haley for his amazing Java compiler and library efforts. 39336 39337 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 39338 series 300. 39339 39340 * Michael Hayes for various thankless work he's done trying to get 39341 the c30/c40 ports functional. Lots of loop and unroll 39342 improvements and fixes. 39343 39344 * Dara Hazeghi for wading through myriads of target-specific bug 39345 reports. 39346 39347 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 39348 39349 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 39350 work, loop opts, and generally fixing lots of old problems we've 39351 ignored for years, flow rewrite and lots of further stuff, 39352 including reviewing tons of patches. 39353 39354 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 39355 various fixes. 39356 39357 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 39358 contributed the support for the Sony NEWS machine. 39359 39360 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 39361 various fixes. 39362 39363 * Katherine Holcomb for work on GNU Fortran. 39364 39365 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 39366 of testing and bug fixing, particularly of GCC configury code. 39367 39368 * Steve Holmgren for MachTen patches. 39369 39370 * Jan Hubicka for his x86 port improvements. 39371 39372 * Falk Hueffner for working on C and optimization bug reports. 39373 39374 * Bernardo Innocenti for his m68k work, including merging of 39375 ColdFire improvements and uClinux support. 39376 39377 * Christian Iseli for various bug fixes. 39378 39379 * Kamil Iskra for general m68k hacking. 39380 39381 * Lee Iverson for random fixes and MIPS testing. 39382 39383 * Andreas Jaeger for testing and benchmarking of GCC and various bug 39384 fixes. 39385 39386 * Jakub Jelinek for his SPARC work and sibling call optimizations as 39387 well as lots of bug fixes and test cases, and for improving the 39388 Java build system. 39389 39390 * Janis Johnson for ia64 testing and fixes, her quality improvement 39391 sidetracks, and web page maintenance. 39392 39393 * Kean Johnston for SCO OpenServer support and various fixes. 39394 39395 * Tim Josling for the sample language treelang based originally on 39396 Richard Kenner's "toy" language. 39397 39398 * Nicolai Josuttis for additional libstdc++ documentation. 39399 39400 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 39401 target. 39402 39403 * Steven G. Kargl for work on GNU Fortran. 39404 39405 * David Kashtan of SRI adapted GCC to VMS. 39406 39407 * Ryszard Kabatek for many, many libstdc++ bug fixes and 39408 optimizations of strings, especially member functions, and for 39409 auto_ptr fixes. 39410 39411 * Geoffrey Keating for his ongoing work to make the PPC work for 39412 GNU/Linux and his automatic regression tester. 39413 39414 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 39415 work in just about every part of libstdc++. 39416 39417 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 39418 MIL-STD-1750A. 39419 39420 * Richard Kenner of the New York University Ultracomputer Research 39421 Laboratory wrote the machine descriptions for the AMD 29000, the 39422 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 39423 support for instruction attributes. He also made changes to 39424 better support RISC processors including changes to common 39425 subexpression elimination, strength reduction, function calling 39426 sequence handling, and condition code support, in addition to 39427 generalizing the code for frame pointer elimination and delay slot 39428 scheduling. Richard Kenner was also the head maintainer of GCC 39429 for several years. 39430 39431 * Mumit Khan for various contributions to the Cygwin and Mingw32 39432 ports and maintaining binary releases for Microsoft Windows hosts, 39433 and for massive libstdc++ porting work to Cygwin/Mingw32. 39434 39435 * Robin Kirkham for cpu32 support. 39436 39437 * Mark Klein for PA improvements. 39438 39439 * Thomas Koenig for various bug fixes. 39440 39441 * Bruce Korb for the new and improved fixincludes code. 39442 39443 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 39444 effort. 39445 39446 * Charles LaBrec contributed the support for the Integrated Solutions 39447 68020 system. 39448 39449 * Asher Langton and Mike Kumbera for contributing Cray pointer 39450 support to GNU Fortran, and for other GNU Fortran improvements. 39451 39452 * Jeff Law for his direction via the steering committee, 39453 coordinating the entire egcs project and GCC 2.95, rolling out 39454 snapshots and releases, handling merges from GCC2, reviewing tons 39455 of patches that might have fallen through the cracks else, and 39456 random but extensive hacking. 39457 39458 * Marc Lehmann for his direction via the steering committee and 39459 helping with analysis and improvements of x86 performance. 39460 39461 * Victor Leikehman for work on GNU Fortran. 39462 39463 * Ted Lemon wrote parts of the RTL reader and printer. 39464 39465 * Kriang Lerdsuwanakij for C++ improvements including template as 39466 template parameter support, and many C++ fixes. 39467 39468 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 39469 and random work on the Java front end. 39470 39471 * Alain Lichnewsky ported GCC to the MIPS CPU. 39472 39473 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 39474 and patches. 39475 39476 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 39477 39478 * Chen Liqin for various S+core related fixes/improvement, and for 39479 maintaining the S+core port. 39480 39481 * Weiwen Liu for testing and various bug fixes. 39482 39483 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 39484 diagnostics fixes and improvements. 39485 39486 * Dave Love for his ongoing work with the Fortran front end and 39487 runtime libraries. 39488 39489 * Martin von Lo"wis for internal consistency checking infrastructure, 39490 various C++ improvements including namespace support, and tons of 39491 assistance with libstdc++/compiler merges. 39492 39493 * H.J. Lu for his previous contributions to the steering committee, 39494 many x86 bug reports, prototype patches, and keeping the GNU/Linux 39495 ports working. 39496 39497 * Greg McGary for random fixes and (someday) bounded pointers. 39498 39499 * Andrew MacLeod for his ongoing work in building a real EH system, 39500 various code generation improvements, work on the global 39501 optimizer, etc. 39502 39503 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 39504 hacking improvements to compile-time performance, overall 39505 knowledge and direction in the area of instruction scheduling, and 39506 design and implementation of the automaton based instruction 39507 scheduler. 39508 39509 * Bob Manson for his behind the scenes work on dejagnu. 39510 39511 * Philip Martin for lots of libstdc++ string and vector iterator 39512 fixes and improvements, and string clean up and testsuites. 39513 39514 * All of the Mauve project contributors, for Java test code. 39515 39516 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 39517 39518 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 39519 39520 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 39521 powerpc, haifa, ECOFF debug support, and other assorted hacking. 39522 39523 * Jason Merrill for his direction via the steering committee and 39524 leading the G++ effort. 39525 39526 * Martin Michlmayr for testing GCC on several architectures using the 39527 entire Debian archive. 39528 39529 * David Miller for his direction via the steering committee, lots of 39530 SPARC work, improvements in jump.c and interfacing with the Linux 39531 kernel developers. 39532 39533 * Gary Miller ported GCC to Charles River Data Systems machines. 39534 39535 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 39536 the entire libstdc++ testsuite namespace-compatible. 39537 39538 * Mark Mitchell for his direction via the steering committee, 39539 mountains of C++ work, load/store hoisting out of loops, alias 39540 analysis improvements, ISO C `restrict' support, and serving as 39541 release manager for GCC 3.x. 39542 39543 * Alan Modra for various GNU/Linux bits and testing. 39544 39545 * Toon Moene for his direction via the steering committee, Fortran 39546 maintenance, and his ongoing work to make us make Fortran run fast. 39547 39548 * Jason Molenda for major help in the care and feeding of all the 39549 services on the gcc.gnu.org (formerly egcs.cygnus.com) 39550 machine--mail, web services, ftp services, etc etc. Doing all 39551 this work on scrap paper and the backs of envelopes would have 39552 been... difficult. 39553 39554 * Catherine Moore for fixing various ugly problems we have sent her 39555 way, including the haifa bug which was killing the Alpha & PowerPC 39556 Linux kernels. 39557 39558 * Mike Moreton for his various Java patches. 39559 39560 * David Mosberger-Tang for various Alpha improvements, and for the 39561 initial IA-64 port. 39562 39563 * Stephen Moshier contributed the floating point emulator that 39564 assists in cross-compilation and permits support for floating 39565 point numbers wider than 64 bits and for ISO C99 support. 39566 39567 * Bill Moyer for his behind the scenes work on various issues. 39568 39569 * Philippe De Muyter for his work on the m68k port. 39570 39571 * Joseph S. Myers for his work on the PDP-11 port, format checking 39572 and ISO C99 support, and continuous emphasis on (and contributions 39573 to) documentation. 39574 39575 * Nathan Myers for his work on libstdc++-v3: architecture and 39576 authorship through the first three snapshots, including 39577 implementation of locale infrastructure, string, shadow C headers, 39578 and the initial project documentation (DESIGN, CHECKLIST, and so 39579 forth). Later, more work on MT-safe string and shadow headers. 39580 39581 * Felix Natter for documentation on porting libstdc++. 39582 39583 * Nathanael Nerode for cleaning up the configuration/build process. 39584 39585 * NeXT, Inc. donated the front end that supports the Objective-C 39586 language. 39587 39588 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 39589 the search engine setup, various documentation fixes and other 39590 small fixes. 39591 39592 * Geoff Noer for his work on getting cygwin native builds working. 39593 39594 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 39595 tracking web pages, GIMPLE tuples, and assorted fixes. 39596 39597 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 39598 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 39599 related infrastructure improvements. 39600 39601 * Alexandre Oliva for various build infrastructure improvements, 39602 scripts and amazing testing work, including keeping libtool issues 39603 sane and happy. 39604 39605 * Stefan Olsson for work on mt_alloc. 39606 39607 * Melissa O'Neill for various NeXT fixes. 39608 39609 * Rainer Orth for random MIPS work, including improvements to GCC's 39610 o32 ABI support, improvements to dejagnu's MIPS support, Java 39611 configuration clean-ups and porting work, etc. 39612 39613 * Hartmut Penner for work on the s390 port. 39614 39615 * Paul Petersen wrote the machine description for the Alliant FX/8. 39616 39617 * Alexandre Petit-Bianco for implementing much of the Java compiler 39618 and continued Java maintainership. 39619 39620 * Matthias Pfaller for major improvements to the NS32k port. 39621 39622 * Gerald Pfeifer for his direction via the steering committee, 39623 pointing out lots of problems we need to solve, maintenance of the 39624 web pages, and taking care of documentation maintenance in general. 39625 39626 * Andrew Pinski for processing bug reports by the dozen. 39627 39628 * Ovidiu Predescu for his work on the Objective-C front end and 39629 runtime libraries. 39630 39631 * Jerry Quinn for major performance improvements in C++ formatted 39632 I/O. 39633 39634 * Ken Raeburn for various improvements to checker, MIPS ports and 39635 various cleanups in the compiler. 39636 39637 * Rolf W. Rasmussen for hacking on AWT. 39638 39639 * David Reese of Sun Microsystems contributed to the Solaris on 39640 PowerPC port. 39641 39642 * Volker Reichelt for keeping up with the problem reports. 39643 39644 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 39645 hacking. 39646 39647 * Loren J. Rittle for improvements to libstdc++-v3 including the 39648 FreeBSD port, threading fixes, thread-related configury changes, 39649 critical threading documentation, and solutions to really tricky 39650 I/O problems, as well as keeping GCC properly working on FreeBSD 39651 and continuous testing. 39652 39653 * Craig Rodrigues for processing tons of bug reports. 39654 39655 * Ola Ro"nnerup for work on mt_alloc. 39656 39657 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 39658 39659 * David Ronis inspired and encouraged Craig to rewrite the G77 39660 documentation in texinfo format by contributing a first pass at a 39661 translation of the old `g77-0.5.16/f/DOC' file. 39662 39663 * Ken Rose for fixes to GCC's delay slot filling code. 39664 39665 * Paul Rubin wrote most of the preprocessor. 39666 39667 * Pe'tur Runo'lfsson for major performance improvements in C++ 39668 formatted I/O and large file support in C++ filebuf. 39669 39670 * Chip Salzenberg for libstdc++ patches and improvements to locales, 39671 traits, Makefiles, libio, libtool hackery, and "long long" support. 39672 39673 * Juha Sarlin for improvements to the H8 code generator. 39674 39675 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 39676 300. 39677 39678 * Roger Sayle for improvements to constant folding and GCC's RTL 39679 optimizers as well as for fixing numerous bugs. 39680 39681 * Bradley Schatz for his work on the GCJ FAQ. 39682 39683 * Peter Schauer wrote the code to allow debugging to work on the 39684 Alpha. 39685 39686 * William Schelter did most of the work on the Intel 80386 support. 39687 39688 * Tobias Schlu"ter for work on GNU Fortran. 39689 39690 * Bernd Schmidt for various code generation improvements and major 39691 work in the reload pass as well a serving as release manager for 39692 GCC 2.95.3. 39693 39694 * Peter Schmid for constant testing of libstdc++--especially 39695 application testing, going above and beyond what was requested for 39696 the release criteria--and libstdc++ header file tweaks. 39697 39698 * Jason Schroeder for jcf-dump patches. 39699 39700 * Andreas Schwab for his work on the m68k port. 39701 39702 * Lars Segerlund for work on GNU Fortran. 39703 39704 * Joel Sherrill for his direction via the steering committee, RTEMS 39705 contributions and RTEMS testing. 39706 39707 * Nathan Sidwell for many C++ fixes/improvements. 39708 39709 * Jeffrey Siegal for helping RMS with the original design of GCC, 39710 some code which handles the parse tree and RTL data structures, 39711 constant folding and help with the original VAX & m68k ports. 39712 39713 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 39714 from the LWG (thereby keeping GCC in line with updates from the 39715 ISO). 39716 39717 * Franz Sirl for his ongoing work with making the PPC port stable 39718 for GNU/Linux. 39719 39720 * Andrey Slepuhin for assorted AIX hacking. 39721 39722 * Trevor Smigiel for contributing the SPU port. 39723 39724 * Christopher Smith did the port for Convex machines. 39725 39726 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 39727 39728 * Randy Smith finished the Sun FPA support. 39729 39730 * Scott Snyder for queue, iterator, istream, and string fixes and 39731 libstdc++ testsuite entries. Also for providing the patch to G77 39732 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 39733 `LOGICAL*1'. 39734 39735 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 39736 39737 * Richard Stallman, for writing the original GCC and launching the 39738 GNU project. 39739 39740 * Jan Stein of the Chalmers Computer Society provided support for 39741 Genix, as well as part of the 32000 machine description. 39742 39743 * Nigel Stephens for various mips16 related fixes/improvements. 39744 39745 * Jonathan Stone wrote the machine description for the Pyramid 39746 computer. 39747 39748 * Graham Stott for various infrastructure improvements. 39749 39750 * John Stracke for his Java HTTP protocol fixes. 39751 39752 * Mike Stump for his Elxsi port, G++ contributions over the years 39753 and more recently his vxworks contributions 39754 39755 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 39756 39757 * Shigeya Suzuki for this fixes for the bsdi platforms. 39758 39759 * Ian Lance Taylor for his mips16 work, general configury hacking, 39760 fixincludes, etc. 39761 39762 * Holger Teutsch provided the support for the Clipper CPU. 39763 39764 * Gary Thomas for his ongoing work to make the PPC work for 39765 GNU/Linux. 39766 39767 * Philipp Thomas for random bug fixes throughout the compiler 39768 39769 * Jason Thorpe for thread support in libstdc++ on NetBSD. 39770 39771 * Kresten Krab Thorup wrote the run time support for the Objective-C 39772 language and the fantastic Java bytecode interpreter. 39773 39774 * Michael Tiemann for random bug fixes, the first instruction 39775 scheduler, initial C++ support, function integration, NS32k, SPARC 39776 and M88k machine description work, delay slot scheduling. 39777 39778 * Andreas Tobler for his work porting libgcj to Darwin. 39779 39780 * Teemu Torma for thread safe exception handling support. 39781 39782 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 39783 definitions, and of the VAX machine description. 39784 39785 * Daniel Towner and Hariharan Sandanagobalane contributed and 39786 maintain the picoChip port. 39787 39788 * Tom Tromey for internationalization support and for his many Java 39789 contributions and libgcj maintainership. 39790 39791 * Lassi Tuura for improvements to config.guess to determine HP 39792 processor types. 39793 39794 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 39795 39796 * Andy Vaught for the design and initial implementation of the GNU 39797 Fortran front end. 39798 39799 * Brent Verner for work with the libstdc++ cshadow files and their 39800 associated configure steps. 39801 39802 * Todd Vierling for contributions for NetBSD ports. 39803 39804 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 39805 guidance. 39806 39807 * Dean Wakerley for converting the install documentation from HTML 39808 to texinfo in time for GCC 3.0. 39809 39810 * Krister Walfridsson for random bug fixes. 39811 39812 * Feng Wang for contributions to GNU Fortran. 39813 39814 * Stephen M. Webb for time and effort on making libstdc++ shadow 39815 files work with the tricky Solaris 8+ headers, and for pushing the 39816 build-time header tree. 39817 39818 * John Wehle for various improvements for the x86 code generator, 39819 related infrastructure improvements to help x86 code generation, 39820 value range propagation and other work, WE32k port. 39821 39822 * Ulrich Weigand for work on the s390 port. 39823 39824 * Zack Weinberg for major work on cpplib and various other bug fixes. 39825 39826 * Matt Welsh for help with Linux Threads support in GCJ. 39827 39828 * Urban Widmark for help fixing java.io. 39829 39830 * Mark Wielaard for new Java library code and his work integrating 39831 with Classpath. 39832 39833 * Dale Wiles helped port GCC to the Tahoe. 39834 39835 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 39836 39837 * Jim Wilson for his direction via the steering committee, tackling 39838 hard problems in various places that nobody else wanted to work 39839 on, strength reduction and other loop optimizations. 39840 39841 * Paul Woegerer and Tal Agmon for the CRX port. 39842 39843 * Carlo Wood for various fixes. 39844 39845 * Tom Wood for work on the m88k port. 39846 39847 * Canqun Yang for work on GNU Fortran. 39848 39849 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 39850 description for the Tron architecture (specifically, the Gmicro). 39851 39852 * Kevin Zachmann helped port GCC to the Tahoe. 39853 39854 * Ayal Zaks for Swing Modulo Scheduling (SMS). 39855 39856 * Xiaoqiang Zhang for work on GNU Fortran. 39857 39858 * Gilles Zunino for help porting Java to Irix. 39859 39860 39861 The following people are recognized for their contributions to GNAT, 39862 the Ada front end of GCC: 39863 * Bernard Banner 39864 39865 * Romain Berrendonner 39866 39867 * Geert Bosch 39868 39869 * Emmanuel Briot 39870 39871 * Joel Brobecker 39872 39873 * Ben Brosgol 39874 39875 * Vincent Celier 39876 39877 * Arnaud Charlet 39878 39879 * Chien Chieng 39880 39881 * Cyrille Comar 39882 39883 * Cyrille Crozes 39884 39885 * Robert Dewar 39886 39887 * Gary Dismukes 39888 39889 * Robert Duff 39890 39891 * Ed Falis 39892 39893 * Ramon Fernandez 39894 39895 * Sam Figueroa 39896 39897 * Vasiliy Fofanov 39898 39899 * Michael Friess 39900 39901 * Franco Gasperoni 39902 39903 * Ted Giering 39904 39905 * Matthew Gingell 39906 39907 * Laurent Guerby 39908 39909 * Jerome Guitton 39910 39911 * Olivier Hainque 39912 39913 * Jerome Hugues 39914 39915 * Hristian Kirtchev 39916 39917 * Jerome Lambourg 39918 39919 * Bruno Leclerc 39920 39921 * Albert Lee 39922 39923 * Sean McNeil 39924 39925 * Javier Miranda 39926 39927 * Laurent Nana 39928 39929 * Pascal Obry 39930 39931 * Dong-Ik Oh 39932 39933 * Laurent Pautet 39934 39935 * Brett Porter 39936 39937 * Thomas Quinot 39938 39939 * Nicolas Roche 39940 39941 * Pat Rogers 39942 39943 * Jose Ruiz 39944 39945 * Douglas Rupp 39946 39947 * Sergey Rybin 39948 39949 * Gail Schenker 39950 39951 * Ed Schonberg 39952 39953 * Nicolas Setton 39954 39955 * Samuel Tardieu 39956 39957 39958 The following people are recognized for their contributions of new 39959 features, bug reports, testing and integration of classpath/libgcj for 39960 GCC version 4.1: 39961 * Lillian Angel for `JTree' implementation and lots Free Swing 39962 additions and bug fixes. 39963 39964 * Wolfgang Baer for `GapContent' bug fixes. 39965 39966 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 39967 event fixes, lots of Free Swing work including `JTable' editing. 39968 39969 * Stuart Ballard for RMI constant fixes. 39970 39971 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 39972 39973 * Gary Benson for `MessageFormat' fixes. 39974 39975 * Daniel Bonniot for `Serialization' fixes. 39976 39977 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 39978 and `DOM xml:id' support. 39979 39980 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 39981 39982 * Archie Cobbs for build fixes, VM interface updates, 39983 `URLClassLoader' updates. 39984 39985 * Kelley Cook for build fixes. 39986 39987 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 39988 39989 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 39990 and improvements. 39991 39992 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 39993 2D support. Lots of imageio framework additions, lots of AWT and 39994 Free Swing bug fixes. 39995 39996 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 39997 fixes, better `Proxy' support, bug fixes and IKVM integration. 39998 39999 * Santiago Gala for `AccessControlContext' fixes. 40000 40001 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 40002 improvements. 40003 40004 * David Gilbert for `basic' and `metal' icon and plaf support and 40005 lots of documenting, Lots of Free Swing and metal theme additions. 40006 `MetalIconFactory' implementation. 40007 40008 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 40009 40010 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 40011 build speedups. 40012 40013 * Kim Ho for `JFileChooser' implementation. 40014 40015 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 40016 updates, `Serialization' fixes, `Properties' XML support and 40017 generic branch work, VMIntegration guide update. 40018 40019 * Bastiaan Huisman for `TimeZone' bug fixing. 40020 40021 * Andreas Jaeger for mprec updates. 40022 40023 * Paul Jenner for better `-Werror' support. 40024 40025 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 40026 40027 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 40028 bug fixes all over. Lots of Free Swing work including styled text. 40029 40030 * Simon Kitching for `String' cleanups and optimization suggestions. 40031 40032 * Michael Koch for configuration fixes, `Locale' updates, bug and 40033 build fixes. 40034 40035 * Guilhem Lavaux for configuration, thread and channel fixes and 40036 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 40037 40038 * David Lichteblau for JCL support library global/local reference 40039 cleanups. 40040 40041 * Aaron Luchko for JDWP updates and documentation fixes. 40042 40043 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 40044 features. 40045 40046 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 40047 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 40048 and implementing the Qt4 peers. 40049 40050 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 40051 `SystemLogger' and `FileHandler' rotate implementations, NIO 40052 `FileChannel.map' support, security and policy updates. 40053 40054 * Bryce McKinlay for RMI work. 40055 40056 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 40057 testing and documenting. 40058 40059 * Kalle Olavi Niemitalo for build fixes. 40060 40061 * Rainer Orth for build fixes. 40062 40063 * Andrew Overholt for `File' locking fixes. 40064 40065 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 40066 40067 * Olga Rodimina for `MenuSelectionManager' implementation. 40068 40069 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 40070 40071 * Julian Scheid for documentation updates and gjdoc support. 40072 40073 * Christian Schlichtherle for zip fixes and cleanups. 40074 40075 * Robert Schuster for documentation updates and beans fixes, 40076 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 40077 and URL, AWT and Free Swing bug fixes. 40078 40079 * Keith Seitz for lots of JDWP work. 40080 40081 * Christian Thalinger for 64-bit cleanups, Configuration and VM 40082 interface fixes and `CACAO' integration, `fdlibm' updates. 40083 40084 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 40085 40086 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 40087 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 40088 40089 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 40090 integration. `Qt4' build infrastructure, `SHA1PRNG' and 40091 `GdkPixbugDecoder' updates. 40092 40093 * Tom Tromey for Eclipse integration, generics work, lots of bug 40094 fixes and gcj integration including coordinating The Big Merge. 40095 40096 * Mark Wielaard for bug fixes, packaging and release management, 40097 `Clipboard' implementation, system call interrupts and network 40098 timeouts and `GdkPixpufDecoder' fixes. 40099 40100 40101 In addition to the above, all of which also contributed time and 40102 energy in testing GCC, we would like to thank the following for their 40103 contributions to testing: 40104 40105 * Michael Abd-El-Malek 40106 40107 * Thomas Arend 40108 40109 * Bonzo Armstrong 40110 40111 * Steven Ashe 40112 40113 * Chris Baldwin 40114 40115 * David Billinghurst 40116 40117 * Jim Blandy 40118 40119 * Stephane Bortzmeyer 40120 40121 * Horst von Brand 40122 40123 * Frank Braun 40124 40125 * Rodney Brown 40126 40127 * Sidney Cadot 40128 40129 * Bradford Castalia 40130 40131 * Robert Clark 40132 40133 * Jonathan Corbet 40134 40135 * Ralph Doncaster 40136 40137 * Richard Emberson 40138 40139 * Levente Farkas 40140 40141 * Graham Fawcett 40142 40143 * Mark Fernyhough 40144 40145 * Robert A. French 40146 40147 * Jo"rgen Freyh 40148 40149 * Mark K. Gardner 40150 40151 * Charles-Antoine Gauthier 40152 40153 * Yung Shing Gene 40154 40155 * David Gilbert 40156 40157 * Simon Gornall 40158 40159 * Fred Gray 40160 40161 * John Griffin 40162 40163 * Patrik Hagglund 40164 40165 * Phil Hargett 40166 40167 * Amancio Hasty 40168 40169 * Takafumi Hayashi 40170 40171 * Bryan W. Headley 40172 40173 * Kevin B. Hendricks 40174 40175 * Joep Jansen 40176 40177 * Christian Joensson 40178 40179 * Michel Kern 40180 40181 * David Kidd 40182 40183 * Tobias Kuipers 40184 40185 * Anand Krishnaswamy 40186 40187 * A. O. V. Le Blanc 40188 40189 * llewelly 40190 40191 * Damon Love 40192 40193 * Brad Lucier 40194 40195 * Matthias Klose 40196 40197 * Martin Knoblauch 40198 40199 * Rick Lutowski 40200 40201 * Jesse Macnish 40202 40203 * Stefan Morrell 40204 40205 * Anon A. Mous 40206 40207 * Matthias Mueller 40208 40209 * Pekka Nikander 40210 40211 * Rick Niles 40212 40213 * Jon Olson 40214 40215 * Magnus Persson 40216 40217 * Chris Pollard 40218 40219 * Richard Polton 40220 40221 * Derk Reefman 40222 40223 * David Rees 40224 40225 * Paul Reilly 40226 40227 * Tom Reilly 40228 40229 * Torsten Rueger 40230 40231 * Danny Sadinoff 40232 40233 * Marc Schifer 40234 40235 * Erik Schnetter 40236 40237 * Wayne K. Schroll 40238 40239 * David Schuler 40240 40241 * Vin Shelton 40242 40243 * Tim Souder 40244 40245 * Adam Sulmicki 40246 40247 * Bill Thorson 40248 40249 * George Talbot 40250 40251 * Pedro A. M. Vazquez 40252 40253 * Gregory Warnes 40254 40255 * Ian Watson 40256 40257 * David E. Young 40258 40259 * And many others 40260 40261 And finally we'd like to thank everyone who uses the compiler, provides 40262 feedback and generally reminds us why we're doing this work in the first 40263 place. 40264 40265 40266 File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 40267 40268 Option Index 40269 ************ 40270 40271 GCC's command line options are indexed here without any initial `-' or 40272 `--'. Where an option has both positive and negative forms (such as 40273 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 40274 indexed under the most appropriate form; it may sometimes be useful to 40275 look up both forms. 40276 40277 [index] 40278 * Menu: 40279 40280 * ###: Overall Options. (line 204) 40281 * -fdump-statistics: Debugging Options. (line 632) 40282 * A: Preprocessor Options. 40283 (line 538) 40284 * all_load: Darwin Options. (line 112) 40285 * allowable_client: Darwin Options. (line 199) 40286 * ansi <1>: Non-bugs. (line 107) 40287 * ansi <2>: Other Builtins. (line 22) 40288 * ansi <3>: Preprocessor Options. 40289 (line 325) 40290 * ansi <4>: C Dialect Options. (line 11) 40291 * ansi: Standards. (line 16) 40292 * arch_errors_fatal: Darwin Options. (line 116) 40293 * aux-info: C Dialect Options. (line 140) 40294 * b: Target Options. (line 13) 40295 * B: Directory Options. (line 41) 40296 * bcopy-builtin: PDP-11 Options. (line 32) 40297 * Bdynamic: VxWorks Options. (line 22) 40298 * bind_at_load: Darwin Options. (line 120) 40299 * Bstatic: VxWorks Options. (line 22) 40300 * bundle: Darwin Options. (line 125) 40301 * bundle_loader: Darwin Options. (line 129) 40302 * c: Link Options. (line 20) 40303 * C: Preprocessor Options. 40304 (line 596) 40305 * c: Overall Options. (line 159) 40306 * client_name: Darwin Options. (line 199) 40307 * combine: Overall Options. (line 215) 40308 * compatibility_version: Darwin Options. (line 199) 40309 * coverage: Debugging Options. (line 281) 40310 * current_version: Darwin Options. (line 199) 40311 * D: Preprocessor Options. 40312 (line 33) 40313 * d: Debugging Options. (line 345) 40314 * dA: Debugging Options. (line 548) 40315 * dD <1>: Preprocessor Options. 40316 (line 570) 40317 * dD: Debugging Options. (line 552) 40318 * dead_strip: Darwin Options. (line 199) 40319 * dependency-file: Darwin Options. (line 199) 40320 * dH: Debugging Options. (line 556) 40321 * dI: Preprocessor Options. 40322 (line 579) 40323 * dM: Preprocessor Options. 40324 (line 554) 40325 * dm: Debugging Options. (line 559) 40326 * dN: Preprocessor Options. 40327 (line 576) 40328 * dP: Debugging Options. (line 568) 40329 * dp: Debugging Options. (line 563) 40330 * dU: Preprocessor Options. 40331 (line 583) 40332 * dumpmachine: Debugging Options. (line 961) 40333 * dumpspecs: Debugging Options. (line 969) 40334 * dumpversion: Debugging Options. (line 965) 40335 * dv: Debugging Options. (line 572) 40336 * dx: Debugging Options. (line 577) 40337 * dy: Debugging Options. (line 581) 40338 * dylib_file: Darwin Options. (line 199) 40339 * dylinker_install_name: Darwin Options. (line 199) 40340 * dynamic: Darwin Options. (line 199) 40341 * dynamiclib: Darwin Options. (line 133) 40342 * E <1>: Link Options. (line 20) 40343 * E: Overall Options. (line 180) 40344 * EB <1>: MIPS Options. (line 7) 40345 * EB: ARC Options. (line 12) 40346 * EL <1>: MIPS Options. (line 10) 40347 * EL: ARC Options. (line 9) 40348 * exported_symbols_list: Darwin Options. (line 199) 40349 * F: Darwin Options. (line 32) 40350 * fabi-version: C++ Dialect Options. 40351 (line 20) 40352 * falign-functions: Optimize Options. (line 1188) 40353 * falign-jumps: Optimize Options. (line 1238) 40354 * falign-labels: Optimize Options. (line 1206) 40355 * falign-loops: Optimize Options. (line 1224) 40356 * fargument-alias: Code Gen Options. (line 413) 40357 * fargument-noalias: Code Gen Options. (line 413) 40358 * fargument-noalias-anything: Code Gen Options. (line 413) 40359 * fargument-noalias-global: Code Gen Options. (line 413) 40360 * fassociative-math: Optimize Options. (line 1445) 40361 * fasynchronous-unwind-tables: Code Gen Options. (line 64) 40362 * fauto-inc-dec: Optimize Options. (line 455) 40363 * fbounds-check: Code Gen Options. (line 15) 40364 * fbranch-probabilities: Optimize Options. (line 1571) 40365 * fbranch-target-load-optimize: Optimize Options. (line 1679) 40366 * fbranch-target-load-optimize2: Optimize Options. (line 1685) 40367 * fbtr-bb-exclusive: Optimize Options. (line 1689) 40368 * fcall-saved: Code Gen Options. (line 262) 40369 * fcall-used: Code Gen Options. (line 248) 40370 * fcaller-saves: Optimize Options. (line 676) 40371 * fcheck-data-deps: Optimize Options. (line 901) 40372 * fcheck-new: C++ Dialect Options. 40373 (line 34) 40374 * fcommon: Variable Attributes. 40375 (line 105) 40376 * fcond-mismatch: C Dialect Options. (line 258) 40377 * fconserve-space: C++ Dialect Options. 40378 (line 44) 40379 * fconserve-stack: Optimize Options. (line 689) 40380 * fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 40381 (line 30) 40382 * fcprop-registers: Optimize Options. (line 1296) 40383 * fcrossjumping: Optimize Options. (line 448) 40384 * fcse-follow-jumps: Optimize Options. (line 376) 40385 * fcse-skip-blocks: Optimize Options. (line 385) 40386 * fcx-fortran-rules: Optimize Options. (line 1557) 40387 * fcx-limited-range: Optimize Options. (line 1545) 40388 * fdata-sections: Optimize Options. (line 1660) 40389 * fdbg-cnt: Debugging Options. (line 334) 40390 * fdbg-cnt-list: Debugging Options. (line 331) 40391 * fdce: Optimize Options. (line 461) 40392 * fdebug-prefix-map: Debugging Options. (line 228) 40393 * fdelayed-branch: Optimize Options. (line 557) 40394 * fdelete-null-pointer-checks: Optimize Options. (line 484) 40395 * fdiagnostics-show-location: Language Independent Options. 40396 (line 21) 40397 * fdiagnostics-show-option: Language Independent Options. 40398 (line 36) 40399 * fdirectives-only: Preprocessor Options. 40400 (line 446) 40401 * fdollars-in-identifiers <1>: Interoperation. (line 146) 40402 * fdollars-in-identifiers: Preprocessor Options. 40403 (line 468) 40404 * fdse: Optimize Options. (line 465) 40405 * fdump-class-hierarchy: Debugging Options. (line 606) 40406 * fdump-ipa: Debugging Options. (line 614) 40407 * fdump-noaddr: Debugging Options. (line 584) 40408 * fdump-rtl-alignments: Debugging Options. (line 360) 40409 * fdump-rtl-all: Debugging Options. (line 545) 40410 * fdump-rtl-asmcons: Debugging Options. (line 363) 40411 * fdump-rtl-auto_inc_dec: Debugging Options. (line 367) 40412 * fdump-rtl-barriers: Debugging Options. (line 371) 40413 * fdump-rtl-bbpart: Debugging Options. (line 374) 40414 * fdump-rtl-bbro: Debugging Options. (line 377) 40415 * fdump-rtl-btl2: Debugging Options. (line 381) 40416 * fdump-rtl-bypass: Debugging Options. (line 385) 40417 * fdump-rtl-ce1: Debugging Options. (line 396) 40418 * fdump-rtl-ce2: Debugging Options. (line 396) 40419 * fdump-rtl-ce3: Debugging Options. (line 396) 40420 * fdump-rtl-combine: Debugging Options. (line 388) 40421 * fdump-rtl-compgotos: Debugging Options. (line 391) 40422 * fdump-rtl-cprop_hardreg: Debugging Options. (line 400) 40423 * fdump-rtl-csa: Debugging Options. (line 403) 40424 * fdump-rtl-cse1: Debugging Options. (line 407) 40425 * fdump-rtl-cse2: Debugging Options. (line 407) 40426 * fdump-rtl-dbr: Debugging Options. (line 414) 40427 * fdump-rtl-dce: Debugging Options. (line 411) 40428 * fdump-rtl-dce1: Debugging Options. (line 418) 40429 * fdump-rtl-dce2: Debugging Options. (line 418) 40430 * fdump-rtl-dfinish: Debugging Options. (line 542) 40431 * fdump-rtl-dfinit: Debugging Options. (line 542) 40432 * fdump-rtl-eh: Debugging Options. (line 422) 40433 * fdump-rtl-eh_ranges: Debugging Options. (line 425) 40434 * fdump-rtl-expand: Debugging Options. (line 428) 40435 * fdump-rtl-fwprop1: Debugging Options. (line 432) 40436 * fdump-rtl-fwprop2: Debugging Options. (line 432) 40437 * fdump-rtl-gcse1: Debugging Options. (line 437) 40438 * fdump-rtl-gcse2: Debugging Options. (line 437) 40439 * fdump-rtl-init-regs: Debugging Options. (line 441) 40440 * fdump-rtl-initvals: Debugging Options. (line 444) 40441 * fdump-rtl-into_cfglayout: Debugging Options. (line 447) 40442 * fdump-rtl-ira: Debugging Options. (line 450) 40443 * fdump-rtl-jump: Debugging Options. (line 453) 40444 * fdump-rtl-loop2: Debugging Options. (line 456) 40445 * fdump-rtl-mach: Debugging Options. (line 460) 40446 * fdump-rtl-mode_sw: Debugging Options. (line 464) 40447 * fdump-rtl-outof_cfglayout: Debugging Options. (line 470) 40448 * fdump-rtl-peephole2: Debugging Options. (line 473) 40449 * fdump-rtl-postreload: Debugging Options. (line 476) 40450 * fdump-rtl-pro_and_epilogue: Debugging Options. (line 479) 40451 * fdump-rtl-regclass: Debugging Options. (line 542) 40452 * fdump-rtl-regmove: Debugging Options. (line 482) 40453 * fdump-rtl-rnreg: Debugging Options. (line 467) 40454 * fdump-rtl-sched1: Debugging Options. (line 486) 40455 * fdump-rtl-sched2: Debugging Options. (line 486) 40456 * fdump-rtl-see: Debugging Options. (line 490) 40457 * fdump-rtl-seqabstr: Debugging Options. (line 493) 40458 * fdump-rtl-shorten: Debugging Options. (line 496) 40459 * fdump-rtl-sibling: Debugging Options. (line 499) 40460 * fdump-rtl-sms: Debugging Options. (line 512) 40461 * fdump-rtl-split1: Debugging Options. (line 506) 40462 * fdump-rtl-split2: Debugging Options. (line 506) 40463 * fdump-rtl-split3: Debugging Options. (line 506) 40464 * fdump-rtl-split4: Debugging Options. (line 506) 40465 * fdump-rtl-split5: Debugging Options. (line 506) 40466 * fdump-rtl-stack: Debugging Options. (line 516) 40467 * fdump-rtl-subreg1: Debugging Options. (line 522) 40468 * fdump-rtl-subreg2: Debugging Options. (line 522) 40469 * fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 542) 40470 * fdump-rtl-subregs_of_mode_init: Debugging Options. (line 542) 40471 * fdump-rtl-unshare: Debugging Options. (line 526) 40472 * fdump-rtl-vartrack: Debugging Options. (line 529) 40473 * fdump-rtl-vregs: Debugging Options. (line 532) 40474 * fdump-rtl-web: Debugging Options. (line 535) 40475 * fdump-translation-unit: Debugging Options. (line 597) 40476 * fdump-tree: Debugging Options. (line 643) 40477 * fdump-tree-alias: Debugging Options. (line 728) 40478 * fdump-tree-all: Debugging Options. (line 813) 40479 * fdump-tree-ccp: Debugging Options. (line 732) 40480 * fdump-tree-cfg: Debugging Options. (line 708) 40481 * fdump-tree-ch: Debugging Options. (line 720) 40482 * fdump-tree-copyprop: Debugging Options. (line 748) 40483 * fdump-tree-copyrename: Debugging Options. (line 794) 40484 * fdump-tree-dce: Debugging Options. (line 756) 40485 * fdump-tree-dom: Debugging Options. (line 774) 40486 * fdump-tree-dse: Debugging Options. (line 779) 40487 * fdump-tree-forwprop: Debugging Options. (line 789) 40488 * fdump-tree-fre: Debugging Options. (line 744) 40489 * fdump-tree-gimple: Debugging Options. (line 703) 40490 * fdump-tree-mudflap: Debugging Options. (line 760) 40491 * fdump-tree-nrv: Debugging Options. (line 799) 40492 * fdump-tree-phiopt: Debugging Options. (line 784) 40493 * fdump-tree-pre: Debugging Options. (line 740) 40494 * fdump-tree-sink: Debugging Options. (line 770) 40495 * fdump-tree-sra: Debugging Options. (line 765) 40496 * fdump-tree-ssa: Debugging Options. (line 724) 40497 * fdump-tree-store_copyprop: Debugging Options. (line 752) 40498 * fdump-tree-storeccp: Debugging Options. (line 736) 40499 * fdump-tree-vcg: Debugging Options. (line 712) 40500 * fdump-tree-vect: Debugging Options. (line 804) 40501 * fdump-tree-vrp: Debugging Options. (line 809) 40502 * fdump-unnumbered: Debugging Options. (line 590) 40503 * fdwarf2-cfi-asm: Debugging Options. (line 232) 40504 * fearly-inlining: Optimize Options. (line 220) 40505 * feliminate-dwarf2-dups: Debugging Options. (line 140) 40506 * feliminate-unused-debug-symbols: Debugging Options. (line 52) 40507 * feliminate-unused-debug-types: Debugging Options. (line 973) 40508 * fenable-icf-debug: Debugging Options. (line 215) 40509 * fexceptions: Code Gen Options. (line 34) 40510 * fexec-charset: Preprocessor Options. 40511 (line 495) 40512 * fexpensive-optimizations: Optimize Options. (line 497) 40513 * fextended-identifiers: Preprocessor Options. 40514 (line 471) 40515 * ffast-math: Optimize Options. (line 1396) 40516 * ffinite-math-only: Optimize Options. (line 1469) 40517 * ffix-and-continue: Darwin Options. (line 106) 40518 * ffixed: Code Gen Options. (line 236) 40519 * ffloat-store <1>: Disappointments. (line 77) 40520 * ffloat-store: Optimize Options. (line 1382) 40521 * ffor-scope: C++ Dialect Options. 40522 (line 86) 40523 * fforward-propagate: Optimize Options. (line 149) 40524 * ffreestanding <1>: Function Attributes. 40525 (line 412) 40526 * ffreestanding <2>: Warning Options. (line 195) 40527 * ffreestanding <3>: C Dialect Options. (line 211) 40528 * ffreestanding: Standards. (line 84) 40529 * ffriend-injection: C++ Dialect Options. 40530 (line 56) 40531 * ffunction-sections: Optimize Options. (line 1660) 40532 * fgcse: Optimize Options. (line 399) 40533 * fgcse-after-reload: Optimize Options. (line 435) 40534 * fgcse-las: Optimize Options. (line 428) 40535 * fgcse-lm: Optimize Options. (line 410) 40536 * fgcse-sm: Optimize Options. (line 419) 40537 * fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 40538 (line 39) 40539 * fgnu89-inline: C Dialect Options. (line 120) 40540 * fhosted: C Dialect Options. (line 204) 40541 * fif-conversion: Optimize Options. (line 469) 40542 * fif-conversion2: Optimize Options. (line 478) 40543 * filelist: Darwin Options. (line 199) 40544 * findirect-data: Darwin Options. (line 106) 40545 * findirect-inlining: Optimize Options. (line 193) 40546 * finhibit-size-directive: Code Gen Options. (line 158) 40547 * finline-functions: Optimize Options. (line 201) 40548 * finline-functions-called-once: Optimize Options. (line 212) 40549 * finline-limit: Optimize Options. (line 230) 40550 * finline-small-functions: Optimize Options. (line 185) 40551 * finput-charset: Preprocessor Options. 40552 (line 508) 40553 * finstrument-functions <1>: Function Attributes. 40554 (line 712) 40555 * finstrument-functions: Code Gen Options. (line 292) 40556 * finstrument-functions-exclude-file-list: Code Gen Options. (line 329) 40557 * finstrument-functions-exclude-function-list: Code Gen Options. 40558 (line 347) 40559 * fipa-cp: Optimize Options. (line 742) 40560 * fipa-cp-clone: Optimize Options. (line 750) 40561 * fipa-matrix-reorg: Optimize Options. (line 760) 40562 * fipa-pta: Optimize Options. (line 738) 40563 * fipa-pure-const: Optimize Options. (line 715) 40564 * fipa-reference: Optimize Options. (line 719) 40565 * fipa-struct-reorg: Optimize Options. (line 723) 40566 * fira-coalesce: Optimize Options. (line 536) 40567 * fira-verbose: Optimize Options. (line 552) 40568 * fivopts: Optimize Options. (line 937) 40569 * fkeep-inline-functions <1>: Inline. (line 51) 40570 * fkeep-inline-functions: Optimize Options. (line 256) 40571 * fkeep-static-consts: Optimize Options. (line 263) 40572 * flat_namespace: Darwin Options. (line 199) 40573 * flax-vector-conversions: C Dialect Options. (line 263) 40574 * fleading-underscore: Code Gen Options. (line 430) 40575 * fmem-report: Debugging Options. (line 256) 40576 * fmerge-all-constants: Optimize Options. (line 282) 40577 * fmerge-constants: Optimize Options. (line 272) 40578 * fmerge-debug-strings: Debugging Options. (line 220) 40579 * fmessage-length: Language Independent Options. 40580 (line 15) 40581 * fmodulo-sched: Optimize Options. (line 293) 40582 * fmodulo-sched-allow-regmoves: Optimize Options. (line 298) 40583 * fmove-loop-invariants: Optimize Options. (line 1650) 40584 * fms-extensions <1>: Unnamed Fields. (line 37) 40585 * fms-extensions <2>: C++ Dialect Options. 40586 (line 121) 40587 * fms-extensions: C Dialect Options. (line 229) 40588 * fmudflap: Optimize Options. (line 338) 40589 * fmudflapir: Optimize Options. (line 338) 40590 * fmudflapth: Optimize Options. (line 338) 40591 * fnext-runtime: Objective-C and Objective-C++ Dialect Options. 40592 (line 43) 40593 * fno-access-control: C++ Dialect Options. 40594 (line 30) 40595 * fno-asm: C Dialect Options. (line 156) 40596 * fno-branch-count-reg: Optimize Options. (line 305) 40597 * fno-builtin <1>: Other Builtins. (line 14) 40598 * fno-builtin <2>: Function Attributes. 40599 (line 412) 40600 * fno-builtin <3>: Warning Options. (line 195) 40601 * fno-builtin: C Dialect Options. (line 170) 40602 * fno-common <1>: Variable Attributes. 40603 (line 105) 40604 * fno-common: Code Gen Options. (line 135) 40605 * fno-default-inline <1>: Inline. (line 71) 40606 * fno-default-inline <2>: Optimize Options. (line 134) 40607 * fno-default-inline: C++ Dialect Options. 40608 (line 262) 40609 * fno-defer-pop: Optimize Options. (line 141) 40610 * fno-dwarf2-cfi-asm: Debugging Options. (line 232) 40611 * fno-elide-constructors: C++ Dialect Options. 40612 (line 69) 40613 * fno-enforce-eh-specs: C++ Dialect Options. 40614 (line 75) 40615 * fno-for-scope: C++ Dialect Options. 40616 (line 86) 40617 * fno-function-cse: Optimize Options. (line 315) 40618 * fno-gnu-keywords: C++ Dialect Options. 40619 (line 98) 40620 * fno-guess-branch-probability: Optimize Options. (line 1060) 40621 * fno-ident: Code Gen Options. (line 155) 40622 * fno-implement-inlines <1>: C++ Interface. (line 75) 40623 * fno-implement-inlines: C++ Dialect Options. 40624 (line 115) 40625 * fno-implicit-inline-templates: C++ Dialect Options. 40626 (line 109) 40627 * fno-implicit-templates <1>: Template Instantiation. 40628 (line 87) 40629 * fno-implicit-templates: C++ Dialect Options. 40630 (line 103) 40631 * fno-inline: Optimize Options. (line 179) 40632 * fno-ira-share-save-slots: Optimize Options. (line 540) 40633 * fno-ira-share-spill-slots: Optimize Options. (line 546) 40634 * fno-jump-tables: Code Gen Options. (line 228) 40635 * fno-math-errno: Optimize Options. (line 1410) 40636 * fno-merge-debug-strings: Debugging Options. (line 220) 40637 * fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 40638 (line 49) 40639 * fno-nonansi-builtins: C++ Dialect Options. 40640 (line 126) 40641 * fno-operator-names: C++ Dialect Options. 40642 (line 131) 40643 * fno-optional-diags: C++ Dialect Options. 40644 (line 135) 40645 * fno-peephole: Optimize Options. (line 1051) 40646 * fno-peephole2: Optimize Options. (line 1051) 40647 * fno-rtti: C++ Dialect Options. 40648 (line 150) 40649 * fno-sched-interblock: Optimize Options. (line 583) 40650 * fno-sched-spec: Optimize Options. (line 588) 40651 * fno-show-column: Preprocessor Options. 40652 (line 533) 40653 * fno-signed-bitfields: C Dialect Options. (line 296) 40654 * fno-signed-zeros: Optimize Options. (line 1481) 40655 * fno-stack-limit: Code Gen Options. (line 396) 40656 * fno-threadsafe-statics: C++ Dialect Options. 40657 (line 172) 40658 * fno-toplevel-reorder: Optimize Options. (line 1258) 40659 * fno-trapping-math: Optimize Options. (line 1491) 40660 * fno-unsigned-bitfields: C Dialect Options. (line 296) 40661 * fno-use-cxa-get-exception-ptr: C++ Dialect Options. 40662 (line 185) 40663 * fno-weak: C++ Dialect Options. 40664 (line 247) 40665 * fno-working-directory: Preprocessor Options. 40666 (line 518) 40667 * fno-zero-initialized-in-bss: Optimize Options. (line 326) 40668 * fnon-call-exceptions: Code Gen Options. (line 48) 40669 * fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 40670 (line 56) 40671 * fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 40672 (line 81) 40673 * fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 40674 (line 85) 40675 * fobjc-gc: Objective-C and Objective-C++ Dialect Options. 40676 (line 170) 40677 * fomit-frame-pointer: Optimize Options. (line 158) 40678 * fopenmp: C Dialect Options. (line 221) 40679 * foptimize-register-move: Optimize Options. (line 504) 40680 * foptimize-sibling-calls: Optimize Options. (line 174) 40681 * force_cpusubtype_ALL: Darwin Options. (line 138) 40682 * force_flat_namespace: Darwin Options. (line 199) 40683 * fpack-struct: Code Gen Options. (line 279) 40684 * fpcc-struct-return <1>: Incompatibilities. (line 170) 40685 * fpcc-struct-return: Code Gen Options. (line 70) 40686 * fpch-deps: Preprocessor Options. 40687 (line 281) 40688 * fpch-preprocess: Preprocessor Options. 40689 (line 289) 40690 * fpeel-loops: Optimize Options. (line 1642) 40691 * fpermissive: C++ Dialect Options. 40692 (line 140) 40693 * fPIC: Code Gen Options. (line 205) 40694 * fpic: Code Gen Options. (line 184) 40695 * fPIE: Code Gen Options. (line 218) 40696 * fpie: Code Gen Options. (line 218) 40697 * fpost-ipa-mem-report: Debugging Options. (line 262) 40698 * fpre-ipa-mem-report: Debugging Options. (line 260) 40699 * fpredictive-commoning: Optimize Options. (line 1033) 40700 * fprefetch-loop-arrays: Optimize Options. (line 1040) 40701 * fpreprocessed: Preprocessor Options. 40702 (line 476) 40703 * fprofile-arcs <1>: Other Builtins. (line 242) 40704 * fprofile-arcs: Debugging Options. (line 266) 40705 * fprofile-correction: Optimize Options. (line 1303) 40706 * fprofile-dir: Optimize Options. (line 1310) 40707 * fprofile-generate: Optimize Options. (line 1320) 40708 * fprofile-use: Optimize Options. (line 1333) 40709 * fprofile-values: Optimize Options. (line 1590) 40710 * frandom-string: Debugging Options. (line 842) 40711 * freciprocal-math: Optimize Options. (line 1460) 40712 * frecord-gcc-switches: Code Gen Options. (line 174) 40713 * freg-struct-return: Code Gen Options. (line 88) 40714 * fregmove: Optimize Options. (line 504) 40715 * frename-registers: Optimize Options. (line 1609) 40716 * freorder-blocks: Optimize Options. (line 1077) 40717 * freorder-blocks-and-partition: Optimize Options. (line 1083) 40718 * freorder-functions: Optimize Options. (line 1094) 40719 * freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 40720 (line 174) 40721 * frepo <1>: Template Instantiation. 40722 (line 62) 40723 * frepo: C++ Dialect Options. 40724 (line 145) 40725 * frerun-cse-after-loop: Optimize Options. (line 393) 40726 * freschedule-modulo-scheduled-loops: Optimize Options. (line 652) 40727 * fripa: Optimize Options. (line 1348) 40728 * fripa-disallow-opt-mismatch: Optimize Options. (line 1356) 40729 * fripa-verbose: Optimize Options. (line 1363) 40730 * frounding-math: Optimize Options. (line 1506) 40731 * fsample-profile: Optimize Options. (line 1369) 40732 * fsample-profile-aggreagate-using: Optimize Options. (line 1374) 40733 * fsched-spec-load: Optimize Options. (line 593) 40734 * fsched-spec-load-dangerous: Optimize Options. (line 598) 40735 * fsched-stalled-insns: Optimize Options. (line 604) 40736 * fsched-stalled-insns-dep: Optimize Options. (line 614) 40737 * fsched-verbose: Debugging Options. (line 852) 40738 * fsched2-use-superblocks: Optimize Options. (line 624) 40739 * fsched2-use-traces: Optimize Options. (line 635) 40740 * fschedule-insns: Optimize Options. (line 564) 40741 * fschedule-insns2: Optimize Options. (line 574) 40742 * fsection-anchors: Optimize Options. (line 1705) 40743 * fsee: Optimize Options. (line 647) 40744 * fsel-sched-pipelining: Optimize Options. (line 666) 40745 * fsel-sched-pipelining-outer-loops: Optimize Options. (line 671) 40746 * fselective-scheduling: Optimize Options. (line 658) 40747 * fselective-scheduling2: Optimize Options. (line 662) 40748 * fshort-double: Code Gen Options. (line 117) 40749 * fshort-enums <1>: Non-bugs. (line 42) 40750 * fshort-enums <2>: Type Attributes. (line 113) 40751 * fshort-enums <3>: Structures unions enumerations and bit-fields implementation. 40752 (line 43) 40753 * fshort-enums: Code Gen Options. (line 106) 40754 * fshort-wchar: Code Gen Options. (line 125) 40755 * fsignaling-nans: Optimize Options. (line 1526) 40756 * fsigned-bitfields <1>: Non-bugs. (line 57) 40757 * fsigned-bitfields: C Dialect Options. (line 296) 40758 * fsigned-char <1>: Characters implementation. 40759 (line 31) 40760 * fsigned-char: C Dialect Options. (line 286) 40761 * fsingle-precision-constant: Optimize Options. (line 1541) 40762 * fsplit-ivs-in-unroller: Optimize Options. (line 1014) 40763 * fsplit-wide-types: Optimize Options. (line 368) 40764 * fstack-check: Code Gen Options. (line 357) 40765 * fstack-limit-register: Code Gen Options. (line 396) 40766 * fstack-limit-symbol: Code Gen Options. (line 396) 40767 * fstack-protector: Optimize Options. (line 1693) 40768 * fstack-protector-all: Optimize Options. (line 1702) 40769 * fstats: C++ Dialect Options. 40770 (line 160) 40771 * fstrict-aliasing: Optimize Options. (line 1107) 40772 * fstrict-overflow: Optimize Options. (line 1153) 40773 * fsyntax-only: Warning Options. (line 14) 40774 * ftabstop: Preprocessor Options. 40775 (line 489) 40776 * ftemplate-depth: C++ Dialect Options. 40777 (line 165) 40778 * ftest-coverage: Debugging Options. (line 322) 40779 * fthread-jumps: Optimize Options. (line 359) 40780 * ftime-report: Debugging Options. (line 252) 40781 * ftls-model: Code Gen Options. (line 441) 40782 * ftracer: Optimize Options. (line 997) 40783 * ftrapv: Code Gen Options. (line 22) 40784 * ftree-builtin-call-dce: Optimize Options. (line 788) 40785 * ftree-ccp: Optimize Options. (line 774) 40786 * ftree-ch: Optimize Options. (line 808) 40787 * ftree-copy-prop: Optimize Options. (line 710) 40788 * ftree-copyrename: Optimize Options. (line 957) 40789 * ftree-dce: Optimize Options. (line 784) 40790 * ftree-dominator-opts: Optimize Options. (line 794) 40791 * ftree-dse: Optimize Options. (line 801) 40792 * ftree-fre: Optimize Options. (line 703) 40793 * ftree-loop-im: Optimize Options. (line 922) 40794 * ftree-loop-ivcanon: Optimize Options. (line 931) 40795 * ftree-loop-linear: Optimize Options. (line 823) 40796 * ftree-loop-optimize: Optimize Options. (line 819) 40797 * ftree-lr-shrinking: Optimize Options. (line 815) 40798 * ftree-parallelize-loops: Optimize Options. (line 942) 40799 * ftree-pre: Optimize Options. (line 699) 40800 * ftree-reassoc: Optimize Options. (line 695) 40801 * ftree-sink: Optimize Options. (line 770) 40802 * ftree-sra: Optimize Options. (line 951) 40803 * ftree-ter: Optimize Options. (line 964) 40804 * ftree-vect-loop-version: Optimize Options. (line 976) 40805 * ftree-vectorize: Optimize Options. (line 972) 40806 * ftree-vectorizer-verbose: Debugging Options. (line 817) 40807 * ftree-vrp: Optimize Options. (line 988) 40808 * funit-at-a-time: Optimize Options. (line 1251) 40809 * funroll-all-loops: Optimize Options. (line 1008) 40810 * funroll-loops: Optimize Options. (line 1002) 40811 * funsafe-loop-optimizations: Optimize Options. (line 440) 40812 * funsafe-math-optimizations: Optimize Options. (line 1428) 40813 * funsigned-bitfields <1>: Non-bugs. (line 57) 40814 * funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 40815 (line 17) 40816 * funsigned-bitfields: C Dialect Options. (line 296) 40817 * funsigned-char <1>: Characters implementation. 40818 (line 31) 40819 * funsigned-char: C Dialect Options. (line 268) 40820 * funswitch-loops: Optimize Options. (line 1654) 40821 * funwind-tables: Code Gen Options. (line 57) 40822 * fuse-cxa-atexit: C++ Dialect Options. 40823 (line 178) 40824 * fvar-tracking: Debugging Options. (line 897) 40825 * fvariable-expansion-in-unroller: Optimize Options. (line 1028) 40826 * fvect-cost-model: Optimize Options. (line 985) 40827 * fverbose-asm: Code Gen Options. (line 165) 40828 * fvisibility: Code Gen Options. (line 449) 40829 * fvisibility-inlines-hidden: C++ Dialect Options. 40830 (line 190) 40831 * fvisibility-ms-compat: C++ Dialect Options. 40832 (line 218) 40833 * fvpt: Optimize Options. (line 1600) 40834 * fweb: Optimize Options. (line 1270) 40835 * fwhole-program: Optimize Options. (line 1281) 40836 * fwide-exec-charset: Preprocessor Options. 40837 (line 500) 40838 * fworking-directory: Preprocessor Options. 40839 (line 518) 40840 * fwrapv: Code Gen Options. (line 26) 40841 * fzero-link: Objective-C and Objective-C++ Dialect Options. 40842 (line 184) 40843 * G <1>: System V Options. (line 10) 40844 * G <2>: RS/6000 and PowerPC Options. 40845 (line 663) 40846 * G <3>: MIPS Options. (line 314) 40847 * G: M32R/D Options. (line 57) 40848 * g: Debugging Options. (line 10) 40849 * gcoff: Debugging Options. (line 70) 40850 * gdwarf-2: Debugging Options. (line 88) 40851 * gdwarf-4: Debugging Options. (line 95) 40852 * gen-decls: Objective-C and Objective-C++ Dialect Options. 40853 (line 194) 40854 * gfull: Darwin Options. (line 71) 40855 * ggdb: Debugging Options. (line 38) 40856 * gmlt: Debugging Options. (line 136) 40857 * gnu-ld: HPPA Options. (line 111) 40858 * gstabs: Debugging Options. (line 44) 40859 * gstabs+: Debugging Options. (line 64) 40860 * gused: Darwin Options. (line 66) 40861 * gvms: Debugging Options. (line 103) 40862 * gxcoff: Debugging Options. (line 75) 40863 * gxcoff+: Debugging Options. (line 80) 40864 * H: Preprocessor Options. 40865 (line 651) 40866 * headerpad_max_install_names: Darwin Options. (line 199) 40867 * help <1>: Preprocessor Options. 40868 (line 643) 40869 * help: Overall Options. (line 231) 40870 * hp-ld: HPPA Options. (line 123) 40871 * I <1>: Directory Options. (line 10) 40872 * I: Preprocessor Options. 40873 (line 64) 40874 * I- <1>: Directory Options. (line 107) 40875 * I-: Preprocessor Options. 40876 (line 362) 40877 * idirafter: Preprocessor Options. 40878 (line 404) 40879 * iframework: Darwin Options. (line 59) 40880 * imacros: Preprocessor Options. 40881 (line 395) 40882 * image_base: Darwin Options. (line 199) 40883 * imultilib: Preprocessor Options. 40884 (line 427) 40885 * include: Preprocessor Options. 40886 (line 384) 40887 * init: Darwin Options. (line 199) 40888 * install_name: Darwin Options. (line 199) 40889 * iprefix: Preprocessor Options. 40890 (line 411) 40891 * iquote <1>: Directory Options. (line 31) 40892 * iquote: Preprocessor Options. 40893 (line 439) 40894 * isysroot: Preprocessor Options. 40895 (line 423) 40896 * isystem: Preprocessor Options. 40897 (line 431) 40898 * iwithprefix: Preprocessor Options. 40899 (line 417) 40900 * iwithprefixbefore: Preprocessor Options. 40901 (line 417) 40902 * keep_private_externs: Darwin Options. (line 199) 40903 * L: Directory Options. (line 37) 40904 * l: Link Options. (line 26) 40905 * lobjc: Link Options. (line 53) 40906 * M: Preprocessor Options. 40907 (line 172) 40908 * m1: SH Options. (line 9) 40909 * m10: PDP-11 Options. (line 29) 40910 * m128bit-long-double: i386 and x86-64 Options. 40911 (line 265) 40912 * m16-bit: CRIS Options. (line 64) 40913 * m2: SH Options. (line 12) 40914 * m210: MCore Options. (line 43) 40915 * m3: SH Options. (line 18) 40916 * m31: S/390 and zSeries Options. 40917 (line 87) 40918 * m32 <1>: SPARC Options. (line 191) 40919 * m32 <2>: RS/6000 and PowerPC Options. 40920 (line 252) 40921 * m32: i386 and x86-64 Options. 40922 (line 612) 40923 * m32-bit: CRIS Options. (line 64) 40924 * m32r: M32R/D Options. (line 15) 40925 * m32r2: M32R/D Options. (line 9) 40926 * m32rx: M32R/D Options. (line 12) 40927 * m340: MCore Options. (line 43) 40928 * m3dnow: i386 and x86-64 Options. 40929 (line 435) 40930 * m3e: SH Options. (line 21) 40931 * m4: SH Options. (line 35) 40932 * m4-nofpu: SH Options. (line 24) 40933 * m4-single: SH Options. (line 31) 40934 * m4-single-only: SH Options. (line 27) 40935 * m40: PDP-11 Options. (line 23) 40936 * m45: PDP-11 Options. (line 26) 40937 * m4a: SH Options. (line 50) 40938 * m4a-nofpu: SH Options. (line 38) 40939 * m4a-single: SH Options. (line 46) 40940 * m4a-single-only: SH Options. (line 42) 40941 * m4al: SH Options. (line 53) 40942 * m4byte-functions: MCore Options. (line 27) 40943 * m5200: M680x0 Options. (line 143) 40944 * m5206e: M680x0 Options. (line 152) 40945 * m528x: M680x0 Options. (line 156) 40946 * m5307: M680x0 Options. (line 160) 40947 * m5407: M680x0 Options. (line 164) 40948 * m64 <1>: SPARC Options. (line 191) 40949 * m64 <2>: S/390 and zSeries Options. 40950 (line 87) 40951 * m64 <3>: RS/6000 and PowerPC Options. 40952 (line 252) 40953 * m64: i386 and x86-64 Options. 40954 (line 612) 40955 * m68000: M680x0 Options. (line 91) 40956 * m68010: M680x0 Options. (line 99) 40957 * m68020: M680x0 Options. (line 105) 40958 * m68020-40: M680x0 Options. (line 174) 40959 * m68020-60: M680x0 Options. (line 183) 40960 * m68030: M680x0 Options. (line 110) 40961 * m68040: M680x0 Options. (line 115) 40962 * m68060: M680x0 Options. (line 124) 40963 * m6811: M68hc1x Options. (line 13) 40964 * m6812: M68hc1x Options. (line 18) 40965 * m68881: M680x0 Options. (line 193) 40966 * m68hc11: M68hc1x Options. (line 13) 40967 * m68hc12: M68hc1x Options. (line 18) 40968 * m68hcs12: M68hc1x Options. (line 23) 40969 * m68S12: M68hc1x Options. (line 23) 40970 * m8-bit: CRIS Options. (line 64) 40971 * m96bit-long-double: i386 and x86-64 Options. 40972 (line 265) 40973 * mabi <1>: RS/6000 and PowerPC Options. 40974 (line 549) 40975 * mabi: ARM Options. (line 10) 40976 * mabi-mmixware: MMIX Options. (line 20) 40977 * mabi=32: MIPS Options. (line 129) 40978 * mabi=64: MIPS Options. (line 129) 40979 * mabi=eabi: MIPS Options. (line 129) 40980 * mabi=gnu: MMIX Options. (line 20) 40981 * mabi=ibmlongdouble: RS/6000 and PowerPC Options. 40982 (line 562) 40983 * mabi=ieeelongdouble: RS/6000 and PowerPC Options. 40984 (line 566) 40985 * mabi=n32: MIPS Options. (line 129) 40986 * mabi=no-spe: RS/6000 and PowerPC Options. 40987 (line 559) 40988 * mabi=o64: MIPS Options. (line 129) 40989 * mabi=spe: RS/6000 and PowerPC Options. 40990 (line 554) 40991 * mabicalls: MIPS Options. (line 153) 40992 * mabort-on-noreturn: ARM Options. (line 149) 40993 * mabshi: PDP-11 Options. (line 55) 40994 * mac0: PDP-11 Options. (line 16) 40995 * macc-4: FRV Options. (line 113) 40996 * macc-8: FRV Options. (line 116) 40997 * maccumulate-outgoing-args: i386 and x86-64 Options. 40998 (line 532) 40999 * madjust-unroll: SH Options. (line 196) 41000 * mads: RS/6000 and PowerPC Options. 41001 (line 592) 41002 * maix-struct-return: RS/6000 and PowerPC Options. 41003 (line 542) 41004 * maix32: RS/6000 and PowerPC Options. 41005 (line 290) 41006 * maix64: RS/6000 and PowerPC Options. 41007 (line 290) 41008 * malign-300: H8/300 Options. (line 31) 41009 * malign-double: i386 and x86-64 Options. 41010 (line 249) 41011 * malign-int: M680x0 Options. (line 263) 41012 * malign-labels: FRV Options. (line 104) 41013 * malign-loops: M32R/D Options. (line 73) 41014 * malign-natural: RS/6000 and PowerPC Options. 41015 (line 329) 41016 * malign-power: RS/6000 and PowerPC Options. 41017 (line 329) 41018 * malloc-cc: FRV Options. (line 25) 41019 * malpha-as: DEC Alpha Options. (line 159) 41020 * maltivec: RS/6000 and PowerPC Options. 41021 (line 183) 41022 * mam33: MN10300 Options. (line 17) 41023 * mandroid: ARM Options. (line 264) 41024 * mapcs: ARM Options. (line 22) 41025 * mapcs-frame: ARM Options. (line 14) 41026 * mapp-regs <1>: V850 Options. (line 57) 41027 * mapp-regs: SPARC Options. (line 10) 41028 * march <1>: S/390 and zSeries Options. 41029 (line 116) 41030 * march <2>: MIPS Options. (line 14) 41031 * march <3>: M680x0 Options. (line 12) 41032 * march <4>: i386 and x86-64 Options. 41033 (line 148) 41034 * march <5>: HPPA Options. (line 9) 41035 * march <6>: CRIS Options. (line 10) 41036 * march: ARM Options. (line 112) 41037 * masm=DIALECT: i386 and x86-64 Options. 41038 (line 205) 41039 * mauto-incdec: M68hc1x Options. (line 26) 41040 * mauto-pic: IA-64 Options. (line 50) 41041 * mavoid-indexed-addresses: RS/6000 and PowerPC Options. 41042 (line 399) 41043 * mb: SH Options. (line 58) 41044 * mbackchain: S/390 and zSeries Options. 41045 (line 35) 41046 * mbase-addresses: MMIX Options. (line 54) 41047 * mbcopy: PDP-11 Options. (line 36) 41048 * mbig: RS/6000 and PowerPC Options. 41049 (line 474) 41050 * mbig-endian <1>: RS/6000 and PowerPC Options. 41051 (line 474) 41052 * mbig-endian <2>: MCore Options. (line 39) 41053 * mbig-endian <3>: IA-64 Options. (line 9) 41054 * mbig-endian: ARM Options. (line 72) 41055 * mbig-switch <1>: V850 Options. (line 52) 41056 * mbig-switch: HPPA Options. (line 23) 41057 * mbigtable: SH Options. (line 74) 41058 * mbit-align: RS/6000 and PowerPC Options. 41059 (line 428) 41060 * mbitfield: M680x0 Options. (line 231) 41061 * mbitops: SH Options. (line 78) 41062 * mbranch-cheap: PDP-11 Options. (line 65) 41063 * mbranch-cost: MIPS Options. (line 610) 41064 * mbranch-cost=NUMBER: M32R/D Options. (line 82) 41065 * mbranch-expensive: PDP-11 Options. (line 61) 41066 * mbranch-hints: SPU Options. (line 27) 41067 * mbranch-likely: MIPS Options. (line 617) 41068 * mbranch-predict: MMIX Options. (line 49) 41069 * mbss-plt: RS/6000 and PowerPC Options. 41070 (line 206) 41071 * mbuild-constants: DEC Alpha Options. (line 142) 41072 * mbwx: DEC Alpha Options. (line 171) 41073 * mc68000: M680x0 Options. (line 91) 41074 * mc68020: M680x0 Options. (line 105) 41075 * mcall-gnu: RS/6000 and PowerPC Options. 41076 (line 534) 41077 * mcall-linux: RS/6000 and PowerPC Options. 41078 (line 530) 41079 * mcall-netbsd: RS/6000 and PowerPC Options. 41080 (line 538) 41081 * mcall-prologues: AVR Options. (line 43) 41082 * mcall-solaris: RS/6000 and PowerPC Options. 41083 (line 526) 41084 * mcall-sysv: RS/6000 and PowerPC Options. 41085 (line 513) 41086 * mcall-sysv-eabi: RS/6000 and PowerPC Options. 41087 (line 520) 41088 * mcall-sysv-noeabi: RS/6000 and PowerPC Options. 41089 (line 523) 41090 * mcallee-super-interworking: ARM Options. (line 238) 41091 * mcaller-super-interworking: ARM Options. (line 244) 41092 * mcallgraph-data: MCore Options. (line 31) 41093 * mcc-init: CRIS Options. (line 41) 41094 * mcfv4e: M680x0 Options. (line 168) 41095 * mcheck-zero-division: MIPS Options. (line 425) 41096 * mcirrus-fix-invalid-insns: ARM Options. (line 189) 41097 * mcix: DEC Alpha Options. (line 171) 41098 * mcld: i386 and x86-64 Options. 41099 (line 458) 41100 * mcmodel=embmedany: SPARC Options. (line 213) 41101 * mcmodel=kernel: i386 and x86-64 Options. 41102 (line 634) 41103 * mcmodel=large: i386 and x86-64 Options. 41104 (line 646) 41105 * mcmodel=medany: SPARC Options. (line 207) 41106 * mcmodel=medium: i386 and x86-64 Options. 41107 (line 639) 41108 * mcmodel=medlow: SPARC Options. (line 196) 41109 * mcmodel=medmid: SPARC Options. (line 201) 41110 * mcmodel=small: i386 and x86-64 Options. 41111 (line 628) 41112 * mcmpb: RS/6000 and PowerPC Options. 41113 (line 31) 41114 * mcode-readable: MIPS Options. (line 385) 41115 * mcond-exec: FRV Options. (line 152) 41116 * mcond-move: FRV Options. (line 128) 41117 * mconsole: i386 and x86-64 Windows Options. 41118 (line 9) 41119 * mconst-align: CRIS Options. (line 55) 41120 * mconst16: Xtensa Options. (line 10) 41121 * mconstant-gp: IA-64 Options. (line 46) 41122 * mcorea: Blackfin Options. (line 149) 41123 * mcoreb: Blackfin Options. (line 155) 41124 * mcpu <1>: SPARC Options. (line 96) 41125 * mcpu <2>: RS/6000 and PowerPC Options. 41126 (line 114) 41127 * mcpu <3>: picoChip Options. (line 9) 41128 * mcpu <4>: M680x0 Options. (line 28) 41129 * mcpu <5>: i386 and x86-64 Options. 41130 (line 153) 41131 * mcpu <6>: FRV Options. (line 212) 41132 * mcpu <7>: DEC Alpha Options. (line 223) 41133 * mcpu <8>: CRIS Options. (line 10) 41134 * mcpu <9>: ARM Options. (line 84) 41135 * mcpu: ARC Options. (line 23) 41136 * mcpu32: M680x0 Options. (line 134) 41137 * mcpu= <1>: M32C Options. (line 7) 41138 * mcpu=: Blackfin Options. (line 7) 41139 * mcsync-anomaly: Blackfin Options. (line 55) 41140 * mcx16: i386 and x86-64 Options. 41141 (line 472) 41142 * mcygwin: i386 and x86-64 Windows Options. 41143 (line 16) 41144 * MD: Preprocessor Options. 41145 (line 261) 41146 * mdalign: SH Options. (line 64) 41147 * mdata: ARC Options. (line 30) 41148 * mdata-align: CRIS Options. (line 55) 41149 * mdebug <1>: S/390 and zSeries Options. 41150 (line 112) 41151 * mdebug: M32R/D Options. (line 69) 41152 * mdec-asm: PDP-11 Options. (line 78) 41153 * mdisable-callt: V850 Options. (line 80) 41154 * mdisable-fpregs: HPPA Options. (line 33) 41155 * mdisable-indexing: HPPA Options. (line 40) 41156 * mdiv <1>: MCore Options. (line 15) 41157 * mdiv: M680x0 Options. (line 205) 41158 * mdiv=STRATEGY: SH Options. (line 141) 41159 * mdivide-breaks: MIPS Options. (line 431) 41160 * mdivide-traps: MIPS Options. (line 431) 41161 * mdivsi3_libfunc=NAME: SH Options. (line 182) 41162 * mdll: i386 and x86-64 Windows Options. 41163 (line 30) 41164 * mdlmzb: RS/6000 and PowerPC Options. 41165 (line 421) 41166 * mdmx: MIPS Options. (line 278) 41167 * mdouble: FRV Options. (line 38) 41168 * mdouble-float <1>: RS/6000 and PowerPC Options. 41169 (line 347) 41170 * mdouble-float: MIPS Options. (line 236) 41171 * mdsp: MIPS Options. (line 255) 41172 * mdspr2: MIPS Options. (line 261) 41173 * mdual-nops: SPU Options. (line 55) 41174 * mdwarf2-asm: IA-64 Options. (line 79) 41175 * mdword: FRV Options. (line 32) 41176 * mdynamic-no-pic: RS/6000 and PowerPC Options. 41177 (line 479) 41178 * meabi: RS/6000 and PowerPC Options. 41179 (line 611) 41180 * mearly-stop-bits: IA-64 Options. (line 85) 41181 * meb: Score Options. (line 9) 41182 * mel: Score Options. (line 12) 41183 * melf <1>: MMIX Options. (line 44) 41184 * melf: CRIS Options. (line 87) 41185 * memb: RS/6000 and PowerPC Options. 41186 (line 606) 41187 * membedded-data: MIPS Options. (line 372) 41188 * memregs=: M32C Options. (line 21) 41189 * mep: V850 Options. (line 16) 41190 * mepsilon: MMIX Options. (line 15) 41191 * merror-reloc: SPU Options. (line 10) 41192 * mesa: S/390 and zSeries Options. 41193 (line 95) 41194 * metrax100: CRIS Options. (line 26) 41195 * metrax4: CRIS Options. (line 26) 41196 * mexplicit-relocs <1>: MIPS Options. (line 416) 41197 * mexplicit-relocs: DEC Alpha Options. (line 184) 41198 * mextern-sdata: MIPS Options. (line 334) 41199 * MF: Preprocessor Options. 41200 (line 207) 41201 * mfast-fp: Blackfin Options. (line 128) 41202 * mfast-indirect-calls: HPPA Options. (line 52) 41203 * mfaster-structs: SPARC Options. (line 71) 41204 * mfdpic: FRV Options. (line 56) 41205 * mfix: DEC Alpha Options. (line 171) 41206 * mfix-and-continue: Darwin Options. (line 106) 41207 * mfix-cortex-m3-ldrd: ARC Options. (line 36) 41208 * mfix-r10000: MIPS Options. (line 502) 41209 * mfix-r4000: MIPS Options. (line 481) 41210 * mfix-r4400: MIPS Options. (line 495) 41211 * mfix-sb1: MIPS Options. (line 534) 41212 * mfix-vr4120: MIPS Options. (line 513) 41213 * mfix-vr4130: MIPS Options. (line 527) 41214 * mfixed-cc: FRV Options. (line 28) 41215 * mfixed-range <1>: SPU Options. (line 47) 41216 * mfixed-range <2>: SH Options. (line 189) 41217 * mfixed-range <3>: IA-64 Options. (line 90) 41218 * mfixed-range: HPPA Options. (line 59) 41219 * mflip-mips16: MIPS Options. (line 109) 41220 * mfloat-abi: ARM Options. (line 41) 41221 * mfloat-gprs: RS/6000 and PowerPC Options. 41222 (line 235) 41223 * mfloat-ieee: DEC Alpha Options. (line 179) 41224 * mfloat-vax: DEC Alpha Options. (line 179) 41225 * mfloat32: PDP-11 Options. (line 52) 41226 * mfloat64: PDP-11 Options. (line 48) 41227 * mflush-func: MIPS Options. (line 601) 41228 * mflush-func=NAME: M32R/D Options. (line 94) 41229 * mflush-trap=NUMBER: M32R/D Options. (line 87) 41230 * mfmovd: SH Options. (line 81) 41231 * mfp: ARM Options. (line 124) 41232 * mfp-exceptions: MIPS Options. (line 628) 41233 * mfp-reg: DEC Alpha Options. (line 25) 41234 * mfp-rounding-mode: DEC Alpha Options. (line 85) 41235 * mfp-trap-mode: DEC Alpha Options. (line 63) 41236 * mfp32: MIPS Options. (line 219) 41237 * mfp64: MIPS Options. (line 222) 41238 * mfpe: ARM Options. (line 124) 41239 * mfpr-32: FRV Options. (line 13) 41240 * mfpr-64: FRV Options. (line 16) 41241 * mfprnd: RS/6000 and PowerPC Options. 41242 (line 31) 41243 * mfpu <1>: SPARC Options. (line 20) 41244 * mfpu <2>: RS/6000 and PowerPC Options. 41245 (line 355) 41246 * mfpu <3>: PDP-11 Options. (line 9) 41247 * mfpu: ARM Options. (line 124) 41248 * mfull-toc: RS/6000 and PowerPC Options. 41249 (line 263) 41250 * mfused-madd <1>: Xtensa Options. (line 19) 41251 * mfused-madd <2>: S/390 and zSeries Options. 41252 (line 137) 41253 * mfused-madd <3>: RS/6000 and PowerPC Options. 41254 (line 408) 41255 * mfused-madd <4>: MIPS Options. (line 466) 41256 * mfused-madd: i386 and x86-64 Options. 41257 (line 596) 41258 * mg: VAX Options. (line 17) 41259 * MG: Preprocessor Options. 41260 (line 216) 41261 * mgas <1>: HPPA Options. (line 75) 41262 * mgas: DEC Alpha Options. (line 159) 41263 * mgen-cell-microcode: RS/6000 and PowerPC Options. 41264 (line 194) 41265 * mgettrcost=NUMBER: SH Options. (line 211) 41266 * mglibc: GNU/Linux Options. (line 9) 41267 * mgnu: VAX Options. (line 13) 41268 * mgnu-as: IA-64 Options. (line 18) 41269 * mgnu-ld: IA-64 Options. (line 23) 41270 * mgotplt: CRIS Options. (line 81) 41271 * mgp32: MIPS Options. (line 213) 41272 * mgp64: MIPS Options. (line 216) 41273 * mgpopt: MIPS Options. (line 357) 41274 * mgpr-32: FRV Options. (line 7) 41275 * mgpr-64: FRV Options. (line 10) 41276 * mgprel-ro: FRV Options. (line 79) 41277 * mh: H8/300 Options. (line 14) 41278 * mhard-dfp <1>: S/390 and zSeries Options. 41279 (line 20) 41280 * mhard-dfp: RS/6000 and PowerPC Options. 41281 (line 31) 41282 * mhard-float <1>: SPARC Options. (line 20) 41283 * mhard-float <2>: S/390 and zSeries Options. 41284 (line 11) 41285 * mhard-float <3>: RS/6000 and PowerPC Options. 41286 (line 341) 41287 * mhard-float <4>: MIPS Options. (line 225) 41288 * mhard-float <5>: M680x0 Options. (line 193) 41289 * mhard-float <6>: FRV Options. (line 19) 41290 * mhard-float: ARM Options. (line 62) 41291 * mhard-quad-float: SPARC Options. (line 41) 41292 * mhardlit: MCore Options. (line 10) 41293 * mhint-max-distance: SPU Options. (line 67) 41294 * mhint-max-nops: SPU Options. (line 61) 41295 * mhitachi: SH Options. (line 84) 41296 * micplb: Blackfin Options. (line 168) 41297 * mid-shared-library: Blackfin Options. (line 76) 41298 * mieee <1>: SH Options. (line 99) 41299 * mieee: DEC Alpha Options. (line 39) 41300 * mieee-conformant: DEC Alpha Options. (line 134) 41301 * mieee-fp: i386 and x86-64 Options. 41302 (line 211) 41303 * mieee-with-inexact: DEC Alpha Options. (line 52) 41304 * milp32: IA-64 Options. (line 114) 41305 * mimpure-text: SPARC Options. (line 81) 41306 * mincoming-stack-boundary: i386 and x86-64 Options. 41307 (line 379) 41308 * mindexed-addressing: SH Options. (line 201) 41309 * minit-stack: AVR Options. (line 35) 41310 * minline-all-stringops: i386 and x86-64 Options. 41311 (line 553) 41312 * minline-compares: i386 and x86-64 Options. 41313 (line 565) 41314 * minline-float-divide-max-throughput: IA-64 Options. (line 58) 41315 * minline-float-divide-min-latency: IA-64 Options. (line 54) 41316 * minline-ic_invalidate: SH Options. (line 106) 41317 * minline-int-divide-max-throughput: IA-64 Options. (line 66) 41318 * minline-int-divide-min-latency: IA-64 Options. (line 62) 41319 * minline-plt <1>: FRV Options. (line 64) 41320 * minline-plt: Blackfin Options. (line 133) 41321 * minline-sqrt-max-throughput: IA-64 Options. (line 74) 41322 * minline-sqrt-min-latency: IA-64 Options. (line 70) 41323 * minline-stringops-dynamically: i386 and x86-64 Options. 41324 (line 560) 41325 * minmax: M68hc1x Options. (line 31) 41326 * minsert-sched-nops: RS/6000 and PowerPC Options. 41327 (line 501) 41328 * mint16: PDP-11 Options. (line 40) 41329 * mint32 <1>: PDP-11 Options. (line 44) 41330 * mint32: H8/300 Options. (line 28) 41331 * mint8: AVR Options. (line 55) 41332 * minterlink-mips16: MIPS Options. (line 116) 41333 * minvalid-symbols: SH Options. (line 234) 41334 * mips1: MIPS Options. (line 76) 41335 * mips16: MIPS Options. (line 101) 41336 * mips2: MIPS Options. (line 79) 41337 * mips3: MIPS Options. (line 82) 41338 * mips32: MIPS Options. (line 88) 41339 * mips32r2: MIPS Options. (line 91) 41340 * mips3d: MIPS Options. (line 284) 41341 * mips4: MIPS Options. (line 85) 41342 * mips64: MIPS Options. (line 94) 41343 * mips64r2: MIPS Options. (line 97) 41344 * misel: RS/6000 and PowerPC Options. 41345 (line 212) 41346 * misize: SH Options. (line 118) 41347 * missue-rate=NUMBER: M32R/D Options. (line 79) 41348 * mjump-in-delay: HPPA Options. (line 28) 41349 * mkernel: Darwin Options. (line 84) 41350 * mknuthdiv: MMIX Options. (line 33) 41351 * ml: SH Options. (line 61) 41352 * mlarge-data: DEC Alpha Options. (line 195) 41353 * mlarge-data-threshold=NUMBER: i386 and x86-64 Options. 41354 (line 291) 41355 * mlarge-mem: SPU Options. (line 35) 41356 * mlarge-text: DEC Alpha Options. (line 213) 41357 * mleaf-id-shared-library: Blackfin Options. (line 87) 41358 * mlibfuncs: MMIX Options. (line 10) 41359 * mlibrary-pic: FRV Options. (line 110) 41360 * mlinked-fp: FRV Options. (line 94) 41361 * mlinker-opt: HPPA Options. (line 85) 41362 * mlinux: CRIS Options. (line 91) 41363 * mlittle: RS/6000 and PowerPC Options. 41364 (line 468) 41365 * mlittle-endian <1>: SPARC Options. (line 185) 41366 * mlittle-endian <2>: RS/6000 and PowerPC Options. 41367 (line 468) 41368 * mlittle-endian <3>: MCore Options. (line 39) 41369 * mlittle-endian <4>: IA-64 Options. (line 13) 41370 * mlittle-endian: ARM Options. (line 68) 41371 * mllsc: MIPS Options. (line 241) 41372 * mlocal-sdata: MIPS Options. (line 322) 41373 * mlong-calls <1>: V850 Options. (line 10) 41374 * mlong-calls <2>: MIPS Options. (line 452) 41375 * mlong-calls <3>: M68hc1x Options. (line 35) 41376 * mlong-calls <4>: FRV Options. (line 99) 41377 * mlong-calls <5>: Blackfin Options. (line 116) 41378 * mlong-calls: ARM Options. (line 154) 41379 * mlong-double-128: S/390 and zSeries Options. 41380 (line 29) 41381 * mlong-double-64: S/390 and zSeries Options. 41382 (line 29) 41383 * mlong-load-store: HPPA Options. (line 66) 41384 * mlong32: MIPS Options. (line 297) 41385 * mlong64: MIPS Options. (line 292) 41386 * mlongcall: RS/6000 and PowerPC Options. 41387 (line 677) 41388 * mlongcalls: Xtensa Options. (line 67) 41389 * mlow-64k: Blackfin Options. (line 65) 41390 * mlp64: IA-64 Options. (line 114) 41391 * MM: Preprocessor Options. 41392 (line 197) 41393 * mmac <1>: Score Options. (line 21) 41394 * mmac: CRX Options. (line 9) 41395 * mmad: MIPS Options. (line 461) 41396 * mmangle-cpu: ARC Options. (line 15) 41397 * mmax: DEC Alpha Options. (line 171) 41398 * mmax-stack-frame: CRIS Options. (line 22) 41399 * mmcu: AVR Options. (line 9) 41400 * MMD: Preprocessor Options. 41401 (line 277) 41402 * mmedia: FRV Options. (line 44) 41403 * mmemcpy: MIPS Options. (line 446) 41404 * mmemory-latency: DEC Alpha Options. (line 276) 41405 * mmfcrf: RS/6000 and PowerPC Options. 41406 (line 31) 41407 * mmfpgpr: RS/6000 and PowerPC Options. 41408 (line 31) 41409 * mminimal-toc: RS/6000 and PowerPC Options. 41410 (line 263) 41411 * mmmx: i386 and x86-64 Options. 41412 (line 435) 41413 * mmodel=large: M32R/D Options. (line 33) 41414 * mmodel=medium: M32R/D Options. (line 27) 41415 * mmodel=small: M32R/D Options. (line 18) 41416 * mmt: MIPS Options. (line 289) 41417 * mmul-bug-workaround: CRIS Options. (line 31) 41418 * mmuladd: FRV Options. (line 50) 41419 * mmulhw: RS/6000 and PowerPC Options. 41420 (line 414) 41421 * mmult-bug: MN10300 Options. (line 9) 41422 * mmulti-cond-exec: FRV Options. (line 176) 41423 * mmulticore: Blackfin Options. (line 137) 41424 * mmultiple: RS/6000 and PowerPC Options. 41425 (line 366) 41426 * mmvcle: S/390 and zSeries Options. 41427 (line 105) 41428 * mmvme: RS/6000 and PowerPC Options. 41429 (line 587) 41430 * mn: H8/300 Options. (line 20) 41431 * mnested-cond-exec: FRV Options. (line 189) 41432 * mnew-mnemonics: RS/6000 and PowerPC Options. 41433 (line 99) 41434 * mnhwloop: Score Options. (line 15) 41435 * mno-3dnow: i386 and x86-64 Options. 41436 (line 435) 41437 * mno-4byte-functions: MCore Options. (line 27) 41438 * mno-abicalls: MIPS Options. (line 153) 41439 * mno-abshi: PDP-11 Options. (line 58) 41440 * mno-ac0: PDP-11 Options. (line 20) 41441 * mno-align-double: i386 and x86-64 Options. 41442 (line 249) 41443 * mno-align-int: M680x0 Options. (line 263) 41444 * mno-align-loops: M32R/D Options. (line 76) 41445 * mno-align-stringops: i386 and x86-64 Options. 41446 (line 548) 41447 * mno-altivec: RS/6000 and PowerPC Options. 41448 (line 183) 41449 * mno-am33: MN10300 Options. (line 20) 41450 * mno-app-regs <1>: V850 Options. (line 61) 41451 * mno-app-regs: SPARC Options. (line 10) 41452 * mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 41453 (line 399) 41454 * mno-backchain: S/390 and zSeries Options. 41455 (line 35) 41456 * mno-base-addresses: MMIX Options. (line 54) 41457 * mno-bit-align: RS/6000 and PowerPC Options. 41458 (line 428) 41459 * mno-bitfield: M680x0 Options. (line 227) 41460 * mno-branch-likely: MIPS Options. (line 617) 41461 * mno-branch-predict: MMIX Options. (line 49) 41462 * mno-bwx: DEC Alpha Options. (line 171) 41463 * mno-callgraph-data: MCore Options. (line 31) 41464 * mno-check-zero-division: MIPS Options. (line 425) 41465 * mno-cirrus-fix-invalid-insns: ARM Options. (line 189) 41466 * mno-cix: DEC Alpha Options. (line 171) 41467 * mno-cmpb: RS/6000 and PowerPC Options. 41468 (line 31) 41469 * mno-cond-exec: FRV Options. (line 158) 41470 * mno-cond-move: FRV Options. (line 134) 41471 * mno-const-align: CRIS Options. (line 55) 41472 * mno-const16: Xtensa Options. (line 10) 41473 * mno-crt0: MN10300 Options. (line 31) 41474 * mno-csync-anomaly: Blackfin Options. (line 61) 41475 * mno-cygwin: i386 and x86-64 Windows Options. 41476 (line 23) 41477 * mno-data-align: CRIS Options. (line 55) 41478 * mno-debug: S/390 and zSeries Options. 41479 (line 112) 41480 * mno-div <1>: MCore Options. (line 15) 41481 * mno-div: M680x0 Options. (line 205) 41482 * mno-dlmzb: RS/6000 and PowerPC Options. 41483 (line 421) 41484 * mno-double: FRV Options. (line 41) 41485 * mno-dsp: MIPS Options. (line 255) 41486 * mno-dspr2: MIPS Options. (line 261) 41487 * mno-dwarf2-asm: IA-64 Options. (line 79) 41488 * mno-dword: FRV Options. (line 35) 41489 * mno-eabi: RS/6000 and PowerPC Options. 41490 (line 611) 41491 * mno-early-stop-bits: IA-64 Options. (line 85) 41492 * mno-eflags: FRV Options. (line 125) 41493 * mno-embedded-data: MIPS Options. (line 372) 41494 * mno-ep: V850 Options. (line 16) 41495 * mno-epsilon: MMIX Options. (line 15) 41496 * mno-explicit-relocs <1>: MIPS Options. (line 416) 41497 * mno-explicit-relocs: DEC Alpha Options. (line 184) 41498 * mno-extern-sdata: MIPS Options. (line 334) 41499 * mno-fancy-math-387: i386 and x86-64 Options. 41500 (line 238) 41501 * mno-faster-structs: SPARC Options. (line 71) 41502 * mno-fix: DEC Alpha Options. (line 171) 41503 * mno-fix-r10000: MIPS Options. (line 502) 41504 * mno-fix-r4000: MIPS Options. (line 481) 41505 * mno-fix-r4400: MIPS Options. (line 495) 41506 * mno-float32: PDP-11 Options. (line 48) 41507 * mno-float64: PDP-11 Options. (line 52) 41508 * mno-flush-func: M32R/D Options. (line 99) 41509 * mno-flush-trap: M32R/D Options. (line 91) 41510 * mno-fp-in-toc: RS/6000 and PowerPC Options. 41511 (line 263) 41512 * mno-fp-regs: DEC Alpha Options. (line 25) 41513 * mno-fp-ret-in-387: i386 and x86-64 Options. 41514 (line 228) 41515 * mno-fprnd: RS/6000 and PowerPC Options. 41516 (line 31) 41517 * mno-fpu: SPARC Options. (line 25) 41518 * mno-fused-madd <1>: Xtensa Options. (line 19) 41519 * mno-fused-madd <2>: S/390 and zSeries Options. 41520 (line 137) 41521 * mno-fused-madd <3>: RS/6000 and PowerPC Options. 41522 (line 408) 41523 * mno-fused-madd: MIPS Options. (line 466) 41524 * mno-gnu-as: IA-64 Options. (line 18) 41525 * mno-gnu-ld: IA-64 Options. (line 23) 41526 * mno-gotplt: CRIS Options. (line 81) 41527 * mno-gpopt: MIPS Options. (line 357) 41528 * mno-hard-dfp <1>: S/390 and zSeries Options. 41529 (line 20) 41530 * mno-hard-dfp: RS/6000 and PowerPC Options. 41531 (line 31) 41532 * mno-hardlit: MCore Options. (line 10) 41533 * mno-id-shared-library: Blackfin Options. (line 83) 41534 * mno-ieee-fp: i386 and x86-64 Options. 41535 (line 211) 41536 * mno-int16: PDP-11 Options. (line 44) 41537 * mno-int32: PDP-11 Options. (line 40) 41538 * mno-interlink-mips16: MIPS Options. (line 116) 41539 * mno-interrupts: AVR Options. (line 39) 41540 * mno-isel: RS/6000 and PowerPC Options. 41541 (line 212) 41542 * mno-knuthdiv: MMIX Options. (line 33) 41543 * mno-leaf-id-shared-library: Blackfin Options. (line 93) 41544 * mno-libfuncs: MMIX Options. (line 10) 41545 * mno-llsc: MIPS Options. (line 241) 41546 * mno-local-sdata: MIPS Options. (line 322) 41547 * mno-long-calls <1>: V850 Options. (line 10) 41548 * mno-long-calls <2>: MIPS Options. (line 452) 41549 * mno-long-calls <3>: M68hc1x Options. (line 35) 41550 * mno-long-calls <4>: HPPA Options. (line 136) 41551 * mno-long-calls <5>: Blackfin Options. (line 116) 41552 * mno-long-calls: ARM Options. (line 154) 41553 * mno-longcall: RS/6000 and PowerPC Options. 41554 (line 677) 41555 * mno-longcalls: Xtensa Options. (line 67) 41556 * mno-low-64k: Blackfin Options. (line 69) 41557 * mno-lsim: FR30 Options. (line 14) 41558 * mno-mad: MIPS Options. (line 461) 41559 * mno-max: DEC Alpha Options. (line 171) 41560 * mno-mdmx: MIPS Options. (line 278) 41561 * mno-media: FRV Options. (line 47) 41562 * mno-memcpy: MIPS Options. (line 446) 41563 * mno-mfcrf: RS/6000 and PowerPC Options. 41564 (line 31) 41565 * mno-mfpgpr: RS/6000 and PowerPC Options. 41566 (line 31) 41567 * mno-mips16: MIPS Options. (line 101) 41568 * mno-mips3d: MIPS Options. (line 284) 41569 * mno-mmx: i386 and x86-64 Options. 41570 (line 435) 41571 * mno-mt: MIPS Options. (line 289) 41572 * mno-mul-bug-workaround: CRIS Options. (line 31) 41573 * mno-muladd: FRV Options. (line 53) 41574 * mno-mulhw: RS/6000 and PowerPC Options. 41575 (line 414) 41576 * mno-mult-bug: MN10300 Options. (line 13) 41577 * mno-multi-cond-exec: FRV Options. (line 183) 41578 * mno-multiple: RS/6000 and PowerPC Options. 41579 (line 366) 41580 * mno-mvcle: S/390 and zSeries Options. 41581 (line 105) 41582 * mno-nested-cond-exec: FRV Options. (line 195) 41583 * mno-optimize-membar: FRV Options. (line 205) 41584 * mno-pack: FRV Options. (line 122) 41585 * mno-packed-stack: S/390 and zSeries Options. 41586 (line 54) 41587 * mno-paired: RS/6000 and PowerPC Options. 41588 (line 226) 41589 * mno-paired-single: MIPS Options. (line 272) 41590 * mno-pic: IA-64 Options. (line 26) 41591 * mno-plt: MIPS Options. (line 180) 41592 * mno-popcntb: RS/6000 and PowerPC Options. 41593 (line 31) 41594 * mno-power: RS/6000 and PowerPC Options. 41595 (line 31) 41596 * mno-power2: RS/6000 and PowerPC Options. 41597 (line 31) 41598 * mno-powerpc: RS/6000 and PowerPC Options. 41599 (line 31) 41600 * mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 41601 (line 31) 41602 * mno-powerpc-gpopt: RS/6000 and PowerPC Options. 41603 (line 31) 41604 * mno-powerpc64: RS/6000 and PowerPC Options. 41605 (line 31) 41606 * mno-prolog-function: V850 Options. (line 23) 41607 * mno-prologue-epilogue: CRIS Options. (line 71) 41608 * mno-prototype: RS/6000 and PowerPC Options. 41609 (line 571) 41610 * mno-push-args: i386 and x86-64 Options. 41611 (line 525) 41612 * mno-register-names: IA-64 Options. (line 37) 41613 * mno-regnames: RS/6000 and PowerPC Options. 41614 (line 671) 41615 * mno-relax-immediate: MCore Options. (line 19) 41616 * mno-relocatable: RS/6000 and PowerPC Options. 41617 (line 445) 41618 * mno-relocatable-lib: RS/6000 and PowerPC Options. 41619 (line 453) 41620 * mno-rtd: M680x0 Options. (line 258) 41621 * mno-scc: FRV Options. (line 146) 41622 * mno-sched-ar-data-spec: IA-64 Options. (line 128) 41623 * mno-sched-ar-in-data-spec: IA-64 Options. (line 149) 41624 * mno-sched-br-data-spec: IA-64 Options. (line 121) 41625 * mno-sched-br-in-data-spec: IA-64 Options. (line 142) 41626 * mno-sched-control-ldc: IA-64 Options. (line 168) 41627 * mno-sched-control-spec: IA-64 Options. (line 135) 41628 * mno-sched-count-spec-in-critical-path: IA-64 Options. (line 194) 41629 * mno-sched-in-control-spec: IA-64 Options. (line 156) 41630 * mno-sched-ldc: IA-64 Options. (line 162) 41631 * mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 41632 * mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 41633 * mno-sched-prolog: ARM Options. (line 32) 41634 * mno-sched-spec-verbose: IA-64 Options. (line 176) 41635 * mno-sdata <1>: RS/6000 and PowerPC Options. 41636 (line 658) 41637 * mno-sdata: IA-64 Options. (line 42) 41638 * mno-sep-data: Blackfin Options. (line 111) 41639 * mno-serialize-volatile: Xtensa Options. (line 35) 41640 * mno-short: M680x0 Options. (line 222) 41641 * mno-side-effects: CRIS Options. (line 46) 41642 * mno-single-exit: MMIX Options. (line 66) 41643 * mno-slow-bytes: MCore Options. (line 35) 41644 * mno-small-exec: S/390 and zSeries Options. 41645 (line 80) 41646 * mno-smartmips: MIPS Options. (line 268) 41647 * mno-soft-float: DEC Alpha Options. (line 10) 41648 * mno-space-regs: HPPA Options. (line 45) 41649 * mno-spe: RS/6000 and PowerPC Options. 41650 (line 221) 41651 * mno-specld-anomaly: Blackfin Options. (line 51) 41652 * mno-split: PDP-11 Options. (line 71) 41653 * mno-split-addresses: MIPS Options. (line 410) 41654 * mno-sse: i386 and x86-64 Options. 41655 (line 435) 41656 * mno-stack-align: CRIS Options. (line 55) 41657 * mno-stack-bias: SPARC Options. (line 222) 41658 * mno-strict-align <1>: RS/6000 and PowerPC Options. 41659 (line 440) 41660 * mno-strict-align: M680x0 Options. (line 283) 41661 * mno-string: RS/6000 and PowerPC Options. 41662 (line 377) 41663 * mno-sum-in-toc: RS/6000 and PowerPC Options. 41664 (line 263) 41665 * mno-swdiv: RS/6000 and PowerPC Options. 41666 (line 173) 41667 * mno-sym32: MIPS Options. (line 307) 41668 * mno-tablejump: AVR Options. (line 47) 41669 * mno-target-align: Xtensa Options. (line 54) 41670 * mno-text-section-literals: Xtensa Options. (line 42) 41671 * mno-toc: RS/6000 and PowerPC Options. 41672 (line 462) 41673 * mno-toplevel-symbols: MMIX Options. (line 40) 41674 * mno-tpf-trace: S/390 and zSeries Options. 41675 (line 131) 41676 * mno-unaligned-doubles: SPARC Options. (line 59) 41677 * mno-uninit-const-in-rodata: MIPS Options. (line 380) 41678 * mno-update: RS/6000 and PowerPC Options. 41679 (line 388) 41680 * mno-v8plus: SPARC Options. (line 170) 41681 * mno-vis: SPARC Options. (line 177) 41682 * mno-vliw-branch: FRV Options. (line 170) 41683 * mno-volatile-asm-stop: IA-64 Options. (line 32) 41684 * mno-vrsave: RS/6000 and PowerPC Options. 41685 (line 191) 41686 * mno-wide-bitfields: MCore Options. (line 23) 41687 * mno-xgot <1>: MIPS Options. (line 190) 41688 * mno-xgot: M680x0 Options. (line 315) 41689 * mno-xl-compat: RS/6000 and PowerPC Options. 41690 (line 298) 41691 * mno-zero-extend: MMIX Options. (line 27) 41692 * mnobitfield: M680x0 Options. (line 227) 41693 * mnomacsave: SH Options. (line 95) 41694 * mnominmax: M68hc1x Options. (line 31) 41695 * mnop-fun-dllimport: i386 and x86-64 Windows Options. 41696 (line 36) 41697 * mold-mnemonics: RS/6000 and PowerPC Options. 41698 (line 99) 41699 * momit-leaf-frame-pointer <1>: i386 and x86-64 Options. 41700 (line 578) 41701 * momit-leaf-frame-pointer: Blackfin Options. (line 39) 41702 * mone-byte-bool: Darwin Options. (line 92) 41703 * moptimize-membar: FRV Options. (line 201) 41704 * MP: Preprocessor Options. 41705 (line 226) 41706 * mpa-risc-1-0: HPPA Options. (line 19) 41707 * mpa-risc-1-1: HPPA Options. (line 19) 41708 * mpa-risc-2-0: HPPA Options. (line 19) 41709 * mpack: FRV Options. (line 119) 41710 * mpacked-stack: S/390 and zSeries Options. 41711 (line 54) 41712 * mpadstruct: SH Options. (line 121) 41713 * mpaired: RS/6000 and PowerPC Options. 41714 (line 226) 41715 * mpaired-single: MIPS Options. (line 272) 41716 * mpc32: i386 and x86-64 Options. 41717 (line 344) 41718 * mpc64: i386 and x86-64 Options. 41719 (line 344) 41720 * mpc80: i386 and x86-64 Options. 41721 (line 344) 41722 * mpcrel: M680x0 Options. (line 275) 41723 * mpdebug: CRIS Options. (line 35) 41724 * mpe: RS/6000 and PowerPC Options. 41725 (line 318) 41726 * mpic-register: ARM Options. (line 185) 41727 * mplt: MIPS Options. (line 180) 41728 * mpoke-function-name: ARM Options. (line 199) 41729 * mpopcntb: RS/6000 and PowerPC Options. 41730 (line 31) 41731 * mportable-runtime: HPPA Options. (line 71) 41732 * mpower: RS/6000 and PowerPC Options. 41733 (line 31) 41734 * mpower2: RS/6000 and PowerPC Options. 41735 (line 31) 41736 * mpowerpc: RS/6000 and PowerPC Options. 41737 (line 31) 41738 * mpowerpc-gfxopt: RS/6000 and PowerPC Options. 41739 (line 31) 41740 * mpowerpc-gpopt: RS/6000 and PowerPC Options. 41741 (line 31) 41742 * mpowerpc64: RS/6000 and PowerPC Options. 41743 (line 31) 41744 * mprefergot: SH Options. (line 128) 41745 * mpreferred-stack-boundary: i386 and x86-64 Options. 41746 (line 374) 41747 * mprioritize-restricted-insns: RS/6000 and PowerPC Options. 41748 (line 485) 41749 * mprolog-function: V850 Options. (line 23) 41750 * mprologue-epilogue: CRIS Options. (line 71) 41751 * mprototype: RS/6000 and PowerPC Options. 41752 (line 571) 41753 * mpt-fixed: SH Options. (line 215) 41754 * mpush-args <1>: i386 and x86-64 Options. 41755 (line 525) 41756 * mpush-args: CRX Options. (line 13) 41757 * MQ: Preprocessor Options. 41758 (line 252) 41759 * mr10k-cache-barrier: MIPS Options. (line 539) 41760 * mrecip: i386 and x86-64 Options. 41761 (line 490) 41762 * mregister-names: IA-64 Options. (line 37) 41763 * mregnames: RS/6000 and PowerPC Options. 41764 (line 671) 41765 * mregparm: i386 and x86-64 Options. 41766 (line 321) 41767 * mrelax <1>: SH Options. (line 70) 41768 * mrelax <2>: MN10300 Options. (line 34) 41769 * mrelax: H8/300 Options. (line 9) 41770 * mrelax-immediate: MCore Options. (line 19) 41771 * mrelocatable: RS/6000 and PowerPC Options. 41772 (line 445) 41773 * mrelocatable-lib: RS/6000 and PowerPC Options. 41774 (line 453) 41775 * mreturn-pointer-on-d0: MN10300 Options. (line 24) 41776 * mrodata: ARC Options. (line 30) 41777 * mrtd <1>: Function Attributes. 41778 (line 170) 41779 * mrtd <2>: M680x0 Options. (line 236) 41780 * mrtd: i386 and x86-64 Options. 41781 (line 297) 41782 * mrtp: VxWorks Options. (line 11) 41783 * ms: H8/300 Options. (line 17) 41784 * ms2600: H8/300 Options. (line 24) 41785 * msafe-dma: SPU Options. (line 17) 41786 * msafe-hints: SPU Options. (line 72) 41787 * msahf: i386 and x86-64 Options. 41788 (line 480) 41789 * mscc: FRV Options. (line 140) 41790 * msched-ar-data-spec: IA-64 Options. (line 128) 41791 * msched-ar-in-data-spec: IA-64 Options. (line 149) 41792 * msched-br-data-spec: IA-64 Options. (line 121) 41793 * msched-br-in-data-spec: IA-64 Options. (line 142) 41794 * msched-control-ldc: IA-64 Options. (line 168) 41795 * msched-control-spec: IA-64 Options. (line 135) 41796 * msched-costly-dep: RS/6000 and PowerPC Options. 41797 (line 492) 41798 * msched-count-spec-in-critical-path: IA-64 Options. (line 194) 41799 * msched-in-control-spec: IA-64 Options. (line 156) 41800 * msched-ldc: IA-64 Options. (line 162) 41801 * msched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 41802 * msched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 41803 * msched-spec-verbose: IA-64 Options. (line 176) 41804 * mschedule: HPPA Options. (line 78) 41805 * mscore5: Score Options. (line 25) 41806 * mscore5u: Score Options. (line 28) 41807 * mscore7: Score Options. (line 31) 41808 * mscore7d: Score Options. (line 34) 41809 * msda: V850 Options. (line 40) 41810 * msdata <1>: RS/6000 and PowerPC Options. 41811 (line 645) 41812 * msdata: IA-64 Options. (line 42) 41813 * msdata=data: RS/6000 and PowerPC Options. 41814 (line 650) 41815 * msdata=default: RS/6000 and PowerPC Options. 41816 (line 645) 41817 * msdata=eabi: RS/6000 and PowerPC Options. 41818 (line 625) 41819 * msdata=none <1>: RS/6000 and PowerPC Options. 41820 (line 658) 41821 * msdata=none: M32R/D Options. (line 40) 41822 * msdata=sdata: M32R/D Options. (line 49) 41823 * msdata=sysv: RS/6000 and PowerPC Options. 41824 (line 636) 41825 * msdata=use: M32R/D Options. (line 53) 41826 * msdram: Blackfin Options. (line 162) 41827 * msecure-plt: RS/6000 and PowerPC Options. 41828 (line 201) 41829 * msep-data: Blackfin Options. (line 105) 41830 * mserialize-volatile: Xtensa Options. (line 35) 41831 * mshared-library-id: Blackfin Options. (line 98) 41832 * mshort <1>: M68hc1x Options. (line 40) 41833 * mshort: M680x0 Options. (line 216) 41834 * msim <1>: Xstormy16 Options. (line 9) 41835 * msim <2>: RS/6000 and PowerPC Options. 41836 (line 581) 41837 * msim <3>: M32C Options. (line 13) 41838 * msim: Blackfin Options. (line 32) 41839 * msimple-fpu: RS/6000 and PowerPC Options. 41840 (line 351) 41841 * msingle-exit: MMIX Options. (line 66) 41842 * msingle-float <1>: RS/6000 and PowerPC Options. 41843 (line 347) 41844 * msingle-float: MIPS Options. (line 232) 41845 * msingle-pic-base: ARM Options. (line 179) 41846 * msio: HPPA Options. (line 105) 41847 * msize: AVR Options. (line 32) 41848 * mslow-bytes: MCore Options. (line 35) 41849 * msmall-data: DEC Alpha Options. (line 195) 41850 * msmall-exec: S/390 and zSeries Options. 41851 (line 80) 41852 * msmall-mem: SPU Options. (line 35) 41853 * msmall-model: FR30 Options. (line 9) 41854 * msmall-text: DEC Alpha Options. (line 213) 41855 * msmartmips: MIPS Options. (line 268) 41856 * msoft-float <1>: SPARC Options. (line 25) 41857 * msoft-float <2>: S/390 and zSeries Options. 41858 (line 11) 41859 * msoft-float <3>: RS/6000 and PowerPC Options. 41860 (line 341) 41861 * msoft-float <4>: PDP-11 Options. (line 13) 41862 * msoft-float <5>: MIPS Options. (line 228) 41863 * msoft-float <6>: M680x0 Options. (line 199) 41864 * msoft-float <7>: i386 and x86-64 Options. 41865 (line 216) 41866 * msoft-float <8>: HPPA Options. (line 91) 41867 * msoft-float <9>: FRV Options. (line 22) 41868 * msoft-float <10>: DEC Alpha Options. (line 10) 41869 * msoft-float: ARM Options. (line 65) 41870 * msoft-quad-float: SPARC Options. (line 45) 41871 * msoft-reg-count: M68hc1x Options. (line 43) 41872 * mspace <1>: V850 Options. (line 30) 41873 * mspace: SH Options. (line 125) 41874 * mspe: RS/6000 and PowerPC Options. 41875 (line 221) 41876 * mspecld-anomaly: Blackfin Options. (line 46) 41877 * msplit: PDP-11 Options. (line 68) 41878 * msplit-addresses: MIPS Options. (line 410) 41879 * msse: i386 and x86-64 Options. 41880 (line 435) 41881 * msse2avx: i386 and x86-64 Options. 41882 (line 604) 41883 * msseregparm: i386 and x86-64 Options. 41884 (line 332) 41885 * mstack-align: CRIS Options. (line 55) 41886 * mstack-bias: SPARC Options. (line 222) 41887 * mstack-check-l1: Blackfin Options. (line 72) 41888 * mstack-guard: S/390 and zSeries Options. 41889 (line 156) 41890 * mstack-increment: MCore Options. (line 50) 41891 * mstack-size: S/390 and zSeries Options. 41892 (line 156) 41893 * mstackrealign: i386 and x86-64 Options. 41894 (line 365) 41895 * mstdmain: SPU Options. (line 40) 41896 * mstrict-align <1>: RS/6000 and PowerPC Options. 41897 (line 440) 41898 * mstrict-align: M680x0 Options. (line 283) 41899 * mstring: RS/6000 and PowerPC Options. 41900 (line 377) 41901 * mstringop-strategy=ALG: i386 and x86-64 Options. 41902 (line 570) 41903 * mstructure-size-boundary: ARM Options. (line 134) 41904 * msvr4-struct-return: RS/6000 and PowerPC Options. 41905 (line 545) 41906 * mswdiv: RS/6000 and PowerPC Options. 41907 (line 173) 41908 * msym32: MIPS Options. (line 307) 41909 * mt: IA-64 Options. (line 106) 41910 * MT: Preprocessor Options. 41911 (line 238) 41912 * mtarget-align: Xtensa Options. (line 54) 41913 * mtda: V850 Options. (line 34) 41914 * mtext: ARC Options. (line 30) 41915 * mtext-section-literals: Xtensa Options. (line 42) 41916 * mthread: i386 and x86-64 Windows Options. 41917 (line 40) 41918 * mthreads: i386 and x86-64 Options. 41919 (line 540) 41920 * mthumb: ARM Options. (line 220) 41921 * mthumb-interwork: ARM Options. (line 25) 41922 * mtiny-stack: AVR Options. (line 52) 41923 * mtls-direct-seg-refs: i386 and x86-64 Options. 41924 (line 586) 41925 * mtls-size: IA-64 Options. (line 97) 41926 * mtoc: RS/6000 and PowerPC Options. 41927 (line 462) 41928 * mtomcat-stats: FRV Options. (line 209) 41929 * mtoplevel-symbols: MMIX Options. (line 40) 41930 * mtp: ARM Options. (line 250) 41931 * mtpcs-frame: ARM Options. (line 226) 41932 * mtpcs-leaf-frame: ARM Options. (line 232) 41933 * mtpf-trace: S/390 and zSeries Options. 41934 (line 131) 41935 * mtrap-precision: DEC Alpha Options. (line 109) 41936 * mtune <1>: SPARC Options. (line 158) 41937 * mtune <2>: S/390 and zSeries Options. 41938 (line 124) 41939 * mtune <3>: RS/6000 and PowerPC Options. 41940 (line 163) 41941 * mtune <4>: MIPS Options. (line 61) 41942 * mtune <5>: M680x0 Options. (line 66) 41943 * mtune <6>: IA-64 Options. (line 101) 41944 * mtune <7>: i386 and x86-64 Options. 41945 (line 10) 41946 * mtune <8>: DEC Alpha Options. (line 267) 41947 * mtune <9>: CRIS Options. (line 16) 41948 * mtune: ARM Options. (line 102) 41949 * muclibc: GNU/Linux Options. (line 13) 41950 * muls: Score Options. (line 18) 41951 * multcost=NUMBER: SH Options. (line 138) 41952 * multi_module: Darwin Options. (line 199) 41953 * multilib-library-pic: FRV Options. (line 89) 41954 * multiply_defined: Darwin Options. (line 199) 41955 * multiply_defined_unused: Darwin Options. (line 199) 41956 * munaligned-doubles: SPARC Options. (line 59) 41957 * muninit-const-in-rodata: MIPS Options. (line 380) 41958 * munix: VAX Options. (line 9) 41959 * munix-asm: PDP-11 Options. (line 74) 41960 * munsafe-dma: SPU Options. (line 17) 41961 * mupdate: RS/6000 and PowerPC Options. 41962 (line 388) 41963 * musermode: SH Options. (line 133) 41964 * mv850: V850 Options. (line 49) 41965 * mv850e: V850 Options. (line 69) 41966 * mv850e1: V850 Options. (line 64) 41967 * mv8plus: SPARC Options. (line 170) 41968 * mveclibabi: i386 and x86-64 Options. 41969 (line 503) 41970 * mvis: SPARC Options. (line 177) 41971 * mvliw-branch: FRV Options. (line 164) 41972 * mvms-return-codes: DEC Alpha/VMS Options. 41973 (line 9) 41974 * mvolatile-asm-stop: IA-64 Options. (line 32) 41975 * mvr4130-align: MIPS Options. (line 638) 41976 * mvrsave: RS/6000 and PowerPC Options. 41977 (line 191) 41978 * mvxworks: RS/6000 and PowerPC Options. 41979 (line 602) 41980 * mwarn-cell-microcode: RS/6000 and PowerPC Options. 41981 (line 197) 41982 * mwarn-dynamicstack: S/390 and zSeries Options. 41983 (line 150) 41984 * mwarn-framesize: S/390 and zSeries Options. 41985 (line 142) 41986 * mwarn-reloc: SPU Options. (line 10) 41987 * mwide-bitfields: MCore Options. (line 23) 41988 * mwin32: i386 and x86-64 Windows Options. 41989 (line 44) 41990 * mwindows: i386 and x86-64 Windows Options. 41991 (line 50) 41992 * mword-relocations: ARM Options. (line 258) 41993 * mwords-little-endian: ARM Options. (line 76) 41994 * mxgot <1>: MIPS Options. (line 190) 41995 * mxgot: M680x0 Options. (line 315) 41996 * mxilinx-fpu: RS/6000 and PowerPC Options. 41997 (line 361) 41998 * mxl-compat: RS/6000 and PowerPC Options. 41999 (line 298) 42000 * myellowknife: RS/6000 and PowerPC Options. 42001 (line 597) 42002 * mzarch: S/390 and zSeries Options. 42003 (line 95) 42004 * mzda: V850 Options. (line 45) 42005 * mzero-extend: MMIX Options. (line 27) 42006 * no-canonical-prefixes: Overall Options. (line 348) 42007 * no-integrated-cpp: C Dialect Options. (line 240) 42008 * no-lsim: MCore Options. (line 46) 42009 * no-red-zone: i386 and x86-64 Options. 42010 (line 620) 42011 * no_dead_strip_inits_and_terms: Darwin Options. (line 199) 42012 * noall_load: Darwin Options. (line 199) 42013 * nocpp: MIPS Options. (line 476) 42014 * nodefaultlibs: Link Options. (line 62) 42015 * nofixprebinding: Darwin Options. (line 199) 42016 * nolibdld: HPPA Options. (line 188) 42017 * nomultidefs: Darwin Options. (line 199) 42018 * non-static: VxWorks Options. (line 16) 42019 * noprebind: Darwin Options. (line 199) 42020 * noseglinkedit: Darwin Options. (line 199) 42021 * nostartfiles: Link Options. (line 57) 42022 * nostdinc: Preprocessor Options. 42023 (line 374) 42024 * nostdinc++ <1>: Preprocessor Options. 42025 (line 379) 42026 * nostdinc++: C++ Dialect Options. 42027 (line 254) 42028 * nostdlib: Link Options. (line 71) 42029 * o: Preprocessor Options. 42030 (line 74) 42031 * O: Optimize Options. (line 29) 42032 * o: Overall Options. (line 187) 42033 * O0: Optimize Options. (line 106) 42034 * O1: Optimize Options. (line 29) 42035 * O2: Optimize Options. (line 67) 42036 * O3: Optimize Options. (line 100) 42037 * Os: Optimize Options. (line 110) 42038 * P: Preprocessor Options. 42039 (line 590) 42040 * p: Debugging Options. (line 236) 42041 * pagezero_size: Darwin Options. (line 199) 42042 * param: Optimize Options. (line 1729) 42043 * pass-exit-codes: Overall Options. (line 145) 42044 * pedantic <1>: Warnings and Errors. 42045 (line 25) 42046 * pedantic <2>: Alternate Keywords. (line 29) 42047 * pedantic <3>: C Extensions. (line 6) 42048 * pedantic <4>: Preprocessor Options. 42049 (line 162) 42050 * pedantic <5>: Warning Options. (line 53) 42051 * pedantic: Standards. (line 16) 42052 * pedantic-errors <1>: Warnings and Errors. 42053 (line 25) 42054 * pedantic-errors <2>: Non-bugs. (line 216) 42055 * pedantic-errors <3>: Preprocessor Options. 42056 (line 167) 42057 * pedantic-errors <4>: Warning Options. (line 95) 42058 * pedantic-errors: Standards. (line 16) 42059 * pg: Debugging Options. (line 242) 42060 * pie: Link Options. (line 92) 42061 * pipe: Overall Options. (line 209) 42062 * prebind: Darwin Options. (line 199) 42063 * prebind_all_twolevel_modules: Darwin Options. (line 199) 42064 * preprocessor: Preprocessor Options. 42065 (line 24) 42066 * print-file-name: Debugging Options. (line 907) 42067 * print-libgcc-file-name: Debugging Options. (line 928) 42068 * print-multi-directory: Debugging Options. (line 913) 42069 * print-multi-lib: Debugging Options. (line 918) 42070 * print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 42071 (line 244) 42072 * print-prog-name: Debugging Options. (line 925) 42073 * print-search-dirs: Debugging Options. (line 936) 42074 * print-sysroot: Debugging Options. (line 949) 42075 * print-sysroot-headers-suffix: Debugging Options. (line 956) 42076 * private_bundle: Darwin Options. (line 199) 42077 * pthread <1>: SPARC Options. (line 242) 42078 * pthread <2>: RS/6000 and PowerPC Options. 42079 (line 709) 42080 * pthread: IA-64 Options. (line 106) 42081 * pthreads: SPARC Options. (line 236) 42082 * Q: Debugging Options. (line 248) 42083 * Qn: System V Options. (line 18) 42084 * Qy: System V Options. (line 14) 42085 * rdynamic: Link Options. (line 98) 42086 * read_only_relocs: Darwin Options. (line 199) 42087 * remap: Preprocessor Options. 42088 (line 638) 42089 * s: Link Options. (line 105) 42090 * S <1>: Link Options. (line 20) 42091 * S: Overall Options. (line 170) 42092 * save-temps: Debugging Options. (line 869) 42093 * sectalign: Darwin Options. (line 199) 42094 * sectcreate: Darwin Options. (line 199) 42095 * sectobjectsymbols: Darwin Options. (line 199) 42096 * sectorder: Darwin Options. (line 199) 42097 * seg1addr: Darwin Options. (line 199) 42098 * seg_addr_table: Darwin Options. (line 199) 42099 * seg_addr_table_filename: Darwin Options. (line 199) 42100 * segaddr: Darwin Options. (line 199) 42101 * seglinkedit: Darwin Options. (line 199) 42102 * segprot: Darwin Options. (line 199) 42103 * segs_read_only_addr: Darwin Options. (line 199) 42104 * segs_read_write_addr: Darwin Options. (line 199) 42105 * shared: Link Options. (line 114) 42106 * shared-libgcc: Link Options. (line 122) 42107 * sim: CRIS Options. (line 95) 42108 * sim2: CRIS Options. (line 101) 42109 * single_module: Darwin Options. (line 199) 42110 * specs: Directory Options. (line 84) 42111 * static <1>: HPPA Options. (line 192) 42112 * static <2>: Darwin Options. (line 199) 42113 * static: Link Options. (line 109) 42114 * static-libgcc: Link Options. (line 122) 42115 * std <1>: Non-bugs. (line 107) 42116 * std <2>: Other Builtins. (line 22) 42117 * std <3>: C Dialect Options. (line 47) 42118 * std: Standards. (line 16) 42119 * std=: Preprocessor Options. 42120 (line 325) 42121 * sub_library: Darwin Options. (line 199) 42122 * sub_umbrella: Darwin Options. (line 199) 42123 * symbolic: Link Options. (line 157) 42124 * sysroot: Directory Options. (line 92) 42125 * T: Link Options. (line 163) 42126 * target-help <1>: Preprocessor Options. 42127 (line 643) 42128 * target-help: Overall Options. (line 240) 42129 * threads <1>: SPARC Options. (line 230) 42130 * threads: HPPA Options. (line 205) 42131 * time: Debugging Options. (line 883) 42132 * tls: FRV Options. (line 75) 42133 * TLS: FRV Options. (line 72) 42134 * traditional <1>: Incompatibilities. (line 6) 42135 * traditional: C Dialect Options. (line 252) 42136 * traditional-cpp <1>: Preprocessor Options. 42137 (line 621) 42138 * traditional-cpp: C Dialect Options. (line 252) 42139 * trigraphs <1>: Preprocessor Options. 42140 (line 625) 42141 * trigraphs: C Dialect Options. (line 236) 42142 * twolevel_namespace: Darwin Options. (line 199) 42143 * u: Link Options. (line 196) 42144 * U: Preprocessor Options. 42145 (line 56) 42146 * umbrella: Darwin Options. (line 199) 42147 * undef: Preprocessor Options. 42148 (line 60) 42149 * undefined: Darwin Options. (line 199) 42150 * unexported_symbols_list: Darwin Options. (line 199) 42151 * V: Target Options. (line 25) 42152 * v <1>: Preprocessor Options. 42153 (line 647) 42154 * v: Overall Options. (line 198) 42155 * version <1>: Preprocessor Options. 42156 (line 660) 42157 * version: Overall Options. (line 352) 42158 * W: Incompatibilities. (line 64) 42159 * w: Preprocessor Options. 42160 (line 158) 42161 * W: Warning Options. (line 147) 42162 * w: Warning Options. (line 18) 42163 * Wa: Assembler Options. (line 9) 42164 * Wabi: C++ Dialect Options. 42165 (line 268) 42166 * Waddress: Warning Options. (line 962) 42167 * Waggregate-return: Warning Options. (line 980) 42168 * Wall <1>: Standard Libraries. (line 6) 42169 * Wall <2>: Preprocessor Options. 42170 (line 80) 42171 * Wall: Warning Options. (line 99) 42172 * Warray-bounds: Warning Options. (line 700) 42173 * Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 42174 (line 198) 42175 * Wattributes: Warning Options. (line 985) 42176 * Wbad-function-cast: Warning Options. (line 878) 42177 * Wbuiltin-macro-redefined: Warning Options. (line 991) 42178 * Wcast-align: Warning Options. (line 898) 42179 * Wcast-qual: Warning Options. (line 893) 42180 * Wchar-subscripts: Warning Options. (line 185) 42181 * Wclobbered: Warning Options. (line 918) 42182 * Wcomment <1>: Preprocessor Options. 42183 (line 88) 42184 * Wcomment: Warning Options. (line 190) 42185 * Wcomments: Preprocessor Options. 42186 (line 88) 42187 * Wconversion: Warning Options. (line 922) 42188 * Wcoverage-mismatch: Language Independent Options. 42189 (line 42) 42190 * Wctor-dtor-privacy: C++ Dialect Options. 42191 (line 360) 42192 * Wdeclaration-after-statement: Warning Options. (line 821) 42193 * Wdeprecated: Warning Options. (line 1128) 42194 * Wdeprecated-declarations: Warning Options. (line 1132) 42195 * Wdisabled-optimization: Warning Options. (line 1281) 42196 * Wdiv-by-zero: Warning Options. (line 705) 42197 * weak_reference_mismatches: Darwin Options. (line 199) 42198 * Weffc++: C++ Dialect Options. 42199 (line 387) 42200 * Wempty-body: Warning Options. (line 941) 42201 * Wendif-labels <1>: Preprocessor Options. 42202 (line 135) 42203 * Wendif-labels: Warning Options. (line 831) 42204 * Wenum-compare: Warning Options. (line 945) 42205 * Werror <1>: Preprocessor Options. 42206 (line 148) 42207 * Werror: Warning Options. (line 21) 42208 * Werror=: Warning Options. (line 24) 42209 * Wextra: Warning Options. (line 147) 42210 * Wfatal-errors: Warning Options. (line 38) 42211 * Wfloat-equal: Warning Options. (line 721) 42212 * Wformat <1>: Function Attributes. 42213 (line 373) 42214 * Wformat: Warning Options. (line 195) 42215 * Wformat-contains-nul: Warning Options. (line 234) 42216 * Wformat-extra-args: Warning Options. (line 238) 42217 * Wformat-nonliteral <1>: Function Attributes. 42218 (line 432) 42219 * Wformat-nonliteral: Warning Options. (line 256) 42220 * Wformat-security: Warning Options. (line 261) 42221 * Wformat-y2k: Warning Options. (line 230) 42222 * Wformat-zero-length: Warning Options. (line 252) 42223 * Wformat=2: Warning Options. (line 272) 42224 * Wframe-larger-than: Warning Options. (line 843) 42225 * whatsloaded: Darwin Options. (line 199) 42226 * whyload: Darwin Options. (line 199) 42227 * Wignored-qualifiers: Warning Options. (line 311) 42228 * Wimplicit: Warning Options. (line 307) 42229 * Wimplicit-function-declaration: Warning Options. (line 301) 42230 * Wimplicit-int: Warning Options. (line 297) 42231 * Winit-self: Warning Options. (line 284) 42232 * Winline <1>: Inline. (line 63) 42233 * Winline: Warning Options. (line 1220) 42234 * Wint-to-pointer-cast: Warning Options. (line 1247) 42235 * Winvalid-offsetof: Warning Options. (line 1233) 42236 * Winvalid-pch: Warning Options. (line 1255) 42237 * Wl: Link Options. (line 188) 42238 * Wlarger-than-LEN: Warning Options. (line 840) 42239 * Wlarger-than=LEN: Warning Options. (line 840) 42240 * Wlogical-op: Warning Options. (line 975) 42241 * Wlong-long: Warning Options. (line 1259) 42242 * Wmain: Warning Options. (line 322) 42243 * Wmissing-braces: Warning Options. (line 329) 42244 * Wmissing-declarations: Warning Options. (line 1026) 42245 * Wmissing-field-initializers: Warning Options. (line 1034) 42246 * Wmissing-format-attribute: Warning Options. (line 1060) 42247 * Wmissing-include-dirs: Warning Options. (line 339) 42248 * Wmissing-noreturn: Warning Options. (line 1052) 42249 * Wmissing-parameter-type: Warning Options. (line 1012) 42250 * Wmissing-prototypes: Warning Options. (line 1020) 42251 * Wmultichar: Warning Options. (line 1079) 42252 * Wnested-externs: Warning Options. (line 1195) 42253 * Wno-abi: C++ Dialect Options. 42254 (line 268) 42255 * Wno-address: Warning Options. (line 962) 42256 * Wno-aggregate-return: Warning Options. (line 980) 42257 * Wno-all: Warning Options. (line 99) 42258 * Wno-array-bounds: Warning Options. (line 700) 42259 * Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 42260 (line 198) 42261 * Wno-attributes: Warning Options. (line 985) 42262 * Wno-bad-function-cast: Warning Options. (line 878) 42263 * Wno-builtin-macro-redefined: Warning Options. (line 991) 42264 * Wno-cast-align: Warning Options. (line 898) 42265 * Wno-cast-qual: Warning Options. (line 893) 42266 * Wno-char-subscripts: Warning Options. (line 185) 42267 * Wno-clobbered: Warning Options. (line 918) 42268 * Wno-comment: Warning Options. (line 190) 42269 * Wno-conversion: Warning Options. (line 922) 42270 * Wno-ctor-dtor-privacy: C++ Dialect Options. 42271 (line 360) 42272 * Wno-declaration-after-statement: Warning Options. (line 821) 42273 * Wno-deprecated: Warning Options. (line 1128) 42274 * Wno-deprecated-declarations: Warning Options. (line 1132) 42275 * Wno-disabled-optimization: Warning Options. (line 1281) 42276 * Wno-div-by-zero: Warning Options. (line 705) 42277 * Wno-effc++: C++ Dialect Options. 42278 (line 387) 42279 * Wno-empty-body: Warning Options. (line 941) 42280 * Wno-endif-labels: Warning Options. (line 831) 42281 * Wno-enum-compare: Warning Options. (line 945) 42282 * Wno-error: Warning Options. (line 21) 42283 * Wno-error=: Warning Options. (line 24) 42284 * Wno-extra: Warning Options. (line 147) 42285 * Wno-fatal-errors: Warning Options. (line 38) 42286 * Wno-float-equal: Warning Options. (line 721) 42287 * Wno-format: Warning Options. (line 195) 42288 * Wno-format-contains-nul: Warning Options. (line 234) 42289 * Wno-format-extra-args: Warning Options. (line 238) 42290 * Wno-format-nonliteral: Warning Options. (line 256) 42291 * Wno-format-security: Warning Options. (line 261) 42292 * Wno-format-y2k: Warning Options. (line 230) 42293 * Wno-format-zero-length: Warning Options. (line 252) 42294 * Wno-format=2: Warning Options. (line 272) 42295 * Wno-ignored-qualifiers: Warning Options. (line 311) 42296 * Wno-implicit: Warning Options. (line 307) 42297 * Wno-implicit-function-declaration: Warning Options. (line 301) 42298 * Wno-implicit-int: Warning Options. (line 297) 42299 * Wno-init-self: Warning Options. (line 284) 42300 * Wno-inline: Warning Options. (line 1220) 42301 * Wno-int-to-pointer-cast: Warning Options. (line 1247) 42302 * Wno-invalid-offsetof: Warning Options. (line 1233) 42303 * Wno-invalid-pch: Warning Options. (line 1255) 42304 * Wno-logical-op: Warning Options. (line 975) 42305 * Wno-long-long: Warning Options. (line 1259) 42306 * Wno-main: Warning Options. (line 322) 42307 * Wno-missing-braces: Warning Options. (line 329) 42308 * Wno-missing-declarations: Warning Options. (line 1026) 42309 * Wno-missing-field-initializers: Warning Options. (line 1034) 42310 * Wno-missing-format-attribute: Warning Options. (line 1060) 42311 * Wno-missing-include-dirs: Warning Options. (line 339) 42312 * Wno-missing-noreturn: Warning Options. (line 1052) 42313 * Wno-missing-parameter-type: Warning Options. (line 1012) 42314 * Wno-missing-prototypes: Warning Options. (line 1020) 42315 * Wno-mudflap: Warning Options. (line 1301) 42316 * Wno-multichar: Warning Options. (line 1079) 42317 * Wno-nested-externs: Warning Options. (line 1195) 42318 * Wno-non-template-friend: C++ Dialect Options. 42319 (line 424) 42320 * Wno-non-virtual-dtor: C++ Dialect Options. 42321 (line 365) 42322 * Wno-nonnull: Warning Options. (line 277) 42323 * Wno-old-style-cast: C++ Dialect Options. 42324 (line 440) 42325 * Wno-old-style-declaration: Warning Options. (line 1002) 42326 * Wno-old-style-definition: Warning Options. (line 1008) 42327 * Wno-overflow: Warning Options. (line 1138) 42328 * Wno-overlength-strings: Warning Options. (line 1305) 42329 * Wno-overloaded-virtual: C++ Dialect Options. 42330 (line 446) 42331 * Wno-override-init: Warning Options. (line 1141) 42332 * Wno-packed: Warning Options. (line 1149) 42333 * Wno-packed-bitfield-compat: Warning Options. (line 1166) 42334 * Wno-padded: Warning Options. (line 1183) 42335 * Wno-parentheses: Warning Options. (line 342) 42336 * Wno-pedantic-ms-format: Warning Options. (line 858) 42337 * Wno-pmf-conversions <1>: Bound member functions. 42338 (line 35) 42339 * Wno-pmf-conversions: C++ Dialect Options. 42340 (line 465) 42341 * Wno-pointer-arith: Warning Options. (line 864) 42342 * Wno-pointer-sign: Warning Options. (line 1290) 42343 * Wno-pointer-to-int-cast: Warning Options. (line 1251) 42344 * Wno-pragmas: Warning Options. (line 603) 42345 * Wno-protocol: Objective-C and Objective-C++ Dialect Options. 42346 (line 202) 42347 * Wno-redundant-decls: Warning Options. (line 1190) 42348 * Wno-reorder: C++ Dialect Options. 42349 (line 371) 42350 * Wno-return-type: Warning Options. (line 432) 42351 * Wno-ripa-opt-mismatch: Warning Options. (line 447) 42352 * Wno-selector: Objective-C and Objective-C++ Dialect Options. 42353 (line 212) 42354 * Wno-sequence-point: Warning Options. (line 386) 42355 * Wno-shadow: Warning Options. (line 835) 42356 * Wno-sign-compare: Warning Options. (line 949) 42357 * Wno-sign-conversion: Warning Options. (line 956) 42358 * Wno-sign-promo: C++ Dialect Options. 42359 (line 469) 42360 * Wno-stack-protector: Warning Options. (line 1296) 42361 * Wno-strict-aliasing: Warning Options. (line 608) 42362 * Wno-strict-aliasing=n: Warning Options. (line 616) 42363 * Wno-strict-null-sentinel: C++ Dialect Options. 42364 (line 417) 42365 * Wno-strict-overflow: Warning Options. (line 649) 42366 * Wno-strict-prototypes: Warning Options. (line 996) 42367 * Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 42368 (line 224) 42369 * Wno-switch: Warning Options. (line 455) 42370 * Wno-switch-default: Warning Options. (line 463) 42371 * Wno-switch-enum: Warning Options. (line 466) 42372 * Wno-sync-nand: Warning Options. (line 472) 42373 * Wno-system-headers: Warning Options. (line 710) 42374 * Wno-traditional: Warning Options. (line 736) 42375 * Wno-traditional-conversion: Warning Options. (line 813) 42376 * Wno-trigraphs: Warning Options. (line 477) 42377 * Wno-type-limits: Warning Options. (line 871) 42378 * Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 42379 (line 232) 42380 * Wno-undef: Warning Options. (line 828) 42381 * Wno-uninitialized: Warning Options. (line 526) 42382 * Wno-unknown-pragmas: Warning Options. (line 596) 42383 * Wno-unreachable-code: Warning Options. (line 1198) 42384 * Wno-unsafe-loop-optimizations: Warning Options. (line 852) 42385 * Wno-unused: Warning Options. (line 519) 42386 * Wno-unused-function: Warning Options. (line 482) 42387 * Wno-unused-label: Warning Options. (line 487) 42388 * Wno-unused-parameter: Warning Options. (line 494) 42389 * Wno-unused-value: Warning Options. (line 509) 42390 * Wno-unused-variable: Warning Options. (line 501) 42391 * Wno-variadic-macros: Warning Options. (line 1265) 42392 * Wno-vla: Warning Options. (line 1271) 42393 * Wno-volatile-register-var: Warning Options. (line 1275) 42394 * Wno-write-strings: Warning Options. (line 904) 42395 * Wnon-template-friend: C++ Dialect Options. 42396 (line 424) 42397 * Wnon-virtual-dtor: C++ Dialect Options. 42398 (line 365) 42399 * Wnonnull: Warning Options. (line 277) 42400 * Wnormalized=: Warning Options. (line 1085) 42401 * Wold-style-cast: C++ Dialect Options. 42402 (line 440) 42403 * Wold-style-declaration: Warning Options. (line 1002) 42404 * Wold-style-definition: Warning Options. (line 1008) 42405 * Woverflow: Warning Options. (line 1138) 42406 * Woverlength-strings: Warning Options. (line 1305) 42407 * Woverloaded-virtual: C++ Dialect Options. 42408 (line 446) 42409 * Woverride-init: Warning Options. (line 1141) 42410 * Wp: Preprocessor Options. 42411 (line 13) 42412 * Wpacked: Warning Options. (line 1149) 42413 * Wpacked-bitfield-compat: Warning Options. (line 1166) 42414 * Wpadded: Warning Options. (line 1183) 42415 * Wparentheses: Warning Options. (line 342) 42416 * Wpedantic-ms-format: Warning Options. (line 858) 42417 * Wpmf-conversions: C++ Dialect Options. 42418 (line 465) 42419 * Wpointer-arith <1>: Pointer Arith. (line 13) 42420 * Wpointer-arith: Warning Options. (line 864) 42421 * Wpointer-sign: Warning Options. (line 1290) 42422 * Wpointer-to-int-cast: Warning Options. (line 1251) 42423 * Wpragmas: Warning Options. (line 603) 42424 * Wprotocol: Objective-C and Objective-C++ Dialect Options. 42425 (line 202) 42426 * wrapper: Overall Options. (line 355) 42427 * Wredundant-decls: Warning Options. (line 1190) 42428 * Wreorder: C++ Dialect Options. 42429 (line 371) 42430 * Wreturn-type: Warning Options. (line 432) 42431 * Wripa-opt-mismatch: Warning Options. (line 447) 42432 * Wselector: Objective-C and Objective-C++ Dialect Options. 42433 (line 212) 42434 * Wsequence-point: Warning Options. (line 386) 42435 * Wshadow: Warning Options. (line 835) 42436 * Wsign-compare: Warning Options. (line 949) 42437 * Wsign-conversion: Warning Options. (line 956) 42438 * Wsign-promo: C++ Dialect Options. 42439 (line 469) 42440 * Wstack-protector: Warning Options. (line 1296) 42441 * Wstrict-aliasing: Warning Options. (line 608) 42442 * Wstrict-aliasing=n: Warning Options. (line 616) 42443 * Wstrict-null-sentinel: C++ Dialect Options. 42444 (line 417) 42445 * Wstrict-overflow: Warning Options. (line 649) 42446 * Wstrict-prototypes: Warning Options. (line 996) 42447 * Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 42448 (line 224) 42449 * Wswitch: Warning Options. (line 455) 42450 * Wswitch-default: Warning Options. (line 463) 42451 * Wswitch-enum: Warning Options. (line 466) 42452 * Wsync-nand: Warning Options. (line 472) 42453 * Wsystem-headers <1>: Preprocessor Options. 42454 (line 152) 42455 * Wsystem-headers: Warning Options. (line 710) 42456 * Wtraditional <1>: Preprocessor Options. 42457 (line 105) 42458 * Wtraditional: Warning Options. (line 736) 42459 * Wtraditional-conversion <1>: Protoize Caveats. (line 31) 42460 * Wtraditional-conversion: Warning Options. (line 813) 42461 * Wtrigraphs <1>: Preprocessor Options. 42462 (line 93) 42463 * Wtrigraphs: Warning Options. (line 477) 42464 * Wtype-limits: Warning Options. (line 871) 42465 * Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 42466 (line 232) 42467 * Wundef <1>: Preprocessor Options. 42468 (line 111) 42469 * Wundef: Warning Options. (line 828) 42470 * Wuninitialized: Warning Options. (line 526) 42471 * Wunknown-pragmas: Warning Options. (line 596) 42472 * Wunreachable-code: Warning Options. (line 1198) 42473 * Wunsafe-loop-optimizations: Warning Options. (line 852) 42474 * Wunused: Warning Options. (line 519) 42475 * Wunused-function: Warning Options. (line 482) 42476 * Wunused-label: Warning Options. (line 487) 42477 * Wunused-macros: Preprocessor Options. 42478 (line 116) 42479 * Wunused-parameter: Warning Options. (line 494) 42480 * Wunused-value: Warning Options. (line 509) 42481 * Wunused-variable: Warning Options. (line 501) 42482 * Wvariadic-macros: Warning Options. (line 1265) 42483 * Wvla: Warning Options. (line 1271) 42484 * Wvolatile-register-var: Warning Options. (line 1275) 42485 * Wwrite-strings: Warning Options. (line 904) 42486 * x <1>: Preprocessor Options. 42487 (line 309) 42488 * x: Overall Options. (line 122) 42489 * Xassembler: Assembler Options. (line 13) 42490 * Xbind-lazy: VxWorks Options. (line 26) 42491 * Xbind-now: VxWorks Options. (line 30) 42492 * Xlinker: Link Options. (line 169) 42493 * Ym: System V Options. (line 26) 42494 * YP: System V Options. (line 22) 42495 42496 42497 File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 42498 42499 Keyword Index 42500 ************* 42501 42502 [index] 42503 * Menu: 42504 42505 * ! in constraint: Multi-Alternative. (line 33) 42506 * # in constraint: Modifiers. (line 57) 42507 * #pragma: Pragmas. (line 6) 42508 * #pragma implementation: C++ Interface. (line 39) 42509 * #pragma implementation, implied: C++ Interface. (line 46) 42510 * #pragma interface: C++ Interface. (line 20) 42511 * #pragma, reason for not using: Function Attributes. 42512 (line 1344) 42513 * $: Dollar Signs. (line 6) 42514 * % in constraint: Modifiers. (line 45) 42515 * %include: Spec Files. (line 27) 42516 * %include_noerr: Spec Files. (line 31) 42517 * %rename: Spec Files. (line 35) 42518 * & in constraint: Modifiers. (line 25) 42519 * ': Incompatibilities. (line 116) 42520 * (: Constructing Calls. (line 53) 42521 * * in constraint: Modifiers. (line 62) 42522 * + in constraint: Modifiers. (line 12) 42523 * -lgcc, use with -nodefaultlibs: Link Options. (line 79) 42524 * -lgcc, use with -nostdlib: Link Options. (line 79) 42525 * -nodefaultlibs and unresolved references: Link Options. (line 79) 42526 * -nostdlib and unresolved references: Link Options. (line 79) 42527 * .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 42528 (line 663) 42529 * //: C++ Comments. (line 6) 42530 * 0 in constraint: Simple Constraints. (line 117) 42531 * < in constraint: Simple Constraints. (line 48) 42532 * = in constraint: Modifiers. (line 8) 42533 * > in constraint: Simple Constraints. (line 52) 42534 * ? in constraint: Multi-Alternative. (line 27) 42535 * ?: extensions: Conditionals. (line 6) 42536 * ?: side effect: Conditionals. (line 20) 42537 * _ in variables in macros: Typeof. (line 42) 42538 * __builtin___clear_cache: Other Builtins. (line 274) 42539 * __builtin___fprintf_chk: Object Size Checking. 42540 (line 6) 42541 * __builtin___memcpy_chk: Object Size Checking. 42542 (line 6) 42543 * __builtin___memmove_chk: Object Size Checking. 42544 (line 6) 42545 * __builtin___mempcpy_chk: Object Size Checking. 42546 (line 6) 42547 * __builtin___memset_chk: Object Size Checking. 42548 (line 6) 42549 * __builtin___printf_chk: Object Size Checking. 42550 (line 6) 42551 * __builtin___snprintf_chk: Object Size Checking. 42552 (line 6) 42553 * __builtin___sprintf_chk: Object Size Checking. 42554 (line 6) 42555 * __builtin___stpcpy_chk: Object Size Checking. 42556 (line 6) 42557 * __builtin___strcat_chk: Object Size Checking. 42558 (line 6) 42559 * __builtin___strcpy_chk: Object Size Checking. 42560 (line 6) 42561 * __builtin___strncat_chk: Object Size Checking. 42562 (line 6) 42563 * __builtin___strncpy_chk: Object Size Checking. 42564 (line 6) 42565 * __builtin___vfprintf_chk: Object Size Checking. 42566 (line 6) 42567 * __builtin___vprintf_chk: Object Size Checking. 42568 (line 6) 42569 * __builtin___vsnprintf_chk: Object Size Checking. 42570 (line 6) 42571 * __builtin___vsprintf_chk: Object Size Checking. 42572 (line 6) 42573 * __builtin_apply: Constructing Calls. (line 31) 42574 * __builtin_apply_args: Constructing Calls. (line 20) 42575 * __builtin_bswap32: Other Builtins. (line 493) 42576 * __builtin_bswap64: Other Builtins. (line 498) 42577 * __builtin_choose_expr: Other Builtins. (line 156) 42578 * __builtin_clz: Other Builtins. (line 426) 42579 * __builtin_clzl: Other Builtins. (line 444) 42580 * __builtin_clzll: Other Builtins. (line 464) 42581 * __builtin_constant_p: Other Builtins. (line 196) 42582 * __builtin_ctz: Other Builtins. (line 430) 42583 * __builtin_ctzl: Other Builtins. (line 448) 42584 * __builtin_ctzll: Other Builtins. (line 468) 42585 * __builtin_expect: Other Builtins. (line 242) 42586 * __builtin_ffs: Other Builtins. (line 422) 42587 * __builtin_ffsl: Other Builtins. (line 440) 42588 * __builtin_ffsll: Other Builtins. (line 460) 42589 * __builtin_fpclassify: Other Builtins. (line 6) 42590 * __builtin_frame_address: Return Address. (line 34) 42591 * __builtin_huge_val: Other Builtins. (line 325) 42592 * __builtin_huge_valf: Other Builtins. (line 330) 42593 * __builtin_huge_vall: Other Builtins. (line 333) 42594 * __builtin_inf: Other Builtins. (line 348) 42595 * __builtin_infd128: Other Builtins. (line 358) 42596 * __builtin_infd32: Other Builtins. (line 352) 42597 * __builtin_infd64: Other Builtins. (line 355) 42598 * __builtin_inff: Other Builtins. (line 362) 42599 * __builtin_infl: Other Builtins. (line 367) 42600 * __builtin_isfinite: Other Builtins. (line 6) 42601 * __builtin_isgreater: Other Builtins. (line 6) 42602 * __builtin_isgreaterequal: Other Builtins. (line 6) 42603 * __builtin_isinf_sign: Other Builtins. (line 6) 42604 * __builtin_isless: Other Builtins. (line 6) 42605 * __builtin_islessequal: Other Builtins. (line 6) 42606 * __builtin_islessgreater: Other Builtins. (line 6) 42607 * __builtin_isnormal: Other Builtins. (line 6) 42608 * __builtin_isunordered: Other Builtins. (line 6) 42609 * __builtin_nan: Other Builtins. (line 378) 42610 * __builtin_nand128: Other Builtins. (line 400) 42611 * __builtin_nand32: Other Builtins. (line 394) 42612 * __builtin_nand64: Other Builtins. (line 397) 42613 * __builtin_nanf: Other Builtins. (line 404) 42614 * __builtin_nanl: Other Builtins. (line 407) 42615 * __builtin_nans: Other Builtins. (line 411) 42616 * __builtin_nansf: Other Builtins. (line 415) 42617 * __builtin_nansl: Other Builtins. (line 418) 42618 * __builtin_object_size: Object Size Checking. 42619 (line 6) 42620 * __builtin_offsetof: Offsetof. (line 6) 42621 * __builtin_parity: Other Builtins. (line 437) 42622 * __builtin_parityl: Other Builtins. (line 456) 42623 * __builtin_parityll: Other Builtins. (line 476) 42624 * __builtin_popcount: Other Builtins. (line 434) 42625 * __builtin_popcountl: Other Builtins. (line 452) 42626 * __builtin_popcountll: Other Builtins. (line 472) 42627 * __builtin_powi: Other Builtins. (line 6) 42628 * __builtin_powif: Other Builtins. (line 6) 42629 * __builtin_powil: Other Builtins. (line 6) 42630 * __builtin_prefetch: Other Builtins. (line 286) 42631 * __builtin_return: Constructing Calls. (line 48) 42632 * __builtin_return_address: Return Address. (line 11) 42633 * __builtin_trap: Other Builtins. (line 266) 42634 * __builtin_types_compatible_p: Other Builtins. (line 110) 42635 * __complex__ keyword: Complex. (line 6) 42636 * __declspec(dllexport): Function Attributes. 42637 (line 244) 42638 * __declspec(dllimport): Function Attributes. 42639 (line 274) 42640 * __extension__: Alternate Keywords. (line 29) 42641 * __float128 data type: Floating Types. (line 6) 42642 * __float80 data type: Floating Types. (line 6) 42643 * __func__ identifier: Function Names. (line 6) 42644 * __FUNCTION__ identifier: Function Names. (line 6) 42645 * __imag__ keyword: Complex. (line 27) 42646 * __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 42647 * __real__ keyword: Complex. (line 27) 42648 * __STDC_HOSTED__: Standards. (line 13) 42649 * __sync_add_and_fetch: Atomic Builtins. (line 61) 42650 * __sync_and_and_fetch: Atomic Builtins. (line 61) 42651 * __sync_bool_compare_and_swap: Atomic Builtins. (line 73) 42652 * __sync_fetch_and_add: Atomic Builtins. (line 45) 42653 * __sync_fetch_and_and: Atomic Builtins. (line 45) 42654 * __sync_fetch_and_nand: Atomic Builtins. (line 45) 42655 * __sync_fetch_and_or: Atomic Builtins. (line 45) 42656 * __sync_fetch_and_sub: Atomic Builtins. (line 45) 42657 * __sync_fetch_and_xor: Atomic Builtins. (line 45) 42658 * __sync_lock_release: Atomic Builtins. (line 103) 42659 * __sync_lock_test_and_set: Atomic Builtins. (line 85) 42660 * __sync_nand_and_fetch: Atomic Builtins. (line 61) 42661 * __sync_or_and_fetch: Atomic Builtins. (line 61) 42662 * __sync_sub_and_fetch: Atomic Builtins. (line 61) 42663 * __sync_synchronize: Atomic Builtins. (line 82) 42664 * __sync_val_compare_and_swap: Atomic Builtins. (line 73) 42665 * __sync_xor_and_fetch: Atomic Builtins. (line 61) 42666 * __thread: Thread-Local. (line 6) 42667 * _Accum data type: Fixed-Point. (line 6) 42668 * _Complex keyword: Complex. (line 6) 42669 * _Decimal128 data type: Decimal Float. (line 6) 42670 * _Decimal32 data type: Decimal Float. (line 6) 42671 * _Decimal64 data type: Decimal Float. (line 6) 42672 * _exit: Other Builtins. (line 6) 42673 * _Exit: Other Builtins. (line 6) 42674 * _Fract data type: Fixed-Point. (line 6) 42675 * _Sat data type: Fixed-Point. (line 6) 42676 * ABI: Compatibility. (line 6) 42677 * abort: Other Builtins. (line 6) 42678 * abs: Other Builtins. (line 6) 42679 * accessing volatiles: Volatiles. (line 6) 42680 * acos: Other Builtins. (line 6) 42681 * acosf: Other Builtins. (line 6) 42682 * acosh: Other Builtins. (line 6) 42683 * acoshf: Other Builtins. (line 6) 42684 * acoshl: Other Builtins. (line 6) 42685 * acosl: Other Builtins. (line 6) 42686 * Ada: G++ and GCC. (line 6) 42687 * additional floating types: Floating Types. (line 6) 42688 * address constraints: Simple Constraints. (line 144) 42689 * address of a label: Labels as Values. (line 6) 42690 * address_operand: Simple Constraints. (line 148) 42691 * alias attribute: Function Attributes. 42692 (line 34) 42693 * aliasing of parameters: Code Gen Options. (line 409) 42694 * aligned attribute <1>: Type Attributes. (line 31) 42695 * aligned attribute <2>: Variable Attributes. 42696 (line 23) 42697 * aligned attribute: Function Attributes. 42698 (line 47) 42699 * alignment: Alignment. (line 6) 42700 * alloc_size attribute: Function Attributes. 42701 (line 67) 42702 * alloca: Other Builtins. (line 6) 42703 * alloca vs variable-length arrays: Variable Length. (line 27) 42704 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 42705 (line 701) 42706 * alternate keywords: Alternate Keywords. (line 6) 42707 * always_inline function attribute: Function Attributes. 42708 (line 88) 42709 * AMD x86-64 Options: i386 and x86-64 Options. 42710 (line 6) 42711 * AMD1: Standards. (line 13) 42712 * ANSI C: Standards. (line 13) 42713 * ANSI C standard: Standards. (line 13) 42714 * ANSI C89: Standards. (line 13) 42715 * ANSI support: C Dialect Options. (line 10) 42716 * ANSI X3.159-1989: Standards. (line 13) 42717 * apostrophes: Incompatibilities. (line 116) 42718 * application binary interface: Compatibility. (line 6) 42719 * ARC Options: ARC Options. (line 6) 42720 * ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 42721 (line 6) 42722 * ARM options: ARM Options. (line 6) 42723 * arrays of length zero: Zero Length. (line 6) 42724 * arrays of variable length: Variable Length. (line 6) 42725 * arrays, non-lvalue: Subscripting. (line 6) 42726 * artificial function attribute: Function Attributes. 42727 (line 131) 42728 * asin: Other Builtins. (line 6) 42729 * asinf: Other Builtins. (line 6) 42730 * asinh: Other Builtins. (line 6) 42731 * asinhf: Other Builtins. (line 6) 42732 * asinhl: Other Builtins. (line 6) 42733 * asinl: Other Builtins. (line 6) 42734 * asm constraints: Constraints. (line 6) 42735 * asm expressions: Extended Asm. (line 6) 42736 * assembler instructions: Extended Asm. (line 6) 42737 * assembler names for identifiers: Asm Labels. (line 6) 42738 * assembly code, invalid: Bug Criteria. (line 12) 42739 * atan: Other Builtins. (line 6) 42740 * atan2: Other Builtins. (line 6) 42741 * atan2f: Other Builtins. (line 6) 42742 * atan2l: Other Builtins. (line 6) 42743 * atanf: Other Builtins. (line 6) 42744 * atanh: Other Builtins. (line 6) 42745 * atanhf: Other Builtins. (line 6) 42746 * atanhl: Other Builtins. (line 6) 42747 * atanl: Other Builtins. (line 6) 42748 * attribute of types: Type Attributes. (line 6) 42749 * attribute of variables: Variable Attributes. 42750 (line 6) 42751 * attribute syntax: Attribute Syntax. (line 6) 42752 * autoincrement/decrement addressing: Simple Constraints. (line 30) 42753 * automatic inline for C++ member fns: Inline. (line 71) 42754 * AVR Options: AVR Options. (line 6) 42755 * Backwards Compatibility: Backwards Compatibility. 42756 (line 6) 42757 * base class members: Name lookup. (line 6) 42758 * bcmp: Other Builtins. (line 6) 42759 * below100 attribute: Variable Attributes. 42760 (line 492) 42761 * binary compatibility: Compatibility. (line 6) 42762 * Binary constants using the 0b prefix: Binary constants. (line 6) 42763 * Blackfin Options: Blackfin Options. (line 6) 42764 * bound pointer to member function: Bound member functions. 42765 (line 6) 42766 * bounds checking: Optimize Options. (line 338) 42767 * bug criteria: Bug Criteria. (line 6) 42768 * bugs: Bugs. (line 6) 42769 * bugs, known: Trouble. (line 6) 42770 * built-in functions <1>: Other Builtins. (line 6) 42771 * built-in functions: C Dialect Options. (line 170) 42772 * bzero: Other Builtins. (line 6) 42773 * C compilation options: Invoking GCC. (line 17) 42774 * C intermediate output, nonexistent: G++ and GCC. (line 35) 42775 * C language extensions: C Extensions. (line 6) 42776 * C language, traditional: C Dialect Options. (line 250) 42777 * C standard: Standards. (line 13) 42778 * C standards: Standards. (line 13) 42779 * c++: Invoking G++. (line 14) 42780 * C++: G++ and GCC. (line 30) 42781 * C++ comments: C++ Comments. (line 6) 42782 * C++ compilation options: Invoking GCC. (line 23) 42783 * C++ interface and implementation headers: C++ Interface. (line 6) 42784 * C++ language extensions: C++ Extensions. (line 6) 42785 * C++ member fns, automatically inline: Inline. (line 71) 42786 * C++ misunderstandings: C++ Misunderstandings. 42787 (line 6) 42788 * C++ options, command line: C++ Dialect Options. 42789 (line 6) 42790 * C++ pragmas, effect on inlining: C++ Interface. (line 66) 42791 * C++ source file suffixes: Invoking G++. (line 6) 42792 * C++ static data, declaring and defining: Static Definitions. 42793 (line 6) 42794 * C89: Standards. (line 13) 42795 * C90: Standards. (line 13) 42796 * C94: Standards. (line 13) 42797 * C95: Standards. (line 13) 42798 * C99: Standards. (line 13) 42799 * C9X: Standards. (line 13) 42800 * C_INCLUDE_PATH: Environment Variables. 42801 (line 127) 42802 * cabs: Other Builtins. (line 6) 42803 * cabsf: Other Builtins. (line 6) 42804 * cabsl: Other Builtins. (line 6) 42805 * cacos: Other Builtins. (line 6) 42806 * cacosf: Other Builtins. (line 6) 42807 * cacosh: Other Builtins. (line 6) 42808 * cacoshf: Other Builtins. (line 6) 42809 * cacoshl: Other Builtins. (line 6) 42810 * cacosl: Other Builtins. (line 6) 42811 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 42812 (line 471) 42813 * calloc: Other Builtins. (line 6) 42814 * carg: Other Builtins. (line 6) 42815 * cargf: Other Builtins. (line 6) 42816 * cargl: Other Builtins. (line 6) 42817 * case labels in initializers: Designated Inits. (line 6) 42818 * case ranges: Case Ranges. (line 6) 42819 * casin: Other Builtins. (line 6) 42820 * casinf: Other Builtins. (line 6) 42821 * casinh: Other Builtins. (line 6) 42822 * casinhf: Other Builtins. (line 6) 42823 * casinhl: Other Builtins. (line 6) 42824 * casinl: Other Builtins. (line 6) 42825 * cast to a union: Cast to Union. (line 6) 42826 * catan: Other Builtins. (line 6) 42827 * catanf: Other Builtins. (line 6) 42828 * catanh: Other Builtins. (line 6) 42829 * catanhf: Other Builtins. (line 6) 42830 * catanhl: Other Builtins. (line 6) 42831 * catanl: Other Builtins. (line 6) 42832 * cbrt: Other Builtins. (line 6) 42833 * cbrtf: Other Builtins. (line 6) 42834 * cbrtl: Other Builtins. (line 6) 42835 * ccos: Other Builtins. (line 6) 42836 * ccosf: Other Builtins. (line 6) 42837 * ccosh: Other Builtins. (line 6) 42838 * ccoshf: Other Builtins. (line 6) 42839 * ccoshl: Other Builtins. (line 6) 42840 * ccosl: Other Builtins. (line 6) 42841 * ceil: Other Builtins. (line 6) 42842 * ceilf: Other Builtins. (line 6) 42843 * ceill: Other Builtins. (line 6) 42844 * cexp: Other Builtins. (line 6) 42845 * cexpf: Other Builtins. (line 6) 42846 * cexpl: Other Builtins. (line 6) 42847 * character set, execution: Preprocessor Options. 42848 (line 495) 42849 * character set, input: Preprocessor Options. 42850 (line 508) 42851 * character set, input normalization: Warning Options. (line 1085) 42852 * character set, wide execution: Preprocessor Options. 42853 (line 500) 42854 * cimag: Other Builtins. (line 6) 42855 * cimagf: Other Builtins. (line 6) 42856 * cimagl: Other Builtins. (line 6) 42857 * cleanup attribute: Variable Attributes. 42858 (line 89) 42859 * clog: Other Builtins. (line 6) 42860 * clogf: Other Builtins. (line 6) 42861 * clogl: Other Builtins. (line 6) 42862 * COBOL: G++ and GCC. (line 23) 42863 * code generation conventions: Code Gen Options. (line 6) 42864 * code, mixed with declarations: Mixed Declarations. (line 6) 42865 * cold function attribute: Function Attributes. 42866 (line 852) 42867 * command options: Invoking GCC. (line 6) 42868 * comments, C++ style: C++ Comments. (line 6) 42869 * common attribute: Variable Attributes. 42870 (line 105) 42871 * comparison of signed and unsigned values, warning: Warning Options. 42872 (line 949) 42873 * compiler bugs, reporting: Bug Reporting. (line 6) 42874 * compiler compared to C++ preprocessor: G++ and GCC. (line 35) 42875 * compiler options, C++: C++ Dialect Options. 42876 (line 6) 42877 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 42878 (line 6) 42879 * compiler version, specifying: Target Options. (line 6) 42880 * COMPILER_PATH: Environment Variables. 42881 (line 88) 42882 * complex conjugation: Complex. (line 34) 42883 * complex numbers: Complex. (line 6) 42884 * compound literals: Compound Literals. (line 6) 42885 * computed gotos: Labels as Values. (line 6) 42886 * conditional expressions, extensions: Conditionals. (line 6) 42887 * conflicting types: Disappointments. (line 21) 42888 * conj: Other Builtins. (line 6) 42889 * conjf: Other Builtins. (line 6) 42890 * conjl: Other Builtins. (line 6) 42891 * const applied to function: Function Attributes. 42892 (line 6) 42893 * const function attribute: Function Attributes. 42894 (line 176) 42895 * constants in constraints: Simple Constraints. (line 60) 42896 * constraint modifier characters: Modifiers. (line 6) 42897 * constraint, matching: Simple Constraints. (line 129) 42898 * constraints, asm: Constraints. (line 6) 42899 * constraints, machine specific: Machine Constraints. 42900 (line 6) 42901 * constructing calls: Constructing Calls. (line 6) 42902 * constructor expressions: Compound Literals. (line 6) 42903 * constructor function attribute: Function Attributes. 42904 (line 204) 42905 * contributors: Contributors. (line 6) 42906 * copysign: Other Builtins. (line 6) 42907 * copysignf: Other Builtins. (line 6) 42908 * copysignl: Other Builtins. (line 6) 42909 * core dump: Bug Criteria. (line 9) 42910 * cos: Other Builtins. (line 6) 42911 * cosf: Other Builtins. (line 6) 42912 * cosh: Other Builtins. (line 6) 42913 * coshf: Other Builtins. (line 6) 42914 * coshl: Other Builtins. (line 6) 42915 * cosl: Other Builtins. (line 6) 42916 * CPATH: Environment Variables. 42917 (line 126) 42918 * CPLUS_INCLUDE_PATH: Environment Variables. 42919 (line 128) 42920 * cpow: Other Builtins. (line 6) 42921 * cpowf: Other Builtins. (line 6) 42922 * cpowl: Other Builtins. (line 6) 42923 * cproj: Other Builtins. (line 6) 42924 * cprojf: Other Builtins. (line 6) 42925 * cprojl: Other Builtins. (line 6) 42926 * creal: Other Builtins. (line 6) 42927 * crealf: Other Builtins. (line 6) 42928 * creall: Other Builtins. (line 6) 42929 * CRIS Options: CRIS Options. (line 6) 42930 * cross compiling: Target Options. (line 6) 42931 * CRX Options: CRX Options. (line 6) 42932 * csin: Other Builtins. (line 6) 42933 * csinf: Other Builtins. (line 6) 42934 * csinh: Other Builtins. (line 6) 42935 * csinhf: Other Builtins. (line 6) 42936 * csinhl: Other Builtins. (line 6) 42937 * csinl: Other Builtins. (line 6) 42938 * csqrt: Other Builtins. (line 6) 42939 * csqrtf: Other Builtins. (line 6) 42940 * csqrtl: Other Builtins. (line 6) 42941 * ctan: Other Builtins. (line 6) 42942 * ctanf: Other Builtins. (line 6) 42943 * ctanh: Other Builtins. (line 6) 42944 * ctanhf: Other Builtins. (line 6) 42945 * ctanhl: Other Builtins. (line 6) 42946 * ctanl: Other Builtins. (line 6) 42947 * Darwin options: Darwin Options. (line 6) 42948 * dcgettext: Other Builtins. (line 6) 42949 * DD integer suffix: Decimal Float. (line 6) 42950 * dd integer suffix: Decimal Float. (line 6) 42951 * deallocating variable length arrays: Variable Length. (line 23) 42952 * debugging information options: Debugging Options. (line 6) 42953 * decimal floating types: Decimal Float. (line 6) 42954 * declaration scope: Incompatibilities. (line 80) 42955 * declarations inside expressions: Statement Exprs. (line 6) 42956 * declarations, mixed with code: Mixed Declarations. (line 6) 42957 * declaring attributes of functions: Function Attributes. 42958 (line 6) 42959 * declaring static data in C++: Static Definitions. (line 6) 42960 * defining static data in C++: Static Definitions. (line 6) 42961 * dependencies for make as output: Environment Variables. 42962 (line 154) 42963 * dependencies, make: Preprocessor Options. 42964 (line 172) 42965 * DEPENDENCIES_OUTPUT: Environment Variables. 42966 (line 153) 42967 * dependent name lookup: Name lookup. (line 6) 42968 * deprecated attribute: Variable Attributes. 42969 (line 113) 42970 * deprecated attribute.: Function Attributes. 42971 (line 226) 42972 * designated initializers: Designated Inits. (line 6) 42973 * designator lists: Designated Inits. (line 94) 42974 * designators: Designated Inits. (line 61) 42975 * destructor function attribute: Function Attributes. 42976 (line 204) 42977 * DF integer suffix: Decimal Float. (line 6) 42978 * df integer suffix: Decimal Float. (line 6) 42979 * dgettext: Other Builtins. (line 6) 42980 * diagnostic messages: Language Independent Options. 42981 (line 6) 42982 * dialect options: C Dialect Options. (line 6) 42983 * digits in constraint: Simple Constraints. (line 117) 42984 * directory options: Directory Options. (line 6) 42985 * DL integer suffix: Decimal Float. (line 6) 42986 * dl integer suffix: Decimal Float. (line 6) 42987 * dollar signs in identifier names: Dollar Signs. (line 6) 42988 * double-word arithmetic: Long Long. (line 6) 42989 * downward funargs: Nested Functions. (line 6) 42990 * drem: Other Builtins. (line 6) 42991 * dremf: Other Builtins. (line 6) 42992 * dreml: Other Builtins. (line 6) 42993 * E in constraint: Simple Constraints. (line 79) 42994 * earlyclobber operand: Modifiers. (line 25) 42995 * eight bit data on the H8/300, H8/300H, and H8S: Function Attributes. 42996 (line 327) 42997 * empty structures: Empty Structures. (line 6) 42998 * environment variables: Environment Variables. 42999 (line 6) 43000 * erf: Other Builtins. (line 6) 43001 * erfc: Other Builtins. (line 6) 43002 * erfcf: Other Builtins. (line 6) 43003 * erfcl: Other Builtins. (line 6) 43004 * erff: Other Builtins. (line 6) 43005 * erfl: Other Builtins. (line 6) 43006 * error function attribute: Function Attributes. 43007 (line 145) 43008 * error messages: Warnings and Errors. 43009 (line 6) 43010 * escaped newlines: Escaped Newlines. (line 6) 43011 * exception handler functions on the Blackfin processor: Function Attributes. 43012 (line 337) 43013 * exclamation point: Multi-Alternative. (line 33) 43014 * exit: Other Builtins. (line 6) 43015 * exp: Other Builtins. (line 6) 43016 * exp10: Other Builtins. (line 6) 43017 * exp10f: Other Builtins. (line 6) 43018 * exp10l: Other Builtins. (line 6) 43019 * exp2: Other Builtins. (line 6) 43020 * exp2f: Other Builtins. (line 6) 43021 * exp2l: Other Builtins. (line 6) 43022 * expf: Other Builtins. (line 6) 43023 * expl: Other Builtins. (line 6) 43024 * explicit register variables: Explicit Reg Vars. (line 6) 43025 * expm1: Other Builtins. (line 6) 43026 * expm1f: Other Builtins. (line 6) 43027 * expm1l: Other Builtins. (line 6) 43028 * expressions containing statements: Statement Exprs. (line 6) 43029 * expressions, constructor: Compound Literals. (line 6) 43030 * extended asm: Extended Asm. (line 6) 43031 * extensible constraints: Simple Constraints. (line 153) 43032 * extensions, ?:: Conditionals. (line 6) 43033 * extensions, C language: C Extensions. (line 6) 43034 * extensions, C++ language: C++ Extensions. (line 6) 43035 * external declaration scope: Incompatibilities. (line 80) 43036 * externally_visible attribute.: Function Attributes. 43037 (line 343) 43038 * F in constraint: Simple Constraints. (line 84) 43039 * fabs: Other Builtins. (line 6) 43040 * fabsf: Other Builtins. (line 6) 43041 * fabsl: Other Builtins. (line 6) 43042 * fatal signal: Bug Criteria. (line 9) 43043 * fdim: Other Builtins. (line 6) 43044 * fdimf: Other Builtins. (line 6) 43045 * fdiml: Other Builtins. (line 6) 43046 * FDL, GNU Free Documentation License: GNU Free Documentation License. 43047 (line 6) 43048 * ffs: Other Builtins. (line 6) 43049 * file name suffix: Overall Options. (line 14) 43050 * file names: Link Options. (line 10) 43051 * fixed-point types: Fixed-Point. (line 6) 43052 * flatten function attribute: Function Attributes. 43053 (line 138) 43054 * flexible array members: Zero Length. (line 6) 43055 * float as function value type: Incompatibilities. (line 141) 43056 * floating point precision <1>: Disappointments. (line 68) 43057 * floating point precision: Optimize Options. (line 1386) 43058 * floor: Other Builtins. (line 6) 43059 * floorf: Other Builtins. (line 6) 43060 * floorl: Other Builtins. (line 6) 43061 * fma: Other Builtins. (line 6) 43062 * fmaf: Other Builtins. (line 6) 43063 * fmal: Other Builtins. (line 6) 43064 * fmax: Other Builtins. (line 6) 43065 * fmaxf: Other Builtins. (line 6) 43066 * fmaxl: Other Builtins. (line 6) 43067 * fmin: Other Builtins. (line 6) 43068 * fminf: Other Builtins. (line 6) 43069 * fminl: Other Builtins. (line 6) 43070 * fmod: Other Builtins. (line 6) 43071 * fmodf: Other Builtins. (line 6) 43072 * fmodl: Other Builtins. (line 6) 43073 * force_align_arg_pointer attribute: Function Attributes. 43074 (line 894) 43075 * format function attribute: Function Attributes. 43076 (line 373) 43077 * format_arg function attribute: Function Attributes. 43078 (line 432) 43079 * Fortran: G++ and GCC. (line 6) 43080 * forwarding calls: Constructing Calls. (line 6) 43081 * fprintf: Other Builtins. (line 6) 43082 * fprintf_unlocked: Other Builtins. (line 6) 43083 * fputs: Other Builtins. (line 6) 43084 * fputs_unlocked: Other Builtins. (line 6) 43085 * FR30 Options: FR30 Options. (line 6) 43086 * freestanding environment: Standards. (line 13) 43087 * freestanding implementation: Standards. (line 13) 43088 * frexp: Other Builtins. (line 6) 43089 * frexpf: Other Builtins. (line 6) 43090 * frexpl: Other Builtins. (line 6) 43091 * FRV Options: FRV Options. (line 6) 43092 * fscanf: Other Builtins. (line 6) 43093 * fscanf, and constant strings: Incompatibilities. (line 17) 43094 * function addressability on the M32R/D: Function Attributes. 43095 (line 643) 43096 * function attributes: Function Attributes. 43097 (line 6) 43098 * function pointers, arithmetic: Pointer Arith. (line 6) 43099 * function prototype declarations: Function Prototypes. 43100 (line 6) 43101 * function without a prologue/epilogue code: Function Attributes. 43102 (line 683) 43103 * function, size of pointer to: Pointer Arith. (line 6) 43104 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 43105 (line 597) 43106 * functions in arbitrary sections: Function Attributes. 43107 (line 6) 43108 * functions that are passed arguments in registers on the 386: Function Attributes. 43109 (line 6) 43110 * functions that behave like malloc: Function Attributes. 43111 (line 6) 43112 * functions that do not pop the argument stack on the 386: Function Attributes. 43113 (line 6) 43114 * functions that do pop the argument stack on the 386: Function Attributes. 43115 (line 170) 43116 * functions that have different compilation options on the 386: Function Attributes. 43117 (line 6) 43118 * functions that have different optimization options: Function Attributes. 43119 (line 6) 43120 * functions that have no side effects: Function Attributes. 43121 (line 6) 43122 * functions that never return: Function Attributes. 43123 (line 6) 43124 * functions that pop the argument stack on the 386: Function Attributes. 43125 (line 6) 43126 * functions that return more than once: Function Attributes. 43127 (line 6) 43128 * functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 43129 (line 695) 43130 * functions which handle memory bank switching: Function Attributes. 43131 (line 348) 43132 * functions with non-null pointer arguments: Function Attributes. 43133 (line 6) 43134 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 43135 (line 6) 43136 * g in constraint: Simple Constraints. (line 110) 43137 * G in constraint: Simple Constraints. (line 88) 43138 * g++: Invoking G++. (line 14) 43139 * G++: G++ and GCC. (line 30) 43140 * gamma: Other Builtins. (line 6) 43141 * gamma_r: Other Builtins. (line 6) 43142 * gammaf: Other Builtins. (line 6) 43143 * gammaf_r: Other Builtins. (line 6) 43144 * gammal: Other Builtins. (line 6) 43145 * gammal_r: Other Builtins. (line 6) 43146 * GCC: G++ and GCC. (line 6) 43147 * GCC command options: Invoking GCC. (line 6) 43148 * GCC_EXEC_PREFIX: Environment Variables. 43149 (line 52) 43150 * gcc_struct: Type Attributes. (line 309) 43151 * gcc_struct attribute: Variable Attributes. 43152 (line 349) 43153 * gcov: Debugging Options. (line 280) 43154 * gettext: Other Builtins. (line 6) 43155 * global offset table: Code Gen Options. (line 184) 43156 * global register after longjmp: Global Reg Vars. (line 66) 43157 * global register variables: Global Reg Vars. (line 6) 43158 * GNAT: G++ and GCC. (line 30) 43159 * GNU C Compiler: G++ and GCC. (line 6) 43160 * GNU Compiler Collection: G++ and GCC. (line 6) 43161 * gnu_inline function attribute: Function Attributes. 43162 (line 93) 43163 * goto with computed label: Labels as Values. (line 6) 43164 * gprof: Debugging Options. (line 241) 43165 * grouping options: Invoking GCC. (line 26) 43166 * H in constraint: Simple Constraints. (line 88) 43167 * hardware models and configurations, specifying: Submodel Options. 43168 (line 6) 43169 * hex floats: Hex Floats. (line 6) 43170 * HK fixed-suffix: Fixed-Point. (line 6) 43171 * hk fixed-suffix: Fixed-Point. (line 6) 43172 * hosted environment <1>: C Dialect Options. (line 204) 43173 * hosted environment: Standards. (line 13) 43174 * hosted implementation: Standards. (line 13) 43175 * hot function attribute: Function Attributes. 43176 (line 839) 43177 * HPPA Options: HPPA Options. (line 6) 43178 * HR fixed-suffix: Fixed-Point. (line 6) 43179 * hr fixed-suffix: Fixed-Point. (line 6) 43180 * hypot: Other Builtins. (line 6) 43181 * hypotf: Other Builtins. (line 6) 43182 * hypotl: Other Builtins. (line 6) 43183 * I in constraint: Simple Constraints. (line 71) 43184 * i in constraint: Simple Constraints. (line 60) 43185 * i386 and x86-64 Windows Options: i386 and x86-64 Windows Options. 43186 (line 6) 43187 * i386 Options: i386 and x86-64 Options. 43188 (line 6) 43189 * IA-64 Options: IA-64 Options. (line 6) 43190 * IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 43191 (line 6) 43192 * identifier names, dollar signs in: Dollar Signs. (line 6) 43193 * identifiers, names in assembler code: Asm Labels. (line 6) 43194 * ilogb: Other Builtins. (line 6) 43195 * ilogbf: Other Builtins. (line 6) 43196 * ilogbl: Other Builtins. (line 6) 43197 * imaxabs: Other Builtins. (line 6) 43198 * implementation-defined behavior, C language: C Implementation. 43199 (line 6) 43200 * implied #pragma implementation: C++ Interface. (line 46) 43201 * incompatibilities of GCC: Incompatibilities. (line 6) 43202 * increment operators: Bug Criteria. (line 17) 43203 * index: Other Builtins. (line 6) 43204 * indirect calls on ARM: Function Attributes. 43205 (line 587) 43206 * indirect calls on MIPS: Function Attributes. 43207 (line 609) 43208 * init_priority attribute: C++ Attributes. (line 9) 43209 * initializations in expressions: Compound Literals. (line 6) 43210 * initializers with labeled elements: Designated Inits. (line 6) 43211 * initializers, non-constant: Initializers. (line 6) 43212 * inline automatic for C++ member fns: Inline. (line 71) 43213 * inline functions: Inline. (line 6) 43214 * inline functions, omission of: Inline. (line 51) 43215 * inlining and C++ pragmas: C++ Interface. (line 66) 43216 * installation trouble: Trouble. (line 6) 43217 * integrating function code: Inline. (line 6) 43218 * Intel 386 Options: i386 and x86-64 Options. 43219 (line 6) 43220 * interface and implementation headers, C++: C++ Interface. (line 6) 43221 * intermediate C version, nonexistent: G++ and GCC. (line 35) 43222 * interrupt handler functions: Function Attributes. 43223 (line 532) 43224 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 43225 (line 557) 43226 * interrupt service routines on ARM: Function Attributes. 43227 (line 572) 43228 * interrupt thread functions on fido: Function Attributes. 43229 (line 564) 43230 * introduction: Top. (line 6) 43231 * invalid assembly code: Bug Criteria. (line 12) 43232 * invalid input: Bug Criteria. (line 42) 43233 * invoking g++: Invoking G++. (line 22) 43234 * isalnum: Other Builtins. (line 6) 43235 * isalpha: Other Builtins. (line 6) 43236 * isascii: Other Builtins. (line 6) 43237 * isblank: Other Builtins. (line 6) 43238 * iscntrl: Other Builtins. (line 6) 43239 * isdigit: Other Builtins. (line 6) 43240 * isgraph: Other Builtins. (line 6) 43241 * islower: Other Builtins. (line 6) 43242 * ISO 9899: Standards. (line 13) 43243 * ISO C: Standards. (line 13) 43244 * ISO C standard: Standards. (line 13) 43245 * ISO C90: Standards. (line 13) 43246 * ISO C94: Standards. (line 13) 43247 * ISO C95: Standards. (line 13) 43248 * ISO C99: Standards. (line 13) 43249 * ISO C9X: Standards. (line 13) 43250 * ISO support: C Dialect Options. (line 10) 43251 * ISO/IEC 9899: Standards. (line 13) 43252 * isprint: Other Builtins. (line 6) 43253 * ispunct: Other Builtins. (line 6) 43254 * isspace: Other Builtins. (line 6) 43255 * isupper: Other Builtins. (line 6) 43256 * iswalnum: Other Builtins. (line 6) 43257 * iswalpha: Other Builtins. (line 6) 43258 * iswblank: Other Builtins. (line 6) 43259 * iswcntrl: Other Builtins. (line 6) 43260 * iswdigit: Other Builtins. (line 6) 43261 * iswgraph: Other Builtins. (line 6) 43262 * iswlower: Other Builtins. (line 6) 43263 * iswprint: Other Builtins. (line 6) 43264 * iswpunct: Other Builtins. (line 6) 43265 * iswspace: Other Builtins. (line 6) 43266 * iswupper: Other Builtins. (line 6) 43267 * iswxdigit: Other Builtins. (line 6) 43268 * isxdigit: Other Builtins. (line 6) 43269 * j0: Other Builtins. (line 6) 43270 * j0f: Other Builtins. (line 6) 43271 * j0l: Other Builtins. (line 6) 43272 * j1: Other Builtins. (line 6) 43273 * j1f: Other Builtins. (line 6) 43274 * j1l: Other Builtins. (line 6) 43275 * Java: G++ and GCC. (line 6) 43276 * java_interface attribute: C++ Attributes. (line 29) 43277 * jn: Other Builtins. (line 6) 43278 * jnf: Other Builtins. (line 6) 43279 * jnl: Other Builtins. (line 6) 43280 * K fixed-suffix: Fixed-Point. (line 6) 43281 * k fixed-suffix: Fixed-Point. (line 6) 43282 * keywords, alternate: Alternate Keywords. (line 6) 43283 * known causes of trouble: Trouble. (line 6) 43284 * l1_data variable attribute: Variable Attributes. 43285 (line 317) 43286 * l1_data_A variable attribute: Variable Attributes. 43287 (line 317) 43288 * l1_data_B variable attribute: Variable Attributes. 43289 (line 317) 43290 * l1_text function attribute: Function Attributes. 43291 (line 581) 43292 * labeled elements in initializers: Designated Inits. (line 6) 43293 * labels as values: Labels as Values. (line 6) 43294 * labs: Other Builtins. (line 6) 43295 * LANG: Environment Variables. 43296 (line 21) 43297 * language dialect options: C Dialect Options. (line 6) 43298 * LC_ALL: Environment Variables. 43299 (line 21) 43300 * LC_CTYPE: Environment Variables. 43301 (line 21) 43302 * LC_MESSAGES: Environment Variables. 43303 (line 21) 43304 * ldexp: Other Builtins. (line 6) 43305 * ldexpf: Other Builtins. (line 6) 43306 * ldexpl: Other Builtins. (line 6) 43307 * length-zero arrays: Zero Length. (line 6) 43308 * lgamma: Other Builtins. (line 6) 43309 * lgamma_r: Other Builtins. (line 6) 43310 * lgammaf: Other Builtins. (line 6) 43311 * lgammaf_r: Other Builtins. (line 6) 43312 * lgammal: Other Builtins. (line 6) 43313 * lgammal_r: Other Builtins. (line 6) 43314 * Libraries: Link Options. (line 24) 43315 * LIBRARY_PATH: Environment Variables. 43316 (line 94) 43317 * link options: Link Options. (line 6) 43318 * linker script: Link Options. (line 163) 43319 * LK fixed-suffix: Fixed-Point. (line 6) 43320 * lk fixed-suffix: Fixed-Point. (line 6) 43321 * LL integer suffix: Long Long. (line 6) 43322 * llabs: Other Builtins. (line 6) 43323 * LLK fixed-suffix: Fixed-Point. (line 6) 43324 * llk fixed-suffix: Fixed-Point. (line 6) 43325 * LLR fixed-suffix: Fixed-Point. (line 6) 43326 * llr fixed-suffix: Fixed-Point. (line 6) 43327 * llrint: Other Builtins. (line 6) 43328 * llrintf: Other Builtins. (line 6) 43329 * llrintl: Other Builtins. (line 6) 43330 * llround: Other Builtins. (line 6) 43331 * llroundf: Other Builtins. (line 6) 43332 * llroundl: Other Builtins. (line 6) 43333 * load address instruction: Simple Constraints. (line 144) 43334 * local labels: Local Labels. (line 6) 43335 * local variables in macros: Typeof. (line 42) 43336 * local variables, specifying registers: Local Reg Vars. (line 6) 43337 * locale: Environment Variables. 43338 (line 21) 43339 * locale definition: Environment Variables. 43340 (line 103) 43341 * log: Other Builtins. (line 6) 43342 * log10: Other Builtins. (line 6) 43343 * log10f: Other Builtins. (line 6) 43344 * log10l: Other Builtins. (line 6) 43345 * log1p: Other Builtins. (line 6) 43346 * log1pf: Other Builtins. (line 6) 43347 * log1pl: Other Builtins. (line 6) 43348 * log2: Other Builtins. (line 6) 43349 * log2f: Other Builtins. (line 6) 43350 * log2l: Other Builtins. (line 6) 43351 * logb: Other Builtins. (line 6) 43352 * logbf: Other Builtins. (line 6) 43353 * logbl: Other Builtins. (line 6) 43354 * logf: Other Builtins. (line 6) 43355 * logl: Other Builtins. (line 6) 43356 * long long data types: Long Long. (line 6) 43357 * longjmp: Global Reg Vars. (line 66) 43358 * longjmp incompatibilities: Incompatibilities. (line 39) 43359 * longjmp warnings: Warning Options. (line 579) 43360 * LR fixed-suffix: Fixed-Point. (line 6) 43361 * lr fixed-suffix: Fixed-Point. (line 6) 43362 * lrint: Other Builtins. (line 6) 43363 * lrintf: Other Builtins. (line 6) 43364 * lrintl: Other Builtins. (line 6) 43365 * lround: Other Builtins. (line 6) 43366 * lroundf: Other Builtins. (line 6) 43367 * lroundl: Other Builtins. (line 6) 43368 * m in constraint: Simple Constraints. (line 17) 43369 * M32C options: M32C Options. (line 6) 43370 * M32R/D options: M32R/D Options. (line 6) 43371 * M680x0 options: M680x0 Options. (line 6) 43372 * M68hc1x options: M68hc1x Options. (line 6) 43373 * machine dependent options: Submodel Options. (line 6) 43374 * machine specific constraints: Machine Constraints. 43375 (line 6) 43376 * macro with variable arguments: Variadic Macros. (line 6) 43377 * macros containing asm: Extended Asm. (line 241) 43378 * macros, inline alternative: Inline. (line 6) 43379 * macros, local labels: Local Labels. (line 6) 43380 * macros, local variables in: Typeof. (line 42) 43381 * macros, statements in expressions: Statement Exprs. (line 6) 43382 * macros, types of arguments: Typeof. (line 6) 43383 * make: Preprocessor Options. 43384 (line 172) 43385 * malloc: Other Builtins. (line 6) 43386 * malloc attribute: Function Attributes. 43387 (line 619) 43388 * matching constraint: Simple Constraints. (line 129) 43389 * MCore options: MCore Options. (line 6) 43390 * member fns, automatically inline: Inline. (line 71) 43391 * memchr: Other Builtins. (line 6) 43392 * memcmp: Other Builtins. (line 6) 43393 * memcpy: Other Builtins. (line 6) 43394 * memory references in constraints: Simple Constraints. (line 17) 43395 * mempcpy: Other Builtins. (line 6) 43396 * memset: Other Builtins. (line 6) 43397 * Mercury: G++ and GCC. (line 23) 43398 * message formatting: Language Independent Options. 43399 (line 6) 43400 * messages, warning: Warning Options. (line 6) 43401 * messages, warning and error: Warnings and Errors. 43402 (line 6) 43403 * middle-operands, omitted: Conditionals. (line 6) 43404 * MIPS options: MIPS Options. (line 6) 43405 * mips16 attribute: Function Attributes. 43406 (line 629) 43407 * misunderstandings in C++: C++ Misunderstandings. 43408 (line 6) 43409 * mixed declarations and code: Mixed Declarations. (line 6) 43410 * mktemp, and constant strings: Incompatibilities. (line 13) 43411 * MMIX Options: MMIX Options. (line 6) 43412 * MN10300 options: MN10300 Options. (line 6) 43413 * mode attribute: Variable Attributes. 43414 (line 131) 43415 * modf: Other Builtins. (line 6) 43416 * modff: Other Builtins. (line 6) 43417 * modfl: Other Builtins. (line 6) 43418 * modifiers in constraints: Modifiers. (line 6) 43419 * ms_abi attribute: Function Attributes. 43420 (line 671) 43421 * ms_struct: Type Attributes. (line 309) 43422 * ms_struct attribute: Variable Attributes. 43423 (line 349) 43424 * mudflap: Optimize Options. (line 338) 43425 * multiple alternative constraints: Multi-Alternative. (line 6) 43426 * multiprecision arithmetic: Long Long. (line 6) 43427 * n in constraint: Simple Constraints. (line 65) 43428 * names used in assembler code: Asm Labels. (line 6) 43429 * naming convention, implementation headers: C++ Interface. (line 46) 43430 * nearbyint: Other Builtins. (line 6) 43431 * nearbyintf: Other Builtins. (line 6) 43432 * nearbyintl: Other Builtins. (line 6) 43433 * nested functions: Nested Functions. (line 6) 43434 * newlines (escaped): Escaped Newlines. (line 6) 43435 * nextafter: Other Builtins. (line 6) 43436 * nextafterf: Other Builtins. (line 6) 43437 * nextafterl: Other Builtins. (line 6) 43438 * nexttoward: Other Builtins. (line 6) 43439 * nexttowardf: Other Builtins. (line 6) 43440 * nexttowardl: Other Builtins. (line 6) 43441 * NFC: Warning Options. (line 1085) 43442 * NFKC: Warning Options. (line 1085) 43443 * NMI handler functions on the Blackfin processor: Function Attributes. 43444 (line 706) 43445 * no_instrument_function function attribute: Function Attributes. 43446 (line 712) 43447 * nocommon attribute: Variable Attributes. 43448 (line 105) 43449 * noinline function attribute: Function Attributes. 43450 (line 717) 43451 * nomips16 attribute: Function Attributes. 43452 (line 629) 43453 * non-constant initializers: Initializers. (line 6) 43454 * non-static inline function: Inline. (line 85) 43455 * nonnull function attribute: Function Attributes. 43456 (line 727) 43457 * noreturn function attribute: Function Attributes. 43458 (line 750) 43459 * nothrow function attribute: Function Attributes. 43460 (line 792) 43461 * o in constraint: Simple Constraints. (line 23) 43462 * OBJC_INCLUDE_PATH: Environment Variables. 43463 (line 129) 43464 * Objective-C <1>: Standards. (line 153) 43465 * Objective-C: G++ and GCC. (line 6) 43466 * Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options. 43467 (line 6) 43468 * Objective-C++ <1>: Standards. (line 153) 43469 * Objective-C++: G++ and GCC. (line 6) 43470 * offsettable address: Simple Constraints. (line 23) 43471 * old-style function definitions: Function Prototypes. 43472 (line 6) 43473 * omitted middle-operands: Conditionals. (line 6) 43474 * open coding: Inline. (line 6) 43475 * openmp parallel: C Dialect Options. (line 221) 43476 * operand constraints, asm: Constraints. (line 6) 43477 * optimize function attribute: Function Attributes. 43478 (line 800) 43479 * optimize options: Optimize Options. (line 6) 43480 * options to control diagnostics formatting: Language Independent Options. 43481 (line 6) 43482 * options to control warnings: Warning Options. (line 6) 43483 * options, C++: C++ Dialect Options. 43484 (line 6) 43485 * options, code generation: Code Gen Options. (line 6) 43486 * options, debugging: Debugging Options. (line 6) 43487 * options, dialect: C Dialect Options. (line 6) 43488 * options, directory search: Directory Options. (line 6) 43489 * options, GCC command: Invoking GCC. (line 6) 43490 * options, grouping: Invoking GCC. (line 26) 43491 * options, linking: Link Options. (line 6) 43492 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 43493 (line 6) 43494 * options, optimization: Optimize Options. (line 6) 43495 * options, order: Invoking GCC. (line 30) 43496 * options, preprocessor: Preprocessor Options. 43497 (line 6) 43498 * order of evaluation, side effects: Non-bugs. (line 196) 43499 * order of options: Invoking GCC. (line 30) 43500 * other register constraints: Simple Constraints. (line 153) 43501 * output file option: Overall Options. (line 186) 43502 * overloaded virtual fn, warning: C++ Dialect Options. 43503 (line 446) 43504 * p in constraint: Simple Constraints. (line 144) 43505 * packed attribute: Variable Attributes. 43506 (line 142) 43507 * parameter forward declaration: Variable Length. (line 60) 43508 * parameters, aliased: Code Gen Options. (line 409) 43509 * Pascal: G++ and GCC. (line 23) 43510 * PDP-11 Options: PDP-11 Options. (line 6) 43511 * PIC: Code Gen Options. (line 184) 43512 * picoChip options: picoChip Options. (line 6) 43513 * pmf: Bound member functions. 43514 (line 6) 43515 * pointer arguments: Function Attributes. 43516 (line 181) 43517 * pointer to member function: Bound member functions. 43518 (line 6) 43519 * portions of temporary objects, pointers to: Temporaries. (line 6) 43520 * pow: Other Builtins. (line 6) 43521 * pow10: Other Builtins. (line 6) 43522 * pow10f: Other Builtins. (line 6) 43523 * pow10l: Other Builtins. (line 6) 43524 * PowerPC options: PowerPC Options. (line 6) 43525 * powf: Other Builtins. (line 6) 43526 * powl: Other Builtins. (line 6) 43527 * pragma GCC optimize: Function Specific Option Pragmas. 43528 (line 20) 43529 * pragma GCC pop_options: Function Specific Option Pragmas. 43530 (line 33) 43531 * pragma GCC push_options: Function Specific Option Pragmas. 43532 (line 33) 43533 * pragma GCC reset_options: Function Specific Option Pragmas. 43534 (line 43) 43535 * pragma GCC target: Function Specific Option Pragmas. 43536 (line 7) 43537 * pragma, align: Solaris Pragmas. (line 11) 43538 * pragma, diagnostic: Diagnostic Pragmas. (line 14) 43539 * pragma, extern_prefix: Symbol-Renaming Pragmas. 43540 (line 19) 43541 * pragma, fini: Solaris Pragmas. (line 19) 43542 * pragma, init: Solaris Pragmas. (line 24) 43543 * pragma, long_calls: ARM Pragmas. (line 11) 43544 * pragma, long_calls_off: ARM Pragmas. (line 17) 43545 * pragma, longcall: RS/6000 and PowerPC Pragmas. 43546 (line 14) 43547 * pragma, mark: Darwin Pragmas. (line 11) 43548 * pragma, memregs: M32C Pragmas. (line 7) 43549 * pragma, no_long_calls: ARM Pragmas. (line 14) 43550 * pragma, options align: Darwin Pragmas. (line 14) 43551 * pragma, pop_macro: Push/Pop Macro Pragmas. 43552 (line 15) 43553 * pragma, push_macro: Push/Pop Macro Pragmas. 43554 (line 11) 43555 * pragma, reason for not using: Function Attributes. 43556 (line 1344) 43557 * pragma, redefine_extname: Symbol-Renaming Pragmas. 43558 (line 14) 43559 * pragma, segment: Darwin Pragmas. (line 21) 43560 * pragma, unused: Darwin Pragmas. (line 24) 43561 * pragma, visibility: Visibility Pragmas. (line 8) 43562 * pragma, weak: Weak Pragmas. (line 10) 43563 * pragmas: Pragmas. (line 6) 43564 * pragmas in C++, effect on inlining: C++ Interface. (line 66) 43565 * pragmas, interface and implementation: C++ Interface. (line 6) 43566 * pragmas, warning of unknown: Warning Options. (line 596) 43567 * precompiled headers: Precompiled Headers. 43568 (line 6) 43569 * preprocessing numbers: Incompatibilities. (line 173) 43570 * preprocessing tokens: Incompatibilities. (line 173) 43571 * preprocessor options: Preprocessor Options. 43572 (line 6) 43573 * printf: Other Builtins. (line 6) 43574 * printf_unlocked: Other Builtins. (line 6) 43575 * prof: Debugging Options. (line 235) 43576 * progmem variable attribute: Variable Attributes. 43577 (line 503) 43578 * promotion of formal parameters: Function Prototypes. 43579 (line 6) 43580 * pure function attribute: Function Attributes. 43581 (line 817) 43582 * push address instruction: Simple Constraints. (line 144) 43583 * putchar: Other Builtins. (line 6) 43584 * puts: Other Builtins. (line 6) 43585 * Q floating point suffix: Floating Types. (line 6) 43586 * q floating point suffix: Floating Types. (line 6) 43587 * qsort, and global register variables: Global Reg Vars. (line 42) 43588 * question mark: Multi-Alternative. (line 27) 43589 * R fixed-suffix: Fixed-Point. (line 6) 43590 * r fixed-suffix: Fixed-Point. (line 6) 43591 * r in constraint: Simple Constraints. (line 56) 43592 * ranges in case statements: Case Ranges. (line 6) 43593 * read-only strings: Incompatibilities. (line 9) 43594 * register variable after longjmp: Global Reg Vars. (line 66) 43595 * registers: Extended Asm. (line 6) 43596 * registers for local variables: Local Reg Vars. (line 6) 43597 * registers in constraints: Simple Constraints. (line 56) 43598 * registers, global allocation: Explicit Reg Vars. (line 6) 43599 * registers, global variables in: Global Reg Vars. (line 6) 43600 * regparm attribute: Function Attributes. 43601 (line 870) 43602 * relocation truncated to fit (ColdFire): M680x0 Options. (line 325) 43603 * relocation truncated to fit (MIPS): MIPS Options. (line 198) 43604 * remainder: Other Builtins. (line 6) 43605 * remainderf: Other Builtins. (line 6) 43606 * remainderl: Other Builtins. (line 6) 43607 * remquo: Other Builtins. (line 6) 43608 * remquof: Other Builtins. (line 6) 43609 * remquol: Other Builtins. (line 6) 43610 * reordering, warning: C++ Dialect Options. 43611 (line 371) 43612 * reporting bugs: Bugs. (line 6) 43613 * resbank attribute: Function Attributes. 43614 (line 902) 43615 * rest argument (in macro): Variadic Macros. (line 6) 43616 * restricted pointers: Restricted Pointers. 43617 (line 6) 43618 * restricted references: Restricted Pointers. 43619 (line 6) 43620 * restricted this pointer: Restricted Pointers. 43621 (line 6) 43622 * returns_twice attribute: Function Attributes. 43623 (line 916) 43624 * rindex: Other Builtins. (line 6) 43625 * rint: Other Builtins. (line 6) 43626 * rintf: Other Builtins. (line 6) 43627 * rintl: Other Builtins. (line 6) 43628 * round: Other Builtins. (line 6) 43629 * roundf: Other Builtins. (line 6) 43630 * roundl: Other Builtins. (line 6) 43631 * RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 43632 (line 6) 43633 * RTTI: Vague Linkage. (line 43) 43634 * run-time options: Code Gen Options. (line 6) 43635 * s in constraint: Simple Constraints. (line 92) 43636 * S/390 and zSeries Options: S/390 and zSeries Options. 43637 (line 6) 43638 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 43639 (line 925) 43640 * scalb: Other Builtins. (line 6) 43641 * scalbf: Other Builtins. (line 6) 43642 * scalbl: Other Builtins. (line 6) 43643 * scalbln: Other Builtins. (line 6) 43644 * scalblnf: Other Builtins. (line 6) 43645 * scalbn: Other Builtins. (line 6) 43646 * scalbnf: Other Builtins. (line 6) 43647 * scanf, and constant strings: Incompatibilities. (line 17) 43648 * scanfnl: Other Builtins. (line 6) 43649 * scope of a variable length array: Variable Length. (line 23) 43650 * scope of declaration: Disappointments. (line 21) 43651 * scope of external declarations: Incompatibilities. (line 80) 43652 * Score Options: Score Options. (line 6) 43653 * search path: Directory Options. (line 6) 43654 * section function attribute: Function Attributes. 43655 (line 930) 43656 * section variable attribute: Variable Attributes. 43657 (line 163) 43658 * sentinel function attribute: Function Attributes. 43659 (line 946) 43660 * setjmp: Global Reg Vars. (line 66) 43661 * setjmp incompatibilities: Incompatibilities. (line 39) 43662 * shared strings: Incompatibilities. (line 9) 43663 * shared variable attribute: Variable Attributes. 43664 (line 208) 43665 * side effect in ?:: Conditionals. (line 20) 43666 * side effects, macro argument: Statement Exprs. (line 35) 43667 * side effects, order of evaluation: Non-bugs. (line 196) 43668 * signal handler functions on the AVR processors: Function Attributes. 43669 (line 977) 43670 * signbit: Other Builtins. (line 6) 43671 * signbitd128: Other Builtins. (line 6) 43672 * signbitd32: Other Builtins. (line 6) 43673 * signbitd64: Other Builtins. (line 6) 43674 * signbitf: Other Builtins. (line 6) 43675 * signbitl: Other Builtins. (line 6) 43676 * signed and unsigned values, comparison warning: Warning Options. 43677 (line 949) 43678 * significand: Other Builtins. (line 6) 43679 * significandf: Other Builtins. (line 6) 43680 * significandl: Other Builtins. (line 6) 43681 * simple constraints: Simple Constraints. (line 6) 43682 * sin: Other Builtins. (line 6) 43683 * sincos: Other Builtins. (line 6) 43684 * sincosf: Other Builtins. (line 6) 43685 * sincosl: Other Builtins. (line 6) 43686 * sinf: Other Builtins. (line 6) 43687 * sinh: Other Builtins. (line 6) 43688 * sinhf: Other Builtins. (line 6) 43689 * sinhl: Other Builtins. (line 6) 43690 * sinl: Other Builtins. (line 6) 43691 * sizeof: Typeof. (line 6) 43692 * smaller data references: M32R/D Options. (line 57) 43693 * smaller data references (PowerPC): RS/6000 and PowerPC Options. 43694 (line 663) 43695 * snprintf: Other Builtins. (line 6) 43696 * SPARC options: SPARC Options. (line 6) 43697 * Spec Files: Spec Files. (line 6) 43698 * specified registers: Explicit Reg Vars. (line 6) 43699 * specifying compiler version and target machine: Target Options. 43700 (line 6) 43701 * specifying hardware config: Submodel Options. (line 6) 43702 * specifying machine version: Target Options. (line 6) 43703 * specifying registers for local variables: Local Reg Vars. (line 6) 43704 * speed of compilation: Precompiled Headers. 43705 (line 6) 43706 * sprintf: Other Builtins. (line 6) 43707 * SPU options: SPU Options. (line 6) 43708 * sqrt: Other Builtins. (line 6) 43709 * sqrtf: Other Builtins. (line 6) 43710 * sqrtl: Other Builtins. (line 6) 43711 * sscanf: Other Builtins. (line 6) 43712 * sscanf, and constant strings: Incompatibilities. (line 17) 43713 * sseregparm attribute: Function Attributes. 43714 (line 887) 43715 * statements inside expressions: Statement Exprs. (line 6) 43716 * static data in C++, declaring and defining: Static Definitions. 43717 (line 6) 43718 * stpcpy: Other Builtins. (line 6) 43719 * stpncpy: Other Builtins. (line 6) 43720 * strcasecmp: Other Builtins. (line 6) 43721 * strcat: Other Builtins. (line 6) 43722 * strchr: Other Builtins. (line 6) 43723 * strcmp: Other Builtins. (line 6) 43724 * strcpy: Other Builtins. (line 6) 43725 * strcspn: Other Builtins. (line 6) 43726 * strdup: Other Builtins. (line 6) 43727 * strfmon: Other Builtins. (line 6) 43728 * strftime: Other Builtins. (line 6) 43729 * string constants: Incompatibilities. (line 9) 43730 * strlen: Other Builtins. (line 6) 43731 * strncasecmp: Other Builtins. (line 6) 43732 * strncat: Other Builtins. (line 6) 43733 * strncmp: Other Builtins. (line 6) 43734 * strncpy: Other Builtins. (line 6) 43735 * strndup: Other Builtins. (line 6) 43736 * strpbrk: Other Builtins. (line 6) 43737 * strrchr: Other Builtins. (line 6) 43738 * strspn: Other Builtins. (line 6) 43739 * strstr: Other Builtins. (line 6) 43740 * struct: Unnamed Fields. (line 6) 43741 * structures: Incompatibilities. (line 146) 43742 * structures, constructor expression: Compound Literals. (line 6) 43743 * submodel options: Submodel Options. (line 6) 43744 * subscripting: Subscripting. (line 6) 43745 * subscripting and function values: Subscripting. (line 6) 43746 * suffixes for C++ source: Invoking G++. (line 6) 43747 * SUNPRO_DEPENDENCIES: Environment Variables. 43748 (line 169) 43749 * suppressing warnings: Warning Options. (line 6) 43750 * surprises in C++: C++ Misunderstandings. 43751 (line 6) 43752 * syntax checking: Warning Options. (line 13) 43753 * syscall_linkage attribute: Function Attributes. 43754 (line 999) 43755 * system headers, warnings from: Warning Options. (line 710) 43756 * sysv_abi attribute: Function Attributes. 43757 (line 671) 43758 * tan: Other Builtins. (line 6) 43759 * tanf: Other Builtins. (line 6) 43760 * tanh: Other Builtins. (line 6) 43761 * tanhf: Other Builtins. (line 6) 43762 * tanhl: Other Builtins. (line 6) 43763 * tanl: Other Builtins. (line 6) 43764 * target function attribute: Function Attributes. 43765 (line 1006) 43766 * target machine, specifying: Target Options. (line 6) 43767 * target options: Target Options. (line 6) 43768 * target("abm") attribute: Function Attributes. 43769 (line 1033) 43770 * target("aes") attribute: Function Attributes. 43771 (line 1038) 43772 * target("align-stringops") attribute: Function Attributes. 43773 (line 1120) 43774 * target("arch=ARCH") attribute: Function Attributes. 43775 (line 1129) 43776 * target("cld") attribute: Function Attributes. 43777 (line 1091) 43778 * target("fancy-math-387") attribute: Function Attributes. 43779 (line 1095) 43780 * target("fpmath=FPMATH") attribute: Function Attributes. 43781 (line 1137) 43782 * target("fused-madd") attribute: Function Attributes. 43783 (line 1100) 43784 * target("ieee-fp") attribute: Function Attributes. 43785 (line 1105) 43786 * target("inline-all-stringops") attribute: Function Attributes. 43787 (line 1110) 43788 * target("inline-stringops-dynamically") attribute: Function Attributes. 43789 (line 1114) 43790 * target("mmx") attribute: Function Attributes. 43791 (line 1042) 43792 * target("pclmul") attribute: Function Attributes. 43793 (line 1046) 43794 * target("popcnt") attribute: Function Attributes. 43795 (line 1050) 43796 * target("recip") attribute: Function Attributes. 43797 (line 1124) 43798 * target("sse") attribute: Function Attributes. 43799 (line 1054) 43800 * target("sse2") attribute: Function Attributes. 43801 (line 1058) 43802 * target("sse3") attribute: Function Attributes. 43803 (line 1062) 43804 * target("sse4") attribute: Function Attributes. 43805 (line 1066) 43806 * target("sse4.1") attribute: Function Attributes. 43807 (line 1071) 43808 * target("sse4.2") attribute: Function Attributes. 43809 (line 1075) 43810 * target("sse4a") attribute: Function Attributes. 43811 (line 1079) 43812 * target("sse5") attribute: Function Attributes. 43813 (line 1083) 43814 * target("ssse3") attribute: Function Attributes. 43815 (line 1087) 43816 * target("tune=TUNE") attribute: Function Attributes. 43817 (line 1133) 43818 * TC1: Standards. (line 13) 43819 * TC2: Standards. (line 13) 43820 * TC3: Standards. (line 13) 43821 * Technical Corrigenda: Standards. (line 13) 43822 * Technical Corrigendum 1: Standards. (line 13) 43823 * Technical Corrigendum 2: Standards. (line 13) 43824 * Technical Corrigendum 3: Standards. (line 13) 43825 * template instantiation: Template Instantiation. 43826 (line 6) 43827 * temporaries, lifetime of: Temporaries. (line 6) 43828 * tgamma: Other Builtins. (line 6) 43829 * tgammaf: Other Builtins. (line 6) 43830 * tgammal: Other Builtins. (line 6) 43831 * Thread-Local Storage: Thread-Local. (line 6) 43832 * thunks: Nested Functions. (line 6) 43833 * tiny data section on the H8/300H and H8S: Function Attributes. 43834 (line 1155) 43835 * TLS: Thread-Local. (line 6) 43836 * tls_model attribute: Variable Attributes. 43837 (line 232) 43838 * TMPDIR: Environment Variables. 43839 (line 45) 43840 * toascii: Other Builtins. (line 6) 43841 * tolower: Other Builtins. (line 6) 43842 * toupper: Other Builtins. (line 6) 43843 * towlower: Other Builtins. (line 6) 43844 * towupper: Other Builtins. (line 6) 43845 * traditional C language: C Dialect Options. (line 250) 43846 * trunc: Other Builtins. (line 6) 43847 * truncf: Other Builtins. (line 6) 43848 * truncl: Other Builtins. (line 6) 43849 * two-stage name lookup: Name lookup. (line 6) 43850 * type alignment: Alignment. (line 6) 43851 * type attributes: Type Attributes. (line 6) 43852 * type_info: Vague Linkage. (line 43) 43853 * typedef names as function parameters: Incompatibilities. (line 97) 43854 * typeof: Typeof. (line 6) 43855 * UHK fixed-suffix: Fixed-Point. (line 6) 43856 * uhk fixed-suffix: Fixed-Point. (line 6) 43857 * UHR fixed-suffix: Fixed-Point. (line 6) 43858 * uhr fixed-suffix: Fixed-Point. (line 6) 43859 * UK fixed-suffix: Fixed-Point. (line 6) 43860 * uk fixed-suffix: Fixed-Point. (line 6) 43861 * ULK fixed-suffix: Fixed-Point. (line 6) 43862 * ulk fixed-suffix: Fixed-Point. (line 6) 43863 * ULL integer suffix: Long Long. (line 6) 43864 * ULLK fixed-suffix: Fixed-Point. (line 6) 43865 * ullk fixed-suffix: Fixed-Point. (line 6) 43866 * ULLR fixed-suffix: Fixed-Point. (line 6) 43867 * ullr fixed-suffix: Fixed-Point. (line 6) 43868 * ULR fixed-suffix: Fixed-Point. (line 6) 43869 * ulr fixed-suffix: Fixed-Point. (line 6) 43870 * undefined behavior: Bug Criteria. (line 17) 43871 * undefined function value: Bug Criteria. (line 17) 43872 * underscores in variables in macros: Typeof. (line 42) 43873 * union: Unnamed Fields. (line 6) 43874 * union, casting to a: Cast to Union. (line 6) 43875 * unions: Incompatibilities. (line 146) 43876 * unknown pragmas, warning: Warning Options. (line 596) 43877 * unresolved references and -nodefaultlibs: Link Options. (line 79) 43878 * unresolved references and -nostdlib: Link Options. (line 79) 43879 * unused attribute.: Function Attributes. 43880 (line 1167) 43881 * UR fixed-suffix: Fixed-Point. (line 6) 43882 * ur fixed-suffix: Fixed-Point. (line 6) 43883 * used attribute.: Function Attributes. 43884 (line 1172) 43885 * User stack pointer in interrupts on the Blackfin: Function Attributes. 43886 (line 576) 43887 * V in constraint: Simple Constraints. (line 43) 43888 * V850 Options: V850 Options. (line 6) 43889 * vague linkage: Vague Linkage. (line 6) 43890 * value after longjmp: Global Reg Vars. (line 66) 43891 * variable addressability on the IA-64: Function Attributes. 43892 (line 643) 43893 * variable addressability on the M32R/D: Variable Attributes. 43894 (line 330) 43895 * variable alignment: Alignment. (line 6) 43896 * variable attributes: Variable Attributes. 43897 (line 6) 43898 * variable number of arguments: Variadic Macros. (line 6) 43899 * variable-length array scope: Variable Length. (line 23) 43900 * variable-length arrays: Variable Length. (line 6) 43901 * variables in specified registers: Explicit Reg Vars. (line 6) 43902 * variables, local, in macros: Typeof. (line 42) 43903 * variadic macros: Variadic Macros. (line 6) 43904 * VAX options: VAX Options. (line 6) 43905 * version_id attribute: Function Attributes. 43906 (line 1178) 43907 * vfprintf: Other Builtins. (line 6) 43908 * vfscanf: Other Builtins. (line 6) 43909 * visibility attribute: Function Attributes. 43910 (line 1188) 43911 * VLAs: Variable Length. (line 6) 43912 * void pointers, arithmetic: Pointer Arith. (line 6) 43913 * void, size of pointer to: Pointer Arith. (line 6) 43914 * volatile access: Volatiles. (line 6) 43915 * volatile applied to function: Function Attributes. 43916 (line 6) 43917 * volatile read: Volatiles. (line 6) 43918 * volatile write: Volatiles. (line 6) 43919 * vprintf: Other Builtins. (line 6) 43920 * vscanf: Other Builtins. (line 6) 43921 * vsnprintf: Other Builtins. (line 6) 43922 * vsprintf: Other Builtins. (line 6) 43923 * vsscanf: Other Builtins. (line 6) 43924 * vtable: Vague Linkage. (line 28) 43925 * VxWorks Options: VxWorks Options. (line 6) 43926 * W floating point suffix: Floating Types. (line 6) 43927 * w floating point suffix: Floating Types. (line 6) 43928 * warn_unused_result attribute: Function Attributes. 43929 (line 1282) 43930 * warning for comparison of signed and unsigned values: Warning Options. 43931 (line 949) 43932 * warning for overloaded virtual fn: C++ Dialect Options. 43933 (line 446) 43934 * warning for reordering of member initializers: C++ Dialect Options. 43935 (line 371) 43936 * warning for unknown pragmas: Warning Options. (line 596) 43937 * warning function attribute: Function Attributes. 43938 (line 158) 43939 * warning messages: Warning Options. (line 6) 43940 * warnings from system headers: Warning Options. (line 710) 43941 * warnings vs errors: Warnings and Errors. 43942 (line 6) 43943 * weak attribute: Function Attributes. 43944 (line 1299) 43945 * weakref attribute: Function Attributes. 43946 (line 1308) 43947 * whitespace: Incompatibilities. (line 112) 43948 * X in constraint: Simple Constraints. (line 114) 43949 * X3.159-1989: Standards. (line 13) 43950 * x86-64 options: x86-64 Options. (line 6) 43951 * x86-64 Options: i386 and x86-64 Options. 43952 (line 6) 43953 * Xstormy16 Options: Xstormy16 Options. (line 6) 43954 * Xtensa Options: Xtensa Options. (line 6) 43955 * y0: Other Builtins. (line 6) 43956 * y0f: Other Builtins. (line 6) 43957 * y0l: Other Builtins. (line 6) 43958 * y1: Other Builtins. (line 6) 43959 * y1f: Other Builtins. (line 6) 43960 * y1l: Other Builtins. (line 6) 43961 * yn: Other Builtins. (line 6) 43962 * ynf: Other Builtins. (line 6) 43963 * ynl: Other Builtins. (line 6) 43964 * zero-length arrays: Zero Length. (line 6) 43965 * zero-size structures: Empty Structures. (line 6) 43966 * zSeries options: zSeries Options. (line 6) 43967 43968 43969 43970 Tag Table: 43971 Node: Top2093 43972 Node: G++ and GCC3790 43973 Node: Standards5855 43974 Node: Invoking GCC14830 43975 Node: Option Summary18659 43976 Node: Overall Options51595 43977 Node: Invoking G++66102 43978 Node: C Dialect Options67625 43979 Node: C++ Dialect Options81516 43980 Node: Objective-C and Objective-C++ Dialect Options102506 43981 Node: Language Independent Options114287 43982 Node: Warning Options117057 43983 Node: Debugging Options175724 43984 Node: Optimize Options215661 43985 Ref: Type-punning262609 43986 Node: Preprocessor Options323520 43987 Ref: Wtrigraphs327605 43988 Ref: dashMF332353 43989 Ref: fdollars-in-identifiers342872 43990 Node: Assembler Options351433 43991 Node: Link Options352138 43992 Ref: Link Options-Footnote-1361608 43993 Node: Directory Options361942 43994 Node: Spec Files368004 43995 Node: Target Options388343 43996 Node: Submodel Options389861 43997 Node: ARC Options391560 43998 Node: ARM Options393047 43999 Node: AVR Options406623 44000 Node: Blackfin Options408841 44001 Node: CRIS Options416733 44002 Node: CRX Options420474 44003 Node: Darwin Options420899 44004 Node: DEC Alpha Options428392 44005 Node: DEC Alpha/VMS Options440308 44006 Node: FR30 Options440694 44007 Node: FRV Options441269 44008 Node: GNU/Linux Options447986 44009 Node: H8/300 Options448444 44010 Node: HPPA Options449511 44011 Node: i386 and x86-64 Options459011 44012 Node: IA-64 Options487185 44013 Node: M32C Options494510 44014 Node: M32R/D Options495801 44015 Node: M680x0 Options499388 44016 Node: M68hc1x Options513208 44017 Node: MCore Options514776 44018 Node: MIPS Options516284 44019 Node: MMIX Options542319 44020 Node: MN10300 Options544801 44021 Node: PDP-11 Options546223 44022 Node: picoChip Options548063 44023 Node: PowerPC Options550262 44024 Node: RS/6000 and PowerPC Options550498 44025 Node: S/390 and zSeries Options581245 44026 Node: Score Options589193 44027 Node: SH Options590021 44028 Node: SPARC Options600299 44029 Node: SPU Options611272 44030 Node: System V Options614560 44031 Node: V850 Options615383 44032 Node: VAX Options618523 44033 Node: VxWorks Options619071 44034 Node: x86-64 Options620226 44035 Node: i386 and x86-64 Windows Options620444 44036 Node: Xstormy16 Options622763 44037 Node: Xtensa Options623052 44038 Node: zSeries Options627199 44039 Node: Code Gen Options627395 44040 Node: Environment Variables651974 44041 Node: Precompiled Headers659870 44042 Node: Running Protoize666096 44043 Node: C Implementation672433 44044 Node: Translation implementation674096 44045 Node: Environment implementation674670 44046 Node: Identifiers implementation675220 44047 Node: Characters implementation676274 44048 Node: Integers implementation679080 44049 Node: Floating point implementation680905 44050 Node: Arrays and pointers implementation683834 44051 Ref: Arrays and pointers implementation-Footnote-1685269 44052 Node: Hints implementation685393 44053 Node: Structures unions enumerations and bit-fields implementation686859 44054 Node: Qualifiers implementation688845 44055 Node: Declarators implementation690617 44056 Node: Statements implementation690959 44057 Node: Preprocessing directives implementation691286 44058 Node: Library functions implementation693391 44059 Node: Architecture implementation694031 44060 Node: Locale-specific behavior implementation694734 44061 Node: C Extensions695039 44062 Node: Statement Exprs699650 44063 Node: Local Labels704163 44064 Node: Labels as Values707142 44065 Ref: Labels as Values-Footnote-1709515 44066 Node: Nested Functions709698 44067 Node: Constructing Calls713592 44068 Node: Typeof718315 44069 Node: Conditionals721481 44070 Node: Long Long722372 44071 Node: Complex723873 44072 Node: Floating Types726443 44073 Node: Decimal Float727562 44074 Node: Hex Floats729551 44075 Node: Fixed-Point730592 44076 Node: Zero Length733877 44077 Node: Empty Structures737155 44078 Node: Variable Length737571 44079 Node: Variadic Macros740338 44080 Node: Escaped Newlines742720 44081 Node: Subscripting743559 44082 Node: Pointer Arith744282 44083 Node: Initializers744850 44084 Node: Compound Literals745346 44085 Node: Designated Inits747521 44086 Node: Case Ranges751176 44087 Node: Cast to Union751859 44088 Node: Mixed Declarations752955 44089 Node: Function Attributes753461 44090 Node: Attribute Syntax816076 44091 Node: Function Prototypes826346 44092 Node: C++ Comments828127 44093 Node: Dollar Signs828646 44094 Node: Character Escapes829111 44095 Node: Alignment829405 44096 Node: Variable Attributes830779 44097 Ref: i386 Variable Attributes845369 44098 Node: Type Attributes851354 44099 Ref: i386 Type Attributes864975 44100 Ref: PowerPC Type Attributes865815 44101 Ref: SPU Type Attributes866677 44102 Node: Inline866968 44103 Node: Extended Asm871915 44104 Ref: Example of asm with clobbered asm reg878001 44105 Node: Constraints892220 44106 Node: Simple Constraints893070 44107 Node: Multi-Alternative899741 44108 Node: Modifiers901458 44109 Node: Machine Constraints904352 44110 Node: Asm Labels936565 44111 Node: Explicit Reg Vars938241 44112 Node: Global Reg Vars939849 44113 Node: Local Reg Vars944399 44114 Node: Alternate Keywords946840 44115 Node: Incomplete Enums948268 44116 Node: Function Names949025 44117 Node: Return Address951187 44118 Node: Vector Extensions953984 44119 Node: Offsetof957486 44120 Node: Atomic Builtins958300 44121 Node: Object Size Checking963678 44122 Node: Other Builtins969106 44123 Node: Target Builtins993914 44124 Node: Alpha Built-in Functions994808 44125 Node: ARM iWMMXt Built-in Functions997807 44126 Node: ARM NEON Intrinsics1004526 44127 Node: Blackfin Built-in Functions1212364 44128 Node: FR-V Built-in Functions1212978 44129 Node: Argument Types1213837 44130 Node: Directly-mapped Integer Functions1215593 44131 Node: Directly-mapped Media Functions1216675 44132 Node: Raw read/write Functions1223707 44133 Node: Other Built-in Functions1224619 44134 Node: X86 Built-in Functions1225808 44135 Node: MIPS DSP Built-in Functions1270199 44136 Node: MIPS Paired-Single Support1282646 44137 Node: MIPS Loongson Built-in Functions1284147 44138 Node: Paired-Single Arithmetic1290665 44139 Node: Paired-Single Built-in Functions1291611 44140 Node: MIPS-3D Built-in Functions1294281 44141 Node: picoChip Built-in Functions1299656 44142 Node: Other MIPS Built-in Functions1301018 44143 Node: PowerPC AltiVec Built-in Functions1301542 44144 Node: SPARC VIS Built-in Functions1402966 44145 Node: SPU Built-in Functions1404658 44146 Node: Target Format Checks1406440 44147 Node: Solaris Format Checks1406847 44148 Node: Pragmas1407244 44149 Node: ARM Pragmas1407938 44150 Node: M32C Pragmas1408541 44151 Node: RS/6000 and PowerPC Pragmas1409117 44152 Node: Darwin Pragmas1409859 44153 Node: Solaris Pragmas1410926 44154 Node: Symbol-Renaming Pragmas1412087 44155 Node: Structure-Packing Pragmas1414709 44156 Node: Weak Pragmas1416361 44157 Node: Diagnostic Pragmas1417163 44158 Node: Visibility Pragmas1419797 44159 Node: Push/Pop Macro Pragmas1420549 44160 Node: Function Specific Option Pragmas1421522 44161 Node: Unnamed Fields1423737 44162 Node: Thread-Local1425247 44163 Node: C99 Thread-Local Edits1427356 44164 Node: C++98 Thread-Local Edits1429368 44165 Node: Binary constants1432813 44166 Node: C++ Extensions1433484 44167 Node: Volatiles1435126 44168 Node: Restricted Pointers1437802 44169 Node: Vague Linkage1439396 44170 Node: C++ Interface1443052 44171 Ref: C++ Interface-Footnote-11447349 44172 Node: Template Instantiation1447486 44173 Node: Bound member functions1454498 44174 Node: C++ Attributes1456041 44175 Node: Namespace Association1457699 44176 Node: Type Traits1459113 44177 Node: Java Exceptions1464660 44178 Node: Deprecated Features1466057 44179 Node: Backwards Compatibility1469022 44180 Node: Objective-C1470380 44181 Node: Executing code before main1470961 44182 Node: What you can and what you cannot do in +load1473567 44183 Node: Type encoding1475734 44184 Node: Garbage Collection1479121 44185 Node: Constant string objects1481745 44186 Node: compatibility_alias1484253 44187 Node: Compatibility1485131 44188 Node: Gcov1491698 44189 Node: Gcov Intro1492229 44190 Node: Invoking Gcov1494945 44191 Node: Gcov and Optimization1507026 44192 Node: Gcov Data Files1509679 44193 Node: Cross-profiling1510817 44194 Node: Trouble1512643 44195 Node: Actual Bugs1514199 44196 Node: Cross-Compiler Problems1514939 44197 Node: Interoperation1515353 44198 Node: Incompatibilities1522490 44199 Node: Fixed Headers1530640 44200 Node: Standard Libraries1532303 44201 Node: Disappointments1533675 44202 Node: C++ Misunderstandings1538033 44203 Node: Static Definitions1538852 44204 Node: Name lookup1539905 44205 Ref: Name lookup-Footnote-11544683 44206 Node: Temporaries1544870 44207 Node: Copy Assignment1546846 44208 Node: Protoize Caveats1548653 44209 Node: Non-bugs1552626 44210 Node: Warnings and Errors1563130 44211 Node: Bugs1564894 44212 Node: Bug Criteria1565458 44213 Node: Bug Reporting1567668 44214 Node: Service1567889 44215 Node: Contributing1568708 44216 Node: Funding1569448 44217 Node: GNU Project1571937 44218 Node: Copying1572583 44219 Node: GNU Free Documentation License1610111 44220 Node: Contributors1632517 44221 Node: Option Index1668844 44222 Node: Keyword Index1828965 44223 44224 End Tag Table 44225